summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2014-04-27 12:02:08 +0200
committerMichael Biebl <biebl@debian.org>2014-04-27 12:02:08 +0200
commit14228c0ddf1fe80e2ed0193f0cd1cdb06e5db522 (patch)
tree00e1b58a9518cce9c231598a66be3ac322f484d1
parent663996b3bb3cdaa81ac830674fdda00e28a2485b (diff)
downloadsystemd-14228c0ddf1fe80e2ed0193f0cd1cdb06e5db522.tar.gz
Imported Upstream version 208
-rw-r--r--Makefile-man.am80
-rw-r--r--Makefile.am895
-rw-r--r--Makefile.in4137
-rw-r--r--NEWS429
-rw-r--r--README19
-rw-r--r--TODO251
-rw-r--r--aclocal.m4170
-rwxr-xr-xbuild-aux/config.guess151
-rwxr-xr-xbuild-aux/config.sub30
-rwxr-xr-xbuild-aux/depcomp3
-rw-r--r--build-aux/ltmain.sh18
-rw-r--r--catalog/systemd.catalog20
-rw-r--r--config.h.in12
-rwxr-xr-xconfigure1218
-rw-r--r--configure.ac213
-rw-r--r--docs/gtk-doc.make70
-rw-r--r--docs/gudev/Makefile.in155
-rw-r--r--docs/gudev/html/GUdevClient.html4
-rw-r--r--docs/gudev/html/GUdevDevice.html4
-rw-r--r--docs/gudev/html/GUdevEnumerator.html4
-rw-r--r--docs/gudev/html/annotation-glossary.html4
-rw-r--r--docs/gudev/html/api-index-deprecated.html4
-rw-r--r--docs/gudev/html/api-index-full.html4
-rw-r--r--docs/gudev/html/gudev-hierarchy.html4
-rw-r--r--docs/gudev/html/index.html6
-rw-r--r--docs/gudev/html/ix02.html6
-rw-r--r--docs/gudev/html/ref-API.html4
-rw-r--r--docs/gudev/version.xml2
-rw-r--r--docs/libudev/Makefile.in155
-rw-r--r--docs/libudev/html/api-index-full.html4
-rw-r--r--docs/libudev/html/ch01.html6
-rw-r--r--docs/libudev/html/index.html6
-rw-r--r--docs/libudev/html/libudev-udev-device.html10
-rw-r--r--docs/libudev/html/libudev-udev-enumerate.html4
-rw-r--r--docs/libudev/html/libudev-udev-hwdb.html4
-rw-r--r--docs/libudev/html/libudev-udev-list.html4
-rw-r--r--docs/libudev/html/libudev-udev-monitor.html4
-rw-r--r--docs/libudev/html/libudev-udev-queue.html4
-rw-r--r--docs/libudev/html/libudev-udev-util.html4
-rw-r--r--docs/libudev/html/libudev-udev.html4
-rw-r--r--docs/libudev/version.xml2
-rw-r--r--hwdb/20-OUI.hwdb2985
-rw-r--r--hwdb/20-acpi-vendor.hwdb3
-rw-r--r--hwdb/20-pci-vendor-model.hwdb5169
-rw-r--r--hwdb/20-usb-vendor-model.hwdb869
-rw-r--r--hwdb/60-keyboard.hwdb1088
-rw-r--r--keymaps-force-release/common-volume-keys3
-rw-r--r--keymaps-force-release/dell-touchpad1
-rw-r--r--keymaps-force-release/dell-xps1
-rw-r--r--keymaps-force-release/hp-other3
-rw-r--r--keymaps-force-release/samsung-other10
-rw-r--r--keymaps-force-release/samsung-series-96
-rw-r--r--keymaps/acer22
-rw-r--r--keymaps/acer-aspire_57205
-rw-r--r--keymaps/acer-aspire_5920g5
-rw-r--r--keymaps/acer-aspire_69205
-rw-r--r--keymaps/acer-aspire_89305
-rw-r--r--keymaps/acer-travelmate_c3005
-rw-r--r--keymaps/asus3
-rw-r--r--keymaps/compaq-e_evo4
-rw-r--r--keymaps/dell29
-rw-r--r--keymaps/dell-latitude-xt24
-rw-r--r--keymaps/everex-xt50007
-rw-r--r--keymaps/fujitsu-amilo_li_27323
-rw-r--r--keymaps/fujitsu-amilo_pa_25483
-rw-r--r--keymaps/fujitsu-amilo_pro_edition_v35054
-rw-r--r--keymaps/fujitsu-amilo_pro_v32052
-rw-r--r--keymaps/fujitsu-amilo_si_15206
-rw-r--r--keymaps/fujitsu-esprimo_mobile_v54
-rw-r--r--keymaps/fujitsu-esprimo_mobile_v62
-rw-r--r--keymaps/genius-slimstar-32035
-rw-r--r--keymaps/hewlett-packard12
-rw-r--r--keymaps/hewlett-packard-2510p_2530p2
-rw-r--r--keymaps/hewlett-packard-compaq_elitebook2
-rw-r--r--keymaps/hewlett-packard-hdx9494nr3
-rw-r--r--keymaps/hewlett-packard-pavilion3
-rw-r--r--keymaps/hewlett-packard-presario-21003
-rw-r--r--keymaps/hewlett-packard-tablet6
-rw-r--r--keymaps/hewlett-packard-tx23
-rw-r--r--keymaps/hewlett-packard_elitebook-8440p5
-rw-r--r--keymaps/hewlett-packard_elitebook-8460p3
-rw-r--r--keymaps/ibm-thinkpad-usb-keyboard-trackpoint7
-rw-r--r--keymaps/inventec-symphony_6.0_7.02
-rw-r--r--keymaps/lenovo-30005
-rw-r--r--keymaps/lenovo-ideapad8
-rw-r--r--keymaps/lenovo-thinkpad-usb-keyboard-trackpoint13
-rw-r--r--keymaps/lenovo-thinkpad_x200_tablet6
-rw-r--r--keymaps/lenovo-thinkpad_x6_tablet8
-rw-r--r--keymaps/lg-x11012
-rw-r--r--keymaps/logitech-wave16
-rw-r--r--keymaps/logitech-wave-cordless15
-rw-r--r--keymaps/logitech-wave-pro-cordless12
-rw-r--r--keymaps/maxdata-pro_70009
-rw-r--r--keymaps/medion-fid20602
-rw-r--r--keymaps/medionnb-a5554
-rw-r--r--keymaps/micro-star13
-rw-r--r--keymaps/module-asus-w3j11
-rw-r--r--keymaps/module-ibm16
-rw-r--r--keymaps/module-lenovo17
-rw-r--r--keymaps/module-sony8
-rw-r--r--keymaps/module-sony-old2
-rw-r--r--keymaps/module-sony-vgn8
-rw-r--r--keymaps/module-sony-vpc4
-rw-r--r--keymaps/olpc-xo74
-rw-r--r--keymaps/onkyo14
-rw-r--r--keymaps/oqo-model25
-rw-r--r--keymaps/samsung-other14
-rw-r--r--keymaps/samsung-series-95
-rw-r--r--keymaps/samsung-sq1us7
-rw-r--r--keymaps/samsung-sx20s4
-rw-r--r--keymaps/toshiba-satellite_a1002
-rw-r--r--keymaps/toshiba-satellite_a11010
-rw-r--r--keymaps/toshiba-satellite_m30x6
-rw-r--r--keymaps/zepto-znote11
-rw-r--r--m4/attributes.m424
-rw-r--r--m4/gtk-doc.m46
-rwxr-xr-xmake-directive-index.py38
-rw-r--r--man/SD_ALERT.31
-rw-r--r--man/SD_ALERT.html15
-rw-r--r--man/SD_CRIT.31
-rw-r--r--man/SD_CRIT.html15
-rw-r--r--man/SD_DEBUG.31
-rw-r--r--man/SD_DEBUG.html15
-rw-r--r--man/SD_EMERG.31
-rw-r--r--man/SD_EMERG.html15
-rw-r--r--man/SD_ERR.31
-rw-r--r--man/SD_ERR.html15
-rw-r--r--man/SD_ID128_CONST_STR.31
-rw-r--r--man/SD_ID128_CONST_STR.html37
-rw-r--r--man/SD_ID128_FORMAT_STR.31
-rw-r--r--man/SD_ID128_FORMAT_STR.html37
-rw-r--r--man/SD_ID128_FORMAT_VAL.31
-rw-r--r--man/SD_ID128_FORMAT_VAL.html37
-rw-r--r--man/SD_ID128_MAKE.31
-rw-r--r--man/SD_ID128_MAKE.html37
-rw-r--r--man/SD_INFO.31
-rw-r--r--man/SD_INFO.html15
-rw-r--r--man/SD_JOURNAL_APPEND.31
-rw-r--r--man/SD_JOURNAL_APPEND.html69
-rw-r--r--man/SD_JOURNAL_CURRENT_USER.31
-rw-r--r--man/SD_JOURNAL_CURRENT_USER.html (renamed from man/SD_JOURNAL_SYSTEM_ONLY.html)68
-rw-r--r--man/SD_JOURNAL_FOREACH.31
-rw-r--r--man/SD_JOURNAL_FOREACH.html13
-rw-r--r--man/SD_JOURNAL_FOREACH_BACKWARDS.31
-rw-r--r--man/SD_JOURNAL_FOREACH_BACKWARDS.html13
-rw-r--r--man/SD_JOURNAL_FOREACH_DATA.31
-rw-r--r--man/SD_JOURNAL_FOREACH_DATA.html17
-rw-r--r--man/SD_JOURNAL_FOREACH_UNIQUE.31
-rw-r--r--man/SD_JOURNAL_FOREACH_UNIQUE.html13
-rw-r--r--man/SD_JOURNAL_INVALIDATE.31
-rw-r--r--man/SD_JOURNAL_INVALIDATE.html69
-rw-r--r--man/SD_JOURNAL_LOCAL_ONLY.31
-rw-r--r--man/SD_JOURNAL_LOCAL_ONLY.html68
-rw-r--r--man/SD_JOURNAL_NOP.31
-rw-r--r--man/SD_JOURNAL_NOP.html69
-rw-r--r--man/SD_JOURNAL_RUNTIME_ONLY.31
-rw-r--r--man/SD_JOURNAL_RUNTIME_ONLY.html68
-rw-r--r--man/SD_JOURNAL_SUPPRESS_LOCATION.31
-rw-r--r--man/SD_JOURNAL_SUPPRESS_LOCATION.html45
-rw-r--r--man/SD_JOURNAL_SYSTEM.31
-rw-r--r--man/SD_JOURNAL_SYSTEM.html120
-rw-r--r--man/SD_LISTEN_FDS_START.31
-rw-r--r--man/SD_LISTEN_FDS_START.html31
-rw-r--r--man/SD_NOTICE.31
-rw-r--r--man/SD_NOTICE.html15
-rw-r--r--man/SD_WARNING.31
-rw-r--r--man/SD_WARNING.html15
-rw-r--r--man/binfmt.d.588
-rw-r--r--man/binfmt.d.html22
-rw-r--r--man/binfmt.d.xml14
-rw-r--r--man/bootchart.conf.588
-rw-r--r--man/bootchart.conf.html14
-rw-r--r--man/bootchart.conf.xml8
-rw-r--r--man/bootup.7251
-rw-r--r--man/bootup.html37
-rw-r--r--man/bootup.xml27
-rw-r--r--man/crypttab.5246
-rw-r--r--man/crypttab.html204
-rw-r--r--man/crypttab.xml308
-rw-r--r--man/custom-html.xsl6
-rw-r--r--man/custom-man.xsl9
-rw-r--r--man/daemon.7797
-rw-r--r--man/daemon.html186
-rw-r--r--man/daemon.xml144
-rw-r--r--man/halt.891
-rw-r--r--man/halt.html18
-rw-r--r--man/halt.xml8
-rw-r--r--man/hostname.554
-rw-r--r--man/hostname.html20
-rw-r--r--man/hostname.xml16
-rw-r--r--man/hostnamectl.1140
-rw-r--r--man/hostnamectl.html87
-rw-r--r--man/hostnamectl.xml78
-rw-r--r--man/index.html4
-rw-r--r--man/init.11
-rw-r--r--man/init.html199
-rw-r--r--man/journalctl.1574
-rw-r--r--man/journalctl.html357
-rw-r--r--man/journalctl.xml421
-rw-r--r--man/journald.conf.5234
-rw-r--r--man/journald.conf.html213
-rw-r--r--man/journald.conf.xml146
-rw-r--r--man/kernel-command-line.7144
-rw-r--r--man/kernel-command-line.html43
-rw-r--r--man/kernel-command-line.xml43
-rw-r--r--man/kernel-install.8162
-rw-r--r--man/kernel-install.html14
-rw-r--r--man/kernel-install.xml8
-rw-r--r--man/locale.conf.5101
-rw-r--r--man/locale.conf.html12
-rw-r--r--man/locale.conf.xml6
-rw-r--r--man/localectl.1163
-rw-r--r--man/localectl.html28
-rw-r--r--man/localectl.xml27
-rw-r--r--man/localtime.556
-rw-r--r--man/localtime.html18
-rw-r--r--man/localtime.xml14
-rw-r--r--man/loginctl.1265
-rw-r--r--man/loginctl.html90
-rw-r--r--man/loginctl.xml86
-rw-r--r--man/logind.conf.5178
-rw-r--r--man/logind.conf.html185
-rw-r--r--man/logind.conf.xml148
-rw-r--r--man/machine-id.596
-rw-r--r--man/machine-id.html38
-rw-r--r--man/machine-id.xml28
-rw-r--r--man/machine-info.5110
-rw-r--r--man/machine-info.html44
-rw-r--r--man/machine-info.xml12
-rw-r--r--man/machinectl.1162
-rw-r--r--man/machinectl.html119
-rw-r--r--man/machinectl.xml301
-rw-r--r--man/modules-load.d.578
-rw-r--r--man/modules-load.d.html10
-rw-r--r--man/modules-load.d.xml4
-rw-r--r--man/nss-myhostname.8113
-rw-r--r--man/nss-myhostname.html18
-rw-r--r--man/nss-myhostname.xml14
-rw-r--r--man/os-release.5205
-rw-r--r--man/os-release.html96
-rw-r--r--man/os-release.xml30
-rw-r--r--man/pam_systemd.8173
-rw-r--r--man/pam_systemd.html115
-rw-r--r--man/pam_systemd.xml148
-rw-r--r--man/poweroff.81
-rw-r--r--man/poweroff.html18
-rw-r--r--man/reboot.81
-rw-r--r--man/reboot.html18
-rw-r--r--man/runlevel.879
-rw-r--r--man/runlevel.html16
-rw-r--r--man/runlevel.xml2
-rw-r--r--man/sd-daemon.3122
-rw-r--r--man/sd-daemon.html15
-rw-r--r--man/sd-daemon.xml5
-rw-r--r--man/sd-id128.3163
-rw-r--r--man/sd-id128.html37
-rw-r--r--man/sd-id128.xml35
-rw-r--r--man/sd-journal.385
-rw-r--r--man/sd-journal.html9
-rw-r--r--man/sd-journal.xml3
-rw-r--r--man/sd-login.396
-rw-r--r--man/sd-login.html15
-rw-r--r--man/sd-login.xml7
-rw-r--r--man/sd-readahead.365
-rw-r--r--man/sd-readahead.html8
-rw-r--r--man/sd_booted.367
-rw-r--r--man/sd_booted.html13
-rw-r--r--man/sd_booted.xml5
-rw-r--r--man/sd_get_machine_names.31
-rw-r--r--man/sd_get_machine_names.html15
-rw-r--r--man/sd_get_seats.387
-rw-r--r--man/sd_get_seats.html15
-rw-r--r--man/sd_get_seats.xml7
-rw-r--r--man/sd_get_sessions.31
-rw-r--r--man/sd_get_sessions.html15
-rw-r--r--man/sd_get_uids.31
-rw-r--r--man/sd_get_uids.html15
-rw-r--r--man/sd_id128_equal.31
-rw-r--r--man/sd_id128_equal.html37
-rw-r--r--man/sd_id128_from_string.31
-rw-r--r--man/sd_id128_from_string.html36
-rw-r--r--man/sd_id128_get_boot.31
-rw-r--r--man/sd_id128_get_boot.html21
-rw-r--r--man/sd_id128_get_machine.380
-rw-r--r--man/sd_id128_get_machine.html21
-rw-r--r--man/sd_id128_get_machine.xml13
-rw-r--r--man/sd_id128_randomize.372
-rw-r--r--man/sd_id128_randomize.html22
-rw-r--r--man/sd_id128_randomize.xml16
-rw-r--r--man/sd_id128_t.31
-rw-r--r--man/sd_id128_t.html37
-rw-r--r--man/sd_id128_to_string.380
-rw-r--r--man/sd_id128_to_string.html36
-rw-r--r--man/sd_id128_to_string.xml30
-rw-r--r--man/sd_is_fifo.3136
-rw-r--r--man/sd_is_fifo.html54
-rw-r--r--man/sd_is_fifo.xml48
-rw-r--r--man/sd_is_mq.31
-rw-r--r--man/sd_is_mq.html54
-rw-r--r--man/sd_is_socket.31
-rw-r--r--man/sd_is_socket.html54
-rw-r--r--man/sd_is_socket_inet.31
-rw-r--r--man/sd_is_socket_inet.html54
-rw-r--r--man/sd_is_socket_unix.31
-rw-r--r--man/sd_is_socket_unix.html54
-rw-r--r--man/sd_journal.31
-rw-r--r--man/sd_journal.html68
-rw-r--r--man/sd_journal_add_conjunction.31
-rw-r--r--man/sd_journal_add_conjunction.html27
-rw-r--r--man/sd_journal_add_disjunction.31
-rw-r--r--man/sd_journal_add_disjunction.html27
-rw-r--r--man/sd_journal_add_match.3130
-rw-r--r--man/sd_journal_add_match.html27
-rw-r--r--man/sd_journal_add_match.xml15
-rw-r--r--man/sd_journal_close.31
-rw-r--r--man/sd_journal_close.html68
-rw-r--r--man/sd_journal_enumerate_data.31
-rw-r--r--man/sd_journal_enumerate_data.html17
-rw-r--r--man/sd_journal_enumerate_unique.31
-rw-r--r--man/sd_journal_enumerate_unique.html13
-rw-r--r--man/sd_journal_flush_matches.31
-rw-r--r--man/sd_journal_flush_matches.html27
-rw-r--r--man/sd_journal_get_catalog.383
-rw-r--r--man/sd_journal_get_catalog.html19
-rw-r--r--man/sd_journal_get_catalog.xml9
-rw-r--r--man/sd_journal_get_catalog_for_message_id.31
-rw-r--r--man/sd_journal_get_catalog_for_message_id.html19
-rw-r--r--man/sd_journal_get_cursor.374
-rw-r--r--man/sd_journal_get_cursor.html13
-rw-r--r--man/sd_journal_get_cursor.xml5
-rw-r--r--man/sd_journal_get_cutoff_monotonic_usec.31
-rw-r--r--man/sd_journal_get_cutoff_monotonic_usec.html30
-rw-r--r--man/sd_journal_get_cutoff_realtime_usec.372
-rw-r--r--man/sd_journal_get_cutoff_realtime_usec.html30
-rw-r--r--man/sd_journal_get_cutoff_realtime_usec.xml24
-rw-r--r--man/sd_journal_get_data.3145
-rw-r--r--man/sd_journal_get_data.html17
-rw-r--r--man/sd_journal_get_data.xml7
-rw-r--r--man/sd_journal_get_data_threshold.31
-rw-r--r--man/sd_journal_get_data_threshold.html17
-rw-r--r--man/sd_journal_get_events.31
-rw-r--r--man/sd_journal_get_events.html69
-rw-r--r--man/sd_journal_get_fd.3278
-rw-r--r--man/sd_journal_get_fd.html69
-rw-r--r--man/sd_journal_get_fd.xml55
-rw-r--r--man/sd_journal_get_monotonic_usec.31
-rw-r--r--man/sd_journal_get_monotonic_usec.html44
-rw-r--r--man/sd_journal_get_realtime_usec.378
-rw-r--r--man/sd_journal_get_realtime_usec.html44
-rw-r--r--man/sd_journal_get_realtime_usec.xml36
-rw-r--r--man/sd_journal_get_timeout.31
-rw-r--r--man/sd_journal_get_timeout.html69
-rw-r--r--man/sd_journal_get_usage.354
-rw-r--r--man/sd_journal_get_usage.html15
-rw-r--r--man/sd_journal_get_usage.xml7
-rw-r--r--man/sd_journal_next.3142
-rw-r--r--man/sd_journal_next.html13
-rw-r--r--man/sd_journal_next.xml3
-rw-r--r--man/sd_journal_next_skip.31
-rw-r--r--man/sd_journal_next_skip.html13
-rw-r--r--man/sd_journal_open.3148
-rw-r--r--man/sd_journal_open.html68
-rw-r--r--man/sd_journal_open.xml85
-rw-r--r--man/sd_journal_open_directory.31
-rw-r--r--man/sd_journal_open_directory.html68
-rw-r--r--man/sd_journal_open_files.31
-rw-r--r--man/sd_journal_open_files.html120
-rw-r--r--man/sd_journal_perror.31
-rw-r--r--man/sd_journal_perror.html45
-rw-r--r--man/sd_journal_previous.31
-rw-r--r--man/sd_journal_previous.html13
-rw-r--r--man/sd_journal_previous_skip.31
-rw-r--r--man/sd_journal_previous_skip.html13
-rw-r--r--man/sd_journal_print.3154
-rw-r--r--man/sd_journal_print.html45
-rw-r--r--man/sd_journal_print.xml35
-rw-r--r--man/sd_journal_printv.31
-rw-r--r--man/sd_journal_printv.html45
-rw-r--r--man/sd_journal_process.31
-rw-r--r--man/sd_journal_process.html69
-rw-r--r--man/sd_journal_query_unique.3131
-rw-r--r--man/sd_journal_query_unique.html13
-rw-r--r--man/sd_journal_query_unique.xml3
-rw-r--r--man/sd_journal_reliable_fd.31
-rw-r--r--man/sd_journal_reliable_fd.html69
-rw-r--r--man/sd_journal_restart_data.31
-rw-r--r--man/sd_journal_restart_data.html17
-rw-r--r--man/sd_journal_restart_unique.31
-rw-r--r--man/sd_journal_restart_unique.html13
-rw-r--r--man/sd_journal_seek_cursor.31
-rw-r--r--man/sd_journal_seek_cursor.html35
-rw-r--r--man/sd_journal_seek_head.393
-rw-r--r--man/sd_journal_seek_head.html35
-rw-r--r--man/sd_journal_seek_head.xml25
-rw-r--r--man/sd_journal_seek_monotonic_usec.31
-rw-r--r--man/sd_journal_seek_monotonic_usec.html35
-rw-r--r--man/sd_journal_seek_realtime_usec.31
-rw-r--r--man/sd_journal_seek_realtime_usec.html35
-rw-r--r--man/sd_journal_seek_tail.31
-rw-r--r--man/sd_journal_seek_tail.html35
-rw-r--r--man/sd_journal_send.31
-rw-r--r--man/sd_journal_send.html45
-rw-r--r--man/sd_journal_sendv.31
-rw-r--r--man/sd_journal_sendv.html45
-rw-r--r--man/sd_journal_set_data_threshold.31
-rw-r--r--man/sd_journal_set_data_threshold.html17
-rw-r--r--man/sd_journal_stream_fd.3115
-rw-r--r--man/sd_journal_stream_fd.html33
-rw-r--r--man/sd_journal_stream_fd.xml23
-rw-r--r--man/sd_journal_test_cursor.31
-rw-r--r--man/sd_journal_test_cursor.html13
-rw-r--r--man/sd_journal_wait.31
-rw-r--r--man/sd_journal_wait.html69
-rw-r--r--man/sd_listen_fds.3111
-rw-r--r--man/sd_listen_fds.html31
-rw-r--r--man/sd_listen_fds.xml21
-rw-r--r--man/sd_login_monitor.31
-rw-r--r--man/sd_login_monitor.html45
-rw-r--r--man/sd_login_monitor_flush.31
-rw-r--r--man/sd_login_monitor_flush.html45
-rw-r--r--man/sd_login_monitor_get_events.31
-rw-r--r--man/sd_login_monitor_get_events.html45
-rw-r--r--man/sd_login_monitor_get_fd.31
-rw-r--r--man/sd_login_monitor_get_fd.html45
-rw-r--r--man/sd_login_monitor_get_timeout.31
-rw-r--r--man/sd_login_monitor_get_timeout.html45
-rw-r--r--man/sd_login_monitor_new.3167
-rw-r--r--man/sd_login_monitor_new.html45
-rw-r--r--man/sd_login_monitor_new.xml33
-rw-r--r--man/sd_login_monitor_unref.31
-rw-r--r--man/sd_login_monitor_unref.html45
-rw-r--r--man/sd_notify.3203
-rw-r--r--man/sd_notify.html31
-rw-r--r--man/sd_notify.xml15
-rw-r--r--man/sd_notifyf.31
-rw-r--r--man/sd_notifyf.html31
-rw-r--r--man/sd_pid_get_machine_name.31
-rw-r--r--man/sd_pid_get_machine_name.html46
-rw-r--r--man/sd_pid_get_owner_uid.31
-rw-r--r--man/sd_pid_get_owner_uid.html46
-rw-r--r--man/sd_pid_get_session.3109
-rw-r--r--man/sd_pid_get_session.html46
-rw-r--r--man/sd_pid_get_session.xml51
-rw-r--r--man/sd_pid_get_slice.31
-rw-r--r--man/sd_pid_get_slice.html100
-rw-r--r--man/sd_pid_get_unit.31
-rw-r--r--man/sd_pid_get_unit.html46
-rw-r--r--man/sd_pid_get_user_unit.31
-rw-r--r--man/sd_pid_get_user_unit.html46
-rw-r--r--man/sd_readahead.3101
-rw-r--r--man/sd_readahead.html12
-rw-r--r--man/sd_readahead.xml2
-rw-r--r--man/sd_seat_can_multi_session.31
-rw-r--r--man/sd_seat_can_multi_session.html33
-rw-r--r--man/sd_seat_get_active.3100
-rw-r--r--man/sd_seat_get_active.html33
-rw-r--r--man/sd_seat_get_active.xml29
-rw-r--r--man/sd_seat_get_sessions.31
-rw-r--r--man/sd_seat_get_sessions.html33
-rw-r--r--man/sd_session_get_class.31
-rw-r--r--man/sd_session_get_class.html42
-rw-r--r--man/sd_session_get_display.31
-rw-r--r--man/sd_session_get_display.html42
-rw-r--r--man/sd_session_get_seat.31
-rw-r--r--man/sd_session_get_seat.html42
-rw-r--r--man/sd_session_get_service.31
-rw-r--r--man/sd_session_get_service.html42
-rw-r--r--man/sd_session_get_state.31
-rw-r--r--man/sd_session_get_state.html42
-rw-r--r--man/sd_session_get_tty.31
-rw-r--r--man/sd_session_get_tty.html42
-rw-r--r--man/sd_session_get_type.31
-rw-r--r--man/sd_session_get_type.html42
-rw-r--r--man/sd_session_get_uid.31
-rw-r--r--man/sd_session_get_uid.html42
-rw-r--r--man/sd_session_get_vt.31
-rw-r--r--man/sd_session_get_vt.html125
-rw-r--r--man/sd_session_is_active.3153
-rw-r--r--man/sd_session_is_active.html42
-rw-r--r--man/sd_session_is_active.xml27
-rw-r--r--man/sd_uid_get_seats.31
-rw-r--r--man/sd_uid_get_seats.html31
-rw-r--r--man/sd_uid_get_sessions.31
-rw-r--r--man/sd_uid_get_sessions.html31
-rw-r--r--man/sd_uid_get_state.3104
-rw-r--r--man/sd_uid_get_state.html31
-rw-r--r--man/sd_uid_get_state.xml13
-rw-r--r--man/sd_uid_is_on_seat.31
-rw-r--r--man/sd_uid_is_on_seat.html31
-rw-r--r--man/shutdown.8110
-rw-r--r--man/shutdown.html27
-rw-r--r--man/shutdown.xml11
-rw-r--r--man/sysctl.d.587
-rw-r--r--man/sysctl.d.html26
-rw-r--r--man/sysctl.d.xml16
-rw-r--r--man/systemctl.1786
-rw-r--r--man/systemctl.html720
-rw-r--r--man/systemctl.xml1601
-rw-r--r--man/systemd-activate.8124
-rw-r--r--man/systemd-activate.html18
-rw-r--r--man/systemd-activate.xml4
-rw-r--r--man/systemd-analyze.1192
-rw-r--r--man/systemd-analyze.html61
-rw-r--r--man/systemd-analyze.xml116
-rw-r--r--man/systemd-ask-password-console.path.81
-rw-r--r--man/systemd-ask-password-console.path.html6
-rw-r--r--man/systemd-ask-password-console.service.862
-rw-r--r--man/systemd-ask-password-console.service.html6
-rw-r--r--man/systemd-ask-password-wall.path.81
-rw-r--r--man/systemd-ask-password-wall.path.html6
-rw-r--r--man/systemd-ask-password-wall.service.81
-rw-r--r--man/systemd-ask-password-wall.service.html6
-rw-r--r--man/systemd-ask-password.1101
-rw-r--r--man/systemd-ask-password.html12
-rw-r--r--man/systemd-ask-password.xml4
-rw-r--r--man/systemd-backlight.81
-rw-r--r--man/systemd-backlight.html30
-rw-r--r--man/systemd-backlight@.service.836
-rw-r--r--man/systemd-backlight@.service.html30
-rw-r--r--man/systemd-backlight@.service.xml73
-rw-r--r--man/systemd-binfmt.81
-rw-r--r--man/systemd-binfmt.html4
-rw-r--r--man/systemd-binfmt.service.841
-rw-r--r--man/systemd-binfmt.service.html4
-rw-r--r--man/systemd-bootchart.1184
-rw-r--r--man/systemd-bootchart.html16
-rw-r--r--man/systemd-bootchart.xml2
-rw-r--r--man/systemd-cat.1123
-rw-r--r--man/systemd-cat.html42
-rw-r--r--man/systemd-cat.xml8
-rw-r--r--man/systemd-cgls.182
-rw-r--r--man/systemd-cgls.html24
-rw-r--r--man/systemd-cgls.xml17
-rw-r--r--man/systemd-cgtop.1168
-rw-r--r--man/systemd-cgtop.html60
-rw-r--r--man/systemd-cgtop.xml40
-rw-r--r--man/systemd-coredumpctl.1118
-rw-r--r--man/systemd-coredumpctl.html12
-rw-r--r--man/systemd-coredumpctl.xml4
-rw-r--r--man/systemd-cryptsetup-generator.8124
-rw-r--r--man/systemd-cryptsetup-generator.html29
-rw-r--r--man/systemd-cryptsetup-generator.xml27
-rw-r--r--man/systemd-cryptsetup.81
-rw-r--r--man/systemd-cryptsetup.html4
-rw-r--r--man/systemd-cryptsetup@.service.855
-rw-r--r--man/systemd-cryptsetup@.service.html4
-rw-r--r--man/systemd-delta.1111
-rw-r--r--man/systemd-delta.html13
-rw-r--r--man/systemd-delta.xml9
-rw-r--r--man/systemd-detect-virt.185
-rw-r--r--man/systemd-detect-virt.html13
-rw-r--r--man/systemd-detect-virt.xml7
-rw-r--r--man/systemd-efi-boot-generator.854
-rw-r--r--man/systemd-efi-boot-generator.html44
-rw-r--r--man/systemd-efi-boot-generator.xml88
-rw-r--r--man/systemd-fsck-root.service.81
-rw-r--r--man/systemd-fsck-root.service.html20
-rw-r--r--man/systemd-fsck.81
-rw-r--r--man/systemd-fsck.html20
-rw-r--r--man/systemd-fsck@.service.862
-rw-r--r--man/systemd-fsck@.service.html20
-rw-r--r--man/systemd-fsck@.service.xml2
-rw-r--r--man/systemd-fstab-generator.875
-rw-r--r--man/systemd-fstab-generator.html10
-rw-r--r--man/systemd-fstab-generator.xml2
-rw-r--r--man/systemd-getty-generator.869
-rw-r--r--man/systemd-getty-generator.html6
-rw-r--r--man/systemd-gpt-auto-generator.860
-rw-r--r--man/systemd-gpt-auto-generator.html54
-rw-r--r--man/systemd-gpt-auto-generator.xml104
-rw-r--r--man/systemd-halt.service.879
-rw-r--r--man/systemd-halt.service.html4
-rw-r--r--man/systemd-halt.service.xml10
-rw-r--r--man/systemd-hibernate.service.81
-rw-r--r--man/systemd-hibernate.service.html10
-rw-r--r--man/systemd-hostnamed.81
-rw-r--r--man/systemd-hostnamed.html10
-rw-r--r--man/systemd-hostnamed.service.857
-rw-r--r--man/systemd-hostnamed.service.html10
-rw-r--r--man/systemd-hostnamed.service.xml8
-rw-r--r--man/systemd-hybrid-sleep.service.81
-rw-r--r--man/systemd-hybrid-sleep.service.html10
-rw-r--r--man/systemd-inhibit.1126
-rw-r--r--man/systemd-inhibit.html52
-rw-r--r--man/systemd-inhibit.xml16
-rw-r--r--man/systemd-initctl.81
-rw-r--r--man/systemd-initctl.html4
-rw-r--r--man/systemd-initctl.service.841
-rw-r--r--man/systemd-initctl.service.html4
-rw-r--r--man/systemd-initctl.socket.81
-rw-r--r--man/systemd-initctl.socket.html4
-rw-r--r--man/systemd-journal-gatewayd.81
-rw-r--r--man/systemd-journal-gatewayd.html16
-rw-r--r--man/systemd-journal-gatewayd.service.8248
-rw-r--r--man/systemd-journal-gatewayd.service.html16
-rw-r--r--man/systemd-journal-gatewayd.socket.81
-rw-r--r--man/systemd-journal-gatewayd.socket.html16
-rw-r--r--man/systemd-journald.81
-rw-r--r--man/systemd-journald.html62
-rw-r--r--man/systemd-journald.service.8164
-rw-r--r--man/systemd-journald.service.html62
-rw-r--r--man/systemd-journald.service.xml71
-rw-r--r--man/systemd-journald.socket.81
-rw-r--r--man/systemd-journald.socket.html62
-rw-r--r--man/systemd-kexec.service.81
-rw-r--r--man/systemd-kexec.service.html4
-rw-r--r--man/systemd-localed.81
-rw-r--r--man/systemd-localed.html4
-rw-r--r--man/systemd-localed.service.857
-rw-r--r--man/systemd-localed.service.html4
-rw-r--r--man/systemd-logind.81
-rw-r--r--man/systemd-logind.html10
-rw-r--r--man/systemd-logind.service.8164
-rw-r--r--man/systemd-logind.service.html10
-rw-r--r--man/systemd-logind.service.xml10
-rw-r--r--man/systemd-machine-id-setup.175
-rw-r--r--man/systemd-machine-id-setup.html12
-rw-r--r--man/systemd-machine-id-setup.xml4
-rw-r--r--man/systemd-machined.81
-rw-r--r--man/systemd-machined.html35
-rw-r--r--man/systemd-machined.service.853
-rw-r--r--man/systemd-machined.service.html35
-rw-r--r--man/systemd-machined.service.xml85
-rw-r--r--man/systemd-modules-load.81
-rw-r--r--man/systemd-modules-load.html13
-rw-r--r--man/systemd-modules-load.service.851
-rw-r--r--man/systemd-modules-load.service.html13
-rw-r--r--man/systemd-modules-load.service.xml5
-rw-r--r--man/systemd-notify.1126
-rw-r--r--man/systemd-notify.html16
-rw-r--r--man/systemd-notify.xml6
-rw-r--r--man/systemd-nspawn.1284
-rw-r--r--man/systemd-nspawn.html83
-rw-r--r--man/systemd-nspawn.xml63
-rw-r--r--man/systemd-poweroff.service.81
-rw-r--r--man/systemd-poweroff.service.html4
-rw-r--r--man/systemd-quotacheck.81
-rw-r--r--man/systemd-quotacheck.html18
-rw-r--r--man/systemd-quotacheck.service.854
-rw-r--r--man/systemd-quotacheck.service.html18
-rw-r--r--man/systemd-random-seed-save.service.html35
-rw-r--r--man/systemd-random-seed.81
-rw-r--r--man/systemd-random-seed.html13
-rw-r--r--man/systemd-random-seed.service.839
-rw-r--r--man/systemd-random-seed.service.html (renamed from man/systemd-random-seed-load.service.html)13
-rw-r--r--man/systemd-random-seed.service.xml (renamed from man/systemd-random-seed-load.service.xml)21
-rw-r--r--man/systemd-readahead-collect.service.81
-rw-r--r--man/systemd-readahead-collect.service.html34
-rw-r--r--man/systemd-readahead-done.service.81
-rw-r--r--man/systemd-readahead-done.service.html34
-rw-r--r--man/systemd-readahead-done.timer.81
-rw-r--r--man/systemd-readahead-done.timer.html34
-rw-r--r--man/systemd-readahead-replay.service.8115
-rw-r--r--man/systemd-readahead-replay.service.html34
-rw-r--r--man/systemd-readahead-replay.service.xml26
-rw-r--r--man/systemd-readahead.81
-rw-r--r--man/systemd-readahead.html34
-rw-r--r--man/systemd-reboot.service.81
-rw-r--r--man/systemd-reboot.service.html4
-rw-r--r--man/systemd-remount-fs.81
-rw-r--r--man/systemd-remount-fs.html4
-rw-r--r--man/systemd-remount-fs.service.860
-rw-r--r--man/systemd-remount-fs.service.html4
-rw-r--r--man/systemd-run.1147
-rw-r--r--man/systemd-run.html82
-rw-r--r--man/systemd-run.xml219
-rw-r--r--man/systemd-shutdown.81
-rw-r--r--man/systemd-shutdown.html4
-rw-r--r--man/systemd-shutdownd.81
-rw-r--r--man/systemd-shutdownd.html4
-rw-r--r--man/systemd-shutdownd.service.841
-rw-r--r--man/systemd-shutdownd.service.html4
-rw-r--r--man/systemd-shutdownd.socket.81
-rw-r--r--man/systemd-shutdownd.socket.html4
-rw-r--r--man/systemd-sleep.81
-rw-r--r--man/systemd-sleep.conf.5108
-rw-r--r--man/systemd-sleep.conf.html10
-rw-r--r--man/systemd-sleep.html10
-rw-r--r--man/systemd-suspend.service.8105
-rw-r--r--man/systemd-suspend.service.html10
-rw-r--r--man/systemd-suspend.service.xml16
-rw-r--r--man/systemd-sysctl.81
-rw-r--r--man/systemd-sysctl.html5
-rw-r--r--man/systemd-sysctl.service.843
-rw-r--r--man/systemd-sysctl.service.html5
-rw-r--r--man/systemd-sysctl.service.xml1
-rw-r--r--man/systemd-system-update-generator.854
-rw-r--r--man/systemd-system-update-generator.html4
-rw-r--r--man/systemd-system.conf.5133
-rw-r--r--man/systemd-system.conf.html74
-rw-r--r--man/systemd-system.conf.xml71
-rw-r--r--man/systemd-timedated.81
-rw-r--r--man/systemd-timedated.html8
-rw-r--r--man/systemd-timedated.service.856
-rw-r--r--man/systemd-timedated.service.html8
-rw-r--r--man/systemd-timedated.service.xml4
-rw-r--r--man/systemd-tmpfiles-clean.service.81
-rw-r--r--man/systemd-tmpfiles-clean.service.html24
-rw-r--r--man/systemd-tmpfiles-clean.timer.81
-rw-r--r--man/systemd-tmpfiles-clean.timer.html24
-rw-r--r--man/systemd-tmpfiles-setup-dev.service.81
-rw-r--r--man/systemd-tmpfiles-setup-dev.service.html24
-rw-r--r--man/systemd-tmpfiles-setup.service.81
-rw-r--r--man/systemd-tmpfiles-setup.service.html24
-rw-r--r--man/systemd-tmpfiles.899
-rw-r--r--man/systemd-tmpfiles.html24
-rw-r--r--man/systemd-tmpfiles.xml20
-rw-r--r--man/systemd-tty-ask-password-agent.199
-rw-r--r--man/systemd-tty-ask-password-agent.html8
-rw-r--r--man/systemd-udevd-control.socket.81
-rw-r--r--man/systemd-udevd-control.socket.html10
-rw-r--r--man/systemd-udevd-kernel.socket.81
-rw-r--r--man/systemd-udevd-kernel.socket.html10
-rw-r--r--man/systemd-udevd.81
-rw-r--r--man/systemd-udevd.html10
-rw-r--r--man/systemd-udevd.service.8130
-rw-r--r--man/systemd-udevd.service.html10
-rw-r--r--man/systemd-udevd.service.xml2
-rw-r--r--man/systemd-update-utmp-runlevel.service.81
-rw-r--r--man/systemd-update-utmp-runlevel.service.html10
-rw-r--r--man/systemd-update-utmp.81
-rw-r--r--man/systemd-update-utmp.html10
-rw-r--r--man/systemd-update-utmp.service.841
-rw-r--r--man/systemd-update-utmp.service.html (renamed from man/systemd-update-utmp-shutdown.service.html)10
-rw-r--r--man/systemd-update-utmp.service.xml (renamed from man/systemd-update-utmp-runlevel.service.xml)16
-rw-r--r--man/systemd-user-sessions.81
-rw-r--r--man/systemd-user-sessions.html4
-rw-r--r--man/systemd-user-sessions.service.839
-rw-r--r--man/systemd-user-sessions.service.html4
-rw-r--r--man/systemd-user.conf.51
-rw-r--r--man/systemd-user.conf.html74
-rw-r--r--man/systemd-vconsole-setup.81
-rw-r--r--man/systemd-vconsole-setup.html6
-rw-r--r--man/systemd-vconsole-setup.service.865
-rw-r--r--man/systemd-vconsole-setup.service.html6
-rw-r--r--man/systemd.1924
-rw-r--r--man/systemd.automount.593
-rw-r--r--man/systemd.automount.html22
-rw-r--r--man/systemd.automount.xml14
-rw-r--r--man/systemd.device.588
-rw-r--r--man/systemd.device.html18
-rw-r--r--man/systemd.device.xml8
-rw-r--r--man/systemd.directives.76790
-rw-r--r--man/systemd.directives.html24
-rw-r--r--man/systemd.directives.xml614
-rw-r--r--man/systemd.exec.5635
-rw-r--r--man/systemd.exec.html432
-rw-r--r--man/systemd.exec.xml535
-rw-r--r--man/systemd.html199
-rw-r--r--man/systemd.index.7940
-rw-r--r--man/systemd.index.html4
-rw-r--r--man/systemd.index.xml8
-rw-r--r--man/systemd.journal-fields.7276
-rw-r--r--man/systemd.journal-fields.html210
-rw-r--r--man/systemd.journal-fields.xml263
-rw-r--r--man/systemd.kill.5107
-rw-r--r--man/systemd.kill.html48
-rw-r--r--man/systemd.kill.xml46
-rw-r--r--man/systemd.mount.5195
-rw-r--r--man/systemd.mount.html57
-rw-r--r--man/systemd.mount.xml41
-rw-r--r--man/systemd.path.5122
-rw-r--r--man/systemd.path.html18
-rw-r--r--man/systemd.path.xml12
-rw-r--r--man/systemd.preset.5154
-rw-r--r--man/systemd.preset.html45
-rw-r--r--man/systemd.preset.xml27
-rw-r--r--man/systemd.resource-control.5233
-rw-r--r--man/systemd.resource-control.html167
-rw-r--r--man/systemd.resource-control.xml353
-rw-r--r--man/systemd.scope.563
-rw-r--r--man/systemd.scope.html48
-rw-r--r--man/systemd.scope.xml100
-rw-r--r--man/systemd.service.5566
-rw-r--r--man/systemd.service.html138
-rw-r--r--man/systemd.service.xml118
-rw-r--r--man/systemd.slice.571
-rw-r--r--man/systemd.slice.html72
-rw-r--r--man/systemd.slice.xml121
-rw-r--r--man/systemd.snapshot.544
-rw-r--r--man/systemd.snapshot.html8
-rw-r--r--man/systemd.snapshot.xml4
-rw-r--r--man/systemd.socket.5461
-rw-r--r--man/systemd.socket.html119
-rw-r--r--man/systemd.socket.xml112
-rw-r--r--man/systemd.special.7648
-rw-r--r--man/systemd.special.html76
-rw-r--r--man/systemd.special.xml76
-rw-r--r--man/systemd.swap.5129
-rw-r--r--man/systemd.swap.html26
-rw-r--r--man/systemd.swap.xml18
-rw-r--r--man/systemd.target.560
-rw-r--r--man/systemd.target.html6
-rw-r--r--man/systemd.target.xml2
-rw-r--r--man/systemd.time.7328
-rw-r--r--man/systemd.time.html109
-rw-r--r--man/systemd.time.xml83
-rw-r--r--man/systemd.timer.5111
-rw-r--r--man/systemd.timer.html14
-rw-r--r--man/systemd.timer.xml8
-rw-r--r--man/systemd.unit.5873
-rw-r--r--man/systemd.unit.html240
-rw-r--r--man/systemd.unit.xml266
-rw-r--r--man/systemd.xml193
-rw-r--r--man/telinit.8101
-rw-r--r--man/telinit.html12
-rw-r--r--man/telinit.xml2
-rw-r--r--man/timedatectl.1202
-rw-r--r--man/timedatectl.html43
-rw-r--r--man/timedatectl.xml34
-rw-r--r--man/tmpfiles.d.5279
-rw-r--r--man/tmpfiles.d.html64
-rw-r--r--man/tmpfiles.d.xml118
-rw-r--r--man/udev.7533
-rw-r--r--man/udev.html142
-rw-r--r--man/udev.xml178
-rw-r--r--man/udevadm.8371
-rw-r--r--man/udevadm.html16
-rw-r--r--man/vconsole.conf.589
-rw-r--r--man/vconsole.conf.html10
-rw-r--r--po/POTFILES.skip2
-rw-r--r--rules/60-keyboard.rules22
-rw-r--r--rules/75-net-description.rules4
-rw-r--r--rules/75-tty-description.rules3
-rw-r--r--rules/80-drivers.rules2
-rw-r--r--rules/80-net-name-slot.rules2
-rw-r--r--rules/99-systemd.rules6
-rw-r--r--rules/99-systemd.rules.in6
-rw-r--r--shell-completion/bash/hostnamectl7
-rw-r--r--shell-completion/bash/journalctl17
-rw-r--r--shell-completion/bash/kernel-install50
-rw-r--r--shell-completion/bash/localectl7
-rw-r--r--shell-completion/bash/loginctl7
-rw-r--r--shell-completion/bash/systemctl24
-rw-r--r--shell-completion/bash/systemd-analyze16
-rw-r--r--shell-completion/bash/systemd-coredumpctl7
-rw-r--r--shell-completion/bash/systemd-run63
-rw-r--r--shell-completion/bash/timedatectl7
-rw-r--r--shell-completion/bash/udevadm104
-rw-r--r--shell-completion/systemd-zsh-completion.zsh1052
-rw-r--r--shell-completion/zsh/_hostnamectl32
-rw-r--r--shell-completion/zsh/_journalctl98
-rw-r--r--shell-completion/zsh/_kernel-install26
-rw-r--r--shell-completion/zsh/_localectl83
-rw-r--r--shell-completion/zsh/_loginctl106
-rw-r--r--shell-completion/zsh/_machinectl47
-rw-r--r--shell-completion/zsh/_sd_hosts_or_user_at_host5
-rw-r--r--shell-completion/zsh/_systemctl347
-rw-r--r--shell-completion/zsh/_systemd83
-rw-r--r--shell-completion/zsh/_systemd-analyze43
-rw-r--r--shell-completion/zsh/_systemd-coredumpctl36
-rw-r--r--shell-completion/zsh/_systemd-delta15
-rw-r--r--shell-completion/zsh/_systemd-inhibit33
-rw-r--r--shell-completion/zsh/_systemd-nspawn24
-rw-r--r--shell-completion/zsh/_systemd-tmpfiles10
-rw-r--r--shell-completion/zsh/_timedatectl65
-rw-r--r--shell-completion/zsh/_udevadm141
-rw-r--r--src/activate/activate.c9
-rw-r--r--src/analyze/systemd-analyze.c255
-rw-r--r--src/backlight/backlight.c132
-rw-r--r--src/boot/boot-efi.c2
-rw-r--r--src/bootchart/bootchart.c2
-rw-r--r--src/bootchart/bootchart.h2
-rw-r--r--[-rwxr-xr-x]src/bootchart/store.c2
-rw-r--r--src/bootchart/store.h2
-rw-r--r--src/bootchart/svg.c2
-rw-r--r--src/bootchart/svg.h2
-rw-r--r--src/cgls/cgls.c22
-rw-r--r--src/cgroups-agent/cgroups-agent.c19
-rw-r--r--src/cgtop/cgtop.c6
-rw-r--r--src/core/async.c (renamed from src/core/sync.c)23
-rw-r--r--src/core/async.h (renamed from src/core/sync.h)1
-rw-r--r--src/core/automount.c39
-rw-r--r--src/core/automount.h2
-rw-r--r--src/core/bus-errors.h1
-rw-r--r--src/core/cgroup-attr.c132
-rw-r--r--src/core/cgroup-attr.h50
-rw-r--r--src/core/cgroup-semantics.c333
-rw-r--r--src/core/cgroup-semantics.h43
-rw-r--r--src/core/cgroup.c917
-rw-r--r--src/core/cgroup.h115
-rw-r--r--src/core/condition.c43
-rw-r--r--src/core/condition.h8
-rw-r--r--src/core/dbus-cgroup.c554
-rw-r--r--src/core/dbus-cgroup.h45
-rw-r--r--src/core/dbus-execute.c35
-rw-r--r--src/core/dbus-execute.h18
-rw-r--r--src/core/dbus-job.c53
-rw-r--r--src/core/dbus-kill.c76
-rw-r--r--src/core/dbus-kill.h8
-rw-r--r--src/core/dbus-manager.c359
-rw-r--r--src/core/dbus-mount.c47
-rw-r--r--src/core/dbus-mount.h3
-rw-r--r--src/core/dbus-scope.c189
-rw-r--r--src/core/dbus-scope.h33
-rw-r--r--src/core/dbus-service.c193
-rw-r--r--src/core/dbus-service.h3
-rw-r--r--src/core/dbus-slice.c93
-rw-r--r--src/core/dbus-slice.h33
-rw-r--r--src/core/dbus-socket.c51
-rw-r--r--src/core/dbus-socket.h3
-rw-r--r--src/core/dbus-swap.c46
-rw-r--r--src/core/dbus-swap.h3
-rw-r--r--src/core/dbus-unit.c816
-rw-r--r--src/core/dbus-unit.h48
-rw-r--r--src/core/dbus.c141
-rw-r--r--src/core/dbus.h6
-rw-r--r--src/core/execute.c191
-rw-r--r--src/core/execute.h17
-rw-r--r--src/core/job.c9
-rw-r--r--src/core/kill.c7
-rw-r--r--src/core/kill.h1
-rw-r--r--src/core/killall.c5
-rw-r--r--src/core/load-fragment-gperf.gperf.m441
-rw-r--r--src/core/load-fragment.c751
-rw-r--r--src/core/load-fragment.h11
-rw-r--r--src/core/locale-setup.c44
-rw-r--r--src/core/locale-setup.h2
-rw-r--r--src/core/macros.systemd.in5
-rw-r--r--src/core/main.c197
-rw-r--r--src/core/manager.c294
-rw-r--r--src/core/manager.h41
-rw-r--r--src/core/mount-setup.c10
-rw-r--r--src/core/mount.c350
-rw-r--r--src/core/mount.h4
-rw-r--r--src/core/namespace.c12
-rw-r--r--src/core/org.freedesktop.systemd1.conf4
-rw-r--r--src/core/path.c32
-rw-r--r--src/core/path.h4
-rw-r--r--src/core/scope.c482
-rw-r--r--src/core/scope.h69
-rw-r--r--src/core/selinux-access.c8
-rw-r--r--src/core/selinux-access.h8
-rw-r--r--src/core/service.c180
-rw-r--r--src/core/service.h2
-rw-r--r--src/core/shutdown.c18
-rw-r--r--src/core/slice.c322
-rw-r--r--src/core/slice.h46
-rw-r--r--src/core/smack-setup.c12
-rw-r--r--src/core/snapshot.c34
-rw-r--r--src/core/snapshot.h1
-rw-r--r--src/core/socket.c131
-rw-r--r--src/core/socket.h9
-rw-r--r--src/core/special.h6
-rw-r--r--src/core/swap.c86
-rw-r--r--src/core/swap.h3
-rw-r--r--src/core/system.conf4
-rw-r--r--src/core/systemd.pc.in3
-rw-r--r--src/core/transaction.c18
-rw-r--r--src/core/unit-printf.c216
-rw-r--r--src/core/unit-printf.h6
-rw-r--r--src/core/unit.c1013
-rw-r--r--src/core/unit.h89
-rw-r--r--src/core/user.conf1
-rw-r--r--src/cryptsetup/cryptsetup-generator.c95
-rw-r--r--src/cryptsetup/cryptsetup.c443
-rw-r--r--src/delta/delta.c215
-rw-r--r--src/efi-boot-generator/efi-boot-generator.c2
-rw-r--r--src/fstab-generator/fstab-generator.c149
-rw-r--r--src/getty-generator/getty-generator.c37
-rw-r--r--src/gpt-auto-generator/gpt-auto-generator.c527
-rw-r--r--src/hostname/hostnamectl.c118
-rw-r--r--src/hostname/hostnamed.c3
-rw-r--r--src/initctl/initctl.c12
-rw-r--r--src/journal/coredump.c13
-rw-r--r--src/journal/coredumpctl.c10
-rw-r--r--src/journal/fsprg.c6
-rw-r--r--src/journal/journal-authenticate.c10
-rw-r--r--src/journal/journal-file.c114
-rw-r--r--src/journal/journal-file.h18
-rw-r--r--src/journal/journal-gatewayd.c16
-rw-r--r--src/journal/journal-internal.h22
-rw-r--r--src/journal/journal-qrcode.c6
-rw-r--r--src/journal/journal-send.c28
-rw-r--r--src/journal/journal-vacuum.c59
-rw-r--r--src/journal/journal-verify.c277
-rw-r--r--src/journal/journalctl.c536
-rw-r--r--src/journal/journald-kmsg.c5
-rw-r--r--src/journal/journald-native.c50
-rw-r--r--src/journal/journald-server.c404
-rw-r--r--src/journal/journald-server.h10
-rw-r--r--src/journal/journald-stream.c6
-rw-r--r--src/journal/journald-syslog.c14
-rw-r--r--src/journal/journald-syslog.h2
-rw-r--r--src/journal/journald.conf4
-rw-r--r--src/journal/libsystemd-journal.sym5
-rw-r--r--src/journal/mmap-cache.c4
-rw-r--r--src/journal/sd-journal.c372
-rw-r--r--src/journal/test-catalog.c20
-rw-r--r--src/journal/test-journal-init.c60
-rw-r--r--src/journal/test-journal-interleaving.c303
-rw-r--r--src/journal/test-journal-stream.c6
-rw-r--r--src/journal/test-journal-verify.c8
-rw-r--r--src/journal/test-journal.c64
-rw-r--r--src/kernel-install/90-loaderentry.install16
-rw-r--r--src/kernel-install/kernel-install12
-rw-r--r--src/libsystemd-bus/bus-bloom.c2
-rw-r--r--src/libsystemd-bus/bus-control.c246
-rw-r--r--src/libsystemd-bus/bus-control.h4
-rw-r--r--src/libsystemd-bus/bus-error.c80
-rw-r--r--src/libsystemd-bus/bus-internal.h44
-rw-r--r--src/libsystemd-bus/bus-kernel.c407
-rw-r--r--src/libsystemd-bus/bus-kernel.h38
-rw-r--r--src/libsystemd-bus/bus-match.c116
-rw-r--r--src/libsystemd-bus/bus-match.h16
-rw-r--r--src/libsystemd-bus/bus-message.c1110
-rw-r--r--src/libsystemd-bus/bus-message.h61
-rw-r--r--src/libsystemd-bus/bus-socket.c66
-rw-r--r--src/libsystemd-bus/bus-type.c17
-rw-r--r--src/libsystemd-bus/bus-type.h1
-rw-r--r--src/libsystemd-bus/kdbus.h136
-rw-r--r--src/libsystemd-bus/sd-bus.c358
-rw-r--r--src/libsystemd-bus/sd-memfd.c231
-rw-r--r--src/libsystemd-bus/test-bus-chat.c10
-rw-r--r--src/libsystemd-bus/test-bus-kernel-benchmark.c302
-rw-r--r--src/libsystemd-bus/test-bus-kernel-bloom.c112
-rw-r--r--src/libsystemd-bus/test-bus-kernel.c34
-rw-r--r--src/libsystemd-bus/test-bus-marshal.c18
-rw-r--r--src/libsystemd-bus/test-bus-match.c70
-rw-r--r--src/libsystemd-bus/test-bus-memfd.c174
-rw-r--r--src/libsystemd-bus/test-bus-server.c4
-rw-r--r--src/libsystemd-bus/test-bus-zero-copy.c183
-rw-r--r--src/libudev/libudev-device.c4
-rw-r--r--src/libudev/libudev-enumerate.c40
-rw-r--r--src/libudev/libudev-hwdb.c18
-rw-r--r--src/libudev/libudev-util.c172
-rw-r--r--src/libudev/libudev.h2
-rw-r--r--src/libudev/libudev.sym1
-rw-r--r--src/locale/localectl.c19
-rw-r--r--src/login/70-uaccess.rules3
-rw-r--r--src/login/libsystemd-login.sym10
-rw-r--r--src/login/login-shared.c29
-rw-r--r--src/login/login-shared.h24
-rw-r--r--src/login/loginctl.c221
-rw-r--r--src/login/logind-acl.c68
-rw-r--r--src/login/logind-action.c2
-rw-r--r--src/login/logind-core.c514
-rw-r--r--src/login/logind-dbus.c724
-rw-r--r--src/login/logind-device.c39
-rw-r--r--src/login/logind-device.h5
-rw-r--r--src/login/logind-gperf.gperf2
-rw-r--r--src/login/logind-seat-dbus.c6
-rw-r--r--src/login/logind-seat.c75
-rw-r--r--src/login/logind-seat.h6
-rw-r--r--src/login/logind-session-dbus.c282
-rw-r--r--src/login/logind-session-device.c483
-rw-r--r--src/login/logind-session-device.h59
-rw-r--r--src/login/logind-session.c630
-rw-r--r--src/login/logind-session.h34
-rw-r--r--src/login/logind-user-dbus.c30
-rw-r--r--src/login/logind-user.c358
-rw-r--r--src/login/logind-user.h9
-rw-r--r--src/login/logind.c847
-rw-r--r--src/login/logind.conf2
-rw-r--r--src/login/logind.h35
-rw-r--r--src/login/org.freedesktop.login1.conf4
-rw-r--r--src/login/org.freedesktop.login1.policy.in2
-rw-r--r--src/login/pam-module.c187
-rw-r--r--src/login/sd-login.c87
-rw-r--r--src/login/systemd-user8
-rw-r--r--src/login/test-login-shared.c (renamed from src/timestamp/timestamp.c)26
-rw-r--r--src/login/test-login-tables.c35
-rw-r--r--src/login/test-login.c9
-rw-r--r--src/login/user-sessions.c20
-rw-r--r--src/machine/machine-dbus.c364
-rw-r--r--src/machine/machine.c414
-rw-r--r--src/machine/machine.h109
-rw-r--r--src/machine/machinectl.c816
-rw-r--r--src/machine/machined-dbus.c1042
-rw-r--r--src/machine/machined.c386
-rw-r--r--src/machine/machined.h73
-rw-r--r--src/machine/org.freedesktop.machine1.conf50
-rw-r--r--src/machine/org.freedesktop.machine1.service12
-rw-r--r--src/machine/test-machine-tables.c30
-rw-r--r--src/notify/notify.c3
-rw-r--r--src/nspawn/nspawn.c221
-rw-r--r--src/python-systemd/_daemon.c120
-rw-r--r--src/python-systemd/_reader.c173
-rw-r--r--src/python-systemd/daemon.py1
-rw-r--r--src/python-systemd/id128-constants.h3
-rw-r--r--src/python-systemd/journal.py35
-rw-r--r--src/python-systemd/login.c211
-rw-r--r--src/python-systemd/pyutil.c60
-rw-r--r--src/python-systemd/pyutil.h5
-rw-r--r--src/random-seed/random-seed.c87
-rw-r--r--src/readahead/readahead-collect.c6
-rw-r--r--src/run/run.c376
-rw-r--r--src/shared/acl-util.c28
-rw-r--r--src/shared/acl-util.h1
-rw-r--r--src/shared/acpi-fpdt.c155
-rw-r--r--src/shared/acpi-fpdt.h26
-rw-r--r--src/shared/boot-timestamps.c65
-rw-r--r--src/shared/boot-timestamps.h27
-rw-r--r--src/shared/cgroup-label.c77
-rw-r--r--src/shared/cgroup-show.c1
-rw-r--r--src/shared/cgroup-util.c763
-rw-r--r--src/shared/cgroup-util.h36
-rw-r--r--src/shared/conf-parser.c10
-rw-r--r--src/shared/dbus-common.c6
-rw-r--r--src/shared/def.h7
-rw-r--r--src/shared/dev-setup.c8
-rw-r--r--src/shared/device-nodes.c74
-rw-r--r--src/shared/device-nodes.h25
-rw-r--r--src/shared/efivars.c41
-rw-r--r--src/shared/efivars.h5
-rw-r--r--src/shared/env-util.c5
-rw-r--r--src/shared/fileio.c166
-rw-r--r--src/shared/fileio.h4
-rw-r--r--src/shared/hashmap.c214
-rw-r--r--src/shared/hashmap.h1
-rw-r--r--src/shared/hwclock.c2
-rw-r--r--src/shared/install-printf.c58
-rw-r--r--src/shared/install-printf.h2
-rw-r--r--src/shared/install.c199
-rw-r--r--src/shared/install.h2
-rw-r--r--src/shared/label.c4
-rw-r--r--src/shared/label.h2
-rw-r--r--src/shared/list.h9
-rw-r--r--src/shared/log.c12
-rw-r--r--src/shared/logs-show.c396
-rw-r--r--src/shared/logs-show.h8
-rw-r--r--src/shared/macro.h31
-rw-r--r--src/shared/missing.h60
-rw-r--r--src/shared/mkdir-label.c53
-rw-r--r--src/shared/mkdir.c82
-rw-r--r--src/shared/mkdir.h19
-rw-r--r--src/shared/output-mode.h2
-rw-r--r--src/shared/path-util.c61
-rw-r--r--src/shared/path-util.h18
-rw-r--r--src/shared/polkit.c31
-rw-r--r--src/shared/refcnt.h34
-rw-r--r--src/shared/replace-var.c3
-rw-r--r--src/shared/set.c5
-rw-r--r--src/shared/sleep-config.c92
-rw-r--r--src/shared/socket-util.c8
-rw-r--r--src/shared/socket-util.h2
-rw-r--r--src/shared/specifier.c111
-rw-r--r--src/shared/specifier.h13
-rw-r--r--src/shared/strv.c37
-rw-r--r--src/shared/strv.h1
-rw-r--r--src/shared/test-tables.h51
-rw-r--r--src/shared/time-util.c22
-rw-r--r--src/shared/time-util.h1
-rw-r--r--src/shared/unit-name.c70
-rw-r--r--src/shared/unit-name.h8
-rw-r--r--src/shared/utf8.c278
-rw-r--r--src/shared/utf8.h9
-rw-r--r--src/shared/util.c335
-rw-r--r--src/shared/util.h36
-rw-r--r--src/shared/virt.c13
-rw-r--r--src/stdio-bridge/stdio-bridge.c4
-rw-r--r--src/sysctl/sysctl.c16
-rw-r--r--src/systemctl/systemctl.c1317
-rw-r--r--src/systemd/sd-bus.h36
-rw-r--r--src/systemd/sd-journal.h5
-rw-r--r--src/systemd/sd-login.h8
-rw-r--r--src/systemd/sd-memfd.h58
-rw-r--r--src/systemd/sd-messages.h7
-rw-r--r--src/test/test-boot-timestamps.c98
-rw-r--r--src/test/test-cgroup-util.c131
-rw-r--r--src/test/test-cgroup.c8
-rw-r--r--src/test/test-device-nodes.c55
-rw-r--r--src/test/test-efivars.c47
-rw-r--r--src/test/test-engine.c2
-rw-r--r--src/test/test-fileio.c165
-rw-r--r--src/test/test-hashmap.c36
-rw-r--r--src/test/test-helper.h31
-rw-r--r--src/test/test-id128.c11
-rw-r--r--src/test/test-libudev.c2
-rw-r--r--src/test/test-list.c109
-rw-r--r--src/test/test-path-util.c79
-rw-r--r--src/test/test-sched-prio.c6
-rw-r--r--src/test/test-sleep.c28
-rw-r--r--src/test/test-strv.c138
-rw-r--r--src/test/test-tables.c105
-rw-r--r--src/test/test-unit-file.c25
-rw-r--r--src/test/test-unit-name.c19
-rw-r--r--src/test/test-utf8.c76
-rw-r--r--src/test/test-util.c205
-rw-r--r--src/timedate/timedatectl.c22
-rw-r--r--src/timedate/timedated.c4
-rw-r--r--src/tmpfiles/tmpfiles.c160
-rw-r--r--src/udev/collect/collect.c6
-rw-r--r--src/udev/keymap/95-keyboard-force-release.rules57
-rw-r--r--src/udev/keymap/95-keymap.rules183
-rw-r--r--src/udev/keymap/README.keymap.txt97
-rwxr-xr-xsrc/udev/keymap/check-keymaps.sh38
-rwxr-xr-xsrc/udev/keymap/findkeyboards68
-rwxr-xr-xsrc/udev/keymap/keyboard-force-release.sh22
-rwxr-xr-xsrc/udev/keymap/keyboard-force-release.sh.in22
-rw-r--r--src/udev/keymap/keymap.c453
-rw-r--r--src/udev/udev-builtin-blkid.c3
-rw-r--r--src/udev/udev-builtin-hwdb.c79
-rw-r--r--src/udev/udev-builtin-keyboard.c163
-rw-r--r--src/udev/udev-builtin-net_id.c22
-rw-r--r--src/udev/udev-builtin-path_id.c1
-rw-r--r--src/udev/udev-builtin.c1
-rw-r--r--src/udev/udev-rules.c119
-rw-r--r--src/udev/udev.h7
-rw-r--r--src/udev/udevadm-hwdb.c139
-rw-r--r--src/udev/udevadm-info.c6
-rw-r--r--src/udev/udevd.c79
-rw-r--r--src/update-utmp/update-utmp.c2
-rwxr-xr-xtest/rule-syntax-check.py21
-rwxr-xr-xtest/rules-test.sh13
-rw-r--r--tmpfiles.d/systemd.conf6
-rw-r--r--units/basic.target4
-rw-r--r--units/console-getty.service.m4.in5
-rw-r--r--units/console-shell.service.m4.in5
-rw-r--r--units/emergency.service5
-rw-r--r--units/emergency.service.in5
-rw-r--r--units/getty@.service.m413
-rw-r--r--units/initrd-fs.target2
-rw-r--r--units/initrd-root-fs.target2
-rw-r--r--units/kmod-static-nodes.service.in19
-rw-r--r--units/local-fs.target2
-rw-r--r--units/machine.slice11
-rw-r--r--units/remote-fs.target2
-rw-r--r--units/rescue.service.m4.in6
-rw-r--r--units/serial-getty@.service.m47
-rw-r--r--units/slices.target12
-rw-r--r--units/system.slice (renamed from units/systemd-random-seed-save.service.in)14
-rw-r--r--units/systemd-backlight@.service.in (renamed from units/quotaon.service)14
-rw-r--r--units/systemd-fsck-root.service.in6
-rw-r--r--units/systemd-fsck@.service.in2
-rw-r--r--units/systemd-journald.socket2
-rw-r--r--units/systemd-logind.service.in6
-rw-r--r--units/systemd-machined.service.in20
-rw-r--r--units/systemd-nspawn@.service.in1
-rw-r--r--units/systemd-random-seed.service.in (renamed from units/systemd-random-seed-load.service.in)9
-rw-r--r--units/systemd-sysctl.service.in1
-rw-r--r--units/systemd-tmpfiles-setup-dev.service.in3
-rw-r--r--units/systemd-tmpfiles-setup.service.in3
-rw-r--r--units/systemd-udev-settle.service2
-rw-r--r--units/systemd-udev-settle.service.in2
-rw-r--r--units/systemd-udev-trigger.service2
-rw-r--r--units/systemd-udev-trigger.service.in2
-rw-r--r--units/systemd-udevd-control.socket2
-rw-r--r--units/systemd-udevd-kernel.socket2
-rw-r--r--units/systemd-udevd.service4
-rw-r--r--units/systemd-udevd.service.in4
-rw-r--r--units/systemd-update-utmp-runlevel.service.in8
-rw-r--r--units/systemd-update-utmp-shutdown.service.in19
-rw-r--r--units/systemd-update-utmp.service.in21
-rw-r--r--units/user.slice11
-rw-r--r--units/user@.service.in14
-rw-r--r--units/x-.slice12
1247 files changed, 84513 insertions, 24278 deletions
diff --git a/Makefile-man.am b/Makefile-man.am
index 481423a963..c8a4342396 100644
--- a/Makefile-man.am
+++ b/Makefile-man.am
@@ -52,9 +52,11 @@ MANPAGES += \
man/systemd-cgtop.1 \
man/systemd-delta.1 \
man/systemd-detect-virt.1 \
+ man/systemd-efi-boot-generator.8 \
man/systemd-fsck@.service.8 \
man/systemd-fstab-generator.8 \
man/systemd-getty-generator.8 \
+ man/systemd-gpt-auto-generator.8 \
man/systemd-halt.service.8 \
man/systemd-inhibit.1 \
man/systemd-initctl.service.8 \
@@ -63,6 +65,7 @@ MANPAGES += \
man/systemd-notify.1 \
man/systemd-nspawn.1 \
man/systemd-remount-fs.service.8 \
+ man/systemd-run.1 \
man/systemd-shutdownd.service.8 \
man/systemd-sleep.conf.5 \
man/systemd-suspend.service.8 \
@@ -72,7 +75,7 @@ MANPAGES += \
man/systemd-tmpfiles.8 \
man/systemd-tty-ask-password-agent.1 \
man/systemd-udevd.service.8 \
- man/systemd-update-utmp-runlevel.service.8 \
+ man/systemd-update-utmp.service.8 \
man/systemd.1 \
man/systemd.automount.5 \
man/systemd.device.5 \
@@ -82,7 +85,10 @@ MANPAGES += \
man/systemd.mount.5 \
man/systemd.path.5 \
man/systemd.preset.5 \
+ man/systemd.resource-control.5 \
+ man/systemd.scope.5 \
man/systemd.service.5 \
+ man/systemd.slice.5 \
man/systemd.snapshot.5 \
man/systemd.socket.5 \
man/systemd.special.7 \
@@ -107,6 +113,7 @@ MANPAGES_ALIAS += \
man/SD_ID128_MAKE.3 \
man/SD_INFO.3 \
man/SD_JOURNAL_APPEND.3 \
+ man/SD_JOURNAL_CURRENT_USER.3 \
man/SD_JOURNAL_FOREACH.3 \
man/SD_JOURNAL_FOREACH_BACKWARDS.3 \
man/SD_JOURNAL_FOREACH_DATA.3 \
@@ -116,7 +123,7 @@ MANPAGES_ALIAS += \
man/SD_JOURNAL_NOP.3 \
man/SD_JOURNAL_RUNTIME_ONLY.3 \
man/SD_JOURNAL_SUPPRESS_LOCATION.3 \
- man/SD_JOURNAL_SYSTEM_ONLY.3 \
+ man/SD_JOURNAL_SYSTEM.3 \
man/SD_LISTEN_FDS_START.3 \
man/SD_NOTICE.3 \
man/SD_WARNING.3 \
@@ -146,6 +153,7 @@ MANPAGES_ALIAS += \
man/sd_journal_get_timeout.3 \
man/sd_journal_next_skip.3 \
man/sd_journal_open_directory.3 \
+ man/sd_journal_open_files.3 \
man/sd_journal_perror.3 \
man/sd_journal_previous.3 \
man/sd_journal_previous_skip.3 \
@@ -191,7 +199,7 @@ MANPAGES_ALIAS += \
man/systemd-udevd-control.socket.8 \
man/systemd-udevd-kernel.socket.8 \
man/systemd-udevd.8 \
- man/systemd-update-utmp-shutdown.service.8 \
+ man/systemd-update-utmp-runlevel.service.8 \
man/systemd-update-utmp.8 \
man/systemd-user.conf.5
man/SD_ALERT.3: man/sd-daemon.3
@@ -205,6 +213,7 @@ man/SD_ID128_FORMAT_VAL.3: man/sd-id128.3
man/SD_ID128_MAKE.3: man/sd-id128.3
man/SD_INFO.3: man/sd-daemon.3
man/SD_JOURNAL_APPEND.3: man/sd_journal_get_fd.3
+man/SD_JOURNAL_CURRENT_USER.3: man/sd_journal_open.3
man/SD_JOURNAL_FOREACH.3: man/sd_journal_next.3
man/SD_JOURNAL_FOREACH_BACKWARDS.3: man/sd_journal_next.3
man/SD_JOURNAL_FOREACH_DATA.3: man/sd_journal_get_data.3
@@ -214,7 +223,7 @@ man/SD_JOURNAL_LOCAL_ONLY.3: man/sd_journal_open.3
man/SD_JOURNAL_NOP.3: man/sd_journal_get_fd.3
man/SD_JOURNAL_RUNTIME_ONLY.3: man/sd_journal_open.3
man/SD_JOURNAL_SUPPRESS_LOCATION.3: man/sd_journal_print.3
-man/SD_JOURNAL_SYSTEM_ONLY.3: man/sd_journal_open.3
+man/SD_JOURNAL_SYSTEM.3: man/sd_journal_open.3
man/SD_LISTEN_FDS_START.3: man/sd_listen_fds.3
man/SD_NOTICE.3: man/sd-daemon.3
man/SD_WARNING.3: man/sd-daemon.3
@@ -244,6 +253,7 @@ man/sd_journal_get_monotonic_usec.3: man/sd_journal_get_realtime_usec.3
man/sd_journal_get_timeout.3: man/sd_journal_get_fd.3
man/sd_journal_next_skip.3: man/sd_journal_next.3
man/sd_journal_open_directory.3: man/sd_journal_open.3
+man/sd_journal_open_files.3: man/sd_journal_open.3
man/sd_journal_perror.3: man/sd_journal_print.3
man/sd_journal_previous.3: man/sd_journal_next.3
man/sd_journal_previous_skip.3: man/sd_journal_next.3
@@ -289,8 +299,8 @@ man/systemd-tmpfiles-setup.service.8: man/systemd-tmpfiles.8
man/systemd-udevd-control.socket.8: man/systemd-udevd.service.8
man/systemd-udevd-kernel.socket.8: man/systemd-udevd.service.8
man/systemd-udevd.8: man/systemd-udevd.service.8
-man/systemd-update-utmp-shutdown.service.8: man/systemd-update-utmp-runlevel.service.8
-man/systemd-update-utmp.8: man/systemd-update-utmp-runlevel.service.8
+man/systemd-update-utmp-runlevel.service.8: man/systemd-update-utmp.service.8
+man/systemd-update-utmp.8: man/systemd-update-utmp.service.8
man/systemd-user.conf.5: man/systemd-system.conf.5
man/SD_ALERT.html: man/sd-daemon.html
$(html-alias)
@@ -325,6 +335,9 @@ man/SD_INFO.html: man/sd-daemon.html
man/SD_JOURNAL_APPEND.html: man/sd_journal_get_fd.html
$(html-alias)
+man/SD_JOURNAL_CURRENT_USER.html: man/sd_journal_open.html
+ $(html-alias)
+
man/SD_JOURNAL_FOREACH.html: man/sd_journal_next.html
$(html-alias)
@@ -352,7 +365,7 @@ man/SD_JOURNAL_RUNTIME_ONLY.html: man/sd_journal_open.html
man/SD_JOURNAL_SUPPRESS_LOCATION.html: man/sd_journal_print.html
$(html-alias)
-man/SD_JOURNAL_SYSTEM_ONLY.html: man/sd_journal_open.html
+man/SD_JOURNAL_SYSTEM.html: man/sd_journal_open.html
$(html-alias)
man/SD_LISTEN_FDS_START.html: man/sd_listen_fds.html
@@ -442,6 +455,9 @@ man/sd_journal_next_skip.html: man/sd_journal_next.html
man/sd_journal_open_directory.html: man/sd_journal_open.html
$(html-alias)
+man/sd_journal_open_files.html: man/sd_journal_open.html
+ $(html-alias)
+
man/sd_journal_perror.html: man/sd_journal_print.html
$(html-alias)
@@ -577,16 +593,27 @@ man/systemd-udevd-kernel.socket.html: man/systemd-udevd.service.html
man/systemd-udevd.html: man/systemd-udevd.service.html
$(html-alias)
-man/systemd-update-utmp-shutdown.service.html: man/systemd-update-utmp-runlevel.service.html
+man/systemd-update-utmp-runlevel.service.html: man/systemd-update-utmp.service.html
$(html-alias)
-man/systemd-update-utmp.html: man/systemd-update-utmp-runlevel.service.html
+man/systemd-update-utmp.html: man/systemd-update-utmp.service.html
$(html-alias)
man/systemd-user.conf.html: man/systemd-system.conf.html
$(html-alias)
+if ENABLE_BACKLIGHT
+MANPAGES += \
+ man/systemd-backlight@.service.8
+MANPAGES_ALIAS += \
+ man/systemd-backlight.8
+man/systemd-backlight.8: man/systemd-backlight@.service.8
+man/systemd-backlight.html: man/systemd-backlight@.service.html
+ $(html-alias)
+
+endif
+
if ENABLE_BINFMT
MANPAGES += \
man/binfmt.d.5 \
@@ -644,6 +671,7 @@ endif
if ENABLE_LOGIND
MANPAGES += \
+ man/loginctl.1 \
man/logind.conf.5 \
man/systemd-logind.service.8
MANPAGES_ALIAS += \
@@ -654,6 +682,18 @@ man/systemd-logind.html: man/systemd-logind.service.html
endif
+if ENABLE_MACHINED
+MANPAGES += \
+ man/machinectl.1 \
+ man/systemd-machined.service.8
+MANPAGES_ALIAS += \
+ man/systemd-machined.8
+man/systemd-machined.8: man/systemd-machined.service.8
+man/systemd-machined.html: man/systemd-machined.service.html
+ $(html-alias)
+
+endif
+
if ENABLE_QUOTACHECK
MANPAGES += \
man/systemd-quotacheck.service.8
@@ -667,16 +707,11 @@ endif
if ENABLE_RANDOMSEED
MANPAGES += \
- man/systemd-random-seed-load.service.8
+ man/systemd-random-seed.service.8
MANPAGES_ALIAS += \
- man/systemd-random-seed-save.service.8 \
man/systemd-random-seed.8
-man/systemd-random-seed-save.service.8: man/systemd-random-seed-load.service.8
-man/systemd-random-seed.8: man/systemd-random-seed-load.service.8
-man/systemd-random-seed-save.service.html: man/systemd-random-seed-load.service.html
- $(html-alias)
-
-man/systemd-random-seed.html: man/systemd-random-seed-load.service.html
+man/systemd-random-seed.8: man/systemd-random-seed.service.8
+man/systemd-random-seed.html: man/systemd-random-seed.service.html
$(html-alias)
endif
@@ -785,7 +820,6 @@ endif
if HAVE_PAM
MANPAGES += \
- man/loginctl.1 \
man/pam_systemd.8 \
man/sd-login.3 \
man/sd_get_seats.3 \
@@ -807,6 +841,7 @@ MANPAGES_ALIAS += \
man/sd_login_monitor_unref.3 \
man/sd_pid_get_machine_name.3 \
man/sd_pid_get_owner_uid.3 \
+ man/sd_pid_get_slice.3 \
man/sd_pid_get_unit.3 \
man/sd_pid_get_user_unit.3 \
man/sd_seat_can_multi_session.3 \
@@ -819,6 +854,7 @@ MANPAGES_ALIAS += \
man/sd_session_get_tty.3 \
man/sd_session_get_type.3 \
man/sd_session_get_uid.3 \
+ man/sd_session_get_vt.3 \
man/sd_uid_get_seats.3 \
man/sd_uid_get_sessions.3 \
man/sd_uid_is_on_seat.3 \
@@ -834,6 +870,7 @@ man/sd_login_monitor_get_timeout.3: man/sd_login_monitor_new.3
man/sd_login_monitor_unref.3: man/sd_login_monitor_new.3
man/sd_pid_get_machine_name.3: man/sd_pid_get_session.3
man/sd_pid_get_owner_uid.3: man/sd_pid_get_session.3
+man/sd_pid_get_slice.3: man/sd_pid_get_session.3
man/sd_pid_get_unit.3: man/sd_pid_get_session.3
man/sd_pid_get_user_unit.3: man/sd_pid_get_session.3
man/sd_seat_can_multi_session.3: man/sd_seat_get_active.3
@@ -846,6 +883,7 @@ man/sd_session_get_state.3: man/sd_session_is_active.3
man/sd_session_get_tty.3: man/sd_session_is_active.3
man/sd_session_get_type.3: man/sd_session_is_active.3
man/sd_session_get_uid.3: man/sd_session_is_active.3
+man/sd_session_get_vt.3: man/sd_session_is_active.3
man/sd_uid_get_seats.3: man/sd_uid_get_state.3
man/sd_uid_get_sessions.3: man/sd_uid_get_state.3
man/sd_uid_is_on_seat.3: man/sd_uid_get_state.3
@@ -883,6 +921,9 @@ man/sd_pid_get_machine_name.html: man/sd_pid_get_session.html
man/sd_pid_get_owner_uid.html: man/sd_pid_get_session.html
$(html-alias)
+man/sd_pid_get_slice.html: man/sd_pid_get_session.html
+ $(html-alias)
+
man/sd_pid_get_unit.html: man/sd_pid_get_session.html
$(html-alias)
@@ -919,6 +960,9 @@ man/sd_session_get_type.html: man/sd_session_is_active.html
man/sd_session_get_uid.html: man/sd_session_is_active.html
$(html-alias)
+man/sd_session_get_vt.html: man/sd_session_is_active.html
+ $(html-alias)
+
man/sd_uid_get_seats.html: man/sd_uid_get_state.html
$(html-alias)
diff --git a/Makefile.am b/Makefile.am
index 3a196a65e7..8d9c58758f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,29 +31,32 @@ SUBDIRS = . po
# keep intermediate files
.SECONDARY:
-LIBUDEV_CURRENT=4
-LIBUDEV_REVISION=5
-LIBUDEV_AGE=3
+# Keep the test-suite.log
+.PRECIOUS: $(TEST_SUITE_LOG) Makefile
+
+LIBUDEV_CURRENT=5
+LIBUDEV_REVISION=0
+LIBUDEV_AGE=4
LIBGUDEV_CURRENT=1
LIBGUDEV_REVISION=3
LIBGUDEV_AGE=1
-LIBSYSTEMD_LOGIN_CURRENT=7
+LIBSYSTEMD_LOGIN_CURRENT=9
LIBSYSTEMD_LOGIN_REVISION=1
-LIBSYSTEMD_LOGIN_AGE=7
+LIBSYSTEMD_LOGIN_AGE=9
LIBSYSTEMD_DAEMON_CURRENT=0
LIBSYSTEMD_DAEMON_REVISION=10
LIBSYSTEMD_DAEMON_AGE=0
LIBSYSTEMD_ID128_CURRENT=0
-LIBSYSTEMD_ID128_REVISION=23
+LIBSYSTEMD_ID128_REVISION=26
LIBSYSTEMD_ID128_AGE=0
-LIBSYSTEMD_JOURNAL_CURRENT=10
-LIBSYSTEMD_JOURNAL_REVISION=2
-LIBSYSTEMD_JOURNAL_AGE=10
+LIBSYSTEMD_JOURNAL_CURRENT=11
+LIBSYSTEMD_JOURNAL_REVISION=3
+LIBSYSTEMD_JOURNAL_AGE=11
# Dirs of external packages
dbuspolicydir=@dbuspolicydir@
@@ -61,11 +64,13 @@ dbussessionservicedir=@dbussessionservicedir@
dbussystemservicedir=@dbussystemservicedir@
dbusinterfacedir=@dbusinterfacedir@
pamlibdir=@pamlibdir@
+pamconfdir=@pamconfdir@
pkgconfigdatadir=$(datadir)/pkgconfig
pkgconfiglibdir=$(libdir)/pkgconfig
polkitpolicydir=$(datadir)/polkit-1/actions
bashcompletiondir=@bashcompletiondir@
-rpmmacrosdir=$(sysconfdir)/rpm
+zshcompletiondir=@zshcompletiondir@
+rpmmacrosdir=$(prefix)/lib/rpm/macros.d
sysvinitdir=$(SYSTEM_SYSVINIT_PATH)
sysvrcnddir=$(SYSTEM_SYSVRCND_PATH)
varlogdir=$(localstatedir)/log
@@ -78,9 +83,9 @@ userunitdir=$(prefix)/lib/systemd/user
userpresetdir=$(prefix)/lib/systemd/user-preset
tmpfilesdir=$(prefix)/lib/tmpfiles.d
sysctldir=$(prefix)/lib/sysctl.d
-usergeneratordir=$(prefix)/lib/systemd/user-generators
pkgincludedir=$(includedir)/systemd
systemgeneratordir=$(rootlibexecdir)/system-generators
+usergeneratordir=$(prefix)/lib/systemd/user-generators
systemshutdowndir=$(rootlibexecdir)/system-shutdown
systemsleepdir=$(rootlibexecdir)/system-sleep
systemunitdir=$(rootprefix)/lib/systemd/system
@@ -154,7 +159,7 @@ AM_CPPFLAGS = \
-DSYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH=\"$(rootbindir)/systemd-tty-ask-password-agent\" \
-DSYSTEMD_STDIO_BRIDGE_BINARY_PATH=\"$(bindir)/systemd-stdio-bridge\" \
-DROOTPREFIX=\"$(rootprefix)\" \
- -DRANDOM_SEED=\"$(localstatedir)/lib/random-seed\" \
+ -DRANDOM_SEED=\"$(localstatedir)/lib/systemd/random-seed\" \
-DSYSTEMD_CRYPTSETUP_PATH=\"$(rootlibexecdir)/systemd-cryptsetup\" \
-DSYSTEM_GENERATOR_PATH=\"$(systemgeneratordir)\" \
-DUSER_GENERATOR_PATH=\"$(usergeneratordir)\" \
@@ -165,6 +170,7 @@ AM_CPPFLAGS = \
-DUDEVLIBEXECDIR=\"$(udevlibexecdir)\" \
-DPOLKIT_AGENT_BINARY_PATH=\"$(bindir)/pkttyagent\" \
-DQUOTACHECK=\"$(QUOTACHECK)\" \
+ -DKEXEC=\"$(KEXEC)\" \
-I $(top_srcdir)/src \
-I $(top_srcdir)/src/shared \
-I $(top_srcdir)/src/login \
@@ -174,6 +180,7 @@ AM_CPPFLAGS = \
-I $(top_srcdir)/src/core \
-I $(top_srcdir)/src/libudev \
-I $(top_srcdir)/src/udev \
+ -I $(top_builddir)/src/udev \
-I $(top_srcdir)/src/libsystemd-bus \
$(OUR_CPPFLAGS)
@@ -222,6 +229,7 @@ install-target-wants-hook:
what="$(SYSINIT_TARGET_WANTS)" && wants=sysinit.target && $(add-wants)
what="$(SOCKETS_TARGET_WANTS)" && wants=sockets.target && $(add-wants)
what="$(TIMERS_TARGET_WANTS)" && wants=timers.target && $(add-wants)
+ what="$(SLICES_TARGET_WANTS)" && wants=slices.target && $(add-wants)
define add-wants
[ -z "$$what" ] || ( \
@@ -280,7 +288,6 @@ rootbin_PROGRAMS = \
systemd-notify \
systemd-ask-password \
systemd-tty-ask-password-agent \
- systemd-tmpfiles \
systemd-machine-id-setup
bin_PROGRAMS = \
@@ -290,7 +297,8 @@ bin_PROGRAMS = \
systemd-nspawn \
systemd-detect-virt \
systemd-delta \
- systemd-analyze
+ systemd-analyze \
+ systemd-run
dist_bin_SCRIPTS = \
src/kernel-install/kernel-install
@@ -309,7 +317,6 @@ rootlibexec_PROGRAMS = \
systemd-remount-fs \
systemd-reply-password \
systemd-fsck \
- systemd-timestamp \
systemd-ac-power \
systemd-sysctl \
systemd-sleep
@@ -334,21 +341,24 @@ dist_bashcompletion_DATA = \
shell-completion/bash/journalctl \
shell-completion/bash/systemctl \
shell-completion/bash/systemd-analyze \
- shell-completion/bash/udevadm
-
-dist_tmpfiles_DATA = \
- tmpfiles.d/systemd.conf \
- tmpfiles.d/tmp.conf \
- tmpfiles.d/x11.conf
+ shell-completion/bash/systemd-run \
+ shell-completion/bash/udevadm \
+ shell-completion/bash/kernel-install
+
+dist_zshcompletion_DATA = \
+ shell-completion/zsh/_systemctl \
+ shell-completion/zsh/_journalctl \
+ shell-completion/zsh/_udevadm \
+ shell-completion/zsh/_kernel-install \
+ shell-completion/zsh/_systemd-nspawn \
+ shell-completion/zsh/_systemd-analyze \
+ shell-completion/zsh/_sd_hosts_or_user_at_host \
+ shell-completion/zsh/_systemd-delta \
+ shell-completion/zsh/_systemd
dist_sysctl_DATA = \
sysctl.d/50-default.conf
-if HAVE_SYSV_COMPAT
-dist_tmpfiles_DATA += \
- tmpfiles.d/legacy.conf
-endif
-
dist_systemunit_DATA = \
units/graphical.target \
units/multi-user.target \
@@ -387,6 +397,9 @@ dist_systemunit_DATA = \
units/paths.target \
units/suspend.target \
units/swap.target \
+ units/slices.target \
+ units/system.slice \
+ units/x-.slice \
units/systemd-initctl.socket \
units/systemd-shutdownd.socket \
units/syslog.socket \
@@ -400,8 +413,6 @@ dist_systemunit_DATA = \
units/sound.target \
units/bluetooth.target \
units/smartcard.target \
- units/systemd-tmpfiles-clean.timer \
- units/quotaon.service \
units/systemd-ask-password-wall.path \
units/systemd-ask-password-console.path \
units/systemd-udevd-control.socket \
@@ -417,11 +428,8 @@ nodist_systemunit_DATA = \
units/systemd-initctl.service \
units/systemd-shutdownd.service \
units/systemd-remount-fs.service \
+ units/systemd-update-utmp.service \
units/systemd-update-utmp-runlevel.service \
- units/systemd-update-utmp-shutdown.service \
- units/systemd-tmpfiles-setup-dev.service \
- units/systemd-tmpfiles-setup.service \
- units/systemd-tmpfiles-clean.service \
units/systemd-ask-password-wall.service \
units/systemd-ask-password-console.service \
units/systemd-sysctl.service \
@@ -463,11 +471,8 @@ EXTRA_DIST += \
units/systemd-initctl.service.in \
units/systemd-shutdownd.service.in \
units/systemd-remount-fs.service.in \
+ units/systemd-update-utmp.service.in \
units/systemd-update-utmp-runlevel.service.in \
- units/systemd-update-utmp-shutdown.service.in \
- units/systemd-tmpfiles-setup-dev.service.in \
- units/systemd-tmpfiles-setup.service.in \
- units/systemd-tmpfiles-clean.service.in \
units/systemd-ask-password-wall.service.in \
units/systemd-ask-password-console.service.in \
units/systemd-sysctl.service.in \
@@ -513,6 +518,17 @@ EXTRA_DIST += \
units/rc-local.service.in \
units/halt-local.service.in
+# automake is broken and can't handle files with a dash in front
+# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14728#8
+units-install-hook:
+ mv $(DESTDIR)$(systemunitdir)/x-.slice $(DESTDIR)/$(systemunitdir)/-.slice
+
+units-uninstall-hook:
+ rm -f $(DESTDIR)/$(systemunitdir)/-.slice
+
+INSTALL_DATA_HOOKS += units-install-hook
+UNINSTALL_DATA_HOOKS += units-uninstall-hook
+
dist_doc_DATA = \
README \
NEWS \
@@ -530,6 +546,9 @@ MANPAGES_ALIAS =
include Makefile-man.am
+.PHONY: man
+man: $(MANPAGES) $(MANPAGES_ALIAS) $(HTML_FILES) $(HTML_ALIAS)
+
XML_FILES = \
${patsubst %.1,%.xml,${patsubst %.3,%.xml,${patsubst %.5,%.xml,${patsubst %.7,%.xml,${patsubst %.8,%.xml,$(MANPAGES)}}}}}
HTML_FILES = \
@@ -605,7 +624,7 @@ EXTRA_DIST += \
$(XML_FILES) \
$(HTML_FILES) \
$(HTML_ALIAS) \
- $(dist_MANS) \
+ $(man_MANS) \
make-man-index.py \
make-directive-index.py \
xml_helper.py
@@ -623,6 +642,8 @@ libsystemd_shared_la_SOURCES = \
src/shared/list.h \
src/shared/macro.h \
src/shared/def.h \
+ src/shared/device-nodes.c \
+ src/shared/device-nodes.h \
src/shared/sparse-endian.h \
src/shared/util.c \
src/shared/util.h \
@@ -695,7 +716,14 @@ libsystemd_shared_la_SOURCES = \
src/shared/fileio.h \
src/shared/output-mode.h \
src/shared/MurmurHash3.c \
- src/shared/MurmurHash3.h
+ src/shared/MurmurHash3.h \
+ src/shared/acpi-fpdt.h \
+ src/shared/acpi-fpdt.c \
+ src/shared/boot-timestamps.h \
+ src/shared/boot-timestamps.c \
+ src/shared/refcnt.h \
+ src/shared/mkdir.c \
+ src/shared/mkdir.h
#-------------------------------------------------------------------------------
noinst_LTLIBRARIES += \
@@ -739,14 +767,12 @@ noinst_LTLIBRARIES += \
libsystemd-label.la
libsystemd_label_la_SOURCES = \
- src/shared/cgroup-label.c \
src/shared/socket-label.c \
src/shared/label.c \
src/shared/label.h \
src/shared/selinux-util.c \
src/shared/selinux-util.h \
- src/shared/mkdir.c \
- src/shared/mkdir.h \
+ src/shared/mkdir-label.c \
src/shared/ask-password-api.c \
src/shared/ask-password-api.h \
src/shared/fileio-label.c \
@@ -858,6 +884,10 @@ libsystemd_core_la_SOURCES = \
src/core/timer.h \
src/core/path.c \
src/core/path.h \
+ src/core/slice.c \
+ src/core/slice.h \
+ src/core/scope.c \
+ src/core/scope.h \
src/core/load-dropin.c \
src/core/load-dropin.h \
src/core/execute.c \
@@ -890,12 +920,18 @@ libsystemd_core_la_SOURCES = \
src/core/dbus-snapshot.h \
src/core/dbus-device.c \
src/core/dbus-device.h \
+ src/core/dbus-path.c \
+ src/core/dbus-path.h \
+ src/core/dbus-slice.c \
+ src/core/dbus-slice.h \
+ src/core/dbus-scope.c \
+ src/core/dbus-scope.h \
src/core/dbus-execute.c \
src/core/dbus-execute.h \
src/core/dbus-kill.c \
src/core/dbus-kill.h \
- src/core/dbus-path.c \
- src/core/dbus-path.h \
+ src/core/dbus-cgroup.c \
+ src/core/dbus-cgroup.h \
src/core/cgroup.c \
src/core/cgroup.h \
src/core/selinux-access.c \
@@ -922,10 +958,6 @@ libsystemd_core_la_SOURCES = \
src/core/namespace.h \
src/core/tcpwrap.c \
src/core/tcpwrap.h \
- src/core/cgroup-attr.c \
- src/core/cgroup-attr.h \
- src/core/cgroup-semantics.c \
- src/core/cgroup-semantics.h \
src/core/securebits.h \
src/core/initreq.h \
src/core/special.h \
@@ -940,8 +972,8 @@ libsystemd_core_la_SOURCES = \
src/core/syscall-list.h \
src/core/audit-fd.c \
src/core/audit-fd.h \
- src/core/sync.c \
- src/core/sync.h
+ src/core/async.c \
+ src/core/async.h
if HAVE_KMOD
libsystemd_core_la_SOURCES += \
@@ -1000,7 +1032,7 @@ BUILT_SOURCES += \
src/core/syscall-list.txt: Makefile
$(AM_V_at)$(MKDIR_P) $(dir $@)
- $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include sys/syscall.h - < /dev/null | $(AWK) '/^#define[ \t]+__NR_[^ ]+[ \t]+[0-9(]/ { sub(/__NR_/, "", $$2); print $$2; }' > $@
+ $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include sys/syscall.h - < /dev/null | $(AWK) '/^#define[ \t]+__NR_[^ ]+[ \t]+[0-9(]/ { sub(/__NR_/, "", $$2); if ($$2 !~ /SYSCALL_BASE/) print $$2; }' > $@
src/core/syscall-from-name.gperf: src/core/syscall-list.txt Makefile
$(AM_V_at)$(MKDIR_P) $(dir $@)
@@ -1096,6 +1128,7 @@ tests += \
test-strxcpyx \
test-unit-name \
test-unit-file \
+ test-utf8 \
test-util \
test-date \
test-sleep \
@@ -1107,7 +1140,10 @@ tests += \
test-prioq \
test-fileio \
test-time \
- test-hashmap
+ test-hashmap \
+ test-list \
+ test-tables \
+ test-device-nodes
EXTRA_DIST += \
test/sched_idle_bad.service \
@@ -1116,6 +1152,15 @@ EXTRA_DIST += \
test/sched_rr_ok.service \
test/sched_rr_change.service
+EXTRA_DIST += \
+ src/test/test-helper.h
+
+test_device_nodes_SOURCES = \
+ src/test/test-device-nodes.c
+
+test_device_nodes_LDADD = \
+ libsystemd-shared.la
+
test_engine_SOURCES = \
src/test/test-engine.c
@@ -1145,6 +1190,10 @@ test_ns_SOURCES = \
test_ns_LDADD = \
libsystemd-core.la
+test_ns_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
test_loopback_SOURCES = \
src/test/test-loopback.c
@@ -1160,12 +1209,12 @@ test_hostname_LDADD = \
if ENABLE_EFI
manual_tests += \
- test-efivars
+ test-boot-timestamp
-test_efivars_SOURCES = \
- src/test/test-efivars.c
+test_boot_timestamp_SOURCES = \
+ src/test/test-boot-timestamps.c
-test_efivars_LDADD = \
+test_boot_timestamp_LDADD = \
libsystemd-shared.la
endif
@@ -1189,6 +1238,15 @@ test_unit_file_CFLAGS = \
test_unit_file_LDADD = \
libsystemd-core.la
+test_utf8_SOURCES = \
+ src/test/test-utf8.c
+
+test_utf8_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_utf8_LDADD = \
+ libsystemd-shared.la
+
test_util_SOURCES = \
src/test/test-util.c
@@ -1207,6 +1265,27 @@ test_hashmap_CFLAGS = \
test_hashmap_LDADD = \
libsystemd-core.la
+test_list_SOURCES = \
+ src/test/test-list.c
+
+test_list_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_list_LDADD = \
+ libsystemd-core.la
+
+test_tables_SOURCES = \
+ src/test/test-tables.c \
+ src/shared/test-tables.h
+
+test_tables_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+test_tables_LDADD = \
+ libsystemd-core.la \
+ libsystemd-logs.la
+
test_prioq_SOURCES = \
src/test/test-prioq.c
@@ -1289,7 +1368,8 @@ test_cgroup_util_SOURCES = \
test_cgroup_util_LDADD = \
libsystemd-label.la \
- libsystemd-shared.la
+ libsystemd-shared.la \
+ libsystemd-daemon.la
test_env_replace_SOURCES = \
src/test/test-env-replace.c
@@ -1355,6 +1435,44 @@ test_sched_prio_LDADD = \
libsystemd-daemon.la
# ------------------------------------------------------------------------------
+## .PHONY so it always rebuilds it
+.PHONY: coverage lcov-run lcov-report
+
+# run lcov from scratch, always
+coverage:
+ $(MAKE) lcov-run
+ $(MAKE) lcov-report
+
+coverage_dir = coverage
+coverage_opts = --base-directory $(srcdir) --directory $(builddir) --rc 'geninfo_adjust_src_path=$(abspath $(srcdir))=>$(abspath $(builddir))'
+
+if ENABLE_COVERAGE
+# reset run coverage tests
+lcov-run:
+ @rm -rf $(coverage_dir)
+ lcov $(coverage_opts) --zerocounters
+ -$(MAKE) check
+
+# generate report based on current coverage data
+lcov-report:
+ $(MKDIR_P) $(coverage_dir)
+ lcov $(coverage_opts) --compat-libtool --capture --no-external \
+ | sed 's|$(abspath $(builddir))|$(abspath $(srcdir))|' > $(coverage_dir)/.lcov.info
+ genhtml -t "systemd test coverage" -o $(coverage_dir) $(coverage_dir)/.lcov.info
+ @echo "Coverage report generated in $(abs_builddir)/$(coverage_dir)/index.html"
+
+# lcov doesn't work properly with vpath builds, make sure that bad
+# output is not uploaded by mistake.
+coverage-sync: coverage
+ test "$(builddir)" = "$(srcdir)"
+ rsync -rlv --delete --omit-dir-times coverage/ $(www_target)/coverage
+
+else
+lcov-run lcov-report:
+ echo "Need to reconfigure with --enable-coverage"
+endif
+
+# ------------------------------------------------------------------------------
systemd_initctl_SOURCES = \
src/initctl/initctl.c
@@ -1430,19 +1548,72 @@ nodist_systemunit_DATA += \
SYSINIT_TARGET_WANTS += \
systemd-modules-load.service
+if ENABLE_TMPFILES
+nodist_systemunit_DATA += \
+ units/kmod-static-nodes.service
+
+SYSINIT_TARGET_WANTS += \
+ kmod-static-nodes.service
+endif
endif
EXTRA_DIST += \
- units/systemd-modules-load.service.in
+ units/systemd-modules-load.service.in \
+ units/kmod-static-nodes.service.in
# ------------------------------------------------------------------------------
+if ENABLE_TMPFILES
systemd_tmpfiles_SOURCES = \
- src/tmpfiles/tmpfiles.c
+ src/tmpfiles/tmpfiles.c \
+ src/shared/specifier.c \
+ src/shared/specifier.h
systemd_tmpfiles_LDADD = \
libsystemd-label.la \
libsystemd-shared.la \
- libsystemd-capability.la
+ libsystemd-capability.la \
+ libsystemd-id128-internal.la
+
+rootbin_PROGRAMS += \
+ systemd-tmpfiles
+
+dist_systemunit_DATA += \
+ units/systemd-tmpfiles-clean.timer
+
+nodist_systemunit_DATA += \
+ units/systemd-tmpfiles-setup-dev.service \
+ units/systemd-tmpfiles-setup.service \
+ units/systemd-tmpfiles-clean.service
+
+dist_tmpfiles_DATA = \
+ tmpfiles.d/systemd.conf \
+ tmpfiles.d/tmp.conf \
+ tmpfiles.d/x11.conf
+
+if HAVE_SYSV_COMPAT
+dist_tmpfiles_DATA += \
+ tmpfiles.d/legacy.conf
+endif
+
+SYSINIT_TARGET_WANTS += \
+ systemd-tmpfiles-setup-dev.service \
+ systemd-tmpfiles-setup.service
+
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_systemd-tmpfiles
+
+TIMERS_TARGET_WANTS += \
+ systemd-tmpfiles-clean.timer
+
+INSTALL_DIRS += \
+ $(tmpfilesdir) \
+ $(sysconfdir)/tmpfiles.d
+endif
+
+EXTRA_DIST += \
+ units/systemd-tmpfiles-setup-dev.service.in \
+ units/systemd-tmpfiles-setup.service.in \
+ units/systemd-tmpfiles-clean.service.in
# ------------------------------------------------------------------------------
systemd_machine_id_setup_SOURCES = \
@@ -1483,13 +1654,6 @@ systemd_fsck_LDADD = \
libudev.la
# ------------------------------------------------------------------------------
-systemd_timestamp_SOURCES = \
- src/timestamp/timestamp.c
-
-systemd_timestamp_LDADD = \
- libsystemd-shared.la
-
-# ------------------------------------------------------------------------------
systemd_ac_power_SOURCES = \
src/ac-power/ac-power.c
@@ -1542,8 +1706,8 @@ systemd_system_update_generator_LDADD = \
libsystemd-label.la \
libsystemd-shared.la
-# ------------------------------------------------------------------------------
if ENABLE_EFI
+# ------------------------------------------------------------------------------
systemgenerator_PROGRAMS += \
systemd-efi-boot-generator
@@ -1553,6 +1717,42 @@ systemd_efi_boot_generator_SOURCES = \
systemd_efi_boot_generator_LDADD = \
libsystemd-label.la \
libsystemd-shared.la
+
+# ------------------------------------------------------------------------------
+bootctl_SOURCES = \
+ src/boot/boot.h \
+ src/boot/boot-loader.h \
+ src/boot/bootctl.c \
+ src/boot/boot-loader.c \
+ src/boot/boot-efi.c
+
+bootctl_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-id128.la \
+ libsystemd-daemon.la
+
+bin_PROGRAMS += \
+ bootctl
+endif
+
+# ------------------------------------------------------------------------------
+if HAVE_BLKID
+systemgenerator_PROGRAMS += \
+ systemd-gpt-auto-generator
+
+systemd_gpt_auto_generator_SOURCES = \
+ src/gpt-auto-generator/gpt-auto-generator.c
+
+systemd_gpt_auto_generator_LDADD = \
+ libsystemd-label.la \
+ libsystemd-shared.la \
+ libsystemd-id128-internal.la \
+ libudev-private.la \
+ $(BLKID_LIBS)
+
+systemd_gpt_auto_generator_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(BLKID_CFLAGS)
endif
# ------------------------------------------------------------------------------
@@ -1652,7 +1852,20 @@ systemd_nspawn_LDADD = \
libsystemd-capability.la \
libsystemd-shared.la \
libsystemd-daemon.la \
- libsystemd-id128-internal.la
+ libsystemd-id128-internal.la \
+ libsystemd-bus.la
+
+# ------------------------------------------------------------------------------
+systemd_run_SOURCES = \
+ src/run/run.c
+
+systemd_run_LDADD = \
+ libsystemd-label.la \
+ libsystemd-capability.la \
+ libsystemd-shared.la \
+ libsystemd-daemon.la \
+ libsystemd-id128-internal.la \
+ libsystemd-bus.la
# ------------------------------------------------------------------------------
systemd_stdio_bridge_SOURCES = \
@@ -1688,6 +1901,9 @@ libsystemd_daemon_la_LDFLAGS = \
-version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
-Wl,--version-script=$(top_srcdir)/src/libsystemd-daemon/libsystemd-daemon.sym
+libsystemd_daemon_la_LIBADD = \
+ $(RT_LIBS)
+
pkginclude_HEADERS += \
src/systemd/sd-daemon.h
@@ -1718,6 +1934,7 @@ EXTRA_DIST += \
libsystemd_bus_la_SOURCES = \
src/systemd/sd-bus.h \
src/systemd/sd-bus-protocol.h \
+ src/systemd/sd-memfd.h \
src/libsystemd-bus/sd-bus.c \
src/libsystemd-bus/bus-control.c \
src/libsystemd-bus/bus-control.h \
@@ -1739,13 +1956,18 @@ libsystemd_bus_la_SOURCES = \
src/libsystemd-bus/bus-match.h \
src/libsystemd-bus/bus-bloom.c \
src/libsystemd-bus/bus-bloom.h \
- src/libsystemd-bus/kdbus.h
+ src/libsystemd-bus/kdbus.h \
+ src/libsystemd-bus/sd-memfd.c
libsystemd_bus_la_LIBADD = \
libsystemd-id128-internal.la \
libsystemd-shared.la \
libsystemd-daemon.la
+libsystemd_bus_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ -pthread
+
noinst_LTLIBRARIES += \
libsystemd-bus.la
@@ -1755,7 +1977,11 @@ tests += \
test-bus-chat \
test-bus-server \
test-bus-match \
- test-bus-kernel
+ test-bus-kernel \
+ test-bus-kernel-bloom \
+ test-bus-kernel-benchmark \
+ test-bus-memfd \
+ test-bus-zero-copy
noinst_PROGRAMS += \
busctl
@@ -1827,6 +2053,48 @@ test_bus_kernel_LDADD = \
libsystemd-bus.la \
libsystemd-id128-internal.la
+test_bus_kernel_bloom_SOURCES = \
+ src/libsystemd-bus/test-bus-kernel-bloom.c
+
+test_bus_kernel_bloom_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_kernel_bloom_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la \
+ libsystemd-id128-internal.la
+
+test_bus_kernel_benchmark_SOURCES = \
+ src/libsystemd-bus/test-bus-kernel-benchmark.c
+
+test_bus_kernel_benchmark_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_kernel_benchmark_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la \
+ libsystemd-id128-internal.la
+
+test_bus_memfd_SOURCES = \
+ src/libsystemd-bus/test-bus-memfd.c
+
+test_bus_memfd_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_memfd_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la
+
+test_bus_zero_copy_SOURCES = \
+ src/libsystemd-bus/test-bus-zero-copy.c
+
+test_bus_zero_copy_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_zero_copy_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la
+
busctl_SOURCES = \
src/libsystemd-bus/busctl.c
@@ -1873,7 +2141,9 @@ libudev_la_LDFLAGS = \
libudev_la_LIBADD = \
libsystemd-shared.la \
+ libsystemd-label.la \
libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
libsystemd-id128-internal.la
pkgconfiglib_DATA += \
@@ -1931,6 +2201,7 @@ dist_udevrules_DATA += \
rules/99-systemd.rules \
rules/42-usb-hid-pm.rules \
rules/50-udev-default.rules \
+ rules/60-keyboard.rules \
rules/60-persistent-storage-tape.rules \
rules/60-persistent-serial.rules \
rules/60-persistent-input.rules \
@@ -1950,7 +2221,8 @@ dist_udevhwdb_DATA = \
hwdb/20-usb-classes.hwdb \
hwdb/20-bluetooth-vendor-product.hwdb \
hwdb/20-acpi-vendor.hwdb \
- hwdb/20-OUI.hwdb
+ hwdb/20-OUI.hwdb \
+ hwdb/60-keyboard.hwdb
udevconfdir = $(sysconfdir)/udev
dist_udevconf_DATA = \
@@ -1994,6 +2266,19 @@ rootlibexec_PROGRAMS += \
noinst_LTLIBRARIES += \
libudev-core.la
+src/udev/keyboard-keys.txt: Makefile
+ $(AM_V_at)$(MKDIR_P) $(dir $@)
+ $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include linux/input.h - < /dev/null | $(AWK) '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
+
+src/udev/keyboard-keys-from-name.gperf: src/udev/keyboard-keys.txt Makefile
+ $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print tolower(substr($$1 ,5)) ", " $$1 }' < $< > $@
+
+src/udev/keyboard-keys-from-name.h: src/udev/keyboard-keys-from-name.gperf Makefile
+ $(AM_V_GPERF)$(GPERF) -L ANSI-C -t -N keyboard_lookup_key -H hash_key_name -p -C < $< > $@
+
+src/udev/keyboard-keys-to-name.h: src/udev/keyboard-keys.txt Makefile
+ $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
+
libudev_core_la_SOURCES = \
src/udev/udev.h \
src/udev/udev-event.c \
@@ -2005,10 +2290,22 @@ libudev_core_la_SOURCES = \
src/udev/udev-builtin-btrfs.c \
src/udev/udev-builtin-hwdb.c \
src/udev/udev-builtin-input_id.c \
+ src/udev/udev-builtin-keyboard.c \
src/udev/udev-builtin-net_id.c \
src/udev/udev-builtin-path_id.c \
src/udev/udev-builtin-usb_id.c
+nodist_libudev_core_la_SOURCES = \
+ src/udev/keyboard-keys-from-name.h \
+ src/udev/keyboard-keys-to-name.h
+
+BUILT_SOURCES += \
+ $(nodist_libudev_core_la_SOURCES)
+
+CLEANFILES += \
+ src/udev/keyboard-keys-from-name.gperf \
+ src/udev/keyboard-keys.txt
+
libudev_core_la_CFLAGS = \
$(AM_CFLAGS) \
$(BLKID_CFLAGS) \
@@ -2018,6 +2315,7 @@ libudev_core_la_LIBADD = \
libudev-private.la \
libsystemd-label.la \
libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
libsystemd-shared.la \
$(BLKID_LIBS) \
$(KMOD_LIBS)
@@ -2051,7 +2349,10 @@ if HAVE_ACL
libudev_core_la_SOURCES += \
src/udev/udev-builtin-uaccess.c \
src/login/logind-acl.c \
- src/login/sd-login.c
+ src/login/sd-login.c \
+ src/systemd/sd-login.h \
+ src/login/login-shared.c \
+ src/login/login-shared.h
libudev_core_la_LIBADD += \
libsystemd-acl.la
@@ -2374,138 +2675,6 @@ EXTRA_DIST += \
src/gudev/seed-example.js
# ------------------------------------------------------------------------------
-if ENABLE_KEYMAP
-keymap_SOURCES = \
- src/udev/keymap/keymap.c
-
-keymap_CPPFLAGS = \
- $(AM_CPPFLAGS) -I src/udev/keymap
-
-keymap_LDADD = \
- libsystemd-shared.la
-
-nodist_keymap_SOURCES = \
- src/udev/keymap/keys-from-name.h \
- src/udev/keymap/keys-to-name.h
-
-BUILT_SOURCES += \
- $(nodist_keymap_SOURCES)
-
-udevlibexec_PROGRAMS += \
- keymap
-
-dist_doc_DATA += \
- src/udev/keymap/README.keymap.txt
-
-dist_udevrules_DATA += \
- src/udev/keymap/95-keymap.rules \
- src/udev/keymap/95-keyboard-force-release.rules
-
-dist_udevhome_SCRIPTS = \
- src/udev/keymap/findkeyboards \
- src/udev/keymap/keyboard-force-release.sh
-
-TESTS += \
- src/udev/keymap/check-keymaps.sh
-
-CLEANFILES += \
- src/udev/keymap/keys.txt \
- src/udev/keymap/keys-from-name.gperf \
- src/udev/keymap/keyboard-force-release.sh
-
-udevkeymapdir = $(udevlibexecdir)/keymaps
-dist_udevkeymap_DATA = \
- keymaps/acer \
- keymaps/acer-aspire_5720 \
- keymaps/acer-aspire_8930 \
- keymaps/acer-aspire_5920g \
- keymaps/acer-aspire_6920 \
- keymaps/acer-travelmate_c300 \
- keymaps/asus \
- keymaps/compaq-e_evo \
- keymaps/dell \
- keymaps/dell-latitude-xt2 \
- keymaps/everex-xt5000 \
- keymaps/fujitsu-amilo_li_2732 \
- keymaps/fujitsu-amilo_pa_2548 \
- keymaps/fujitsu-amilo_pro_edition_v3505 \
- keymaps/fujitsu-amilo_pro_v3205 \
- keymaps/fujitsu-amilo_si_1520 \
- keymaps/fujitsu-esprimo_mobile_v5 \
- keymaps/fujitsu-esprimo_mobile_v6 \
- keymaps/genius-slimstar-320 \
- keymaps/hewlett-packard \
- keymaps/hewlett-packard-2510p_2530p \
- keymaps/hewlett-packard-compaq_elitebook \
- keymaps/hewlett-packard-pavilion \
- keymaps/hewlett-packard-presario-2100 \
- keymaps/hewlett-packard-tablet \
- keymaps/hewlett-packard-tx2 \
- keymaps/hewlett-packard_elitebook-8440p \
- keymaps/hewlett-packard_elitebook-8460p \
- keymaps/hewlett-packard-hdx9494nr \
- keymaps/ibm-thinkpad-usb-keyboard-trackpoint \
- keymaps/inventec-symphony_6.0_7.0 \
- keymaps/lenovo-3000 \
- keymaps/lenovo-ideapad \
- keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \
- keymaps/lenovo-thinkpad_x6_tablet \
- keymaps/lenovo-thinkpad_x200_tablet \
- keymaps/lg-x110 \
- keymaps/logitech-wave \
- keymaps/logitech-wave-cordless \
- keymaps/logitech-wave-pro-cordless \
- keymaps/maxdata-pro_7000 \
- keymaps/medion-fid2060 \
- keymaps/medionnb-a555 \
- keymaps/micro-star \
- keymaps/module-asus-w3j \
- keymaps/module-ibm \
- keymaps/module-lenovo \
- keymaps/module-sony \
- keymaps/module-sony-old \
- keymaps/module-sony-vgn \
- keymaps/module-sony-vpc \
- keymaps/olpc-xo \
- keymaps/onkyo \
- keymaps/oqo-model2 \
- keymaps/samsung-other \
- keymaps/samsung-series-9 \
- keymaps/samsung-sq1us \
- keymaps/samsung-sx20s \
- keymaps/toshiba-satellite_a100 \
- keymaps/toshiba-satellite_a110 \
- keymaps/toshiba-satellite_m30x \
- keymaps/zepto-znote
-
-udevkeymapforcereldir = $(udevlibexecdir)/keymaps/force-release
-dist_udevkeymapforcerel_DATA = \
- keymaps-force-release/dell-touchpad \
- keymaps-force-release/dell-xps \
- keymaps-force-release/hp-other \
- keymaps-force-release/samsung-other \
- keymaps-force-release/samsung-series-9 \
- keymaps-force-release/common-volume-keys
-
-src/udev/keymap/keys.txt: Makefile
- $(AM_V_at)$(MKDIR_P) $(dir $@)
- $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include linux/input.h - < /dev/null | $(AWK) '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
-
-src/udev/keymap/keys-from-name.gperf: src/udev/keymap/keys.txt Makefile
- $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@
-
-src/udev/keymap/keys-from-name.h: src/udev/keymap/keys-from-name.gperf Makefile
- $(AM_V_GPERF)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@
-
-src/udev/keymap/keys-to-name.h: src/udev/keymap/keys.txt Makefile
- $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
-endif
-
-EXTRA_DIST += \
- src/udev/keymap/check-keymaps.sh \
- src/udev/keymap/keyboard-force-release.sh.in
-
-# ------------------------------------------------------------------------------
mtd_probe_SOURCES = \
src/udev/mtd_probe/mtd_probe.c \
src/udev/mtd_probe/mtd_probe.h \
@@ -2535,7 +2704,9 @@ libsystemd_id128_la_LDFLAGS = \
libsystemd_id128_la_LIBADD = \
libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-label.la \
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS)
libsystemd_id128_internal_la_SOURCES = \
$(libsystemd_id128_la_SOURCES)
@@ -2545,7 +2716,8 @@ test_id128_SOURCES = \
test_id128_LDADD = \
libsystemd-shared.la \
- libsystemd-id128-internal.la
+ libsystemd-id128-internal.la \
+ libsystemd-daemon.la
tests += \
test-id128
@@ -2682,6 +2854,15 @@ test_journal_stream_LDADD = \
libsystemd-journal-internal.la \
libsystemd-id128-internal.la
+test_journal_init_SOURCES = \
+ src/journal/test-journal-init.c
+
+test_journal_init_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
+ libsystemd-journal.la
+
test_journal_verify_SOURCES = \
src/journal/test-journal-verify.c
@@ -2690,6 +2871,14 @@ test_journal_verify_LDADD = \
libsystemd-journal-internal.la \
libsystemd-id128-internal.la
+test_journal_interleaving_SOURCES = \
+ src/journal/test-journal-interleaving.c
+
+test_journal_interleaving_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-journal-internal.la \
+ libsystemd-id128-internal.la
+
test_mmap_cache_SOURCES = \
src/journal/test-mmap-cache.c
@@ -2700,6 +2889,10 @@ test_mmap_cache_LDADD = \
test_catalog_SOURCES = \
src/journal/test-catalog.c
+test_catalog_CFLAGS = \
+ $(AM_CFLAGS) \
+ -DCATALOG_DIR=\"$(abs_top_srcdir)/catalog\"
+
test_catalog_LDADD = \
libsystemd-shared.la \
libsystemd-label.la \
@@ -2738,6 +2931,7 @@ libsystemd_journal_la_LIBADD = \
libsystemd-shared.la \
libsystemd-label.la \
libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
libsystemd-id128-internal.la
libsystemd_journal_internal_la_SOURCES = \
@@ -2864,7 +3058,9 @@ tests += \
test-journal-syslog \
test-journal-match \
test-journal-stream \
+ test-journal-init \
test-journal-verify \
+ test-journal-interleaving \
test-mmap-cache \
test-catalog
@@ -2982,7 +3178,9 @@ systemd_coredumpctl_SOURCES = \
systemd_coredumpctl_LDADD = \
libsystemd-shared.la \
- libsystemd-journal.la
+ libsystemd-journal.la \
+ libsystemd-journal-internal.la \
+ libsystemd-id128-internal.la
bin_PROGRAMS += \
systemd-coredumpctl
@@ -2990,6 +3188,9 @@ bin_PROGRAMS += \
dist_bashcompletion_DATA += \
shell-completion/bash/systemd-coredumpctl
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_systemd-coredumpctl
+
sysctl_DATA = \
sysctl.d/50-coredump.conf
@@ -3138,8 +3339,7 @@ rootlibexec_PROGRAMS += \
systemd-random-seed
nodist_systemunit_DATA += \
- units/systemd-random-seed-save.service \
- units/systemd-random-seed-load.service
+ units/systemd-random-seed.service
systemd_random_seed_SOURCES = \
src/random-seed/random-seed.c
@@ -3148,16 +3348,33 @@ systemd_random_seed_LDADD = \
libsystemd-label.la \
libsystemd-shared.la
-SHUTDOWN_TARGET_WANTS += \
- systemd-random-seed-save.service
SYSINIT_TARGET_WANTS += \
- systemd-random-seed-load.service
+ systemd-random-seed.service
+
+endif
+
+EXTRA_DIST += \
+ units/systemd-random-seed.service.in
+# ------------------------------------------------------------------------------
+if ENABLE_BACKLIGHT
+rootlibexec_PROGRAMS += \
+ systemd-backlight
+
+nodist_systemunit_DATA += \
+ units/systemd-backlight@.service
+
+systemd_backlight_SOURCES = \
+ src/backlight/backlight.c
+
+systemd_backlight_LDADD = \
+ libsystemd-label.la \
+ libsystemd-shared.la \
+ libudev-private.la
endif
EXTRA_DIST += \
- units/systemd-random-seed-save.service.in \
- units/systemd-random-seed-load.service.in
+ units/systemd-backlight@.service.in
# ------------------------------------------------------------------------------
if HAVE_LIBCRYPTSETUP
@@ -3254,6 +3471,9 @@ bin_PROGRAMS += \
dist_bashcompletion_DATA += \
shell-completion/bash/hostnamectl
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_hostnamectl
+
endif
polkitpolicy_in_files += \
@@ -3330,6 +3550,9 @@ bin_PROGRAMS += \
dist_bashcompletion_DATA += \
shell-completion/bash/localectl
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_localectl
+
endif
polkitpolicy_in_files += \
@@ -3399,6 +3622,9 @@ bin_PROGRAMS += \
dist_bashcompletion_DATA += \
shell-completion/bash/timedatectl
+
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_timedatectl
endif
polkitpolicy_in_files += \
@@ -3408,24 +3634,6 @@ EXTRA_DIST += \
units/systemd-timedated.service.in
# ------------------------------------------------------------------------------
-if ENABLE_EFI
-bootctl_SOURCES = \
- src/boot/boot.h \
- src/boot/boot-loader.h \
- src/boot/bootctl.c \
- src/boot/boot-loader.c \
- src/boot/boot-efi.c
-
-bootctl_LDADD = \
- libsystemd-shared.la \
- libsystemd-id128.la \
- libsystemd-daemon.la
-
-bin_PROGRAMS += \
- bootctl
-endif
-
-# ------------------------------------------------------------------------------
if HAVE_MYHOSTNAME
libnss_myhostname_la_SOURCES = \
src/nss-myhostname/nss-myhostname.c \
@@ -3448,10 +3656,112 @@ lib_LTLIBRARIES += \
endif
# ------------------------------------------------------------------------------
+if ENABLE_MACHINED
+systemd_machined_SOURCES = \
+ src/machine/machined.c \
+ src/machine/machined.h
+
+systemd_machined_CFLAGS = \
+ $(libsystemd_machine_core_la_CFLAGS)
+
+systemd_machined_LDADD = \
+ libsystemd-machine-core.la \
+ $(libsystemd_machine_core_la_LIBADD)
+
+rootlibexec_PROGRAMS += \
+ systemd-machined
+
+libsystemd_machine_core_la_SOURCES = \
+ src/machine/machined-dbus.c \
+ src/machine/machine.c \
+ src/machine/machine.h \
+ src/machine/machine-dbus.c
+
+libsystemd_machine_core_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+libsystemd_machine_core_la_LIBADD = \
+ libsystemd-label.la \
+ libsystemd-audit.la \
+ libsystemd-shared.la \
+ libsystemd-daemon.la \
+ libsystemd-dbus.la \
+ libsystemd-id128-internal.la \
+ libudev.la
+
+noinst_LTLIBRARIES += \
+ libsystemd-machine-core.la
+
+machinectl_SOURCES = \
+ src/machine/machinectl.c
+
+machinectl_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+machinectl_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-dbus.la \
+ libudev.la
+
+rootbin_PROGRAMS += \
+ machinectl
+
+test_machine_tables_SOURCES = \
+ src/machine/test-machine-tables.c
+
+test_machine_tables_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+test_machine_tables_LDADD = \
+ libsystemd-machine-core.la
+
+tests += \
+ test-machine-tables
+
+nodist_systemunit_DATA += \
+ units/systemd-machined.service
+
+dist_systemunit_DATA += \
+ units/machine.slice
+
+dist_dbussystemservice_DATA += \
+ src/machine/org.freedesktop.machine1.service
+
+dist_dbuspolicy_DATA += \
+ src/machine/org.freedesktop.machine1.conf
+
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_machinectl
+
+SYSTEM_UNIT_ALIASES += \
+ systemd-machined.service dbus-org.freedesktop.machine1.service
+
+EXTRA_DIST += \
+ units/systemd-machined.service.in
+
+endif
+
+# ------------------------------------------------------------------------------
if ENABLE_LOGIND
systemd_logind_SOURCES = \
src/login/logind.c \
- src/login/logind.h \
+ src/login/logind.h
+
+nodist_systemd_logind_SOURCES = \
+ src/login/logind-gperf.c
+
+systemd_logind_CFLAGS = \
+ $(libsystemd_logind_core_la_CFLAGS)
+
+systemd_logind_LDADD = \
+ libsystemd-logind-core.la \
+ $(libsystemd_logind_core_la_LIBADD)
+
+libsystemd_logind_core_la_SOURCES = \
+ src/login/logind-core.c \
src/login/logind-dbus.c \
src/login/logind-device.c \
src/login/logind-device.h \
@@ -3463,6 +3773,8 @@ systemd_logind_SOURCES = \
src/login/logind-seat.h \
src/login/logind-session.c \
src/login/logind-session.h \
+ src/login/logind-session-device.c \
+ src/login/logind-session-device.h \
src/login/logind-user.c \
src/login/logind-user.h \
src/login/logind-inhibit.c \
@@ -3470,31 +3782,34 @@ systemd_logind_SOURCES = \
src/login/logind-session-dbus.c \
src/login/logind-seat-dbus.c \
src/login/logind-user-dbus.c \
- src/login/logind-acl.h
-
-nodist_systemd_logind_SOURCES = \
- src/login/logind-gperf.c
+ src/login/logind-acl.h \
+ src/login/login-shared.c \
+ src/login/login-shared.h
-systemd_logind_CFLAGS = \
+libsystemd_logind_core_la_CFLAGS = \
$(AM_CFLAGS) \
- $(DBUS_CFLAGS)
+ $(DBUS_CFLAGS)
-systemd_logind_LDADD = \
+libsystemd_logind_core_la_LIBADD = \
libsystemd-label.la \
libsystemd-audit.la \
libsystemd-shared.la \
libsystemd-daemon.la \
libsystemd-dbus.la \
+ libsystemd-id128-internal.la \
libudev.la
if HAVE_ACL
-systemd_logind_SOURCES += \
+libsystemd_logind_core_la_SOURCES += \
src/login/logind-acl.c
-systemd_logind_LDADD += \
+libsystemd_logind_core_la_LIBADD += \
libsystemd-acl.la
endif
+noinst_LTLIBRARIES += \
+ libsystemd-logind-core.la
+
systemd_user_sessions_SOURCES = \
src/login/user-sessions.c
@@ -3524,6 +3839,10 @@ rootbin_PROGRAMS += \
dist_bashcompletion_DATA += \
shell-completion/bash/loginctl
+dist_zshcompletion_DATA += \
+ shell-completion/zsh/_loginctl \
+ shell-completion/zsh/_systemd-inhibit
+
systemd_inhibit_SOURCES = \
src/login/inhibit.c
@@ -3545,6 +3864,13 @@ test_login_LDADD = \
libsystemd-login-internal.la \
libsystemd-shared.la
+test_login_shared_SOURCES = \
+ src/login/test-login-shared.c
+
+test_login_shared_LDADD = \
+ libsystemd-login-internal.la \
+ libsystemd-shared.la
+
test_inhibit_SOURCES = \
src/login/test-inhibit.c
@@ -3556,12 +3882,29 @@ test_inhibit_CFLAGS = \
$(AM_CFLAGS) \
$(DBUS_CFLAGS)
+test_login_tables_SOURCES = \
+ src/login/test-login-tables.c
+
+test_login_tables_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+test_login_tables_LDADD = \
+ libsystemd-logind-core.la
+
manual_tests += \
test-login \
test-inhibit
+tests += \
+ test-login-tables \
+ test-login-shared
+
libsystemd_login_la_SOURCES = \
- src/login/sd-login.c
+ src/login/sd-login.c \
+ src/systemd/sd-login.h \
+ src/login/login-shared.c \
+ src/login/login-shared.h
libsystemd_login_la_CFLAGS = \
$(AM_CFLAGS) \
@@ -3574,7 +3917,8 @@ libsystemd_login_la_LDFLAGS = \
libsystemd_login_la_LIBADD = \
libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS)
libsystemd_login_internal_la_SOURCES = \
$(libsystemd_login_la_SOURCES)
@@ -3602,10 +3946,14 @@ pam_systemd_la_LIBADD = \
libsystemd-dbus.la \
libsystemd-shared.la \
libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
$(PAM_LIBS)
pamlib_LTLIBRARIES = \
pam_systemd.la
+
+dist_pamconf_DATA = \
+ src/login/systemd-user
endif
# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
@@ -3622,6 +3970,9 @@ nodist_systemunit_DATA += \
units/systemd-logind.service \
units/systemd-user-sessions.service
+dist_systemunit_DATA += \
+ units/user.slice
+
dist_dbussystemservice_DATA += \
src/login/org.freedesktop.login1.service
@@ -3707,7 +4058,7 @@ _journal_la_SOURCES = \
_journal_la_CFLAGS = \
$(AM_CFLAGS) \
-fvisibility=default \
- $(PYTHON_CFLAGS)
+ $(PYTHON_DEVEL_CFLAGS)
_journal_la_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -3716,7 +4067,7 @@ _journal_la_LDFLAGS = \
-avoid-version
_journal_la_LIBADD = \
- $(PYTHON_LIBS) \
+ $(PYTHON_DEVEL_LIBS) \
libsystemd-journal.la
id128_la_SOURCES = \
@@ -3728,7 +4079,7 @@ id128_la_SOURCES = \
id128_la_CFLAGS = \
$(AM_CFLAGS) \
-fvisibility=default \
- $(PYTHON_CFLAGS) \
+ $(PYTHON_DEVEL_CFLAGS) \
-I$(top_builddir)/src/python-systemd
id128_la_LDFLAGS = \
@@ -3738,7 +4089,7 @@ id128_la_LDFLAGS = \
-avoid-version
id128_la_LIBADD = \
- $(PYTHON_LIBS) \
+ $(PYTHON_DEVEL_LIBS) \
libsystemd-id128.la
_daemon_la_SOURCES = \
@@ -3749,7 +4100,7 @@ _daemon_la_SOURCES = \
_daemon_la_CFLAGS = \
$(AM_CFLAGS) \
-fvisibility=default \
- $(PYTHON_CFLAGS) \
+ $(PYTHON_DEVEL_CFLAGS) \
-I$(top_builddir)/src/python-systemd
_daemon_la_LDFLAGS = \
@@ -3759,7 +4110,7 @@ _daemon_la_LDFLAGS = \
-avoid-version
_daemon_la_LIBADD = \
- $(PYTHON_LIBS) \
+ $(PYTHON_DEVEL_LIBS) \
libsystemd-daemon.la
_reader_la_SOURCES = \
@@ -3770,7 +4121,7 @@ _reader_la_SOURCES = \
_reader_la_CFLAGS = \
$(AM_CFLAGS) \
-fvisibility=default \
- $(PYTHON_CFLAGS)
+ $(PYTHON_DEVEL_CFLAGS)
_reader_la_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -3779,11 +4130,12 @@ _reader_la_LDFLAGS = \
-avoid-version
_reader_la_LIBADD = \
- $(PYTHON_LIBS) \
+ $(PYTHON_DEVEL_LIBS) \
libsystemd-journal.la \
libsystemd-id128.la \
libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS)
login_la_SOURCES = \
src/python-systemd/login.c \
@@ -3793,7 +4145,7 @@ login_la_SOURCES = \
login_la_CFLAGS = \
$(AM_CFLAGS) \
-fvisibility=default \
- $(PYTHON_CFLAGS)
+ $(PYTHON_DEVEL_CFLAGS)
login_la_LDFLAGS = \
$(AM_LDFLAGS) \
@@ -3802,11 +4154,12 @@ login_la_LDFLAGS = \
-avoid-version
login_la_LIBADD = \
- $(PYTHON_LIBS) \
+ $(PYTHON_DEVEL_LIBS) \
libsystemd-journal.la \
libsystemd-login.la \
libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS)
dist_pkgpyexec_PYTHON = \
src/python-systemd/journal.py \
@@ -3826,6 +4179,10 @@ sphinx-%:
$(AM_V_GEN)PYTHONPATH=$(DESTDIR)$(pyexecdir) LD_LIBRARY_PATH=$(DESTDIR)$(libdir) $(SPHINX_BUILD) -b $* $(SPHINXOPTS) $(top_srcdir)/src/python-systemd/docs $(top_builddir)/docs/html/python-systemd/
$(AM_V_at)echo Output has been generated in $(abs_top_builddir)/docs/html/python-systemd/
+python-shell:
+ $(AM_V_at)echo "Starting python with $(DESTDIR)$(pyexecdir)"
+ $(AM_V_at)PYTHONPATH=$(DESTDIR)$(pyexecdir) LD_LIBRARY_PATH=$(DESTDIR)$(libdir) $(PYTHON)
+
destdir-sphinx: all
dir="$$(mktemp -d /tmp/systemd-install.XXXXXX)" && \
$(MAKE) DESTDIR="$$dir" install && \
@@ -3839,6 +4196,11 @@ CLEAN_LOCAL_HOOKS += clean-sphinx
clean-sphinx:
-rm -rf docs/html/python-systemd/
+# Remove Python stuff, e.g. to force rebuilding for a different Python version.
+clean-python:
+ -rm -rf src/python-systemd/.libs src/python-systemd/*.l[ao]
+ -rm -f _daemon.la id128.la _journal.la login.la _reader.la
+
# ------------------------------------------------------------------------------
substitutions = \
'|rootlibexecdir=$(rootlibexecdir)|' \
@@ -3859,10 +4221,12 @@ substitutions = \
'|catalogdir=$(catalogdir)|' \
'|tmpfilesdir=$(tmpfilesdir)|' \
'|sysctldir=$(sysctldir)|' \
+ '|systemgeneratordir=$(systemgeneratordir)|' \
+ '|usergeneratordir=$(usergeneratordir)|' \
'|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \
'|PACKAGE_NAME=$(PACKAGE_NAME)|' \
'|PACKAGE_URL=$(PACKAGE_URL)|' \
- '|RANDOM_SEED=$(localstatedir)/lib/random-seed|' \
+ '|RANDOM_SEED=$(localstatedir)/lib/systemd/random-seed|' \
'|prefix=$(prefix)|' \
'|exec_prefix=$(exec_prefix)|' \
'|libdir=$(libdir)|' \
@@ -3873,6 +4237,8 @@ substitutions = \
'|SUSHELL=$(SUSHELL)|' \
'|DEBUGTTY=$(DEBUGTTY)|' \
'|KILL=$(KILL)|' \
+ '|KMOD=$(KMOD)|' \
+ '|MKDIR_P=$(MKDIR_P)|' \
'|QUOTAON=$(QUOTAON)|' \
'|QUOTACHECK=$(QUOTACHECK)|' \
'|SYSTEM_SYSVINIT_PATH=$(sysvinitdir)|' \
@@ -4027,9 +4393,6 @@ EXTRA_DIST += \
docs/sysvinit/README.in \
docs/var-log/README.in
-EXTRA_DIST += \
- shell-completion/systemd-zsh-completion.zsh
-
SOCKETS_TARGET_WANTS += \
systemd-initctl.socket \
systemd-shutdownd.socket
@@ -4046,8 +4409,8 @@ RUNLEVEL4_TARGET_WANTS += \
RUNLEVEL5_TARGET_WANTS += \
systemd-update-utmp-runlevel.service
endif
-SHUTDOWN_TARGET_WANTS += \
- systemd-update-utmp-shutdown.service
+SYSINIT_TARGET_WANTS += \
+ systemd-update-utmp.service
LOCAL_FS_TARGET_WANTS += \
systemd-remount-fs.service \
systemd-fsck-root.service \
@@ -4061,12 +4424,8 @@ SYSINIT_TARGET_WANTS += \
sys-kernel-config.mount \
sys-kernel-debug.mount \
sys-fs-fuse-connections.mount \
- systemd-tmpfiles-setup-dev.service \
- systemd-tmpfiles-setup.service \
systemd-sysctl.service \
systemd-ask-password-console.path
-TIMERS_TARGET_WANTS += \
- systemd-tmpfiles-clean.timer
if HAVE_SYSV_COMPAT
SYSTEM_UNIT_ALIASES += \
@@ -4110,8 +4469,6 @@ INSTALL_DIRS += \
endif
INSTALL_DIRS += \
- $(tmpfilesdir) \
- $(sysconfdir)/tmpfiles.d \
$(prefix)/lib/modules-load.d \
$(sysconfdir)/modules-load.d \
$(prefix)/lib/sysctl.d \
@@ -4150,7 +4507,9 @@ DISTCHECK_CONFIGURE_FLAGS = \
--with-dbussystemservicedir=$$dc_install_base/$(dbussystemservicedir) \
--with-dbusinterfacedir=$$dc_install_base/$(dbusinterfacedir) \
--with-bashcompletiondir=$$dc_install_base/$(bashcompletiondir) \
+ --with-zshcompletiondir=$$dc_install_base/$(zshcompletiondir) \
--with-pamlibdir=$$dc_install_base/$(pamlibdir) \
+ --with-pamconfdir=$$dc_install_base/$(pamconfdir) \
--with-rootprefix=$$dc_install_base \
--disable-split-usr
diff --git a/Makefile.in b/Makefile.in
index 27f496ad41..6f3d475c5c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -43,23 +43,51 @@
VPATH = @srcdir@
-am__make_dryrun = \
- { \
- am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
- *) \
- for am__flg in $$MAKEFLAGS; do \
- case $$am__flg in \
- *=*|--*) ;; \
- *n*) am__dry=yes; break;; \
- esac; \
- done;; \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
- test $$am__dry = yes; \
- }
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -79,58 +107,54 @@ build_triplet = @build@
host_triplet = @host@
check_PROGRAMS =
@ENABLE_TESTS_FALSE@noinst_PROGRAMS = busctl$(EXEEXT)
-@ENABLE_TESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_8) $(am__EXEEXT_9) \
+@ENABLE_TESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_8) $(am__EXEEXT_11) \
@ENABLE_TESTS_TRUE@ busctl$(EXEEXT)
-@ENABLE_TESTS_FALSE@TESTS = test/udev-test.pl test/rules-test.sh \
-@ENABLE_TESTS_FALSE@ $(am__append_72)
-@ENABLE_TESTS_TRUE@TESTS = $(am__EXEEXT_9) test/udev-test.pl \
-@ENABLE_TESTS_TRUE@ test/rules-test.sh $(am__append_72)
+@ENABLE_TESTS_FALSE@TESTS = test/udev-test.pl test/rules-test.sh
+@ENABLE_TESTS_TRUE@TESTS = $(am__EXEEXT_11) test/udev-test.pl \
+@ENABLE_TESTS_TRUE@ test/rules-test.sh
udevlibexec_PROGRAMS = ata_id$(EXEEXT) cdrom_id$(EXEEXT) \
collect$(EXEEXT) scsi_id$(EXEEXT) v4l_id$(EXEEXT) \
- accelerometer$(EXEEXT) $(am__EXEEXT_28) mtd_probe$(EXEEXT)
+ accelerometer$(EXEEXT) mtd_probe$(EXEEXT)
rootbin_PROGRAMS = systemctl$(EXEEXT) systemd-notify$(EXEEXT) \
systemd-ask-password$(EXEEXT) \
systemd-tty-ask-password-agent$(EXEEXT) \
- systemd-tmpfiles$(EXEEXT) systemd-machine-id-setup$(EXEEXT) \
- udevadm$(EXEEXT) journalctl$(EXEEXT) $(am__EXEEXT_10)
+ systemd-machine-id-setup$(EXEEXT) $(am__EXEEXT_12) \
+ udevadm$(EXEEXT) journalctl$(EXEEXT) $(am__EXEEXT_13) \
+ $(am__EXEEXT_14)
bin_PROGRAMS = systemd-cgls$(EXEEXT) systemd-cgtop$(EXEEXT) \
systemd-stdio-bridge$(EXEEXT) systemd-nspawn$(EXEEXT) \
systemd-detect-virt$(EXEEXT) systemd-delta$(EXEEXT) \
- systemd-analyze$(EXEEXT) systemd-cat$(EXEEXT) $(am__EXEEXT_1) \
- $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \
- $(am__EXEEXT_5)
+ systemd-analyze$(EXEEXT) systemd-run$(EXEEXT) $(am__EXEEXT_1) \
+ systemd-cat$(EXEEXT) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ $(am__EXEEXT_4) $(am__EXEEXT_5)
rootlibexec_PROGRAMS = systemd$(EXEEXT) systemd-cgroups-agent$(EXEEXT) \
systemd-initctl$(EXEEXT) systemd-update-utmp$(EXEEXT) \
systemd-shutdownd$(EXEEXT) systemd-shutdown$(EXEEXT) \
systemd-remount-fs$(EXEEXT) systemd-reply-password$(EXEEXT) \
- systemd-fsck$(EXEEXT) systemd-timestamp$(EXEEXT) \
- systemd-ac-power$(EXEEXT) systemd-sysctl$(EXEEXT) \
- systemd-sleep$(EXEEXT) $(am__EXEEXT_11) systemd-udevd$(EXEEXT) \
+ systemd-fsck$(EXEEXT) systemd-ac-power$(EXEEXT) \
+ systemd-sysctl$(EXEEXT) systemd-sleep$(EXEEXT) \
+ $(am__EXEEXT_15) systemd-udevd$(EXEEXT) \
systemd-activate$(EXEEXT) systemd-journald$(EXEEXT) \
- $(am__EXEEXT_12) $(am__EXEEXT_13) $(am__EXEEXT_14) \
- $(am__EXEEXT_15) $(am__EXEEXT_16) $(am__EXEEXT_17) \
- $(am__EXEEXT_18) $(am__EXEEXT_19) $(am__EXEEXT_20) \
- $(am__EXEEXT_21) $(am__EXEEXT_22) $(am__EXEEXT_23) \
- $(am__EXEEXT_24)
+ $(am__EXEEXT_16) $(am__EXEEXT_17) $(am__EXEEXT_18) \
+ $(am__EXEEXT_19) $(am__EXEEXT_20) $(am__EXEEXT_21) \
+ $(am__EXEEXT_22) $(am__EXEEXT_23) $(am__EXEEXT_24) \
+ $(am__EXEEXT_25) $(am__EXEEXT_26) $(am__EXEEXT_27) \
+ $(am__EXEEXT_28) $(am__EXEEXT_29) $(am__EXEEXT_30)
systemgenerator_PROGRAMS = systemd-getty-generator$(EXEEXT) \
systemd-fstab-generator$(EXEEXT) \
- systemd-system-update-generator$(EXEEXT) $(am__EXEEXT_25) \
- $(am__EXEEXT_26) $(am__EXEEXT_27)
+ systemd-system-update-generator$(EXEEXT) $(am__EXEEXT_31) \
+ $(am__EXEEXT_32) $(am__EXEEXT_33) $(am__EXEEXT_34)
@HAVE_SYSV_COMPAT_TRUE@am__append_1 = \
-@HAVE_SYSV_COMPAT_TRUE@ tmpfiles.d/legacy.conf
-
-@HAVE_SYSV_COMPAT_TRUE@am__append_2 = \
@HAVE_SYSV_COMPAT_TRUE@ units/rc-local.service \
@HAVE_SYSV_COMPAT_TRUE@ units/halt-local.service
-@HAVE_SYSV_COMPAT_TRUE@am__append_3 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_2 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-rc-local-generator
DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(srcdir)/config.h.in \
$(dist_bin_SCRIPTS) $(dist_kernelinstall_SCRIPTS) \
- $(am__dist_udevhome_SCRIPTS_DIST) \
$(top_srcdir)/build-aux/depcomp \
$(am__dist_pkgpyexec_PYTHON_DIST) \
$(top_srcdir)/build-aux/py-compile \
@@ -139,12 +163,12 @@ DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
$(am__dist_dbussystemservice_DATA_DIST) \
$(am__dist_doc_DATA_DIST) \
$(am__dist_gatewayddocumentroot_DATA_DIST) \
- $(am__dist_pkgdata_DATA_DIST) $(am__dist_pkgsysconf_DATA_DIST) \
- $(dist_sysctl_DATA) $(am__dist_systemunit_DATA_DIST) \
+ $(am__dist_pamconf_DATA_DIST) $(am__dist_pkgdata_DATA_DIST) \
+ $(am__dist_pkgsysconf_DATA_DIST) $(dist_sysctl_DATA) \
+ $(am__dist_systemunit_DATA_DIST) \
$(am__dist_tmpfiles_DATA_DIST) $(dist_udevconf_DATA) \
- $(dist_udevhwdb_DATA) $(am__dist_udevkeymap_DATA_DIST) \
- $(am__dist_udevkeymapforcerel_DATA_DIST) \
- $(am__dist_udevrules_DATA_DIST) $(dist_userunit_DATA) \
+ $(dist_udevhwdb_DATA) $(am__dist_udevrules_DATA_DIST) \
+ $(dist_userunit_DATA) $(am__dist_zshcompletion_DATA_DIST) \
$(include_HEADERS) $(am__libgudev_include_HEADERS_DIST) \
$(am__pkginclude_HEADERS_DIST) \
$(top_srcdir)/build-aux/test-driver NEWS README TODO \
@@ -157,115 +181,127 @@ DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
$(top_srcdir)/build-aux/install-sh \
$(top_srcdir)/build-aux/ltmain.sh \
$(top_srcdir)/build-aux/missing
-@ENABLE_BINFMT_TRUE@am__append_4 = \
+@ENABLE_BACKLIGHT_TRUE@am__append_3 = \
+@ENABLE_BACKLIGHT_TRUE@ man/systemd-backlight@.service.8
+
+@ENABLE_BACKLIGHT_TRUE@am__append_4 = \
+@ENABLE_BACKLIGHT_TRUE@ man/systemd-backlight.8
+
+@ENABLE_BINFMT_TRUE@am__append_5 = \
@ENABLE_BINFMT_TRUE@ man/binfmt.d.5 \
@ENABLE_BINFMT_TRUE@ man/systemd-binfmt.service.8
-@ENABLE_BINFMT_TRUE@am__append_5 = \
+@ENABLE_BINFMT_TRUE@am__append_6 = \
@ENABLE_BINFMT_TRUE@ man/systemd-binfmt.8
-@ENABLE_BOOTCHART_TRUE@am__append_6 = \
+@ENABLE_BOOTCHART_TRUE@am__append_7 = \
@ENABLE_BOOTCHART_TRUE@ man/bootchart.conf.5 \
@ENABLE_BOOTCHART_TRUE@ man/systemd-bootchart.1
-@ENABLE_BOOTCHART_TRUE@am__append_7 = \
+@ENABLE_BOOTCHART_TRUE@am__append_8 = \
@ENABLE_BOOTCHART_TRUE@ #
-@ENABLE_COREDUMP_TRUE@am__append_8 = \
+@ENABLE_COREDUMP_TRUE@am__append_9 = \
@ENABLE_COREDUMP_TRUE@ man/systemd-coredumpctl.1
-@ENABLE_COREDUMP_TRUE@am__append_9 = \
+@ENABLE_COREDUMP_TRUE@am__append_10 = \
@ENABLE_COREDUMP_TRUE@ #
-@ENABLE_HOSTNAMED_TRUE@am__append_10 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_11 = \
@ENABLE_HOSTNAMED_TRUE@ man/hostnamectl.1 \
@ENABLE_HOSTNAMED_TRUE@ man/systemd-hostnamed.service.8
-@ENABLE_HOSTNAMED_TRUE@am__append_11 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_12 = \
@ENABLE_HOSTNAMED_TRUE@ man/systemd-hostnamed.8
-@ENABLE_LOCALED_TRUE@am__append_12 = \
+@ENABLE_LOCALED_TRUE@am__append_13 = \
@ENABLE_LOCALED_TRUE@ man/localectl.1 \
@ENABLE_LOCALED_TRUE@ man/systemd-localed.service.8
-@ENABLE_LOCALED_TRUE@am__append_13 = \
+@ENABLE_LOCALED_TRUE@am__append_14 = \
@ENABLE_LOCALED_TRUE@ man/systemd-localed.8
-@ENABLE_LOGIND_TRUE@am__append_14 = \
+@ENABLE_LOGIND_TRUE@am__append_15 = \
+@ENABLE_LOGIND_TRUE@ man/loginctl.1 \
@ENABLE_LOGIND_TRUE@ man/logind.conf.5 \
@ENABLE_LOGIND_TRUE@ man/systemd-logind.service.8
-@ENABLE_LOGIND_TRUE@am__append_15 = \
+@ENABLE_LOGIND_TRUE@am__append_16 = \
@ENABLE_LOGIND_TRUE@ man/systemd-logind.8
-@ENABLE_QUOTACHECK_TRUE@am__append_16 = \
+@ENABLE_MACHINED_TRUE@am__append_17 = \
+@ENABLE_MACHINED_TRUE@ man/machinectl.1 \
+@ENABLE_MACHINED_TRUE@ man/systemd-machined.service.8
+
+@ENABLE_MACHINED_TRUE@am__append_18 = \
+@ENABLE_MACHINED_TRUE@ man/systemd-machined.8
+
+@ENABLE_QUOTACHECK_TRUE@am__append_19 = \
@ENABLE_QUOTACHECK_TRUE@ man/systemd-quotacheck.service.8
-@ENABLE_QUOTACHECK_TRUE@am__append_17 = \
+@ENABLE_QUOTACHECK_TRUE@am__append_20 = \
@ENABLE_QUOTACHECK_TRUE@ man/systemd-quotacheck.8
-@ENABLE_RANDOMSEED_TRUE@am__append_18 = \
-@ENABLE_RANDOMSEED_TRUE@ man/systemd-random-seed-load.service.8
+@ENABLE_RANDOMSEED_TRUE@am__append_21 = \
+@ENABLE_RANDOMSEED_TRUE@ man/systemd-random-seed.service.8
-@ENABLE_RANDOMSEED_TRUE@am__append_19 = \
-@ENABLE_RANDOMSEED_TRUE@ man/systemd-random-seed-save.service.8 \
+@ENABLE_RANDOMSEED_TRUE@am__append_22 = \
@ENABLE_RANDOMSEED_TRUE@ man/systemd-random-seed.8
-@ENABLE_READAHEAD_TRUE@am__append_20 = \
+@ENABLE_READAHEAD_TRUE@am__append_23 = \
@ENABLE_READAHEAD_TRUE@ man/sd-readahead.3 \
@ENABLE_READAHEAD_TRUE@ man/sd_readahead.3 \
@ENABLE_READAHEAD_TRUE@ man/systemd-readahead-replay.service.8
-@ENABLE_READAHEAD_TRUE@am__append_21 = \
+@ENABLE_READAHEAD_TRUE@am__append_24 = \
@ENABLE_READAHEAD_TRUE@ man/systemd-readahead-collect.service.8 \
@ENABLE_READAHEAD_TRUE@ man/systemd-readahead-done.service.8 \
@ENABLE_READAHEAD_TRUE@ man/systemd-readahead-done.timer.8 \
@ENABLE_READAHEAD_TRUE@ man/systemd-readahead.8
-@ENABLE_TIMEDATED_TRUE@am__append_22 = \
+@ENABLE_TIMEDATED_TRUE@am__append_25 = \
@ENABLE_TIMEDATED_TRUE@ man/systemd-timedated.service.8 \
@ENABLE_TIMEDATED_TRUE@ man/timedatectl.1
-@ENABLE_TIMEDATED_TRUE@am__append_23 = \
+@ENABLE_TIMEDATED_TRUE@am__append_26 = \
@ENABLE_TIMEDATED_TRUE@ man/systemd-timedated.8
-@ENABLE_VCONSOLE_TRUE@am__append_24 = \
+@ENABLE_VCONSOLE_TRUE@am__append_27 = \
@ENABLE_VCONSOLE_TRUE@ man/systemd-vconsole-setup.service.8 \
@ENABLE_VCONSOLE_TRUE@ man/vconsole.conf.5
-@ENABLE_VCONSOLE_TRUE@am__append_25 = \
+@ENABLE_VCONSOLE_TRUE@am__append_28 = \
@ENABLE_VCONSOLE_TRUE@ man/systemd-vconsole-setup.8
-@HAVE_KMOD_TRUE@am__append_26 = \
+@HAVE_KMOD_TRUE@am__append_29 = \
@HAVE_KMOD_TRUE@ man/modules-load.d.5 \
@HAVE_KMOD_TRUE@ man/systemd-modules-load.service.8
-@HAVE_KMOD_TRUE@am__append_27 = \
+@HAVE_KMOD_TRUE@am__append_30 = \
@HAVE_KMOD_TRUE@ man/systemd-modules-load.8
-@HAVE_LIBCRYPTSETUP_TRUE@am__append_28 = \
+@HAVE_LIBCRYPTSETUP_TRUE@am__append_31 = \
@HAVE_LIBCRYPTSETUP_TRUE@ man/crypttab.5 \
@HAVE_LIBCRYPTSETUP_TRUE@ man/systemd-cryptsetup-generator.8 \
@HAVE_LIBCRYPTSETUP_TRUE@ man/systemd-cryptsetup@.service.8
-@HAVE_LIBCRYPTSETUP_TRUE@am__append_29 = \
+@HAVE_LIBCRYPTSETUP_TRUE@am__append_32 = \
@HAVE_LIBCRYPTSETUP_TRUE@ man/systemd-cryptsetup.8
-@HAVE_MICROHTTPD_TRUE@am__append_30 = \
+@HAVE_MICROHTTPD_TRUE@am__append_33 = \
@HAVE_MICROHTTPD_TRUE@ man/systemd-journal-gatewayd.service.8
-@HAVE_MICROHTTPD_TRUE@am__append_31 = \
+@HAVE_MICROHTTPD_TRUE@am__append_34 = \
@HAVE_MICROHTTPD_TRUE@ man/systemd-journal-gatewayd.8 \
@HAVE_MICROHTTPD_TRUE@ man/systemd-journal-gatewayd.socket.8
-@HAVE_MYHOSTNAME_TRUE@am__append_32 = \
+@HAVE_MYHOSTNAME_TRUE@am__append_35 = \
@HAVE_MYHOSTNAME_TRUE@ man/nss-myhostname.8
-@HAVE_MYHOSTNAME_TRUE@am__append_33 = \
+@HAVE_MYHOSTNAME_TRUE@am__append_36 = \
@HAVE_MYHOSTNAME_TRUE@ #
-@HAVE_PAM_TRUE@am__append_34 = \
-@HAVE_PAM_TRUE@ man/loginctl.1 \
+@HAVE_PAM_TRUE@am__append_37 = \
@HAVE_PAM_TRUE@ man/pam_systemd.8 \
@HAVE_PAM_TRUE@ man/sd-login.3 \
@HAVE_PAM_TRUE@ man/sd_get_seats.3 \
@@ -276,7 +312,7 @@ DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
@HAVE_PAM_TRUE@ man/sd_uid_get_state.3 \
@HAVE_PAM_TRUE@ man/systemd-user-sessions.service.8
-@HAVE_PAM_TRUE@am__append_35 = \
+@HAVE_PAM_TRUE@am__append_38 = \
@HAVE_PAM_TRUE@ man/sd_get_machine_names.3 \
@HAVE_PAM_TRUE@ man/sd_get_sessions.3 \
@HAVE_PAM_TRUE@ man/sd_get_uids.3 \
@@ -288,6 +324,7 @@ DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
@HAVE_PAM_TRUE@ man/sd_login_monitor_unref.3 \
@HAVE_PAM_TRUE@ man/sd_pid_get_machine_name.3 \
@HAVE_PAM_TRUE@ man/sd_pid_get_owner_uid.3 \
+@HAVE_PAM_TRUE@ man/sd_pid_get_slice.3 \
@HAVE_PAM_TRUE@ man/sd_pid_get_unit.3 \
@HAVE_PAM_TRUE@ man/sd_pid_get_user_unit.3 \
@HAVE_PAM_TRUE@ man/sd_seat_can_multi_session.3 \
@@ -300,487 +337,568 @@ DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
@HAVE_PAM_TRUE@ man/sd_session_get_tty.3 \
@HAVE_PAM_TRUE@ man/sd_session_get_type.3 \
@HAVE_PAM_TRUE@ man/sd_session_get_uid.3 \
+@HAVE_PAM_TRUE@ man/sd_session_get_vt.3 \
@HAVE_PAM_TRUE@ man/sd_uid_get_seats.3 \
@HAVE_PAM_TRUE@ man/sd_uid_get_sessions.3 \
@HAVE_PAM_TRUE@ man/sd_uid_is_on_seat.3 \
@HAVE_PAM_TRUE@ man/systemd-user-sessions.8
-@HAVE_PYTHON_TRUE@am__append_36 = \
+@HAVE_PYTHON_TRUE@am__append_39 = \
@HAVE_PYTHON_TRUE@ man/systemd.directives.7 \
@HAVE_PYTHON_TRUE@ man/systemd.index.7
-@HAVE_PYTHON_TRUE@am__append_37 = \
+@HAVE_PYTHON_TRUE@am__append_40 = \
@HAVE_PYTHON_TRUE@ #
-@ENABLE_MANPAGES_TRUE@am__append_38 = $(HTML_FILES) $(HTML_ALIAS) \
+@ENABLE_MANPAGES_TRUE@am__append_41 = $(HTML_FILES) $(HTML_ALIAS) \
@ENABLE_MANPAGES_TRUE@ docs/html/man
-@ENABLE_MANPAGES_TRUE@am__append_39 = $(man_MANS) $(HTML_FILES) \
+@ENABLE_MANPAGES_TRUE@am__append_42 = $(man_MANS) $(HTML_FILES) \
@ENABLE_MANPAGES_TRUE@ $(HTML_ALIAS) docs/html/man
-@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@am__append_40 = \
+@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@am__append_43 = \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/index.html
-@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@am__append_41 = \
+@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@am__append_44 = \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/index.html \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/systemd.index.xml \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/systemd.directives.xml
-@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@am__append_42 = \
+@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@am__append_45 = \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/systemd.index.xml \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/index.html \
@ENABLE_MANPAGES_TRUE@@HAVE_PYTHON_TRUE@ man/systemd.directives.xml
# ------------------------------------------------------------------------------
-@HAVE_ACL_TRUE@am__append_43 = \
+@HAVE_ACL_TRUE@am__append_46 = \
@HAVE_ACL_TRUE@ libsystemd-acl.la
-@HAVE_KMOD_TRUE@am__append_44 = \
+@HAVE_KMOD_TRUE@am__append_47 = \
@HAVE_KMOD_TRUE@ src/core/kmod-setup.c \
@HAVE_KMOD_TRUE@ src/core/kmod-setup.h
-@ENABLE_EFI_TRUE@am__append_45 = \
-@ENABLE_EFI_TRUE@ test-efivars
+@ENABLE_EFI_TRUE@am__append_48 = \
+@ENABLE_EFI_TRUE@ test-boot-timestamp
-@HAVE_KMOD_TRUE@am__append_46 = \
+@HAVE_KMOD_TRUE@am__append_49 = \
@HAVE_KMOD_TRUE@ systemd-modules-load
-@HAVE_KMOD_TRUE@am__append_47 = \
+@HAVE_KMOD_TRUE@am__append_50 = \
@HAVE_KMOD_TRUE@ units/systemd-modules-load.service
-@HAVE_KMOD_TRUE@am__append_48 = \
+@HAVE_KMOD_TRUE@am__append_51 = \
@HAVE_KMOD_TRUE@ systemd-modules-load.service
+@ENABLE_TMPFILES_TRUE@@HAVE_KMOD_TRUE@am__append_52 = \
+@ENABLE_TMPFILES_TRUE@@HAVE_KMOD_TRUE@ units/kmod-static-nodes.service
+
+@ENABLE_TMPFILES_TRUE@@HAVE_KMOD_TRUE@am__append_53 = \
+@ENABLE_TMPFILES_TRUE@@HAVE_KMOD_TRUE@ kmod-static-nodes.service
+
+@ENABLE_TMPFILES_TRUE@am__append_54 = \
+@ENABLE_TMPFILES_TRUE@ systemd-tmpfiles
+
+@ENABLE_TMPFILES_TRUE@am__append_55 = \
+@ENABLE_TMPFILES_TRUE@ units/systemd-tmpfiles-clean.timer
+
+@ENABLE_TMPFILES_TRUE@am__append_56 = \
+@ENABLE_TMPFILES_TRUE@ units/systemd-tmpfiles-setup-dev.service \
+@ENABLE_TMPFILES_TRUE@ units/systemd-tmpfiles-setup.service \
+@ENABLE_TMPFILES_TRUE@ units/systemd-tmpfiles-clean.service
+
+@ENABLE_TMPFILES_TRUE@@HAVE_SYSV_COMPAT_TRUE@am__append_57 = \
+@ENABLE_TMPFILES_TRUE@@HAVE_SYSV_COMPAT_TRUE@ tmpfiles.d/legacy.conf
+
+@ENABLE_TMPFILES_TRUE@am__append_58 = \
+@ENABLE_TMPFILES_TRUE@ systemd-tmpfiles-setup-dev.service \
+@ENABLE_TMPFILES_TRUE@ systemd-tmpfiles-setup.service
+
+@ENABLE_TMPFILES_TRUE@am__append_59 = \
+@ENABLE_TMPFILES_TRUE@ shell-completion/zsh/_systemd-tmpfiles
+
+@ENABLE_TMPFILES_TRUE@am__append_60 = \
+@ENABLE_TMPFILES_TRUE@ systemd-tmpfiles-clean.timer
+
+@ENABLE_TMPFILES_TRUE@am__append_61 = \
+@ENABLE_TMPFILES_TRUE@ $(tmpfilesdir) \
+@ENABLE_TMPFILES_TRUE@ $(sysconfdir)/tmpfiles.d
+
# ------------------------------------------------------------------------------
-@ENABLE_EFI_TRUE@am__append_49 = \
+@ENABLE_EFI_TRUE@am__append_62 = \
@ENABLE_EFI_TRUE@ systemd-efi-boot-generator
+@ENABLE_EFI_TRUE@am__append_63 = \
+@ENABLE_EFI_TRUE@ bootctl
+
+
+# ------------------------------------------------------------------------------
+@HAVE_BLKID_TRUE@am__append_64 = \
+@HAVE_BLKID_TRUE@ systemd-gpt-auto-generator
+
# ------------------------------------------------------------------------------
-@ENABLE_GTK_DOC_TRUE@am__append_50 = \
+@ENABLE_GTK_DOC_TRUE@am__append_65 = \
@ENABLE_GTK_DOC_TRUE@ docs/libudev
-@ENABLE_GTK_DOC_TRUE@am__append_51 = \
+@ENABLE_GTK_DOC_TRUE@am__append_66 = \
@ENABLE_GTK_DOC_TRUE@ docs/html/libudev \
@ENABLE_GTK_DOC_TRUE@ docs/html/gudev
-@ENABLE_FIRMWARE_TRUE@am__append_52 = \
+@ENABLE_FIRMWARE_TRUE@am__append_67 = \
@ENABLE_FIRMWARE_TRUE@ src/udev/udev-builtin-firmware.c
-@ENABLE_FIRMWARE_TRUE@am__append_53 = \
+@ENABLE_FIRMWARE_TRUE@am__append_68 = \
@ENABLE_FIRMWARE_TRUE@ rules/50-firmware.rules
-@HAVE_KMOD_TRUE@am__append_54 = \
+@HAVE_KMOD_TRUE@am__append_69 = \
@HAVE_KMOD_TRUE@ src/udev/udev-builtin-kmod.c
-@HAVE_KMOD_TRUE@am__append_55 = \
+@HAVE_KMOD_TRUE@am__append_70 = \
@HAVE_KMOD_TRUE@ rules/80-drivers.rules
-@HAVE_BLKID_TRUE@am__append_56 = \
+@HAVE_BLKID_TRUE@am__append_71 = \
@HAVE_BLKID_TRUE@ src/udev/udev-builtin-blkid.c
-@HAVE_ACL_TRUE@am__append_57 = \
+@HAVE_ACL_TRUE@am__append_72 = \
@HAVE_ACL_TRUE@ src/udev/udev-builtin-uaccess.c \
@HAVE_ACL_TRUE@ src/login/logind-acl.c \
-@HAVE_ACL_TRUE@ src/login/sd-login.c
+@HAVE_ACL_TRUE@ src/login/sd-login.c \
+@HAVE_ACL_TRUE@ src/systemd/sd-login.h \
+@HAVE_ACL_TRUE@ src/login/login-shared.c \
+@HAVE_ACL_TRUE@ src/login/login-shared.h
-@HAVE_ACL_TRUE@am__append_58 = \
+@HAVE_ACL_TRUE@am__append_73 = \
@HAVE_ACL_TRUE@ libsystemd-acl.la
-@HAVE_ACL_TRUE@am__append_59 = \
+@HAVE_ACL_TRUE@am__append_74 = \
@HAVE_ACL_TRUE@ libsystemd-acl.la
# ------------------------------------------------------------------------------
-@ENABLE_GTK_DOC_TRUE@@ENABLE_GUDEV_TRUE@am__append_60 = \
+@ENABLE_GTK_DOC_TRUE@@ENABLE_GUDEV_TRUE@am__append_75 = \
@ENABLE_GTK_DOC_TRUE@@ENABLE_GUDEV_TRUE@ docs/gudev
-@ENABLE_GUDEV_TRUE@am__append_61 = libgudev-1.0.la
-@ENABLE_GUDEV_TRUE@am__append_62 = \
+@ENABLE_GUDEV_TRUE@am__append_76 = libgudev-1.0.la
+@ENABLE_GUDEV_TRUE@am__append_77 = \
@ENABLE_GUDEV_TRUE@ src/gudev/gudev-1.0.pc
-@ENABLE_GUDEV_TRUE@am__append_63 = \
+@ENABLE_GUDEV_TRUE@am__append_78 = \
@ENABLE_GUDEV_TRUE@ src/gudev/gudev-1.0.pc
-@ENABLE_GUDEV_TRUE@am__append_64 = \
+@ENABLE_GUDEV_TRUE@am__append_79 = \
@ENABLE_GUDEV_TRUE@ $(nodist_libgudev_1_0_la_SOURCES)
-@ENABLE_GUDEV_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_65 = $(gir_DATA) $(typelibs_DATA)
-@ENABLE_GUDEV_TRUE@am__append_66 = libgudev-install-hook
-@ENABLE_GUDEV_TRUE@am__append_67 = libgudev-uninstall-hook
-@ENABLE_KEYMAP_TRUE@am__append_68 = \
-@ENABLE_KEYMAP_TRUE@ $(nodist_keymap_SOURCES)
-
-@ENABLE_KEYMAP_TRUE@am__append_69 = \
-@ENABLE_KEYMAP_TRUE@ keymap
-
-@ENABLE_KEYMAP_TRUE@am__append_70 = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/README.keymap.txt
-
-@ENABLE_KEYMAP_TRUE@am__append_71 = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/95-keymap.rules \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/95-keyboard-force-release.rules
-
-@ENABLE_KEYMAP_TRUE@am__append_72 = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/check-keymaps.sh
-
-@ENABLE_KEYMAP_TRUE@am__append_73 = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keys.txt \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keys-from-name.gperf \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keyboard-force-release.sh
-
-@HAVE_ACL_TRUE@am__append_74 = \
+@ENABLE_GUDEV_TRUE@@HAVE_INTROSPECTION_TRUE@am__append_80 = $(gir_DATA) $(typelibs_DATA)
+@ENABLE_GUDEV_TRUE@am__append_81 = libgudev-install-hook
+@ENABLE_GUDEV_TRUE@am__append_82 = libgudev-uninstall-hook
+@HAVE_ACL_TRUE@am__append_83 = \
@HAVE_ACL_TRUE@ libsystemd-acl.la
-@HAVE_QRENCODE_TRUE@am__append_75 = \
+@HAVE_QRENCODE_TRUE@am__append_84 = \
@HAVE_QRENCODE_TRUE@ src/journal/journal-qrcode.c \
@HAVE_QRENCODE_TRUE@ src/journal/journal-qrcode.h
-@HAVE_QRENCODE_TRUE@am__append_76 = \
+@HAVE_QRENCODE_TRUE@am__append_85 = \
@HAVE_QRENCODE_TRUE@ $(QRENCODE_CFLAGS)
-@HAVE_QRENCODE_TRUE@am__append_77 = \
+@HAVE_QRENCODE_TRUE@am__append_86 = \
@HAVE_QRENCODE_TRUE@ $(QRENCODE_LIBS)
-@ENABLE_LOGIND_TRUE@am__append_78 = \
+@ENABLE_LOGIND_TRUE@am__append_87 = \
@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la
-@HAVE_ACL_TRUE@am__append_79 = \
+@HAVE_ACL_TRUE@am__append_88 = \
@HAVE_ACL_TRUE@ libsystemd-acl.la
-@HAVE_XZ_TRUE@am__append_80 = \
+@HAVE_XZ_TRUE@am__append_89 = \
@HAVE_XZ_TRUE@ src/journal/compress.c
-@HAVE_XZ_TRUE@am__append_81 = \
+@HAVE_XZ_TRUE@am__append_90 = \
@HAVE_XZ_TRUE@ $(XZ_CFLAGS)
-@HAVE_XZ_TRUE@am__append_82 = \
+@HAVE_XZ_TRUE@am__append_91 = \
@HAVE_XZ_TRUE@ $(XZ_LIBS)
-@HAVE_XZ_TRUE@am__append_83 = \
+@HAVE_XZ_TRUE@am__append_92 = \
@HAVE_XZ_TRUE@ $(XZ_CFLAGS)
-@HAVE_XZ_TRUE@am__append_84 = \
+@HAVE_XZ_TRUE@am__append_93 = \
@HAVE_XZ_TRUE@ $(XZ_LIBS)
-@HAVE_GCRYPT_TRUE@am__append_85 = \
+@HAVE_GCRYPT_TRUE@am__append_94 = \
@HAVE_GCRYPT_TRUE@ src/journal/journal-authenticate.c \
@HAVE_GCRYPT_TRUE@ src/journal/journal-authenticate.h \
@HAVE_GCRYPT_TRUE@ src/journal/fsprg.c \
@HAVE_GCRYPT_TRUE@ src/journal/fsprg.h
-@HAVE_GCRYPT_TRUE@am__append_86 = \
+@HAVE_GCRYPT_TRUE@am__append_95 = \
@HAVE_GCRYPT_TRUE@ $(GCRYPT_CFLAGS) \
@HAVE_GCRYPT_TRUE@ -Wno-pointer-arith
-@HAVE_GCRYPT_TRUE@am__append_87 = \
+@HAVE_GCRYPT_TRUE@am__append_96 = \
@HAVE_GCRYPT_TRUE@ $(GCRYPT_LIBS)
-@HAVE_GCRYPT_TRUE@am__append_88 = \
+@HAVE_GCRYPT_TRUE@am__append_97 = \
@HAVE_GCRYPT_TRUE@ $(GCRYPT_CFLAGS) \
@HAVE_GCRYPT_TRUE@ -Wno-pointer-arith
-@HAVE_GCRYPT_TRUE@am__append_89 = \
+@HAVE_GCRYPT_TRUE@am__append_98 = \
@HAVE_GCRYPT_TRUE@ $(GCRYPT_LIBS)
-@HAVE_MICROHTTPD_TRUE@am__append_90 = \
+@HAVE_MICROHTTPD_TRUE@am__append_99 = \
@HAVE_MICROHTTPD_TRUE@ systemd-journal-gatewayd
-@HAVE_MICROHTTPD_TRUE@am__append_91 = \
+@HAVE_MICROHTTPD_TRUE@am__append_100 = \
@HAVE_MICROHTTPD_TRUE@ units/systemd-journal-gatewayd.socket
-@HAVE_MICROHTTPD_TRUE@am__append_92 = \
+@HAVE_MICROHTTPD_TRUE@am__append_101 = \
@HAVE_MICROHTTPD_TRUE@ units/systemd-journal-gatewayd.service
-@ENABLE_COREDUMP_TRUE@@ENABLE_LOGIND_TRUE@am__append_93 = \
+@ENABLE_COREDUMP_TRUE@@ENABLE_LOGIND_TRUE@am__append_102 = \
@ENABLE_COREDUMP_TRUE@@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la
-@ENABLE_COREDUMP_TRUE@am__append_94 = \
+@ENABLE_COREDUMP_TRUE@am__append_103 = \
@ENABLE_COREDUMP_TRUE@ systemd-coredump
-@ENABLE_COREDUMP_TRUE@am__append_95 = \
+@ENABLE_COREDUMP_TRUE@am__append_104 = \
@ENABLE_COREDUMP_TRUE@ systemd-coredumpctl
-@ENABLE_COREDUMP_TRUE@am__append_96 = \
+@ENABLE_COREDUMP_TRUE@am__append_105 = \
@ENABLE_COREDUMP_TRUE@ shell-completion/bash/systemd-coredumpctl
-@ENABLE_COREDUMP_TRUE@am__append_97 = \
+@ENABLE_COREDUMP_TRUE@am__append_106 = \
+@ENABLE_COREDUMP_TRUE@ shell-completion/zsh/_systemd-coredumpctl
+
+@ENABLE_COREDUMP_TRUE@am__append_107 = \
@ENABLE_COREDUMP_TRUE@ sysctl.d/50-coredump.conf
-@ENABLE_BINFMT_TRUE@am__append_98 = \
+@ENABLE_BINFMT_TRUE@am__append_108 = \
@ENABLE_BINFMT_TRUE@ systemd-binfmt
-@ENABLE_BINFMT_TRUE@am__append_99 = \
+@ENABLE_BINFMT_TRUE@am__append_109 = \
@ENABLE_BINFMT_TRUE@ units/proc-sys-fs-binfmt_misc.automount \
@ENABLE_BINFMT_TRUE@ units/proc-sys-fs-binfmt_misc.mount
-@ENABLE_BINFMT_TRUE@am__append_100 = \
+@ENABLE_BINFMT_TRUE@am__append_110 = \
@ENABLE_BINFMT_TRUE@ units/systemd-binfmt.service
-@ENABLE_BINFMT_TRUE@am__append_101 = \
+@ENABLE_BINFMT_TRUE@am__append_111 = \
@ENABLE_BINFMT_TRUE@ $(prefix)/lib/binfmt.d \
@ENABLE_BINFMT_TRUE@ $(sysconfdir)/binfmt.d
-@ENABLE_BINFMT_TRUE@am__append_102 = \
+@ENABLE_BINFMT_TRUE@am__append_112 = \
@ENABLE_BINFMT_TRUE@ systemd-binfmt.service \
@ENABLE_BINFMT_TRUE@ proc-sys-fs-binfmt_misc.automount
-@ENABLE_VCONSOLE_TRUE@am__append_103 = \
+@ENABLE_VCONSOLE_TRUE@am__append_113 = \
@ENABLE_VCONSOLE_TRUE@ systemd-vconsole-setup
-@ENABLE_VCONSOLE_TRUE@am__append_104 = \
+@ENABLE_VCONSOLE_TRUE@am__append_114 = \
@ENABLE_VCONSOLE_TRUE@ units/systemd-vconsole-setup.service
-@ENABLE_VCONSOLE_TRUE@am__append_105 = \
+@ENABLE_VCONSOLE_TRUE@am__append_115 = \
@ENABLE_VCONSOLE_TRUE@ systemd-vconsole-setup.service
-@ENABLE_READAHEAD_TRUE@am__append_106 = \
+@ENABLE_READAHEAD_TRUE@am__append_116 = \
@ENABLE_READAHEAD_TRUE@ src/readahead/sd-readahead.c \
@ENABLE_READAHEAD_TRUE@ src/systemd/sd-readahead.h
-@ENABLE_READAHEAD_TRUE@am__append_107 = \
+@ENABLE_READAHEAD_TRUE@am__append_117 = \
@ENABLE_READAHEAD_TRUE@ systemd-readahead
-@ENABLE_READAHEAD_TRUE@am__append_108 = \
+@ENABLE_READAHEAD_TRUE@am__append_118 = \
@ENABLE_READAHEAD_TRUE@ units/systemd-readahead-drop.service \
@ENABLE_READAHEAD_TRUE@ units/systemd-readahead-done.timer
-@ENABLE_READAHEAD_TRUE@am__append_109 = \
+@ENABLE_READAHEAD_TRUE@am__append_119 = \
@ENABLE_READAHEAD_TRUE@ units/systemd-readahead-collect.service \
@ENABLE_READAHEAD_TRUE@ units/systemd-readahead-replay.service \
@ENABLE_READAHEAD_TRUE@ units/systemd-readahead-done.service
-@ENABLE_BOOTCHART_TRUE@am__append_110 = \
+@ENABLE_BOOTCHART_TRUE@am__append_120 = \
@ENABLE_BOOTCHART_TRUE@ systemd-bootchart
-@ENABLE_BOOTCHART_TRUE@am__append_111 = \
+@ENABLE_BOOTCHART_TRUE@am__append_121 = \
@ENABLE_BOOTCHART_TRUE@ src/bootchart/bootchart.conf
# ------------------------------------------------------------------------------
-@ENABLE_QUOTACHECK_TRUE@am__append_112 = \
+@ENABLE_QUOTACHECK_TRUE@am__append_122 = \
@ENABLE_QUOTACHECK_TRUE@ systemd-quotacheck
-@ENABLE_QUOTACHECK_TRUE@am__append_113 = \
+@ENABLE_QUOTACHECK_TRUE@am__append_123 = \
@ENABLE_QUOTACHECK_TRUE@ units/systemd-quotacheck.service
# ------------------------------------------------------------------------------
-@ENABLE_RANDOMSEED_TRUE@am__append_114 = \
+@ENABLE_RANDOMSEED_TRUE@am__append_124 = \
@ENABLE_RANDOMSEED_TRUE@ systemd-random-seed
-@ENABLE_RANDOMSEED_TRUE@am__append_115 = \
-@ENABLE_RANDOMSEED_TRUE@ units/systemd-random-seed-save.service \
-@ENABLE_RANDOMSEED_TRUE@ units/systemd-random-seed-load.service
+@ENABLE_RANDOMSEED_TRUE@am__append_125 = \
+@ENABLE_RANDOMSEED_TRUE@ units/systemd-random-seed.service
-@ENABLE_RANDOMSEED_TRUE@am__append_116 = \
-@ENABLE_RANDOMSEED_TRUE@ systemd-random-seed-save.service
+@ENABLE_RANDOMSEED_TRUE@am__append_126 = \
+@ENABLE_RANDOMSEED_TRUE@ systemd-random-seed.service
-@ENABLE_RANDOMSEED_TRUE@am__append_117 = \
-@ENABLE_RANDOMSEED_TRUE@ systemd-random-seed-load.service
+
+# ------------------------------------------------------------------------------
+@ENABLE_BACKLIGHT_TRUE@am__append_127 = \
+@ENABLE_BACKLIGHT_TRUE@ systemd-backlight
+
+@ENABLE_BACKLIGHT_TRUE@am__append_128 = \
+@ENABLE_BACKLIGHT_TRUE@ units/systemd-backlight@.service
# ------------------------------------------------------------------------------
-@HAVE_LIBCRYPTSETUP_TRUE@am__append_118 = \
+@HAVE_LIBCRYPTSETUP_TRUE@am__append_129 = \
@HAVE_LIBCRYPTSETUP_TRUE@ systemd-cryptsetup
-@HAVE_LIBCRYPTSETUP_TRUE@am__append_119 = \
+@HAVE_LIBCRYPTSETUP_TRUE@am__append_130 = \
@HAVE_LIBCRYPTSETUP_TRUE@ systemd-cryptsetup-generator
-@HAVE_LIBCRYPTSETUP_TRUE@am__append_120 = \
+@HAVE_LIBCRYPTSETUP_TRUE@am__append_131 = \
@HAVE_LIBCRYPTSETUP_TRUE@ units/cryptsetup.target
-@HAVE_LIBCRYPTSETUP_TRUE@am__append_121 = \
+@HAVE_LIBCRYPTSETUP_TRUE@am__append_132 = \
@HAVE_LIBCRYPTSETUP_TRUE@ cryptsetup.target
-@ENABLE_HOSTNAMED_TRUE@am__append_122 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_133 = \
@ENABLE_HOSTNAMED_TRUE@ systemd-hostnamed
-@ENABLE_HOSTNAMED_TRUE@am__append_123 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_134 = \
@ENABLE_HOSTNAMED_TRUE@ units/systemd-hostnamed.service
-@ENABLE_HOSTNAMED_TRUE@am__append_124 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_135 = \
@ENABLE_HOSTNAMED_TRUE@ src/hostname/org.freedesktop.hostname1.conf
-@ENABLE_HOSTNAMED_TRUE@am__append_125 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_136 = \
@ENABLE_HOSTNAMED_TRUE@ src/hostname/org.freedesktop.hostname1.service
-@ENABLE_HOSTNAMED_TRUE@am__append_126 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_137 = \
@ENABLE_HOSTNAMED_TRUE@ src/hostname/org.freedesktop.hostname1.policy
-@ENABLE_HOSTNAMED_TRUE@am__append_127 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_138 = \
@ENABLE_HOSTNAMED_TRUE@ org.freedesktop.hostname1.xml
-@ENABLE_HOSTNAMED_TRUE@am__append_128 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_139 = \
@ENABLE_HOSTNAMED_TRUE@ systemd-hostnamed.service dbus-org.freedesktop.hostname1.service
-@ENABLE_HOSTNAMED_TRUE@am__append_129 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_140 = \
@ENABLE_HOSTNAMED_TRUE@ hostnamectl
-@ENABLE_HOSTNAMED_TRUE@am__append_130 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_141 = \
@ENABLE_HOSTNAMED_TRUE@ shell-completion/bash/hostnamectl
-@ENABLE_LOCALED_TRUE@am__append_131 = \
+@ENABLE_HOSTNAMED_TRUE@am__append_142 = \
+@ENABLE_HOSTNAMED_TRUE@ shell-completion/zsh/_hostnamectl
+
+@ENABLE_LOCALED_TRUE@am__append_143 = \
@ENABLE_LOCALED_TRUE@ units/systemd-localed.service
-@ENABLE_LOCALED_TRUE@am__append_132 = \
+@ENABLE_LOCALED_TRUE@am__append_144 = \
@ENABLE_LOCALED_TRUE@ systemd-localed
-@ENABLE_LOCALED_TRUE@am__append_133 = \
+@ENABLE_LOCALED_TRUE@am__append_145 = \
@ENABLE_LOCALED_TRUE@ src/locale/org.freedesktop.locale1.conf
-@ENABLE_LOCALED_TRUE@am__append_134 = \
+@ENABLE_LOCALED_TRUE@am__append_146 = \
@ENABLE_LOCALED_TRUE@ src/locale/org.freedesktop.locale1.service
-@ENABLE_LOCALED_TRUE@am__append_135 = \
+@ENABLE_LOCALED_TRUE@am__append_147 = \
@ENABLE_LOCALED_TRUE@ src/locale/org.freedesktop.locale1.policy
-@ENABLE_LOCALED_TRUE@am__append_136 = \
+@ENABLE_LOCALED_TRUE@am__append_148 = \
@ENABLE_LOCALED_TRUE@ org.freedesktop.locale1.xml
-@ENABLE_LOCALED_TRUE@am__append_137 = \
+@ENABLE_LOCALED_TRUE@am__append_149 = \
@ENABLE_LOCALED_TRUE@ systemd-localed.service dbus-org.freedesktop.locale1.service
-@ENABLE_LOCALED_TRUE@am__append_138 = \
+@ENABLE_LOCALED_TRUE@am__append_150 = \
@ENABLE_LOCALED_TRUE@ src/locale/kbd-model-map
-@ENABLE_LOCALED_TRUE@am__append_139 = \
+@ENABLE_LOCALED_TRUE@am__append_151 = \
@ENABLE_LOCALED_TRUE@ localectl
-@ENABLE_LOCALED_TRUE@am__append_140 = \
+@ENABLE_LOCALED_TRUE@am__append_152 = \
@ENABLE_LOCALED_TRUE@ shell-completion/bash/localectl
-@ENABLE_TIMEDATED_TRUE@am__append_141 = \
+@ENABLE_LOCALED_TRUE@am__append_153 = \
+@ENABLE_LOCALED_TRUE@ shell-completion/zsh/_localectl
+
+@ENABLE_TIMEDATED_TRUE@am__append_154 = \
@ENABLE_TIMEDATED_TRUE@ systemd-timedated
-@ENABLE_TIMEDATED_TRUE@am__append_142 = \
+@ENABLE_TIMEDATED_TRUE@am__append_155 = \
@ENABLE_TIMEDATED_TRUE@ src/timedate/org.freedesktop.timedate1.service
-@ENABLE_TIMEDATED_TRUE@am__append_143 = \
+@ENABLE_TIMEDATED_TRUE@am__append_156 = \
@ENABLE_TIMEDATED_TRUE@ src/timedate/org.freedesktop.timedate1.conf
-@ENABLE_TIMEDATED_TRUE@am__append_144 = \
+@ENABLE_TIMEDATED_TRUE@am__append_157 = \
@ENABLE_TIMEDATED_TRUE@ units/systemd-timedated.service
-@ENABLE_TIMEDATED_TRUE@am__append_145 = \
+@ENABLE_TIMEDATED_TRUE@am__append_158 = \
@ENABLE_TIMEDATED_TRUE@ src/timedate/org.freedesktop.timedate1.policy
-@ENABLE_TIMEDATED_TRUE@am__append_146 = \
+@ENABLE_TIMEDATED_TRUE@am__append_159 = \
@ENABLE_TIMEDATED_TRUE@ org.freedesktop.timedate1.xml
-@ENABLE_TIMEDATED_TRUE@am__append_147 = \
+@ENABLE_TIMEDATED_TRUE@am__append_160 = \
@ENABLE_TIMEDATED_TRUE@ $(prefix)/lib/systemd/ntp-units.d \
@ENABLE_TIMEDATED_TRUE@ $(sysconfdir)/systemd/ntp-units.d
-@ENABLE_TIMEDATED_TRUE@am__append_148 = \
+@ENABLE_TIMEDATED_TRUE@am__append_161 = \
@ENABLE_TIMEDATED_TRUE@ systemd-timedated.service dbus-org.freedesktop.timedate1.service
-@ENABLE_TIMEDATED_TRUE@am__append_149 = \
+@ENABLE_TIMEDATED_TRUE@am__append_162 = \
@ENABLE_TIMEDATED_TRUE@ timedatectl
-@ENABLE_TIMEDATED_TRUE@am__append_150 = \
+@ENABLE_TIMEDATED_TRUE@am__append_163 = \
@ENABLE_TIMEDATED_TRUE@ shell-completion/bash/timedatectl
-@ENABLE_EFI_TRUE@am__append_151 = \
-@ENABLE_EFI_TRUE@ bootctl
+@ENABLE_TIMEDATED_TRUE@am__append_164 = \
+@ENABLE_TIMEDATED_TRUE@ shell-completion/zsh/_timedatectl
-@HAVE_MYHOSTNAME_TRUE@am__append_152 = \
+@HAVE_MYHOSTNAME_TRUE@am__append_165 = \
@HAVE_MYHOSTNAME_TRUE@ libnss_myhostname.la
-@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@am__append_153 = \
+@ENABLE_MACHINED_TRUE@am__append_166 = \
+@ENABLE_MACHINED_TRUE@ systemd-machined
+
+@ENABLE_MACHINED_TRUE@am__append_167 = \
+@ENABLE_MACHINED_TRUE@ libsystemd-machine-core.la
+
+@ENABLE_MACHINED_TRUE@am__append_168 = \
+@ENABLE_MACHINED_TRUE@ machinectl
+
+@ENABLE_MACHINED_TRUE@am__append_169 = \
+@ENABLE_MACHINED_TRUE@ test-machine-tables
+
+@ENABLE_MACHINED_TRUE@am__append_170 = \
+@ENABLE_MACHINED_TRUE@ units/systemd-machined.service
+
+@ENABLE_MACHINED_TRUE@am__append_171 = \
+@ENABLE_MACHINED_TRUE@ units/machine.slice
+
+@ENABLE_MACHINED_TRUE@am__append_172 = \
+@ENABLE_MACHINED_TRUE@ src/machine/org.freedesktop.machine1.service
+
+@ENABLE_MACHINED_TRUE@am__append_173 = \
+@ENABLE_MACHINED_TRUE@ src/machine/org.freedesktop.machine1.conf
+
+@ENABLE_MACHINED_TRUE@am__append_174 = \
+@ENABLE_MACHINED_TRUE@ shell-completion/zsh/_machinectl
+
+@ENABLE_MACHINED_TRUE@am__append_175 = \
+@ENABLE_MACHINED_TRUE@ systemd-machined.service dbus-org.freedesktop.machine1.service
+
+@ENABLE_MACHINED_TRUE@am__append_176 = \
+@ENABLE_MACHINED_TRUE@ units/systemd-machined.service.in
+
+@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@am__append_177 = \
@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@ src/login/logind-acl.c
-@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@am__append_154 = \
+@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@am__append_178 = \
@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@ libsystemd-acl.la
-@ENABLE_LOGIND_TRUE@am__append_155 = systemd-logind \
+@ENABLE_LOGIND_TRUE@am__append_179 = libsystemd-logind-core.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la
+@ENABLE_LOGIND_TRUE@am__append_180 = systemd-logind \
@ENABLE_LOGIND_TRUE@ systemd-user-sessions systemd-multi-seat-x
-@ENABLE_LOGIND_TRUE@am__append_156 = loginctl systemd-inhibit
-@ENABLE_LOGIND_TRUE@am__append_157 = \
+@ENABLE_LOGIND_TRUE@am__append_181 = loginctl systemd-inhibit
+@ENABLE_LOGIND_TRUE@am__append_182 = \
@ENABLE_LOGIND_TRUE@ shell-completion/bash/loginctl
-@ENABLE_LOGIND_TRUE@am__append_158 = \
+@ENABLE_LOGIND_TRUE@am__append_183 = \
+@ENABLE_LOGIND_TRUE@ shell-completion/zsh/_loginctl \
+@ENABLE_LOGIND_TRUE@ shell-completion/zsh/_systemd-inhibit
+
+@ENABLE_LOGIND_TRUE@am__append_184 = \
@ENABLE_LOGIND_TRUE@ test-login \
@ENABLE_LOGIND_TRUE@ test-inhibit
-@ENABLE_LOGIND_TRUE@am__append_159 = libsystemd-login-install-hook
-@ENABLE_LOGIND_TRUE@am__append_160 = libsystemd-login-uninstall-hook
-@ENABLE_LOGIND_TRUE@am__append_161 = \
+@ENABLE_LOGIND_TRUE@am__append_185 = \
+@ENABLE_LOGIND_TRUE@ test-login-tables \
+@ENABLE_LOGIND_TRUE@ test-login-shared
+
+@ENABLE_LOGIND_TRUE@am__append_186 = libsystemd-login-install-hook
+@ENABLE_LOGIND_TRUE@am__append_187 = libsystemd-login-uninstall-hook
+@ENABLE_LOGIND_TRUE@am__append_188 = \
@ENABLE_LOGIND_TRUE@ units/systemd-logind.service \
@ENABLE_LOGIND_TRUE@ units/systemd-user-sessions.service
-@ENABLE_LOGIND_TRUE@am__append_162 = \
+@ENABLE_LOGIND_TRUE@am__append_189 = \
+@ENABLE_LOGIND_TRUE@ units/user.slice
+
+@ENABLE_LOGIND_TRUE@am__append_190 = \
@ENABLE_LOGIND_TRUE@ src/login/org.freedesktop.login1.service
-@ENABLE_LOGIND_TRUE@am__append_163 = \
+@ENABLE_LOGIND_TRUE@am__append_191 = \
@ENABLE_LOGIND_TRUE@ src/login/org.freedesktop.login1.conf
-@ENABLE_LOGIND_TRUE@am__append_164 = \
+@ENABLE_LOGIND_TRUE@am__append_192 = \
@ENABLE_LOGIND_TRUE@ src/login/logind.conf
-@ENABLE_LOGIND_TRUE@am__append_165 = \
+@ENABLE_LOGIND_TRUE@am__append_193 = \
@ENABLE_LOGIND_TRUE@ src/systemd/sd-login.h
-@ENABLE_LOGIND_TRUE@am__append_166 = \
+@ENABLE_LOGIND_TRUE@am__append_194 = \
@ENABLE_LOGIND_TRUE@ libsystemd-login.la
-@ENABLE_LOGIND_TRUE@am__append_167 = \
-@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la
-
-@ENABLE_LOGIND_TRUE@am__append_168 = \
+@ENABLE_LOGIND_TRUE@am__append_195 = \
@ENABLE_LOGIND_TRUE@ src/login/libsystemd-login.pc
-@ENABLE_LOGIND_TRUE@am__append_169 = \
+@ENABLE_LOGIND_TRUE@am__append_196 = \
@ENABLE_LOGIND_TRUE@ src/login/org.freedesktop.login1.policy
-@ENABLE_LOGIND_TRUE@am__append_170 = \
+@ENABLE_LOGIND_TRUE@am__append_197 = \
@ENABLE_LOGIND_TRUE@ $(systemdstatedir)
-@ENABLE_LOGIND_TRUE@am__append_171 = \
+@ENABLE_LOGIND_TRUE@am__append_198 = \
@ENABLE_LOGIND_TRUE@ systemd-logind.service \
@ENABLE_LOGIND_TRUE@ systemd-user-sessions.service
-@ENABLE_LOGIND_TRUE@am__append_172 = \
+@ENABLE_LOGIND_TRUE@am__append_199 = \
@ENABLE_LOGIND_TRUE@ systemd-logind.service dbus-org.freedesktop.login1.service
-@ENABLE_LOGIND_TRUE@am__append_173 = \
+@ENABLE_LOGIND_TRUE@am__append_200 = \
@ENABLE_LOGIND_TRUE@ src/login/70-uaccess.rules \
@ENABLE_LOGIND_TRUE@ src/login/70-power-switch.rules
-@ENABLE_LOGIND_TRUE@am__append_174 = \
+@ENABLE_LOGIND_TRUE@am__append_201 = \
@ENABLE_LOGIND_TRUE@ src/login/71-seat.rules \
@ENABLE_LOGIND_TRUE@ src/login/73-seat-late.rules
-@ENABLE_LOGIND_TRUE@am__append_175 = \
+@ENABLE_LOGIND_TRUE@am__append_202 = \
@ENABLE_LOGIND_TRUE@ src/login/logind-gperf.c \
@ENABLE_LOGIND_TRUE@ src/login/71-seat.rules \
@ENABLE_LOGIND_TRUE@ src/login/73-seat-late.rules
-@HAVE_PYTHON_DEVEL_TRUE@am__append_176 = \
+@HAVE_PYTHON_DEVEL_TRUE@am__append_203 = \
@HAVE_PYTHON_DEVEL_TRUE@ src/python-systemd/id128-constants.h
-@ENABLE_MANPAGES_TRUE@am__append_177 = \
+@ENABLE_MANPAGES_TRUE@am__append_204 = \
@ENABLE_MANPAGES_TRUE@ man/custom-entities.ent
-@HAVE_SYSV_COMPAT_TRUE@am__append_178 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_205 = \
@HAVE_SYSV_COMPAT_TRUE@ docs/sysvinit/README \
@HAVE_SYSV_COMPAT_TRUE@ docs/var-log/README
-@HAVE_SYSV_COMPAT_TRUE@am__append_179 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_206 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-update-utmp-runlevel.service
-@HAVE_SYSV_COMPAT_TRUE@am__append_180 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_207 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-update-utmp-runlevel.service
-@HAVE_SYSV_COMPAT_TRUE@am__append_181 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_208 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-update-utmp-runlevel.service
-@HAVE_SYSV_COMPAT_TRUE@am__append_182 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_209 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-update-utmp-runlevel.service
-@HAVE_SYSV_COMPAT_TRUE@am__append_183 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_210 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-update-utmp-runlevel.service
-@HAVE_SYSV_COMPAT_TRUE@am__append_184 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_211 = \
@HAVE_SYSV_COMPAT_TRUE@ poweroff.target runlevel0.target \
@HAVE_SYSV_COMPAT_TRUE@ rescue.target runlevel1.target \
@HAVE_SYSV_COMPAT_TRUE@ multi-user.target runlevel2.target \
@@ -789,22 +907,22 @@ DIST_COMMON = $(srcdir)/Makefile-man.am $(srcdir)/Makefile.in \
@HAVE_SYSV_COMPAT_TRUE@ graphical.target runlevel5.target \
@HAVE_SYSV_COMPAT_TRUE@ reboot.target runlevel6.target
-@HAVE_SYSV_COMPAT_TRUE@am__append_185 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_212 = \
@HAVE_SYSV_COMPAT_TRUE@ $(systemunitdir)/runlevel1.target.wants \
@HAVE_SYSV_COMPAT_TRUE@ $(systemunitdir)/runlevel2.target.wants \
@HAVE_SYSV_COMPAT_TRUE@ $(systemunitdir)/runlevel3.target.wants \
@HAVE_SYSV_COMPAT_TRUE@ $(systemunitdir)/runlevel4.target.wants \
@HAVE_SYSV_COMPAT_TRUE@ $(systemunitdir)/runlevel5.target.wants
-@HAVE_SYSV_COMPAT_TRUE@am__append_186 = \
+@HAVE_SYSV_COMPAT_TRUE@am__append_213 = \
@HAVE_SYSV_COMPAT_TRUE@ --with-sysvinit-path=$$dc_install_base/$(sysvinitdir) \
@HAVE_SYSV_COMPAT_TRUE@ --with-sysvrcnd-path=$$dc_install_base/$(sysvrcnddir)
-@HAVE_SYSV_COMPAT_FALSE@am__append_187 = \
+@HAVE_SYSV_COMPAT_FALSE@am__append_214 = \
@HAVE_SYSV_COMPAT_FALSE@ --with-sysvinit-path= \
@HAVE_SYSV_COMPAT_FALSE@ --with-sysvrcnd-path=
-@ENABLE_GTK_DOC_TRUE@am__append_188 = \
+@ENABLE_GTK_DOC_TRUE@am__append_215 = \
@ENABLE_GTK_DOC_TRUE@ --enable-gtk-doc
subdir = .
@@ -855,25 +973,24 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pamlibdir)" \
"$(DESTDIR)$(rootbindir)" "$(DESTDIR)$(rootlibexecdir)" \
"$(DESTDIR)$(systemgeneratordir)" \
"$(DESTDIR)$(udevlibexecdir)" "$(DESTDIR)$(bindir)" \
- "$(DESTDIR)$(kernelinstalldir)" "$(DESTDIR)$(udevhomedir)" \
- "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(man1dir)" \
- "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" \
- "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)" \
- "$(DESTDIR)$(dbusinterfacedir)" \
+ "$(DESTDIR)$(kernelinstalldir)" "$(DESTDIR)$(pkgpyexecdir)" \
+ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)" \
+ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(dbusinterfacedir)" \
"$(DESTDIR)$(bashcompletiondir)" "$(DESTDIR)$(catalogdir)" \
"$(DESTDIR)$(dbuspolicydir)" \
"$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(docdir)" \
"$(DESTDIR)$(gatewayddocumentrootdir)" \
- "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgsysconfdir)" \
- "$(DESTDIR)$(sysctldir)" "$(DESTDIR)$(systemunitdir)" \
- "$(DESTDIR)$(tmpfilesdir)" "$(DESTDIR)$(udevconfdir)" \
- "$(DESTDIR)$(udevhwdbdir)" "$(DESTDIR)$(udevkeymapdir)" \
- "$(DESTDIR)$(udevkeymapforcereldir)" \
- "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(userunitdir)" \
- "$(DESTDIR)$(girdir)" "$(DESTDIR)$(polkitpolicydir)" \
- "$(DESTDIR)$(rpmmacrosdir)" "$(DESTDIR)$(systemunitdir)" \
+ "$(DESTDIR)$(pamconfdir)" "$(DESTDIR)$(pkgdatadir)" \
+ "$(DESTDIR)$(pkgsysconfdir)" "$(DESTDIR)$(sysctldir)" \
+ "$(DESTDIR)$(systemunitdir)" "$(DESTDIR)$(tmpfilesdir)" \
+ "$(DESTDIR)$(udevconfdir)" "$(DESTDIR)$(udevhwdbdir)" \
"$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(userunitdir)" \
- "$(DESTDIR)$(pkgconfigdatadir)" "$(DESTDIR)$(pkgconfiglibdir)" \
+ "$(DESTDIR)$(zshcompletiondir)" "$(DESTDIR)$(girdir)" \
+ "$(DESTDIR)$(polkitpolicydir)" "$(DESTDIR)$(rpmmacrosdir)" \
+ "$(DESTDIR)$(systemunitdir)" "$(DESTDIR)$(udevrulesdir)" \
+ "$(DESTDIR)$(userunitdir)" "$(DESTDIR)$(pkgconfigdatadir)" \
+ "$(DESTDIR)$(pkgconfiglibdir)" \
"$(DESTDIR)$(sharepkgconfigdir)" "$(DESTDIR)$(sysctldir)" \
"$(DESTDIR)$(sysvinitdir)" "$(DESTDIR)$(typelibsdir)" \
"$(DESTDIR)$(varlogdir)" "$(DESTDIR)$(includedir)" \
@@ -914,7 +1031,8 @@ _journal_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-journal.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-id128.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-shared.la \
-@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la
+@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la \
+@HAVE_PYTHON_DEVEL_TRUE@ $(am__DEPENDENCIES_1)
am___reader_la_SOURCES_DIST = src/python-systemd/_reader.c \
src/python-systemd/pyutil.c src/python-systemd/pyutil.h
@HAVE_PYTHON_DEVEL_TRUE@am__reader_la_OBJECTS = src/python-systemd/_reader_la-_reader.lo \
@@ -988,17 +1106,24 @@ am_libsystemd_audit_la_OBJECTS = src/shared/audit.lo
libsystemd_audit_la_OBJECTS = $(am_libsystemd_audit_la_OBJECTS)
libsystemd_bus_la_DEPENDENCIES = libsystemd-id128-internal.la \
libsystemd-shared.la libsystemd-daemon.la
-am_libsystemd_bus_la_OBJECTS = src/libsystemd-bus/sd-bus.lo \
- src/libsystemd-bus/bus-control.lo \
- src/libsystemd-bus/bus-error.lo \
- src/libsystemd-bus/bus-internal.lo \
- src/libsystemd-bus/bus-socket.lo \
- src/libsystemd-bus/bus-kernel.lo \
- src/libsystemd-bus/bus-message.lo \
- src/libsystemd-bus/bus-signature.lo \
- src/libsystemd-bus/bus-type.lo src/libsystemd-bus/bus-match.lo \
- src/libsystemd-bus/bus-bloom.lo
+am_libsystemd_bus_la_OBJECTS = \
+ src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-control.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-error.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-message.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-type.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-match.lo \
+ src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo \
+ src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo
libsystemd_bus_la_OBJECTS = $(am_libsystemd_bus_la_OBJECTS)
+libsystemd_bus_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libsystemd_bus_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
libsystemd_capability_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libsystemd_capability_la_OBJECTS = \
src/shared/libsystemd_capability_la-capability.lo
@@ -1026,24 +1151,29 @@ am__libsystemd_core_la_SOURCES_DIST = src/core/unit.c src/core/unit.h \
src/core/device.h src/core/target.c src/core/target.h \
src/core/snapshot.c src/core/snapshot.h src/core/socket.c \
src/core/socket.h src/core/timer.c src/core/timer.h \
- src/core/path.c src/core/path.h src/core/load-dropin.c \
- src/core/load-dropin.h src/core/execute.c src/core/execute.h \
- src/core/kill.c src/core/kill.h src/core/dbus.c \
- src/core/dbus.h src/core/dbus-manager.c \
- src/core/dbus-manager.h src/core/dbus-unit.c \
- src/core/dbus-unit.h src/core/dbus-job.c src/core/dbus-job.h \
- src/core/dbus-service.c src/core/dbus-service.h \
- src/core/dbus-socket.c src/core/dbus-socket.h \
- src/core/dbus-timer.c src/core/dbus-timer.h \
- src/core/dbus-target.c src/core/dbus-target.h \
- src/core/dbus-mount.c src/core/dbus-mount.h \
- src/core/dbus-automount.c src/core/dbus-automount.h \
- src/core/dbus-swap.c src/core/dbus-swap.h \
- src/core/dbus-snapshot.c src/core/dbus-snapshot.h \
- src/core/dbus-device.c src/core/dbus-device.h \
- src/core/dbus-execute.c src/core/dbus-execute.h \
- src/core/dbus-kill.c src/core/dbus-kill.h src/core/dbus-path.c \
- src/core/dbus-path.h src/core/cgroup.c src/core/cgroup.h \
+ src/core/path.c src/core/path.h src/core/slice.c \
+ src/core/slice.h src/core/scope.c src/core/scope.h \
+ src/core/load-dropin.c src/core/load-dropin.h \
+ src/core/execute.c src/core/execute.h src/core/kill.c \
+ src/core/kill.h src/core/dbus.c src/core/dbus.h \
+ src/core/dbus-manager.c src/core/dbus-manager.h \
+ src/core/dbus-unit.c src/core/dbus-unit.h src/core/dbus-job.c \
+ src/core/dbus-job.h src/core/dbus-service.c \
+ src/core/dbus-service.h src/core/dbus-socket.c \
+ src/core/dbus-socket.h src/core/dbus-timer.c \
+ src/core/dbus-timer.h src/core/dbus-target.c \
+ src/core/dbus-target.h src/core/dbus-mount.c \
+ src/core/dbus-mount.h src/core/dbus-automount.c \
+ src/core/dbus-automount.h src/core/dbus-swap.c \
+ src/core/dbus-swap.h src/core/dbus-snapshot.c \
+ src/core/dbus-snapshot.h src/core/dbus-device.c \
+ src/core/dbus-device.h src/core/dbus-path.c \
+ src/core/dbus-path.h src/core/dbus-slice.c \
+ src/core/dbus-slice.h src/core/dbus-scope.c \
+ src/core/dbus-scope.h src/core/dbus-execute.c \
+ src/core/dbus-execute.h src/core/dbus-kill.c \
+ src/core/dbus-kill.h src/core/dbus-cgroup.c \
+ src/core/dbus-cgroup.h src/core/cgroup.c src/core/cgroup.h \
src/core/selinux-access.c src/core/selinux-access.h \
src/core/selinux-setup.c src/core/selinux-setup.h \
src/core/smack-setup.c src/core/smack-setup.h \
@@ -1055,14 +1185,12 @@ am__libsystemd_core_la_SOURCES_DIST = src/core/unit.c src/core/unit.h \
src/core/loopback-setup.h src/core/loopback-setup.c \
src/core/condition.c src/core/condition.h src/core/namespace.c \
src/core/namespace.h src/core/tcpwrap.c src/core/tcpwrap.h \
- src/core/cgroup-attr.c src/core/cgroup-attr.h \
- src/core/cgroup-semantics.c src/core/cgroup-semantics.h \
src/core/securebits.h src/core/initreq.h src/core/special.h \
src/core/bus-errors.h src/core/build.h src/core/sysfs-show.h \
src/core/switch-root.h src/core/switch-root.c \
src/core/killall.h src/core/killall.c src/core/syscall-list.c \
src/core/syscall-list.h src/core/audit-fd.c \
- src/core/audit-fd.h src/core/sync.c src/core/sync.h \
+ src/core/audit-fd.h src/core/async.c src/core/async.h \
src/core/kmod-setup.c src/core/kmod-setup.h
@HAVE_KMOD_TRUE@am__objects_1 = \
@HAVE_KMOD_TRUE@ src/core/libsystemd_core_la-kmod-setup.lo
@@ -1082,6 +1210,8 @@ am_libsystemd_core_la_OBJECTS = src/core/libsystemd_core_la-unit.lo \
src/core/libsystemd_core_la-socket.lo \
src/core/libsystemd_core_la-timer.lo \
src/core/libsystemd_core_la-path.lo \
+ src/core/libsystemd_core_la-slice.lo \
+ src/core/libsystemd_core_la-scope.lo \
src/core/libsystemd_core_la-load-dropin.lo \
src/core/libsystemd_core_la-execute.lo \
src/core/libsystemd_core_la-kill.lo \
@@ -1098,9 +1228,12 @@ am_libsystemd_core_la_OBJECTS = src/core/libsystemd_core_la-unit.lo \
src/core/libsystemd_core_la-dbus-swap.lo \
src/core/libsystemd_core_la-dbus-snapshot.lo \
src/core/libsystemd_core_la-dbus-device.lo \
+ src/core/libsystemd_core_la-dbus-path.lo \
+ src/core/libsystemd_core_la-dbus-slice.lo \
+ src/core/libsystemd_core_la-dbus-scope.lo \
src/core/libsystemd_core_la-dbus-execute.lo \
src/core/libsystemd_core_la-dbus-kill.lo \
- src/core/libsystemd_core_la-dbus-path.lo \
+ src/core/libsystemd_core_la-dbus-cgroup.lo \
src/core/libsystemd_core_la-cgroup.lo \
src/core/libsystemd_core_la-selinux-access.lo \
src/core/libsystemd_core_la-selinux-setup.lo \
@@ -1114,13 +1247,11 @@ am_libsystemd_core_la_OBJECTS = src/core/libsystemd_core_la-unit.lo \
src/core/libsystemd_core_la-condition.lo \
src/core/libsystemd_core_la-namespace.lo \
src/core/libsystemd_core_la-tcpwrap.lo \
- src/core/libsystemd_core_la-cgroup-attr.lo \
- src/core/libsystemd_core_la-cgroup-semantics.lo \
src/core/libsystemd_core_la-switch-root.lo \
src/core/libsystemd_core_la-killall.lo \
src/core/libsystemd_core_la-syscall-list.lo \
src/core/libsystemd_core_la-audit-fd.lo \
- src/core/libsystemd_core_la-sync.lo $(am__objects_1)
+ src/core/libsystemd_core_la-async.lo $(am__objects_1)
nodist_libsystemd_core_la_OBJECTS = \
src/core/libsystemd_core_la-load-fragment-gperf.lo \
src/core/libsystemd_core_la-load-fragment-gperf-nulstr.lo
@@ -1135,7 +1266,7 @@ am__objects_2 = src/libsystemd-daemon/sd-daemon.lo
am_libsystemd_daemon_internal_la_OBJECTS = $(am__objects_2)
libsystemd_daemon_internal_la_OBJECTS = \
$(am_libsystemd_daemon_internal_la_OBJECTS)
-libsystemd_daemon_la_LIBADD =
+libsystemd_daemon_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libsystemd_daemon_la_OBJECTS = \
src/libsystemd-daemon/libsystemd_daemon_la-sd-daemon.lo
libsystemd_daemon_la_OBJECTS = $(am_libsystemd_daemon_la_OBJECTS)
@@ -1159,7 +1290,8 @@ am_libsystemd_id128_internal_la_OBJECTS = $(am__objects_3)
libsystemd_id128_internal_la_OBJECTS = \
$(am_libsystemd_id128_internal_la_OBJECTS)
libsystemd_id128_la_DEPENDENCIES = libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-label.la libsystemd-daemon-internal.la \
+ $(am__DEPENDENCIES_1)
am_libsystemd_id128_la_OBJECTS = \
src/libsystemd-id128/libsystemd_id128_la-sd-id128.lo
libsystemd_id128_la_OBJECTS = $(am_libsystemd_id128_la_OBJECTS)
@@ -1171,8 +1303,8 @@ libsystemd_id128_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
@HAVE_GCRYPT_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
libsystemd_journal_internal_la_DEPENDENCIES = libsystemd-label.la \
libsystemd-audit.la libsystemd-daemon.la libudev.la \
- libsystemd-shared.la libsystemd-label.la $(am__append_78) \
- $(am__append_79) $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
+ libsystemd-shared.la libsystemd-label.la $(am__append_87) \
+ $(am__append_88) $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
am__libsystemd_journal_internal_la_SOURCES_DIST = \
src/journal/sd-journal.c src/systemd/sd-journal.h \
src/journal/journal-file.c src/journal/journal-file.h \
@@ -1227,8 +1359,8 @@ libsystemd_journal_internal_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
libsystemd_journal_la_DEPENDENCIES = libsystemd-shared.la \
libsystemd-label.la libsystemd-daemon-internal.la \
- libsystemd-id128-internal.la $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_3)
+ $(am__DEPENDENCIES_1) libsystemd-id128-internal.la \
+ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
am__libsystemd_journal_la_SOURCES_DIST = src/journal/sd-journal.c \
src/systemd/sd-journal.h src/journal/journal-file.c \
src/journal/journal-file.h src/journal/journal-vacuum.c \
@@ -1262,11 +1394,10 @@ libsystemd_journal_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libsystemd_journal_la_LDFLAGS) $(LDFLAGS) -o $@
libsystemd_label_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libsystemd_label_la_OBJECTS = \
- src/shared/libsystemd_label_la-cgroup-label.lo \
src/shared/libsystemd_label_la-socket-label.lo \
src/shared/libsystemd_label_la-label.lo \
src/shared/libsystemd_label_la-selinux-util.lo \
- src/shared/libsystemd_label_la-mkdir.lo \
+ src/shared/libsystemd_label_la-mkdir-label.lo \
src/shared/libsystemd_label_la-ask-password-api.lo \
src/shared/libsystemd_label_la-fileio-label.lo \
src/shared/libsystemd_label_la-dev-setup.lo
@@ -1276,8 +1407,11 @@ libsystemd_label_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libsystemd_label_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
libsystemd_login_internal_la_LIBADD =
-am__libsystemd_login_internal_la_SOURCES_DIST = src/login/sd-login.c
-@ENABLE_LOGIND_TRUE@am__objects_9 = src/login/sd-login.lo
+am__libsystemd_login_internal_la_SOURCES_DIST = src/login/sd-login.c \
+ src/systemd/sd-login.h src/login/login-shared.c \
+ src/login/login-shared.h
+@ENABLE_LOGIND_TRUE@am__objects_9 = src/login/sd-login.lo \
+@ENABLE_LOGIND_TRUE@ src/login/login-shared.lo
@ENABLE_LOGIND_TRUE@am_libsystemd_login_internal_la_OBJECTS = \
@ENABLE_LOGIND_TRUE@ $(am__objects_9)
libsystemd_login_internal_la_OBJECTS = \
@@ -1285,16 +1419,62 @@ libsystemd_login_internal_la_OBJECTS = \
@ENABLE_LOGIND_TRUE@am_libsystemd_login_internal_la_rpath =
@ENABLE_LOGIND_TRUE@libsystemd_login_la_DEPENDENCIES = \
@ENABLE_LOGIND_TRUE@ libsystemd-shared.la \
-@ENABLE_LOGIND_TRUE@ libsystemd-daemon-internal.la
-am__libsystemd_login_la_SOURCES_DIST = src/login/sd-login.c
+@ENABLE_LOGIND_TRUE@ libsystemd-daemon-internal.la \
+@ENABLE_LOGIND_TRUE@ $(am__DEPENDENCIES_1)
+am__libsystemd_login_la_SOURCES_DIST = src/login/sd-login.c \
+ src/systemd/sd-login.h src/login/login-shared.c \
+ src/login/login-shared.h
@ENABLE_LOGIND_TRUE@am_libsystemd_login_la_OBJECTS = \
-@ENABLE_LOGIND_TRUE@ src/login/libsystemd_login_la-sd-login.lo
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_login_la-sd-login.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_login_la-login-shared.lo
libsystemd_login_la_OBJECTS = $(am_libsystemd_login_la_OBJECTS)
libsystemd_login_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libsystemd_login_la_CFLAGS) $(CFLAGS) \
$(libsystemd_login_la_LDFLAGS) $(LDFLAGS) -o $@
@ENABLE_LOGIND_TRUE@am_libsystemd_login_la_rpath = -rpath $(libdir)
+@ENABLE_LOGIND_TRUE@libsystemd_logind_core_la_DEPENDENCIES = \
+@ENABLE_LOGIND_TRUE@ libsystemd-label.la libsystemd-audit.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-shared.la libsystemd-daemon.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-dbus.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-id128-internal.la libudev.la \
+@ENABLE_LOGIND_TRUE@ $(am__append_178)
+am__libsystemd_logind_core_la_SOURCES_DIST = src/login/logind-core.c \
+ src/login/logind-dbus.c src/login/logind-device.c \
+ src/login/logind-device.h src/login/logind-button.c \
+ src/login/logind-button.h src/login/logind-action.c \
+ src/login/logind-action.h src/login/logind-seat.c \
+ src/login/logind-seat.h src/login/logind-session.c \
+ src/login/logind-session.h src/login/logind-session-device.c \
+ src/login/logind-session-device.h src/login/logind-user.c \
+ src/login/logind-user.h src/login/logind-inhibit.c \
+ src/login/logind-inhibit.h src/login/logind-session-dbus.c \
+ src/login/logind-seat-dbus.c src/login/logind-user-dbus.c \
+ src/login/logind-acl.h src/login/login-shared.c \
+ src/login/login-shared.h src/login/logind-acl.c
+@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@am__objects_10 = src/login/libsystemd_logind_core_la-logind-acl.lo
+@ENABLE_LOGIND_TRUE@am_libsystemd_logind_core_la_OBJECTS = src/login/libsystemd_logind_core_la-logind-core.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-dbus.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-device.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-button.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-action.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-seat.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-session.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-session-device.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-user.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-inhibit.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-session-dbus.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-seat-dbus.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-logind-user-dbus.lo \
+@ENABLE_LOGIND_TRUE@ src/login/libsystemd_logind_core_la-login-shared.lo \
+@ENABLE_LOGIND_TRUE@ $(am__objects_10)
+libsystemd_logind_core_la_OBJECTS = \
+ $(am_libsystemd_logind_core_la_OBJECTS)
+libsystemd_logind_core_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@ENABLE_LOGIND_TRUE@am_libsystemd_logind_core_la_rpath =
libsystemd_logs_la_DEPENDENCIES = libsystemd-journal-internal.la \
libsystemd-id128-internal.la libsystemd-shared.la
am_libsystemd_logs_la_OBJECTS = \
@@ -1304,9 +1484,27 @@ libsystemd_logs_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libsystemd_logs_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
+@ENABLE_MACHINED_TRUE@libsystemd_machine_core_la_DEPENDENCIES = \
+@ENABLE_MACHINED_TRUE@ libsystemd-label.la libsystemd-audit.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-shared.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-daemon.la libsystemd-dbus.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-id128-internal.la libudev.la
+am__libsystemd_machine_core_la_SOURCES_DIST = \
+ src/machine/machined-dbus.c src/machine/machine.c \
+ src/machine/machine.h src/machine/machine-dbus.c
+@ENABLE_MACHINED_TRUE@am_libsystemd_machine_core_la_OBJECTS = src/machine/libsystemd_machine_core_la-machined-dbus.lo \
+@ENABLE_MACHINED_TRUE@ src/machine/libsystemd_machine_core_la-machine.lo \
+@ENABLE_MACHINED_TRUE@ src/machine/libsystemd_machine_core_la-machine-dbus.lo
+libsystemd_machine_core_la_OBJECTS = \
+ $(am_libsystemd_machine_core_la_OBJECTS)
+libsystemd_machine_core_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@ENABLE_MACHINED_TRUE@am_libsystemd_machine_core_la_rpath =
libsystemd_shared_la_LIBADD =
-am_libsystemd_shared_la_OBJECTS = src/shared/util.lo \
- src/shared/virt.lo src/shared/efivars.lo \
+am_libsystemd_shared_la_OBJECTS = src/shared/device-nodes.lo \
+ src/shared/util.lo src/shared/virt.lo src/shared/efivars.lo \
src/shared/path-util.lo src/shared/time-util.lo \
src/shared/hashmap.lo src/shared/set.lo src/shared/fdset.lo \
src/shared/prioq.lo src/shared/sleep-config.lo \
@@ -1322,7 +1520,8 @@ am_libsystemd_shared_la_OBJECTS = src/shared/util.lo \
src/shared/replace-var.lo src/shared/spawn-polkit-agent.lo \
src/shared/hwclock.lo src/shared/time-dst.lo \
src/shared/calendarspec.lo src/shared/fileio.lo \
- src/shared/MurmurHash3.lo
+ src/shared/MurmurHash3.lo src/shared/acpi-fpdt.lo \
+ src/shared/boot-timestamps.lo src/shared/mkdir.lo
libsystemd_shared_la_OBJECTS = $(am_libsystemd_shared_la_OBJECTS)
libsystemd_units_la_LIBADD =
am_libsystemd_units_la_OBJECTS = \
@@ -1336,26 +1535,31 @@ libsystemd_units_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libsystemd_units_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
libudev_core_la_DEPENDENCIES = libudev-private.la libsystemd-label.la \
- libsystemd-daemon-internal.la libsystemd-shared.la \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_58)
+ libsystemd-daemon-internal.la $(am__DEPENDENCIES_1) \
+ libsystemd-shared.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__append_73)
am__libudev_core_la_SOURCES_DIST = src/udev/udev.h \
src/udev/udev-event.c src/udev/udev-watch.c \
src/udev/udev-node.c src/udev/udev-rules.c \
src/udev/udev-ctrl.c src/udev/udev-builtin.c \
src/udev/udev-builtin-btrfs.c src/udev/udev-builtin-hwdb.c \
src/udev/udev-builtin-input_id.c \
+ src/udev/udev-builtin-keyboard.c \
src/udev/udev-builtin-net_id.c src/udev/udev-builtin-path_id.c \
src/udev/udev-builtin-usb_id.c \
src/udev/udev-builtin-firmware.c src/udev/udev-builtin-kmod.c \
src/udev/udev-builtin-blkid.c src/udev/udev-builtin-uaccess.c \
- src/login/logind-acl.c src/login/sd-login.c
-@ENABLE_FIRMWARE_TRUE@am__objects_10 = src/udev/libudev_core_la-udev-builtin-firmware.lo
-@HAVE_KMOD_TRUE@am__objects_11 = \
+ src/login/logind-acl.c src/login/sd-login.c \
+ src/systemd/sd-login.h src/login/login-shared.c \
+ src/login/login-shared.h
+@ENABLE_FIRMWARE_TRUE@am__objects_11 = src/udev/libudev_core_la-udev-builtin-firmware.lo
+@HAVE_KMOD_TRUE@am__objects_12 = \
@HAVE_KMOD_TRUE@ src/udev/libudev_core_la-udev-builtin-kmod.lo
-@HAVE_BLKID_TRUE@am__objects_12 = src/udev/libudev_core_la-udev-builtin-blkid.lo
-@HAVE_ACL_TRUE@am__objects_13 = src/udev/libudev_core_la-udev-builtin-uaccess.lo \
+@HAVE_BLKID_TRUE@am__objects_13 = src/udev/libudev_core_la-udev-builtin-blkid.lo
+@HAVE_ACL_TRUE@am__objects_14 = src/udev/libudev_core_la-udev-builtin-uaccess.lo \
@HAVE_ACL_TRUE@ src/login/libudev_core_la-logind-acl.lo \
-@HAVE_ACL_TRUE@ src/login/libudev_core_la-sd-login.lo
+@HAVE_ACL_TRUE@ src/login/libudev_core_la-sd-login.lo \
+@HAVE_ACL_TRUE@ src/login/libudev_core_la-login-shared.lo
am_libudev_core_la_OBJECTS = src/udev/libudev_core_la-udev-event.lo \
src/udev/libudev_core_la-udev-watch.lo \
src/udev/libudev_core_la-udev-node.lo \
@@ -1365,18 +1569,21 @@ am_libudev_core_la_OBJECTS = src/udev/libudev_core_la-udev-event.lo \
src/udev/libudev_core_la-udev-builtin-btrfs.lo \
src/udev/libudev_core_la-udev-builtin-hwdb.lo \
src/udev/libudev_core_la-udev-builtin-input_id.lo \
+ src/udev/libudev_core_la-udev-builtin-keyboard.lo \
src/udev/libudev_core_la-udev-builtin-net_id.lo \
src/udev/libudev_core_la-udev-builtin-path_id.lo \
src/udev/libudev_core_la-udev-builtin-usb_id.lo \
- $(am__objects_10) $(am__objects_11) $(am__objects_12) \
- $(am__objects_13)
-libudev_core_la_OBJECTS = $(am_libudev_core_la_OBJECTS)
+ $(am__objects_11) $(am__objects_12) $(am__objects_13) \
+ $(am__objects_14)
+nodist_libudev_core_la_OBJECTS =
+libudev_core_la_OBJECTS = $(am_libudev_core_la_OBJECTS) \
+ $(nodist_libudev_core_la_OBJECTS)
libudev_core_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libudev_core_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
libudev_private_la_DEPENDENCIES = libsystemd-shared.la
-am__objects_14 = src/libudev/libudev_private_la-libudev.lo \
+am__objects_15 = src/libudev/libudev_private_la-libudev.lo \
src/libudev/libudev_private_la-libudev-list.lo \
src/libudev/libudev_private_la-libudev-util.lo \
src/libudev/libudev_private_la-libudev-device.lo \
@@ -1384,7 +1591,7 @@ am__objects_14 = src/libudev/libudev_private_la-libudev.lo \
src/libudev/libudev_private_la-libudev-monitor.lo \
src/libudev/libudev_private_la-libudev-queue.lo \
src/libudev/libudev_private_la-libudev-hwdb.lo
-am_libudev_private_la_OBJECTS = $(am__objects_14) \
+am_libudev_private_la_OBJECTS = $(am__objects_15) \
src/libudev/libudev_private_la-libudev-device-private.lo \
src/libudev/libudev_private_la-libudev-queue-private.lo
libudev_private_la_OBJECTS = $(am_libudev_private_la_OBJECTS)
@@ -1392,8 +1599,9 @@ libudev_private_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libudev_private_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
-libudev_la_DEPENDENCIES = libsystemd-shared.la \
- libsystemd-daemon-internal.la libsystemd-id128-internal.la
+libudev_la_DEPENDENCIES = libsystemd-shared.la libsystemd-label.la \
+ libsystemd-daemon-internal.la $(am__DEPENDENCIES_1) \
+ libsystemd-id128-internal.la
am_libudev_la_OBJECTS = src/libudev/libudev_la-libudev.lo \
src/libudev/libudev_la-libudev-list.lo \
src/libudev/libudev_la-libudev-util.lo \
@@ -1410,7 +1618,8 @@ libudev_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-journal.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-login.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-shared.la \
-@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la
+@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la \
+@HAVE_PYTHON_DEVEL_TRUE@ $(am__DEPENDENCIES_1)
am__login_la_SOURCES_DIST = src/python-systemd/login.c \
src/python-systemd/pyutil.c src/python-systemd/pyutil.h
@HAVE_PYTHON_DEVEL_TRUE@am_login_la_OBJECTS = \
@@ -1426,6 +1635,7 @@ login_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ libsystemd-dbus.la \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ libsystemd-shared.la \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ libsystemd-daemon-internal.la \
+@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ $(am__DEPENDENCIES_1) \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ $(am__DEPENDENCIES_1)
am__pam_systemd_la_SOURCES_DIST = src/login/pam-module.c
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@am_pam_systemd_la_OBJECTS = src/login/pam_systemd_la-pam-module.lo
@@ -1436,12 +1646,12 @@ pam_systemd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(LDFLAGS) -o $@
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@am_pam_systemd_la_rpath = -rpath \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ $(pamlibdir)
-@ENABLE_COREDUMP_TRUE@am__EXEEXT_1 = systemd-coredumpctl$(EXEEXT)
-@ENABLE_HOSTNAMED_TRUE@am__EXEEXT_2 = hostnamectl$(EXEEXT)
-@ENABLE_LOCALED_TRUE@am__EXEEXT_3 = localectl$(EXEEXT)
-@ENABLE_TIMEDATED_TRUE@am__EXEEXT_4 = timedatectl$(EXEEXT)
-@ENABLE_EFI_TRUE@am__EXEEXT_5 = bootctl$(EXEEXT)
-@ENABLE_EFI_TRUE@am__EXEEXT_6 = test-efivars$(EXEEXT)
+@ENABLE_EFI_TRUE@am__EXEEXT_1 = bootctl$(EXEEXT)
+@ENABLE_COREDUMP_TRUE@am__EXEEXT_2 = systemd-coredumpctl$(EXEEXT)
+@ENABLE_HOSTNAMED_TRUE@am__EXEEXT_3 = hostnamectl$(EXEEXT)
+@ENABLE_LOCALED_TRUE@am__EXEEXT_4 = localectl$(EXEEXT)
+@ENABLE_TIMEDATED_TRUE@am__EXEEXT_5 = timedatectl$(EXEEXT)
+@ENABLE_EFI_TRUE@am__EXEEXT_6 = test-boot-timestamp$(EXEEXT)
@ENABLE_LOGIND_TRUE@am__EXEEXT_7 = test-login$(EXEEXT) \
@ENABLE_LOGIND_TRUE@ test-inhibit$(EXEEXT)
am__EXEEXT_8 = test-engine$(EXEEXT) test-ns$(EXEEXT) \
@@ -1450,47 +1660,59 @@ am__EXEEXT_8 = test-engine$(EXEEXT) test-ns$(EXEEXT) \
test-install$(EXEEXT) test-watchdog$(EXEEXT) test-log$(EXEEXT) \
$(am__EXEEXT_6) test-libudev$(EXEEXT) test-udev$(EXEEXT) \
test-journal-enum$(EXEEXT) $(am__EXEEXT_7)
-am__EXEEXT_9 = test-job-type$(EXEEXT) test-env-replace$(EXEEXT) \
+@ENABLE_MACHINED_TRUE@am__EXEEXT_9 = test-machine-tables$(EXEEXT)
+@ENABLE_LOGIND_TRUE@am__EXEEXT_10 = test-login-tables$(EXEEXT) \
+@ENABLE_LOGIND_TRUE@ test-login-shared$(EXEEXT)
+am__EXEEXT_11 = test-job-type$(EXEEXT) test-env-replace$(EXEEXT) \
test-strbuf$(EXEEXT) test-strv$(EXEEXT) \
test-path-util$(EXEEXT) test-strxcpyx$(EXEEXT) \
test-unit-name$(EXEEXT) test-unit-file$(EXEEXT) \
- test-util$(EXEEXT) test-date$(EXEEXT) test-sleep$(EXEEXT) \
- test-replace-var$(EXEEXT) test-sched-prio$(EXEEXT) \
- test-calendarspec$(EXEEXT) test-strip-tab-ansi$(EXEEXT) \
- test-cgroup-util$(EXEEXT) test-prioq$(EXEEXT) \
- test-fileio$(EXEEXT) test-time$(EXEEXT) test-hashmap$(EXEEXT) \
- test-bus-marshal$(EXEEXT) test-bus-signature$(EXEEXT) \
- test-bus-chat$(EXEEXT) test-bus-server$(EXEEXT) \
- test-bus-match$(EXEEXT) test-bus-kernel$(EXEEXT) \
- test-id128$(EXEEXT) test-journal$(EXEEXT) \
- test-journal-send$(EXEEXT) test-journal-syslog$(EXEEXT) \
- test-journal-match$(EXEEXT) test-journal-stream$(EXEEXT) \
- test-journal-verify$(EXEEXT) test-mmap-cache$(EXEEXT) \
- test-catalog$(EXEEXT)
-@ENABLE_LOGIND_TRUE@am__EXEEXT_10 = loginctl$(EXEEXT) \
+ test-utf8$(EXEEXT) test-util$(EXEEXT) test-date$(EXEEXT) \
+ test-sleep$(EXEEXT) test-replace-var$(EXEEXT) \
+ test-sched-prio$(EXEEXT) test-calendarspec$(EXEEXT) \
+ test-strip-tab-ansi$(EXEEXT) test-cgroup-util$(EXEEXT) \
+ test-prioq$(EXEEXT) test-fileio$(EXEEXT) test-time$(EXEEXT) \
+ test-hashmap$(EXEEXT) test-list$(EXEEXT) test-tables$(EXEEXT) \
+ test-device-nodes$(EXEEXT) test-bus-marshal$(EXEEXT) \
+ test-bus-signature$(EXEEXT) test-bus-chat$(EXEEXT) \
+ test-bus-server$(EXEEXT) test-bus-match$(EXEEXT) \
+ test-bus-kernel$(EXEEXT) test-bus-kernel-bloom$(EXEEXT) \
+ test-bus-kernel-benchmark$(EXEEXT) test-bus-memfd$(EXEEXT) \
+ test-bus-zero-copy$(EXEEXT) test-id128$(EXEEXT) \
+ test-journal$(EXEEXT) test-journal-send$(EXEEXT) \
+ test-journal-syslog$(EXEEXT) test-journal-match$(EXEEXT) \
+ test-journal-stream$(EXEEXT) test-journal-init$(EXEEXT) \
+ test-journal-verify$(EXEEXT) \
+ test-journal-interleaving$(EXEEXT) test-mmap-cache$(EXEEXT) \
+ test-catalog$(EXEEXT) $(am__EXEEXT_9) $(am__EXEEXT_10)
+@ENABLE_TMPFILES_TRUE@am__EXEEXT_12 = systemd-tmpfiles$(EXEEXT)
+@ENABLE_MACHINED_TRUE@am__EXEEXT_13 = machinectl$(EXEEXT)
+@ENABLE_LOGIND_TRUE@am__EXEEXT_14 = loginctl$(EXEEXT) \
@ENABLE_LOGIND_TRUE@ systemd-inhibit$(EXEEXT)
-@HAVE_KMOD_TRUE@am__EXEEXT_11 = systemd-modules-load$(EXEEXT)
-@HAVE_MICROHTTPD_TRUE@am__EXEEXT_12 = \
+@HAVE_KMOD_TRUE@am__EXEEXT_15 = systemd-modules-load$(EXEEXT)
+@HAVE_MICROHTTPD_TRUE@am__EXEEXT_16 = \
@HAVE_MICROHTTPD_TRUE@ systemd-journal-gatewayd$(EXEEXT)
-@ENABLE_COREDUMP_TRUE@am__EXEEXT_13 = systemd-coredump$(EXEEXT)
-@ENABLE_BINFMT_TRUE@am__EXEEXT_14 = systemd-binfmt$(EXEEXT)
-@ENABLE_VCONSOLE_TRUE@am__EXEEXT_15 = systemd-vconsole-setup$(EXEEXT)
-@ENABLE_READAHEAD_TRUE@am__EXEEXT_16 = systemd-readahead$(EXEEXT)
-@ENABLE_BOOTCHART_TRUE@am__EXEEXT_17 = systemd-bootchart$(EXEEXT)
-@ENABLE_QUOTACHECK_TRUE@am__EXEEXT_18 = systemd-quotacheck$(EXEEXT)
-@ENABLE_RANDOMSEED_TRUE@am__EXEEXT_19 = systemd-random-seed$(EXEEXT)
-@HAVE_LIBCRYPTSETUP_TRUE@am__EXEEXT_20 = systemd-cryptsetup$(EXEEXT)
-@ENABLE_HOSTNAMED_TRUE@am__EXEEXT_21 = systemd-hostnamed$(EXEEXT)
-@ENABLE_LOCALED_TRUE@am__EXEEXT_22 = systemd-localed$(EXEEXT)
-@ENABLE_TIMEDATED_TRUE@am__EXEEXT_23 = systemd-timedated$(EXEEXT)
-@ENABLE_LOGIND_TRUE@am__EXEEXT_24 = systemd-logind$(EXEEXT) \
+@ENABLE_COREDUMP_TRUE@am__EXEEXT_17 = systemd-coredump$(EXEEXT)
+@ENABLE_BINFMT_TRUE@am__EXEEXT_18 = systemd-binfmt$(EXEEXT)
+@ENABLE_VCONSOLE_TRUE@am__EXEEXT_19 = systemd-vconsole-setup$(EXEEXT)
+@ENABLE_READAHEAD_TRUE@am__EXEEXT_20 = systemd-readahead$(EXEEXT)
+@ENABLE_BOOTCHART_TRUE@am__EXEEXT_21 = systemd-bootchart$(EXEEXT)
+@ENABLE_QUOTACHECK_TRUE@am__EXEEXT_22 = systemd-quotacheck$(EXEEXT)
+@ENABLE_RANDOMSEED_TRUE@am__EXEEXT_23 = systemd-random-seed$(EXEEXT)
+@ENABLE_BACKLIGHT_TRUE@am__EXEEXT_24 = systemd-backlight$(EXEEXT)
+@HAVE_LIBCRYPTSETUP_TRUE@am__EXEEXT_25 = systemd-cryptsetup$(EXEEXT)
+@ENABLE_HOSTNAMED_TRUE@am__EXEEXT_26 = systemd-hostnamed$(EXEEXT)
+@ENABLE_LOCALED_TRUE@am__EXEEXT_27 = systemd-localed$(EXEEXT)
+@ENABLE_TIMEDATED_TRUE@am__EXEEXT_28 = systemd-timedated$(EXEEXT)
+@ENABLE_MACHINED_TRUE@am__EXEEXT_29 = systemd-machined$(EXEEXT)
+@ENABLE_LOGIND_TRUE@am__EXEEXT_30 = systemd-logind$(EXEEXT) \
@ENABLE_LOGIND_TRUE@ systemd-user-sessions$(EXEEXT) \
@ENABLE_LOGIND_TRUE@ systemd-multi-seat-x$(EXEEXT)
-@HAVE_SYSV_COMPAT_TRUE@am__EXEEXT_25 = \
+@HAVE_SYSV_COMPAT_TRUE@am__EXEEXT_31 = \
@HAVE_SYSV_COMPAT_TRUE@ systemd-rc-local-generator$(EXEEXT)
-@ENABLE_EFI_TRUE@am__EXEEXT_26 = systemd-efi-boot-generator$(EXEEXT)
-@HAVE_LIBCRYPTSETUP_TRUE@am__EXEEXT_27 = systemd-cryptsetup-generator$(EXEEXT)
-@ENABLE_KEYMAP_TRUE@am__EXEEXT_28 = keymap$(EXEEXT)
+@ENABLE_EFI_TRUE@am__EXEEXT_32 = systemd-efi-boot-generator$(EXEEXT)
+@HAVE_BLKID_TRUE@am__EXEEXT_33 = systemd-gpt-auto-generator$(EXEEXT)
+@HAVE_LIBCRYPTSETUP_TRUE@am__EXEEXT_34 = systemd-cryptsetup-generator$(EXEEXT)
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(rootbin_PROGRAMS) \
$(rootlibexec_PROGRAMS) $(systemgenerator_PROGRAMS) \
$(udevlibexec_PROGRAMS)
@@ -1529,23 +1751,17 @@ hostnamectl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am__journalctl_SOURCES_DIST = src/journal/journalctl.c \
src/journal/journal-qrcode.c src/journal/journal-qrcode.h
-@HAVE_QRENCODE_TRUE@am__objects_15 = src/journal/journalctl-journal-qrcode.$(OBJEXT)
+@HAVE_QRENCODE_TRUE@am__objects_16 = src/journal/journalctl-journal-qrcode.$(OBJEXT)
am_journalctl_OBJECTS = src/journal/journalctl-journalctl.$(OBJEXT) \
- $(am__objects_15)
+ $(am__objects_16)
journalctl_OBJECTS = $(am_journalctl_OBJECTS)
@HAVE_QRENCODE_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
journalctl_DEPENDENCIES = libsystemd-shared.la \
libsystemd-journal-internal.la libsystemd-id128-internal.la \
- libsystemd-logs.la $(am__append_74) $(am__DEPENDENCIES_4)
+ libsystemd-logs.la $(am__append_83) $(am__DEPENDENCIES_4)
journalctl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(journalctl_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am__keymap_SOURCES_DIST = src/udev/keymap/keymap.c
-@ENABLE_KEYMAP_TRUE@am_keymap_OBJECTS = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keymap-keymap.$(OBJEXT)
-nodist_keymap_OBJECTS =
-keymap_OBJECTS = $(am_keymap_OBJECTS) $(nodist_keymap_OBJECTS)
-@ENABLE_KEYMAP_TRUE@keymap_DEPENDENCIES = libsystemd-shared.la
am__localectl_SOURCES_DIST = src/locale/localectl.c
@ENABLE_LOCALED_TRUE@am_localectl_OBJECTS = \
@ENABLE_LOCALED_TRUE@ src/locale/localectl-localectl.$(OBJEXT)
@@ -1567,6 +1783,14 @@ loginctl_OBJECTS = $(am_loginctl_OBJECTS)
loginctl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(loginctl_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__machinectl_SOURCES_DIST = src/machine/machinectl.c
+@ENABLE_MACHINED_TRUE@am_machinectl_OBJECTS = src/machine/machinectl-machinectl.$(OBJEXT)
+machinectl_OBJECTS = $(am_machinectl_OBJECTS)
+@ENABLE_MACHINED_TRUE@machinectl_DEPENDENCIES = libsystemd-shared.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-dbus.la libudev.la
+machinectl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(machinectl_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am_mtd_probe_OBJECTS = \
src/udev/mtd_probe/mtd_probe-mtd_probe.$(OBJEXT) \
src/udev/mtd_probe/mtd_probe-probe_smartmedia.$(OBJEXT)
@@ -1611,6 +1835,13 @@ am_systemd_ask_password_OBJECTS = \
systemd_ask_password_OBJECTS = $(am_systemd_ask_password_OBJECTS)
systemd_ask_password_DEPENDENCIES = libsystemd-label.la \
libsystemd-shared.la
+am__systemd_backlight_SOURCES_DIST = src/backlight/backlight.c
+@ENABLE_BACKLIGHT_TRUE@am_systemd_backlight_OBJECTS = \
+@ENABLE_BACKLIGHT_TRUE@ src/backlight/backlight.$(OBJEXT)
+systemd_backlight_OBJECTS = $(am_systemd_backlight_OBJECTS)
+@ENABLE_BACKLIGHT_TRUE@systemd_backlight_DEPENDENCIES = \
+@ENABLE_BACKLIGHT_TRUE@ libsystemd-label.la \
+@ENABLE_BACKLIGHT_TRUE@ libsystemd-shared.la libudev-private.la
am__systemd_binfmt_SOURCES_DIST = src/binfmt/binfmt.c
@ENABLE_BINFMT_TRUE@am_systemd_binfmt_OBJECTS = \
@ENABLE_BINFMT_TRUE@ src/binfmt/binfmt.$(OBJEXT)
@@ -1653,14 +1884,16 @@ systemd_coredump_OBJECTS = $(am_systemd_coredump_OBJECTS)
@ENABLE_COREDUMP_TRUE@systemd_coredump_DEPENDENCIES = \
@ENABLE_COREDUMP_TRUE@ libsystemd-journal-internal.la \
@ENABLE_COREDUMP_TRUE@ libsystemd-label.la libsystemd-shared.la \
-@ENABLE_COREDUMP_TRUE@ $(am__append_93)
+@ENABLE_COREDUMP_TRUE@ $(am__append_102)
am__systemd_coredumpctl_SOURCES_DIST = src/journal/coredumpctl.c
@ENABLE_COREDUMP_TRUE@am_systemd_coredumpctl_OBJECTS = \
@ENABLE_COREDUMP_TRUE@ src/journal/coredumpctl.$(OBJEXT)
systemd_coredumpctl_OBJECTS = $(am_systemd_coredumpctl_OBJECTS)
@ENABLE_COREDUMP_TRUE@systemd_coredumpctl_DEPENDENCIES = \
@ENABLE_COREDUMP_TRUE@ libsystemd-shared.la \
-@ENABLE_COREDUMP_TRUE@ libsystemd-journal.la
+@ENABLE_COREDUMP_TRUE@ libsystemd-journal.la \
+@ENABLE_COREDUMP_TRUE@ libsystemd-journal-internal.la \
+@ENABLE_COREDUMP_TRUE@ libsystemd-id128-internal.la
am__systemd_cryptsetup_SOURCES_DIST = src/cryptsetup/cryptsetup.c
@HAVE_LIBCRYPTSETUP_TRUE@am_systemd_cryptsetup_OBJECTS = src/cryptsetup/systemd_cryptsetup-cryptsetup.$(OBJEXT)
systemd_cryptsetup_OBJECTS = $(am_systemd_cryptsetup_OBJECTS)
@@ -1714,6 +1947,19 @@ systemd_getty_generator_OBJECTS = \
$(am_systemd_getty_generator_OBJECTS)
systemd_getty_generator_DEPENDENCIES = libsystemd-label.la \
libsystemd-shared.la
+am__systemd_gpt_auto_generator_SOURCES_DIST = \
+ src/gpt-auto-generator/gpt-auto-generator.c
+@HAVE_BLKID_TRUE@am_systemd_gpt_auto_generator_OBJECTS = src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.$(OBJEXT)
+systemd_gpt_auto_generator_OBJECTS = \
+ $(am_systemd_gpt_auto_generator_OBJECTS)
+@HAVE_BLKID_TRUE@systemd_gpt_auto_generator_DEPENDENCIES = \
+@HAVE_BLKID_TRUE@ libsystemd-label.la libsystemd-shared.la \
+@HAVE_BLKID_TRUE@ libsystemd-id128-internal.la \
+@HAVE_BLKID_TRUE@ libudev-private.la $(am__DEPENDENCIES_1)
+systemd_gpt_auto_generator_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(systemd_gpt_auto_generator_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
am__systemd_hostnamed_SOURCES_DIST = src/hostname/hostnamed.c
@ENABLE_HOSTNAMED_TRUE@am_systemd_hostnamed_OBJECTS = src/hostname/systemd_hostnamed-hostnamed.$(OBJEXT)
systemd_hostnamed_OBJECTS = $(am_systemd_hostnamed_OBJECTS)
@@ -1775,39 +2021,15 @@ systemd_localed_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(systemd_localed_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
am__systemd_logind_SOURCES_DIST = src/login/logind.c \
- src/login/logind.h src/login/logind-dbus.c \
- src/login/logind-device.c src/login/logind-device.h \
- src/login/logind-button.c src/login/logind-button.h \
- src/login/logind-action.c src/login/logind-action.h \
- src/login/logind-seat.c src/login/logind-seat.h \
- src/login/logind-session.c src/login/logind-session.h \
- src/login/logind-user.c src/login/logind-user.h \
- src/login/logind-inhibit.c src/login/logind-inhibit.h \
- src/login/logind-session-dbus.c src/login/logind-seat-dbus.c \
- src/login/logind-user-dbus.c src/login/logind-acl.h \
- src/login/logind-acl.c
-@ENABLE_LOGIND_TRUE@@HAVE_ACL_TRUE@am__objects_16 = src/login/systemd_logind-logind-acl.$(OBJEXT)
+ src/login/logind.h
@ENABLE_LOGIND_TRUE@am_systemd_logind_OBJECTS = \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-dbus.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-device.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-button.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-action.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-seat.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-session.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-user.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-inhibit.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-session-dbus.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-seat-dbus.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind-user-dbus.$(OBJEXT) \
-@ENABLE_LOGIND_TRUE@ $(am__objects_16)
+@ENABLE_LOGIND_TRUE@ src/login/systemd_logind-logind.$(OBJEXT)
@ENABLE_LOGIND_TRUE@nodist_systemd_logind_OBJECTS = src/login/systemd_logind-logind-gperf.$(OBJEXT)
systemd_logind_OBJECTS = $(am_systemd_logind_OBJECTS) \
$(nodist_systemd_logind_OBJECTS)
-@ENABLE_LOGIND_TRUE@systemd_logind_DEPENDENCIES = libsystemd-label.la \
-@ENABLE_LOGIND_TRUE@ libsystemd-audit.la libsystemd-shared.la \
-@ENABLE_LOGIND_TRUE@ libsystemd-daemon.la libsystemd-dbus.la \
-@ENABLE_LOGIND_TRUE@ libudev.la $(am__append_154)
+@ENABLE_LOGIND_TRUE@systemd_logind_DEPENDENCIES = \
+@ENABLE_LOGIND_TRUE@ libsystemd-logind-core.la \
+@ENABLE_LOGIND_TRUE@ $(libsystemd_logind_core_la_LIBADD)
systemd_logind_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(systemd_logind_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
@@ -1819,6 +2041,17 @@ systemd_machine_id_setup_OBJECTS = \
$(am_systemd_machine_id_setup_OBJECTS)
systemd_machine_id_setup_DEPENDENCIES = libsystemd-label.la \
libsystemd-shared.la libsystemd-id128-internal.la
+am__systemd_machined_SOURCES_DIST = src/machine/machined.c \
+ src/machine/machined.h
+@ENABLE_MACHINED_TRUE@am_systemd_machined_OBJECTS = src/machine/systemd_machined-machined.$(OBJEXT)
+systemd_machined_OBJECTS = $(am_systemd_machined_OBJECTS)
+@ENABLE_MACHINED_TRUE@systemd_machined_DEPENDENCIES = \
+@ENABLE_MACHINED_TRUE@ libsystemd-machine-core.la \
+@ENABLE_MACHINED_TRUE@ $(libsystemd_machine_core_la_LIBADD)
+systemd_machined_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(systemd_machined_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
am__systemd_modules_load_SOURCES_DIST = \
src/modules-load/modules-load.c
@HAVE_KMOD_TRUE@am_systemd_modules_load_OBJECTS = src/modules-load/systemd_modules_load-modules-load.$(OBJEXT)
@@ -1846,7 +2079,8 @@ am_systemd_nspawn_OBJECTS = src/nspawn/nspawn.$(OBJEXT) \
systemd_nspawn_OBJECTS = $(am_systemd_nspawn_OBJECTS)
systemd_nspawn_DEPENDENCIES = libsystemd-label.la \
libsystemd-capability.la libsystemd-shared.la \
- libsystemd-daemon.la libsystemd-id128-internal.la
+ libsystemd-daemon.la libsystemd-id128-internal.la \
+ libsystemd-bus.la
am__systemd_quotacheck_SOURCES_DIST = src/quotacheck/quotacheck.c
@ENABLE_QUOTACHECK_TRUE@am_systemd_quotacheck_OBJECTS = \
@ENABLE_QUOTACHECK_TRUE@ src/quotacheck/quotacheck.$(OBJEXT)
@@ -1891,6 +2125,12 @@ am_systemd_reply_password_OBJECTS = \
src/reply-password/reply-password.$(OBJEXT)
systemd_reply_password_OBJECTS = $(am_systemd_reply_password_OBJECTS)
systemd_reply_password_DEPENDENCIES = libsystemd-shared.la
+am_systemd_run_OBJECTS = src/run/run.$(OBJEXT)
+systemd_run_OBJECTS = $(am_systemd_run_OBJECTS)
+systemd_run_DEPENDENCIES = libsystemd-label.la \
+ libsystemd-capability.la libsystemd-shared.la \
+ libsystemd-daemon.la libsystemd-id128-internal.la \
+ libsystemd-bus.la
am_systemd_shutdown_OBJECTS = src/core/umount.$(OBJEXT) \
src/core/shutdown.$(OBJEXT) src/core/mount-setup.$(OBJEXT) \
src/core/killall.$(OBJEXT)
@@ -1929,13 +2169,16 @@ systemd_timedated_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(systemd_timedated_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
-am_systemd_timestamp_OBJECTS = src/timestamp/timestamp.$(OBJEXT)
-systemd_timestamp_OBJECTS = $(am_systemd_timestamp_OBJECTS)
-systemd_timestamp_DEPENDENCIES = libsystemd-shared.la
-am_systemd_tmpfiles_OBJECTS = src/tmpfiles/tmpfiles.$(OBJEXT)
+am__systemd_tmpfiles_SOURCES_DIST = src/tmpfiles/tmpfiles.c \
+ src/shared/specifier.c src/shared/specifier.h
+@ENABLE_TMPFILES_TRUE@am_systemd_tmpfiles_OBJECTS = \
+@ENABLE_TMPFILES_TRUE@ src/tmpfiles/tmpfiles.$(OBJEXT) \
+@ENABLE_TMPFILES_TRUE@ src/shared/specifier.$(OBJEXT)
systemd_tmpfiles_OBJECTS = $(am_systemd_tmpfiles_OBJECTS)
-systemd_tmpfiles_DEPENDENCIES = libsystemd-label.la \
- libsystemd-shared.la libsystemd-capability.la
+@ENABLE_TMPFILES_TRUE@systemd_tmpfiles_DEPENDENCIES = \
+@ENABLE_TMPFILES_TRUE@ libsystemd-label.la libsystemd-shared.la \
+@ENABLE_TMPFILES_TRUE@ libsystemd-capability.la \
+@ENABLE_TMPFILES_TRUE@ libsystemd-id128-internal.la
am_systemd_tty_ask_password_agent_OBJECTS = \
src/tty-ask-password-agent/tty-ask-password-agent.$(OBJEXT)
systemd_tty_ask_password_agent_OBJECTS = \
@@ -1967,6 +2210,13 @@ am__systemd_vconsole_setup_SOURCES_DIST = \
systemd_vconsole_setup_OBJECTS = $(am_systemd_vconsole_setup_OBJECTS)
@ENABLE_VCONSOLE_TRUE@systemd_vconsole_setup_DEPENDENCIES = \
@ENABLE_VCONSOLE_TRUE@ libsystemd-shared.la
+am__test_boot_timestamp_SOURCES_DIST = \
+ src/test/test-boot-timestamps.c
+@ENABLE_EFI_TRUE@am_test_boot_timestamp_OBJECTS = \
+@ENABLE_EFI_TRUE@ src/test/test-boot-timestamps.$(OBJEXT)
+test_boot_timestamp_OBJECTS = $(am_test_boot_timestamp_OBJECTS)
+@ENABLE_EFI_TRUE@test_boot_timestamp_DEPENDENCIES = \
+@ENABLE_EFI_TRUE@ libsystemd-shared.la
am_test_bus_chat_OBJECTS = \
src/libsystemd-bus/test_bus_chat-test-bus-chat.$(OBJEXT)
test_bus_chat_OBJECTS = $(am_test_bus_chat_OBJECTS)
@@ -1984,6 +2234,23 @@ test_bus_kernel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(test_bus_kernel_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
+am_test_bus_kernel_benchmark_OBJECTS = src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.$(OBJEXT)
+test_bus_kernel_benchmark_OBJECTS = \
+ $(am_test_bus_kernel_benchmark_OBJECTS)
+test_bus_kernel_benchmark_DEPENDENCIES = libsystemd-shared.la \
+ libsystemd-bus.la libsystemd-id128-internal.la
+test_bus_kernel_benchmark_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_bus_kernel_benchmark_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+am_test_bus_kernel_bloom_OBJECTS = src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.$(OBJEXT)
+test_bus_kernel_bloom_OBJECTS = $(am_test_bus_kernel_bloom_OBJECTS)
+test_bus_kernel_bloom_DEPENDENCIES = libsystemd-shared.la \
+ libsystemd-bus.la libsystemd-id128-internal.la
+test_bus_kernel_bloom_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_bus_kernel_bloom_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
am_test_bus_marshal_OBJECTS = src/libsystemd-bus/test_bus_marshal-test-bus-marshal.$(OBJEXT)
test_bus_marshal_OBJECTS = $(am_test_bus_marshal_OBJECTS)
test_bus_marshal_DEPENDENCIES = libsystemd-shared.la libsystemd-bus.la \
@@ -2001,6 +2268,14 @@ test_bus_match_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(test_bus_match_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
$@
+am_test_bus_memfd_OBJECTS = \
+ src/libsystemd-bus/test_bus_memfd-test-bus-memfd.$(OBJEXT)
+test_bus_memfd_OBJECTS = $(am_test_bus_memfd_OBJECTS)
+test_bus_memfd_DEPENDENCIES = libsystemd-shared.la libsystemd-bus.la
+test_bus_memfd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_bus_memfd_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+ $@
am_test_bus_server_OBJECTS = \
src/libsystemd-bus/test_bus_server-test-bus-server.$(OBJEXT)
test_bus_server_OBJECTS = $(am_test_bus_server_OBJECTS)
@@ -2015,31 +2290,41 @@ am_test_bus_signature_OBJECTS = \
test_bus_signature_OBJECTS = $(am_test_bus_signature_OBJECTS)
test_bus_signature_DEPENDENCIES = libsystemd-shared.la \
libsystemd-bus.la
+am_test_bus_zero_copy_OBJECTS = src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.$(OBJEXT)
+test_bus_zero_copy_OBJECTS = $(am_test_bus_zero_copy_OBJECTS)
+test_bus_zero_copy_DEPENDENCIES = libsystemd-shared.la \
+ libsystemd-bus.la
+test_bus_zero_copy_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_bus_zero_copy_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
am_test_calendarspec_OBJECTS = src/test/test-calendarspec.$(OBJEXT)
test_calendarspec_OBJECTS = $(am_test_calendarspec_OBJECTS)
test_calendarspec_DEPENDENCIES = libsystemd-shared.la
-am_test_catalog_OBJECTS = src/journal/test-catalog.$(OBJEXT)
+am_test_catalog_OBJECTS = \
+ src/journal/test_catalog-test-catalog.$(OBJEXT)
test_catalog_OBJECTS = $(am_test_catalog_OBJECTS)
test_catalog_DEPENDENCIES = libsystemd-shared.la libsystemd-label.la \
libsystemd-journal-internal.la libsystemd-id128-internal.la
+test_catalog_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_catalog_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am_test_cgroup_OBJECTS = src/test/test-cgroup.$(OBJEXT)
test_cgroup_OBJECTS = $(am_test_cgroup_OBJECTS)
test_cgroup_DEPENDENCIES = libsystemd-label.la libsystemd-shared.la
am_test_cgroup_util_OBJECTS = src/test/test-cgroup-util.$(OBJEXT)
test_cgroup_util_OBJECTS = $(am_test_cgroup_util_OBJECTS)
test_cgroup_util_DEPENDENCIES = libsystemd-label.la \
- libsystemd-shared.la
+ libsystemd-shared.la libsystemd-daemon.la
am_test_daemon_OBJECTS = src/test/test-daemon.$(OBJEXT)
test_daemon_OBJECTS = $(am_test_daemon_OBJECTS)
test_daemon_DEPENDENCIES = libsystemd-shared.la libsystemd-daemon.la
am_test_date_OBJECTS = src/test/test-date.$(OBJEXT)
test_date_OBJECTS = $(am_test_date_OBJECTS)
test_date_DEPENDENCIES = libsystemd-core.la
-am__test_efivars_SOURCES_DIST = src/test/test-efivars.c
-@ENABLE_EFI_TRUE@am_test_efivars_OBJECTS = \
-@ENABLE_EFI_TRUE@ src/test/test-efivars.$(OBJEXT)
-test_efivars_OBJECTS = $(am_test_efivars_OBJECTS)
-@ENABLE_EFI_TRUE@test_efivars_DEPENDENCIES = libsystemd-shared.la
+am_test_device_nodes_OBJECTS = src/test/test-device-nodes.$(OBJEXT)
+test_device_nodes_OBJECTS = $(am_test_device_nodes_OBJECTS)
+test_device_nodes_DEPENDENCIES = libsystemd-shared.la
am_test_engine_OBJECTS = src/test/test_engine-test-engine.$(OBJEXT)
test_engine_OBJECTS = $(am_test_engine_OBJECTS)
test_engine_DEPENDENCIES = libsystemd-core.la libsystemd-daemon.la \
@@ -2069,7 +2354,7 @@ test_hostname_DEPENDENCIES = libsystemd-core.la
am_test_id128_OBJECTS = src/test/test-id128.$(OBJEXT)
test_id128_OBJECTS = $(am_test_id128_OBJECTS)
test_id128_DEPENDENCIES = libsystemd-shared.la \
- libsystemd-id128-internal.la
+ libsystemd-id128-internal.la libsystemd-daemon.la
am__test_inhibit_SOURCES_DIST = src/login/test-inhibit.c
@ENABLE_LOGIND_TRUE@am_test_inhibit_OBJECTS = src/login/test_inhibit-test-inhibit.$(OBJEXT)
test_inhibit_OBJECTS = $(am_test_inhibit_OBJECTS)
@@ -2102,6 +2387,18 @@ am_test_journal_enum_OBJECTS = \
test_journal_enum_OBJECTS = $(am_test_journal_enum_OBJECTS)
test_journal_enum_DEPENDENCIES = libsystemd-shared.la \
libsystemd-journal-internal.la libsystemd-id128-internal.la
+am_test_journal_init_OBJECTS = \
+ src/journal/test-journal-init.$(OBJEXT)
+test_journal_init_OBJECTS = $(am_test_journal_init_OBJECTS)
+test_journal_init_DEPENDENCIES = libsystemd-shared.la \
+ libsystemd-daemon-internal.la $(am__DEPENDENCIES_1) \
+ libsystemd-journal.la
+am_test_journal_interleaving_OBJECTS = \
+ src/journal/test-journal-interleaving.$(OBJEXT)
+test_journal_interleaving_OBJECTS = \
+ $(am_test_journal_interleaving_OBJECTS)
+test_journal_interleaving_DEPENDENCIES = libsystemd-shared.la \
+ libsystemd-journal-internal.la libsystemd-id128-internal.la
am_test_journal_match_OBJECTS = \
src/journal/test-journal-match.$(OBJEXT)
test_journal_match_OBJECTS = $(am_test_journal_match_OBJECTS)
@@ -2131,6 +2428,12 @@ am_test_libudev_OBJECTS = src/test/test-libudev.$(OBJEXT)
test_libudev_OBJECTS = $(am_test_libudev_OBJECTS)
test_libudev_DEPENDENCIES = libsystemd-label.la libsystemd-shared.la \
libudev.la
+am_test_list_OBJECTS = src/test/test_list-test-list.$(OBJEXT)
+test_list_OBJECTS = $(am_test_list_OBJECTS)
+test_list_DEPENDENCIES = libsystemd-core.la
+test_list_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_list_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am_test_log_OBJECTS = src/test/test-log.$(OBJEXT)
test_log_OBJECTS = $(am_test_log_OBJECTS)
test_log_DEPENDENCIES = libsystemd-core.la
@@ -2141,16 +2444,45 @@ test_login_OBJECTS = $(am_test_login_OBJECTS)
@ENABLE_LOGIND_TRUE@test_login_DEPENDENCIES = \
@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la \
@ENABLE_LOGIND_TRUE@ libsystemd-shared.la
+am__test_login_shared_SOURCES_DIST = src/login/test-login-shared.c
+@ENABLE_LOGIND_TRUE@am_test_login_shared_OBJECTS = \
+@ENABLE_LOGIND_TRUE@ src/login/test-login-shared.$(OBJEXT)
+test_login_shared_OBJECTS = $(am_test_login_shared_OBJECTS)
+@ENABLE_LOGIND_TRUE@test_login_shared_DEPENDENCIES = \
+@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-shared.la
+am__test_login_tables_SOURCES_DIST = src/login/test-login-tables.c
+@ENABLE_LOGIND_TRUE@am_test_login_tables_OBJECTS = src/login/test_login_tables-test-login-tables.$(OBJEXT)
+test_login_tables_OBJECTS = $(am_test_login_tables_OBJECTS)
+@ENABLE_LOGIND_TRUE@test_login_tables_DEPENDENCIES = \
+@ENABLE_LOGIND_TRUE@ libsystemd-logind-core.la
+test_login_tables_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_login_tables_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
am_test_loopback_OBJECTS = src/test/test-loopback.$(OBJEXT)
test_loopback_OBJECTS = $(am_test_loopback_OBJECTS)
test_loopback_DEPENDENCIES = libsystemd-shared.la libsystemd-core.la
+am__test_machine_tables_SOURCES_DIST = \
+ src/machine/test-machine-tables.c
+@ENABLE_MACHINED_TRUE@am_test_machine_tables_OBJECTS = src/machine/test_machine_tables-test-machine-tables.$(OBJEXT)
+test_machine_tables_OBJECTS = $(am_test_machine_tables_OBJECTS)
+@ENABLE_MACHINED_TRUE@test_machine_tables_DEPENDENCIES = \
+@ENABLE_MACHINED_TRUE@ libsystemd-machine-core.la
+test_machine_tables_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_machine_tables_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
am_test_mmap_cache_OBJECTS = src/journal/test-mmap-cache.$(OBJEXT)
test_mmap_cache_OBJECTS = $(am_test_mmap_cache_OBJECTS)
test_mmap_cache_DEPENDENCIES = libsystemd-shared.la \
libsystemd-journal-internal.la
-am_test_ns_OBJECTS = src/test/test-ns.$(OBJEXT)
+am_test_ns_OBJECTS = src/test/test_ns-test-ns.$(OBJEXT)
test_ns_OBJECTS = $(am_test_ns_OBJECTS)
test_ns_DEPENDENCIES = libsystemd-core.la
+test_ns_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_ns_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am_test_path_util_OBJECTS = src/test/test-path-util.$(OBJEXT)
test_path_util_OBJECTS = $(am_test_path_util_OBJECTS)
test_path_util_DEPENDENCIES = libsystemd-shared.la
@@ -2188,6 +2520,12 @@ test_strv_DEPENDENCIES = libsystemd-shared.la libsystemd-units.la \
am_test_strxcpyx_OBJECTS = src/test/test-strxcpyx.$(OBJEXT)
test_strxcpyx_OBJECTS = $(am_test_strxcpyx_OBJECTS)
test_strxcpyx_DEPENDENCIES = libsystemd-shared.la
+am_test_tables_OBJECTS = src/test/test_tables-test-tables.$(OBJEXT)
+test_tables_OBJECTS = $(am_test_tables_OBJECTS)
+test_tables_DEPENDENCIES = libsystemd-core.la libsystemd-logs.la
+test_tables_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_tables_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am_test_time_OBJECTS = src/test/test_time-test-time.$(OBJEXT)
test_time_OBJECTS = $(am_test_time_OBJECTS)
test_time_DEPENDENCIES = libsystemd-core.la
@@ -2198,7 +2536,7 @@ am_test_udev_OBJECTS = src/test/test-udev.$(OBJEXT)
test_udev_OBJECTS = $(am_test_udev_OBJECTS)
test_udev_DEPENDENCIES = libudev-core.la libsystemd-shared.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__append_59)
+ $(am__DEPENDENCIES_1) $(am__append_74)
am_test_unit_file_OBJECTS = \
src/test/test_unit_file-test-unit-file.$(OBJEXT)
test_unit_file_OBJECTS = $(am_test_unit_file_OBJECTS)
@@ -2215,6 +2553,12 @@ test_unit_name_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(test_unit_name_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
$@
+am_test_utf8_OBJECTS = src/test/test_utf8-test-utf8.$(OBJEXT)
+test_utf8_OBJECTS = $(am_test_utf8_OBJECTS)
+test_utf8_DEPENDENCIES = libsystemd-shared.la
+test_utf8_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_utf8_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am_test_util_OBJECTS = src/test/test_util-test-util.$(OBJEXT)
test_util_OBJECTS = $(am_test_util_OBJECTS)
test_util_DEPENDENCIES = libsystemd-core.la
@@ -2246,10 +2590,7 @@ udevadm_DEPENDENCIES = libudev-core.la libsystemd-shared.la
am_v4l_id_OBJECTS = src/udev/v4l_id/v4l_id.$(OBJEXT)
v4l_id_OBJECTS = $(am_v4l_id_OBJECTS)
v4l_id_DEPENDENCIES = libudev.la
-am__dist_udevhome_SCRIPTS_DIST = src/udev/keymap/findkeyboards \
- src/udev/keymap/keyboard-force-release.sh
-SCRIPTS = $(dist_bin_SCRIPTS) $(dist_kernelinstall_SCRIPTS) \
- $(dist_udevhome_SCRIPTS)
+SCRIPTS = $(dist_bin_SCRIPTS) $(dist_kernelinstall_SCRIPTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -2301,19 +2642,22 @@ SOURCES = $(_daemon_la_SOURCES) $(_journal_la_SOURCES) \
$(libsystemd_journal_la_SOURCES) \
$(libsystemd_label_la_SOURCES) \
$(libsystemd_login_internal_la_SOURCES) \
- $(libsystemd_login_la_SOURCES) $(libsystemd_logs_la_SOURCES) \
+ $(libsystemd_login_la_SOURCES) \
+ $(libsystemd_logind_core_la_SOURCES) \
+ $(libsystemd_logs_la_SOURCES) \
+ $(libsystemd_machine_core_la_SOURCES) \
$(libsystemd_shared_la_SOURCES) $(libsystemd_units_la_SOURCES) \
- $(libudev_core_la_SOURCES) $(libudev_private_la_SOURCES) \
- $(libudev_la_SOURCES) $(login_la_SOURCES) \
- $(pam_systemd_la_SOURCES) $(accelerometer_SOURCES) \
- $(ata_id_SOURCES) $(bootctl_SOURCES) $(busctl_SOURCES) \
- $(cdrom_id_SOURCES) $(collect_SOURCES) $(hostnamectl_SOURCES) \
- $(journalctl_SOURCES) $(keymap_SOURCES) \
- $(nodist_keymap_SOURCES) $(localectl_SOURCES) \
- $(loginctl_SOURCES) $(mtd_probe_SOURCES) $(scsi_id_SOURCES) \
- $(systemctl_SOURCES) $(systemd_SOURCES) \
- $(systemd_ac_power_SOURCES) $(systemd_activate_SOURCES) \
- $(systemd_analyze_SOURCES) $(systemd_ask_password_SOURCES) \
+ $(libudev_core_la_SOURCES) $(nodist_libudev_core_la_SOURCES) \
+ $(libudev_private_la_SOURCES) $(libudev_la_SOURCES) \
+ $(login_la_SOURCES) $(pam_systemd_la_SOURCES) \
+ $(accelerometer_SOURCES) $(ata_id_SOURCES) $(bootctl_SOURCES) \
+ $(busctl_SOURCES) $(cdrom_id_SOURCES) $(collect_SOURCES) \
+ $(hostnamectl_SOURCES) $(journalctl_SOURCES) \
+ $(localectl_SOURCES) $(loginctl_SOURCES) $(machinectl_SOURCES) \
+ $(mtd_probe_SOURCES) $(scsi_id_SOURCES) $(systemctl_SOURCES) \
+ $(systemd_SOURCES) $(systemd_ac_power_SOURCES) \
+ $(systemd_activate_SOURCES) $(systemd_analyze_SOURCES) \
+ $(systemd_ask_password_SOURCES) $(systemd_backlight_SOURCES) \
$(systemd_binfmt_SOURCES) $(systemd_bootchart_SOURCES) \
$(systemd_cat_SOURCES) $(systemd_cgls_SOURCES) \
$(systemd_cgroups_agent_SOURCES) $(systemd_cgtop_SOURCES) \
@@ -2324,51 +2668,60 @@ SOURCES = $(_daemon_la_SOURCES) $(_journal_la_SOURCES) \
$(systemd_efi_boot_generator_SOURCES) $(systemd_fsck_SOURCES) \
$(systemd_fstab_generator_SOURCES) \
$(systemd_getty_generator_SOURCES) \
+ $(systemd_gpt_auto_generator_SOURCES) \
$(systemd_hostnamed_SOURCES) $(systemd_inhibit_SOURCES) \
$(systemd_initctl_SOURCES) $(systemd_journal_gatewayd_SOURCES) \
$(systemd_journald_SOURCES) $(systemd_localed_SOURCES) \
$(systemd_logind_SOURCES) $(nodist_systemd_logind_SOURCES) \
$(systemd_machine_id_setup_SOURCES) \
- $(systemd_modules_load_SOURCES) \
+ $(systemd_machined_SOURCES) $(systemd_modules_load_SOURCES) \
$(systemd_multi_seat_x_SOURCES) $(systemd_notify_SOURCES) \
$(systemd_nspawn_SOURCES) $(systemd_quotacheck_SOURCES) \
$(systemd_random_seed_SOURCES) \
$(systemd_rc_local_generator_SOURCES) \
$(systemd_readahead_SOURCES) $(systemd_remount_fs_SOURCES) \
- $(systemd_reply_password_SOURCES) $(systemd_shutdown_SOURCES) \
- $(systemd_shutdownd_SOURCES) $(systemd_sleep_SOURCES) \
- $(systemd_stdio_bridge_SOURCES) $(systemd_sysctl_SOURCES) \
+ $(systemd_reply_password_SOURCES) $(systemd_run_SOURCES) \
+ $(systemd_shutdown_SOURCES) $(systemd_shutdownd_SOURCES) \
+ $(systemd_sleep_SOURCES) $(systemd_stdio_bridge_SOURCES) \
+ $(systemd_sysctl_SOURCES) \
$(systemd_system_update_generator_SOURCES) \
- $(systemd_timedated_SOURCES) $(systemd_timestamp_SOURCES) \
- $(systemd_tmpfiles_SOURCES) \
+ $(systemd_timedated_SOURCES) $(systemd_tmpfiles_SOURCES) \
$(systemd_tty_ask_password_agent_SOURCES) \
$(systemd_udevd_SOURCES) $(systemd_update_utmp_SOURCES) \
$(systemd_user_sessions_SOURCES) \
- $(systemd_vconsole_setup_SOURCES) $(test_bus_chat_SOURCES) \
- $(test_bus_kernel_SOURCES) $(test_bus_marshal_SOURCES) \
- $(test_bus_match_SOURCES) $(test_bus_server_SOURCES) \
- $(test_bus_signature_SOURCES) $(test_calendarspec_SOURCES) \
+ $(systemd_vconsole_setup_SOURCES) \
+ $(test_boot_timestamp_SOURCES) $(test_bus_chat_SOURCES) \
+ $(test_bus_kernel_SOURCES) \
+ $(test_bus_kernel_benchmark_SOURCES) \
+ $(test_bus_kernel_bloom_SOURCES) $(test_bus_marshal_SOURCES) \
+ $(test_bus_match_SOURCES) $(test_bus_memfd_SOURCES) \
+ $(test_bus_server_SOURCES) $(test_bus_signature_SOURCES) \
+ $(test_bus_zero_copy_SOURCES) $(test_calendarspec_SOURCES) \
$(test_catalog_SOURCES) $(test_cgroup_SOURCES) \
$(test_cgroup_util_SOURCES) $(test_daemon_SOURCES) \
- $(test_date_SOURCES) $(test_efivars_SOURCES) \
+ $(test_date_SOURCES) $(test_device_nodes_SOURCES) \
$(test_engine_SOURCES) $(test_env_replace_SOURCES) \
$(test_fileio_SOURCES) $(test_hashmap_SOURCES) \
$(test_hostname_SOURCES) $(test_id128_SOURCES) \
$(test_inhibit_SOURCES) $(test_install_SOURCES) \
$(test_job_type_SOURCES) $(test_journal_SOURCES) \
- $(test_journal_enum_SOURCES) $(test_journal_match_SOURCES) \
- $(test_journal_send_SOURCES) $(test_journal_stream_SOURCES) \
- $(test_journal_syslog_SOURCES) $(test_journal_verify_SOURCES) \
- $(test_libudev_SOURCES) $(test_log_SOURCES) \
- $(test_login_SOURCES) $(test_loopback_SOURCES) \
+ $(test_journal_enum_SOURCES) $(test_journal_init_SOURCES) \
+ $(test_journal_interleaving_SOURCES) \
+ $(test_journal_match_SOURCES) $(test_journal_send_SOURCES) \
+ $(test_journal_stream_SOURCES) $(test_journal_syslog_SOURCES) \
+ $(test_journal_verify_SOURCES) $(test_libudev_SOURCES) \
+ $(test_list_SOURCES) $(test_log_SOURCES) $(test_login_SOURCES) \
+ $(test_login_shared_SOURCES) $(test_login_tables_SOURCES) \
+ $(test_loopback_SOURCES) $(test_machine_tables_SOURCES) \
$(test_mmap_cache_SOURCES) $(test_ns_SOURCES) \
$(test_path_util_SOURCES) $(test_prioq_SOURCES) \
$(test_replace_var_SOURCES) $(test_sched_prio_SOURCES) \
$(test_sleep_SOURCES) $(test_strbuf_SOURCES) \
$(test_strip_tab_ansi_SOURCES) $(test_strv_SOURCES) \
- $(test_strxcpyx_SOURCES) $(test_time_SOURCES) \
- $(test_udev_SOURCES) $(test_unit_file_SOURCES) \
- $(test_unit_name_SOURCES) $(test_util_SOURCES) \
+ $(test_strxcpyx_SOURCES) $(test_tables_SOURCES) \
+ $(test_time_SOURCES) $(test_udev_SOURCES) \
+ $(test_unit_file_SOURCES) $(test_unit_name_SOURCES) \
+ $(test_utf8_SOURCES) $(test_util_SOURCES) \
$(test_watchdog_SOURCES) $(timedatectl_SOURCES) \
$(udevadm_SOURCES) $(v4l_id_SOURCES)
DIST_SOURCES = $(am___daemon_la_SOURCES_DIST) \
@@ -2389,8 +2742,10 @@ DIST_SOURCES = $(am___daemon_la_SOURCES_DIST) \
$(libsystemd_label_la_SOURCES) \
$(am__libsystemd_login_internal_la_SOURCES_DIST) \
$(am__libsystemd_login_la_SOURCES_DIST) \
- $(libsystemd_logs_la_SOURCES) $(libsystemd_shared_la_SOURCES) \
- $(libsystemd_units_la_SOURCES) \
+ $(am__libsystemd_logind_core_la_SOURCES_DIST) \
+ $(libsystemd_logs_la_SOURCES) \
+ $(am__libsystemd_machine_core_la_SOURCES_DIST) \
+ $(libsystemd_shared_la_SOURCES) $(libsystemd_units_la_SOURCES) \
$(am__libudev_core_la_SOURCES_DIST) \
$(libudev_private_la_SOURCES) $(libudev_la_SOURCES) \
$(am__login_la_SOURCES_DIST) \
@@ -2398,11 +2753,12 @@ DIST_SOURCES = $(am___daemon_la_SOURCES_DIST) \
$(ata_id_SOURCES) $(am__bootctl_SOURCES_DIST) \
$(busctl_SOURCES) $(cdrom_id_SOURCES) $(collect_SOURCES) \
$(am__hostnamectl_SOURCES_DIST) $(am__journalctl_SOURCES_DIST) \
- $(am__keymap_SOURCES_DIST) $(am__localectl_SOURCES_DIST) \
- $(am__loginctl_SOURCES_DIST) $(mtd_probe_SOURCES) \
+ $(am__localectl_SOURCES_DIST) $(am__loginctl_SOURCES_DIST) \
+ $(am__machinectl_SOURCES_DIST) $(mtd_probe_SOURCES) \
$(scsi_id_SOURCES) $(systemctl_SOURCES) $(systemd_SOURCES) \
$(systemd_ac_power_SOURCES) $(systemd_activate_SOURCES) \
$(systemd_analyze_SOURCES) $(systemd_ask_password_SOURCES) \
+ $(am__systemd_backlight_SOURCES_DIST) \
$(am__systemd_binfmt_SOURCES_DIST) \
$(am__systemd_bootchart_SOURCES_DIST) $(systemd_cat_SOURCES) \
$(systemd_cgls_SOURCES) $(systemd_cgroups_agent_SOURCES) \
@@ -2414,6 +2770,7 @@ DIST_SOURCES = $(am___daemon_la_SOURCES_DIST) \
$(am__systemd_efi_boot_generator_SOURCES_DIST) \
$(systemd_fsck_SOURCES) $(systemd_fstab_generator_SOURCES) \
$(systemd_getty_generator_SOURCES) \
+ $(am__systemd_gpt_auto_generator_SOURCES_DIST) \
$(am__systemd_hostnamed_SOURCES_DIST) \
$(am__systemd_inhibit_SOURCES_DIST) $(systemd_initctl_SOURCES) \
$(am__systemd_journal_gatewayd_SOURCES_DIST) \
@@ -2421,6 +2778,7 @@ DIST_SOURCES = $(am___daemon_la_SOURCES_DIST) \
$(am__systemd_localed_SOURCES_DIST) \
$(am__systemd_logind_SOURCES_DIST) \
$(systemd_machine_id_setup_SOURCES) \
+ $(am__systemd_machined_SOURCES_DIST) \
$(am__systemd_modules_load_SOURCES_DIST) \
$(am__systemd_multi_seat_x_SOURCES_DIST) \
$(systemd_notify_SOURCES) $(systemd_nspawn_SOURCES) \
@@ -2429,43 +2787,53 @@ DIST_SOURCES = $(am___daemon_la_SOURCES_DIST) \
$(systemd_rc_local_generator_SOURCES) \
$(am__systemd_readahead_SOURCES_DIST) \
$(systemd_remount_fs_SOURCES) \
- $(systemd_reply_password_SOURCES) $(systemd_shutdown_SOURCES) \
- $(systemd_shutdownd_SOURCES) $(systemd_sleep_SOURCES) \
- $(systemd_stdio_bridge_SOURCES) $(systemd_sysctl_SOURCES) \
+ $(systemd_reply_password_SOURCES) $(systemd_run_SOURCES) \
+ $(systemd_shutdown_SOURCES) $(systemd_shutdownd_SOURCES) \
+ $(systemd_sleep_SOURCES) $(systemd_stdio_bridge_SOURCES) \
+ $(systemd_sysctl_SOURCES) \
$(systemd_system_update_generator_SOURCES) \
$(am__systemd_timedated_SOURCES_DIST) \
- $(systemd_timestamp_SOURCES) $(systemd_tmpfiles_SOURCES) \
+ $(am__systemd_tmpfiles_SOURCES_DIST) \
$(systemd_tty_ask_password_agent_SOURCES) \
$(systemd_udevd_SOURCES) $(systemd_update_utmp_SOURCES) \
$(am__systemd_user_sessions_SOURCES_DIST) \
$(am__systemd_vconsole_setup_SOURCES_DIST) \
+ $(am__test_boot_timestamp_SOURCES_DIST) \
$(test_bus_chat_SOURCES) $(test_bus_kernel_SOURCES) \
- $(test_bus_marshal_SOURCES) $(test_bus_match_SOURCES) \
+ $(test_bus_kernel_benchmark_SOURCES) \
+ $(test_bus_kernel_bloom_SOURCES) $(test_bus_marshal_SOURCES) \
+ $(test_bus_match_SOURCES) $(test_bus_memfd_SOURCES) \
$(test_bus_server_SOURCES) $(test_bus_signature_SOURCES) \
- $(test_calendarspec_SOURCES) $(test_catalog_SOURCES) \
- $(test_cgroup_SOURCES) $(test_cgroup_util_SOURCES) \
- $(test_daemon_SOURCES) $(test_date_SOURCES) \
- $(am__test_efivars_SOURCES_DIST) $(test_engine_SOURCES) \
- $(test_env_replace_SOURCES) $(test_fileio_SOURCES) \
- $(test_hashmap_SOURCES) $(test_hostname_SOURCES) \
- $(test_id128_SOURCES) $(am__test_inhibit_SOURCES_DIST) \
- $(test_install_SOURCES) $(test_job_type_SOURCES) \
- $(test_journal_SOURCES) $(test_journal_enum_SOURCES) \
+ $(test_bus_zero_copy_SOURCES) $(test_calendarspec_SOURCES) \
+ $(test_catalog_SOURCES) $(test_cgroup_SOURCES) \
+ $(test_cgroup_util_SOURCES) $(test_daemon_SOURCES) \
+ $(test_date_SOURCES) $(test_device_nodes_SOURCES) \
+ $(test_engine_SOURCES) $(test_env_replace_SOURCES) \
+ $(test_fileio_SOURCES) $(test_hashmap_SOURCES) \
+ $(test_hostname_SOURCES) $(test_id128_SOURCES) \
+ $(am__test_inhibit_SOURCES_DIST) $(test_install_SOURCES) \
+ $(test_job_type_SOURCES) $(test_journal_SOURCES) \
+ $(test_journal_enum_SOURCES) $(test_journal_init_SOURCES) \
+ $(test_journal_interleaving_SOURCES) \
$(test_journal_match_SOURCES) $(test_journal_send_SOURCES) \
$(test_journal_stream_SOURCES) $(test_journal_syslog_SOURCES) \
$(test_journal_verify_SOURCES) $(test_libudev_SOURCES) \
- $(test_log_SOURCES) $(am__test_login_SOURCES_DIST) \
- $(test_loopback_SOURCES) $(test_mmap_cache_SOURCES) \
- $(test_ns_SOURCES) $(test_path_util_SOURCES) \
- $(test_prioq_SOURCES) $(test_replace_var_SOURCES) \
- $(test_sched_prio_SOURCES) $(test_sleep_SOURCES) \
- $(test_strbuf_SOURCES) $(test_strip_tab_ansi_SOURCES) \
- $(test_strv_SOURCES) $(test_strxcpyx_SOURCES) \
+ $(test_list_SOURCES) $(test_log_SOURCES) \
+ $(am__test_login_SOURCES_DIST) \
+ $(am__test_login_shared_SOURCES_DIST) \
+ $(am__test_login_tables_SOURCES_DIST) $(test_loopback_SOURCES) \
+ $(am__test_machine_tables_SOURCES_DIST) \
+ $(test_mmap_cache_SOURCES) $(test_ns_SOURCES) \
+ $(test_path_util_SOURCES) $(test_prioq_SOURCES) \
+ $(test_replace_var_SOURCES) $(test_sched_prio_SOURCES) \
+ $(test_sleep_SOURCES) $(test_strbuf_SOURCES) \
+ $(test_strip_tab_ansi_SOURCES) $(test_strv_SOURCES) \
+ $(test_strxcpyx_SOURCES) $(test_tables_SOURCES) \
$(test_time_SOURCES) $(test_udev_SOURCES) \
$(test_unit_file_SOURCES) $(test_unit_name_SOURCES) \
- $(test_util_SOURCES) $(test_watchdog_SOURCES) \
- $(am__timedatectl_SOURCES_DIST) $(udevadm_SOURCES) \
- $(v4l_id_SOURCES)
+ $(test_utf8_SOURCES) $(test_util_SOURCES) \
+ $(test_watchdog_SOURCES) $(am__timedatectl_SOURCES_DIST) \
+ $(udevadm_SOURCES) $(v4l_id_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
@@ -2495,7 +2863,9 @@ MANS = $(man_MANS)
am__dist_bashcompletion_DATA_DIST = shell-completion/bash/journalctl \
shell-completion/bash/systemctl \
shell-completion/bash/systemd-analyze \
+ shell-completion/bash/systemd-run \
shell-completion/bash/udevadm \
+ shell-completion/bash/kernel-install \
shell-completion/bash/systemd-coredumpctl \
shell-completion/bash/hostnamectl \
shell-completion/bash/localectl \
@@ -2506,17 +2876,20 @@ am__dist_dbuspolicy_DATA_DIST = \
src/hostname/org.freedesktop.hostname1.conf \
src/locale/org.freedesktop.locale1.conf \
src/timedate/org.freedesktop.timedate1.conf \
+ src/machine/org.freedesktop.machine1.conf \
src/login/org.freedesktop.login1.conf
am__dist_dbussystemservice_DATA_DIST = \
src/core/org.freedesktop.systemd1.service \
src/hostname/org.freedesktop.hostname1.service \
src/locale/org.freedesktop.locale1.service \
src/timedate/org.freedesktop.timedate1.service \
+ src/machine/org.freedesktop.machine1.service \
src/login/org.freedesktop.login1.service
am__dist_doc_DATA_DIST = README NEWS LICENSE.LGPL2.1 LICENSE.GPL2 \
- LICENSE.MIT DISTRO_PORTING src/udev/keymap/README.keymap.txt \
- src/readahead/sd-readahead.c src/systemd/sd-readahead.h
+ LICENSE.MIT DISTRO_PORTING src/readahead/sd-readahead.c \
+ src/systemd/sd-readahead.h
am__dist_gatewayddocumentroot_DATA_DIST = src/journal/browse.html
+am__dist_pamconf_DATA_DIST = src/login/systemd-user
am__dist_pkgdata_DATA_DIST = src/locale/kbd-model-map
am__dist_pkgsysconf_DATA_DIST = src/core/system.conf \
src/core/user.conf src/journal/journald.conf \
@@ -2537,70 +2910,31 @@ am__dist_systemunit_DATA_DIST = units/graphical.target \
units/final.target units/umount.target units/sigpwr.target \
units/sleep.target units/sockets.target units/timers.target \
units/paths.target units/suspend.target units/swap.target \
+ units/slices.target units/system.slice units/x-.slice \
units/systemd-initctl.socket units/systemd-shutdownd.socket \
units/syslog.socket units/dev-hugepages.mount \
units/dev-mqueue.mount units/sys-kernel-config.mount \
units/sys-kernel-debug.mount \
units/sys-fs-fuse-connections.mount units/tmp.mount \
units/printer.target units/sound.target units/bluetooth.target \
- units/smartcard.target units/systemd-tmpfiles-clean.timer \
- units/quotaon.service units/systemd-ask-password-wall.path \
+ units/smartcard.target units/systemd-ask-password-wall.path \
units/systemd-ask-password-console.path \
units/systemd-udevd-control.socket \
units/systemd-udevd-kernel.socket units/system-update.target \
- units/initrd-switch-root.target units/systemd-journald.socket \
+ units/initrd-switch-root.target \
+ units/systemd-tmpfiles-clean.timer \
+ units/systemd-journald.socket \
units/systemd-journal-gatewayd.socket \
units/proc-sys-fs-binfmt_misc.automount \
units/proc-sys-fs-binfmt_misc.mount \
units/systemd-readahead-drop.service \
- units/systemd-readahead-done.timer units/cryptsetup.target
+ units/systemd-readahead-done.timer units/cryptsetup.target \
+ units/machine.slice units/user.slice
am__dist_tmpfiles_DATA_DIST = tmpfiles.d/systemd.conf \
tmpfiles.d/tmp.conf tmpfiles.d/x11.conf tmpfiles.d/legacy.conf
-am__dist_udevkeymap_DATA_DIST = keymaps/acer keymaps/acer-aspire_5720 \
- keymaps/acer-aspire_8930 keymaps/acer-aspire_5920g \
- keymaps/acer-aspire_6920 keymaps/acer-travelmate_c300 \
- keymaps/asus keymaps/compaq-e_evo keymaps/dell \
- keymaps/dell-latitude-xt2 keymaps/everex-xt5000 \
- keymaps/fujitsu-amilo_li_2732 keymaps/fujitsu-amilo_pa_2548 \
- keymaps/fujitsu-amilo_pro_edition_v3505 \
- keymaps/fujitsu-amilo_pro_v3205 keymaps/fujitsu-amilo_si_1520 \
- keymaps/fujitsu-esprimo_mobile_v5 \
- keymaps/fujitsu-esprimo_mobile_v6 keymaps/genius-slimstar-320 \
- keymaps/hewlett-packard keymaps/hewlett-packard-2510p_2530p \
- keymaps/hewlett-packard-compaq_elitebook \
- keymaps/hewlett-packard-pavilion \
- keymaps/hewlett-packard-presario-2100 \
- keymaps/hewlett-packard-tablet keymaps/hewlett-packard-tx2 \
- keymaps/hewlett-packard_elitebook-8440p \
- keymaps/hewlett-packard_elitebook-8460p \
- keymaps/hewlett-packard-hdx9494nr \
- keymaps/ibm-thinkpad-usb-keyboard-trackpoint \
- keymaps/inventec-symphony_6.0_7.0 keymaps/lenovo-3000 \
- keymaps/lenovo-ideapad \
- keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \
- keymaps/lenovo-thinkpad_x6_tablet \
- keymaps/lenovo-thinkpad_x200_tablet keymaps/lg-x110 \
- keymaps/logitech-wave keymaps/logitech-wave-cordless \
- keymaps/logitech-wave-pro-cordless keymaps/maxdata-pro_7000 \
- keymaps/medion-fid2060 keymaps/medionnb-a555 \
- keymaps/micro-star keymaps/module-asus-w3j keymaps/module-ibm \
- keymaps/module-lenovo keymaps/module-sony \
- keymaps/module-sony-old keymaps/module-sony-vgn \
- keymaps/module-sony-vpc keymaps/olpc-xo keymaps/onkyo \
- keymaps/oqo-model2 keymaps/samsung-other \
- keymaps/samsung-series-9 keymaps/samsung-sq1us \
- keymaps/samsung-sx20s keymaps/toshiba-satellite_a100 \
- keymaps/toshiba-satellite_a110 keymaps/toshiba-satellite_m30x \
- keymaps/zepto-znote
-am__dist_udevkeymapforcerel_DATA_DIST = \
- keymaps-force-release/dell-touchpad \
- keymaps-force-release/dell-xps keymaps-force-release/hp-other \
- keymaps-force-release/samsung-other \
- keymaps-force-release/samsung-series-9 \
- keymaps-force-release/common-volume-keys
am__dist_udevrules_DATA_DIST = rules/99-systemd.rules \
rules/42-usb-hid-pm.rules rules/50-udev-default.rules \
- rules/60-persistent-storage-tape.rules \
+ rules/60-keyboard.rules rules/60-persistent-storage-tape.rules \
rules/60-persistent-serial.rules \
rules/60-persistent-input.rules rules/60-persistent-alsa.rules \
rules/60-persistent-storage.rules rules/64-btrfs.rules \
@@ -2609,19 +2943,33 @@ am__dist_udevrules_DATA_DIST = rules/99-systemd.rules \
rules/95-udev-late.rules rules/50-firmware.rules \
rules/80-drivers.rules rules/60-cdrom_id.rules \
rules/60-persistent-v4l.rules rules/61-accelerometer.rules \
- src/udev/keymap/95-keymap.rules \
- src/udev/keymap/95-keyboard-force-release.rules \
rules/75-probe_mtd.rules src/login/70-uaccess.rules \
src/login/70-power-switch.rules
+am__dist_zshcompletion_DATA_DIST = shell-completion/zsh/_systemctl \
+ shell-completion/zsh/_journalctl shell-completion/zsh/_udevadm \
+ shell-completion/zsh/_kernel-install \
+ shell-completion/zsh/_systemd-nspawn \
+ shell-completion/zsh/_systemd-analyze \
+ shell-completion/zsh/_sd_hosts_or_user_at_host \
+ shell-completion/zsh/_systemd-delta \
+ shell-completion/zsh/_systemd \
+ shell-completion/zsh/_systemd-tmpfiles \
+ shell-completion/zsh/_systemd-coredumpctl \
+ shell-completion/zsh/_hostnamectl \
+ shell-completion/zsh/_localectl \
+ shell-completion/zsh/_timedatectl \
+ shell-completion/zsh/_machinectl \
+ shell-completion/zsh/_loginctl \
+ shell-completion/zsh/_systemd-inhibit
DATA = $(dbusinterface_DATA) $(dist_bashcompletion_DATA) \
$(dist_catalog_DATA) $(dist_dbuspolicy_DATA) \
$(dist_dbussystemservice_DATA) $(dist_doc_DATA) \
- $(dist_gatewayddocumentroot_DATA) $(dist_pkgdata_DATA) \
- $(dist_pkgsysconf_DATA) $(dist_sysctl_DATA) \
- $(dist_systemunit_DATA) $(dist_tmpfiles_DATA) \
- $(dist_udevconf_DATA) $(dist_udevhwdb_DATA) \
- $(dist_udevkeymap_DATA) $(dist_udevkeymapforcerel_DATA) \
- $(dist_udevrules_DATA) $(dist_userunit_DATA) $(gir_DATA) \
+ $(dist_gatewayddocumentroot_DATA) $(dist_pamconf_DATA) \
+ $(dist_pkgdata_DATA) $(dist_pkgsysconf_DATA) \
+ $(dist_sysctl_DATA) $(dist_systemunit_DATA) \
+ $(dist_tmpfiles_DATA) $(dist_udevconf_DATA) \
+ $(dist_udevhwdb_DATA) $(dist_udevrules_DATA) \
+ $(dist_userunit_DATA) $(dist_zshcompletion_DATA) $(gir_DATA) \
$(nodist_polkitpolicy_DATA) $(nodist_rpmmacros_DATA) \
$(nodist_systemunit_DATA) $(nodist_udevrules_DATA) \
$(nodist_userunit_DATA) $(noinst_DATA) $(pkgconfigdata_DATA) \
@@ -2937,7 +3285,6 @@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
HTML_DIR = @HTML_DIR@
-INCLUDE_PREFIX = @INCLUDE_PREFIX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -2961,7 +3308,9 @@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
KBD_LOADKEYS = @KBD_LOADKEYS@
KBD_SETFONT = @KBD_SETFONT@
+KEXEC = @KEXEC@
KILL = @KILL@
+KMOD = @KMOD@
KMOD_CFLAGS = @KMOD_CFLAGS@
KMOD_LIBS = @KMOD_LIBS@
LD = @LD@
@@ -3011,10 +3360,9 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
PYTHON = @PYTHON@
PYTHON_BINARY = @PYTHON_BINARY@
-PYTHON_CFLAGS = @PYTHON_CFLAGS@
-PYTHON_CONFIG = @PYTHON_CONFIG@
+PYTHON_DEVEL_CFLAGS = @PYTHON_DEVEL_CFLAGS@
+PYTHON_DEVEL_LIBS = @PYTHON_DEVEL_LIBS@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-PYTHON_LIBS = @PYTHON_LIBS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
@@ -3025,6 +3373,7 @@ QUOTAON = @QUOTAON@
RANLIB = @RANLIB@
RC_LOCAL_SCRIPT_PATH_START = @RC_LOCAL_SCRIPT_PATH_START@
RC_LOCAL_SCRIPT_PATH_STOP = @RC_LOCAL_SCRIPT_PATH_STOP@
+RT_LIBS = @RT_LIBS@
SED = @SED@
SELINUX_CFLAGS = @SELINUX_CFLAGS@
SELINUX_LIBS = @SELINUX_LIBS@
@@ -3087,6 +3436,7 @@ infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+lcov_found = @lcov_found@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -3094,6 +3444,7 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
+pamconfdir = @pamconfdir@
pamlibdir = @pamlibdir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@
@@ -3115,32 +3466,33 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+zshcompletiondir = @zshcompletiondir@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
AM_MAKEFLAGS = --no-print-directory
AUTOMAKE_OPTIONS = color-tests parallel-tests
-SUBDIRS = . po $(am__append_50) $(am__append_60)
-LIBUDEV_CURRENT = 4
-LIBUDEV_REVISION = 5
-LIBUDEV_AGE = 3
+SUBDIRS = . po $(am__append_65) $(am__append_75)
+LIBUDEV_CURRENT = 5
+LIBUDEV_REVISION = 0
+LIBUDEV_AGE = 4
LIBGUDEV_CURRENT = 1
LIBGUDEV_REVISION = 3
LIBGUDEV_AGE = 1
-LIBSYSTEMD_LOGIN_CURRENT = 7
+LIBSYSTEMD_LOGIN_CURRENT = 9
LIBSYSTEMD_LOGIN_REVISION = 1
-LIBSYSTEMD_LOGIN_AGE = 7
+LIBSYSTEMD_LOGIN_AGE = 9
LIBSYSTEMD_DAEMON_CURRENT = 0
LIBSYSTEMD_DAEMON_REVISION = 10
LIBSYSTEMD_DAEMON_AGE = 0
LIBSYSTEMD_ID128_CURRENT = 0
-LIBSYSTEMD_ID128_REVISION = 23
+LIBSYSTEMD_ID128_REVISION = 26
LIBSYSTEMD_ID128_AGE = 0
-LIBSYSTEMD_JOURNAL_CURRENT = 10
-LIBSYSTEMD_JOURNAL_REVISION = 2
-LIBSYSTEMD_JOURNAL_AGE = 10
+LIBSYSTEMD_JOURNAL_CURRENT = 11
+LIBSYSTEMD_JOURNAL_REVISION = 3
+LIBSYSTEMD_JOURNAL_AGE = 11
pkgconfigdatadir = $(datadir)/pkgconfig
pkgconfiglibdir = $(libdir)/pkgconfig
polkitpolicydir = $(datadir)/polkit-1/actions
-rpmmacrosdir = $(sysconfdir)/rpm
+rpmmacrosdir = $(prefix)/lib/rpm/macros.d
sysvinitdir = $(SYSTEM_SYSVINIT_PATH)
sysvrcnddir = $(SYSTEM_SYSVRCND_PATH)
varlogdir = $(localstatedir)/log
@@ -3153,8 +3505,8 @@ userunitdir = $(prefix)/lib/systemd/user
userpresetdir = $(prefix)/lib/systemd/user-preset
tmpfilesdir = $(prefix)/lib/tmpfiles.d
sysctldir = $(prefix)/lib/sysctl.d
-usergeneratordir = $(prefix)/lib/systemd/user-generators
systemgeneratordir = $(rootlibexecdir)/system-generators
+usergeneratordir = $(prefix)/lib/systemd/user-generators
systemshutdowndir = $(rootlibexecdir)/system-shutdown
systemsleepdir = $(rootlibexecdir)/system-sleep
systemunitdir = $(rootprefix)/lib/systemd/system
@@ -3169,7 +3521,7 @@ rootbindir = $(rootprefix)/bin
rootlibexecdir = $(rootprefix)/lib/systemd
CLEANFILES = $(BUILT_SOURCES) units/console-shell.service.m4 \
units/console-getty.service.m4 units/rescue.service.m4 \
- $(am__append_39) $(am__append_41) \
+ $(am__append_42) $(am__append_44) \
src/core/load-fragment-gperf.gperf \
src/core/load-fragment-gperf.c \
src/core/load-fragment-gperf-nulstr.c \
@@ -3179,24 +3531,23 @@ CLEANFILES = $(BUILT_SOURCES) units/console-shell.service.m4 \
src/libudev/libudev.pc docs/html/libudev docs/html/gudev \
rules/99-systemd.rules src/udev/udev.pc \
units/systemd-udevd.service units/systemd-udev-trigger.service \
- units/systemd-udev-settle.service $(am__append_63) \
- $(am__append_65) $(am__append_73) src/journal/journald-gperf.c \
- $(am__append_97) $(am__append_175) $(nodist_systemunit_DATA) \
+ units/systemd-udev-settle.service \
+ src/udev/keyboard-keys-from-name.gperf \
+ src/udev/keyboard-keys.txt $(am__append_78) $(am__append_80) \
+ src/journal/journald-gperf.c $(am__append_107) \
+ $(am__append_202) $(nodist_systemunit_DATA) \
$(nodist_userunit_DATA) $(pkgconfigdata_DATA) \
$(pkgconfiglib_DATA) $(nodist_polkitpolicy_DATA) \
- $(dbusinterface_DATA) $(am__append_178)
-DISTCLEANFILES = $(am__append_177)
+ $(dbusinterface_DATA) $(am__append_205)
+DISTCLEANFILES = $(am__append_204)
EXTRA_DIST = units/getty@.service.m4 units/serial-getty@.service.m4 \
units/console-shell.service.m4.in \
units/console-getty.service.m4.in units/rescue.service.m4.in \
units/systemd-initctl.service.in \
units/systemd-shutdownd.service.in \
units/systemd-remount-fs.service.in \
+ units/systemd-update-utmp.service.in \
units/systemd-update-utmp-runlevel.service.in \
- units/systemd-update-utmp-shutdown.service.in \
- units/systemd-tmpfiles-setup-dev.service.in \
- units/systemd-tmpfiles-setup.service.in \
- units/systemd-tmpfiles-clean.service.in \
units/systemd-ask-password-wall.service.in \
units/systemd-ask-password-console.service.in \
units/systemd-sysctl.service.in units/emergency.service.in \
@@ -3217,14 +3568,18 @@ EXTRA_DIST = units/getty@.service.m4 units/serial-getty@.service.m4 \
units/initrd-switch-root.service.in \
units/systemd-nspawn@.service.in introspect.awk \
units/rc-local.service.in units/halt-local.service.in \
- $(am__append_42) $(XML_FILES) $(HTML_FILES) $(HTML_ALIAS) \
- $(dist_MANS) make-man-index.py make-directive-index.py \
+ $(am__append_45) $(XML_FILES) $(HTML_FILES) $(HTML_ALIAS) \
+ $(man_MANS) make-man-index.py make-directive-index.py \
xml_helper.py src/core/load-fragment-gperf.gperf.m4 \
src/core/systemd.pc.in src/core/macros.systemd.in \
test/sched_idle_bad.service test/sched_idle_ok.service \
test/sched_rr_bad.service test/sched_rr_ok.service \
- test/sched_rr_change.service \
+ test/sched_rr_change.service src/test/test-helper.h \
units/systemd-modules-load.service.in \
+ units/kmod-static-nodes.service.in \
+ units/systemd-tmpfiles-setup-dev.service.in \
+ units/systemd-tmpfiles-setup.service.in \
+ units/systemd-tmpfiles-clean.service.in \
src/libsystemd-daemon/libsystemd-daemon.pc.in \
src/libsystemd-daemon/libsystemd-daemon.sym \
src/libudev/libudev.pc.in src/libudev/libudev.sym \
@@ -3238,8 +3593,6 @@ EXTRA_DIST = units/getty@.service.m4 units/serial-getty@.service.m4 \
src/gudev/gudevenumtypes.h.template \
src/gudev/gudevenumtypes.c.template src/gudev/gjs-example.js \
src/gudev/seed-example-enum.js src/gudev/seed-example.js \
- src/udev/keymap/check-keymaps.sh \
- src/udev/keymap/keyboard-force-release.sh.in \
src/libsystemd-id128/libsystemd-id128.pc.in \
src/libsystemd-id128/libsystemd-id128.sym \
src/journal/libsystemd-journal.pc.in \
@@ -3254,11 +3607,11 @@ EXTRA_DIST = units/getty@.service.m4 units/serial-getty@.service.m4 \
units/systemd-readahead-replay.service.in \
units/systemd-readahead-done.service.in \
units/systemd-quotacheck.service.in \
- units/systemd-random-seed-save.service.in \
- units/systemd-random-seed-load.service.in \
+ units/systemd-random-seed.service.in \
+ units/systemd-backlight@.service.in \
units/systemd-hostnamed.service.in \
units/systemd-localed.service.in \
- units/systemd-timedated.service.in \
+ units/systemd-timedated.service.in $(am__append_176) \
src/login/logind-gperf.gperf src/login/libsystemd-login.pc.in \
src/login/libsystemd-login.sym src/login/71-seat.rules.in \
src/login/73-seat-late.rules.in \
@@ -3266,28 +3619,28 @@ EXTRA_DIST = units/getty@.service.m4 units/serial-getty@.service.m4 \
units/systemd-user-sessions.service.in \
$(polkitpolicy_in_files) $(polkitpolicy_in_in_files) \
man/custom-html.xsl man/custom-man.xsl docs/sysvinit/README.in \
- docs/var-log/README.in \
- shell-completion/systemd-zsh-completion.zsh
+ docs/var-log/README.in
BUILT_SOURCES = src/core/syscall-from-name.h \
- src/core/syscall-to-name.h $(am__append_64) $(am__append_68) \
- $(am__append_176)
+ src/core/syscall-to-name.h $(nodist_libudev_core_la_SOURCES) \
+ $(am__append_79) $(am__append_203)
INSTALL_EXEC_HOOKS = install-target-wants-hook \
install-directories-hook install-aliases-hook \
systemd-detect-virt-install-hook \
libsystemd-daemon-install-hook libudev-install-hook \
- $(am__append_66) libsystemd-id128-install-hook \
- libsystemd-journal-install-hook $(am__append_159)
+ $(am__append_81) libsystemd-id128-install-hook \
+ libsystemd-journal-install-hook $(am__append_186)
UNINSTALL_EXEC_HOOKS = libsystemd-daemon-uninstall-hook \
- libudev-uninstall-hook $(am__append_67) \
+ libudev-uninstall-hook $(am__append_82) \
libsystemd-id128-uninstall-hook \
- libsystemd-journal-uninstall-hook $(am__append_160)
-INSTALL_DATA_HOOKS = hwdb-update-hook catalog-update-hook
-UNINSTALL_DATA_HOOKS = catalog-remove-hook
+ libsystemd-journal-uninstall-hook $(am__append_187)
+INSTALL_DATA_HOOKS = units-install-hook hwdb-update-hook \
+ catalog-update-hook
+UNINSTALL_DATA_HOOKS = units-uninstall-hook catalog-remove-hook
DISTCLEAN_LOCAL_HOOKS = test-sys-distclean
CLEAN_LOCAL_HOOKS = clean-sphinx
pkginclude_HEADERS = src/systemd/sd-shutdown.h src/systemd/sd-daemon.h \
src/systemd/sd-id128.h src/systemd/sd-journal.h \
- src/systemd/sd-messages.h $(am__append_165)
+ src/systemd/sd-messages.h $(am__append_193)
# ------------------------------------------------------------------------------
@@ -3308,20 +3661,20 @@ pkginclude_HEADERS = src/systemd/sd-shutdown.h src/systemd/sd-daemon.h \
# ------------------------------------------------------------------------------
noinst_LTLIBRARIES = libsystemd-shared.la libsystemd-dbus.la \
libsystemd-units.la libsystemd-label.la libsystemd-logs.la \
- libsystemd-capability.la libsystemd-audit.la $(am__append_43) \
+ libsystemd-capability.la libsystemd-audit.la $(am__append_46) \
libsystemd-core.la libsystemd-daemon-internal.la \
libsystemd-bus.la libudev-private.la libudev-core.la \
libsystemd-id128-internal.la libsystemd-journal-internal.la \
- $(am__append_167)
-lib_LTLIBRARIES = libsystemd-daemon.la libudev.la $(am__append_61) \
- libsystemd-id128.la libsystemd-journal.la $(am__append_152) \
- $(am__append_166)
+ $(am__append_167) $(am__append_179)
+lib_LTLIBRARIES = libsystemd-daemon.la libudev.la $(am__append_76) \
+ libsystemd-id128.la libsystemd-journal.la $(am__append_165) \
+ $(am__append_194)
include_HEADERS = src/libudev/libudev.h
-noinst_DATA = $(am__append_38) $(am__append_40) $(am__append_51)
+noinst_DATA = $(am__append_41) $(am__append_43) $(am__append_66)
pkgconfiglib_DATA = src/libsystemd-daemon/libsystemd-daemon.pc \
- src/libudev/libudev.pc $(am__append_62) \
+ src/libudev/libudev.pc $(am__append_77) \
src/libsystemd-id128/libsystemd-id128.pc \
- src/journal/libsystemd-journal.pc $(am__append_168)
+ src/journal/libsystemd-journal.pc $(am__append_195)
polkitpolicy_in_in_files = \
src/core/org.freedesktop.systemd1.policy.in.in
polkitpolicy_in_files = \
@@ -3329,27 +3682,27 @@ polkitpolicy_in_files = \
src/locale/org.freedesktop.locale1.policy.in \
src/timedate/org.freedesktop.timedate1.policy.in \
src/login/org.freedesktop.login1.policy.in
-polkitpolicy_files = $(am__append_126) $(am__append_135) \
- $(am__append_145) $(am__append_169)
+polkitpolicy_files = $(am__append_137) $(am__append_147) \
+ $(am__append_158) $(am__append_196)
dist_udevrules_DATA = rules/99-systemd.rules rules/42-usb-hid-pm.rules \
- rules/50-udev-default.rules \
+ rules/50-udev-default.rules rules/60-keyboard.rules \
rules/60-persistent-storage-tape.rules \
rules/60-persistent-serial.rules \
rules/60-persistent-input.rules rules/60-persistent-alsa.rules \
rules/60-persistent-storage.rules rules/64-btrfs.rules \
rules/75-net-description.rules rules/75-tty-description.rules \
rules/78-sound-card.rules rules/80-net-name-slot.rules \
- rules/95-udev-late.rules $(am__append_53) $(am__append_55) \
+ rules/95-udev-late.rules $(am__append_68) $(am__append_70) \
rules/60-cdrom_id.rules rules/60-persistent-v4l.rules \
- rules/61-accelerometer.rules $(am__append_71) \
- rules/75-probe_mtd.rules $(am__append_173)
-nodist_udevrules_DATA = $(am__append_174)
+ rules/61-accelerometer.rules rules/75-probe_mtd.rules \
+ $(am__append_200)
+nodist_udevrules_DATA = $(am__append_201)
dist_pkgsysconf_DATA = src/core/system.conf src/core/user.conf \
- src/journal/journald.conf $(am__append_111) $(am__append_164)
-dist_pkgdata_DATA = $(am__append_138)
+ src/journal/journald.conf $(am__append_121) $(am__append_192)
+dist_pkgdata_DATA = $(am__append_150)
dist_dbuspolicy_DATA = src/core/org.freedesktop.systemd1.conf \
- $(am__append_124) $(am__append_133) $(am__append_143) \
- $(am__append_163)
+ $(am__append_135) $(am__append_145) $(am__append_156) \
+ $(am__append_173) $(am__append_191)
dbusinterface_DATA = org.freedesktop.systemd1.Manager.xml \
org.freedesktop.systemd1.Job.xml \
org.freedesktop.systemd1.Unit.xml \
@@ -3362,28 +3715,32 @@ dbusinterface_DATA = org.freedesktop.systemd1.Manager.xml \
org.freedesktop.systemd1.Automount.xml \
org.freedesktop.systemd1.Snapshot.xml \
org.freedesktop.systemd1.Swap.xml \
- org.freedesktop.systemd1.Path.xml $(am__append_127) \
- $(am__append_136) $(am__append_146)
+ org.freedesktop.systemd1.Path.xml $(am__append_138) \
+ $(am__append_148) $(am__append_159)
dist_dbussystemservice_DATA = \
- src/core/org.freedesktop.systemd1.service $(am__append_125) \
- $(am__append_134) $(am__append_142) $(am__append_162)
+ src/core/org.freedesktop.systemd1.service $(am__append_136) \
+ $(am__append_146) $(am__append_155) $(am__append_172) \
+ $(am__append_190)
check_DATA = test/sys
tests = test-job-type test-env-replace test-strbuf test-strv \
test-path-util test-strxcpyx test-unit-name test-unit-file \
- test-util test-date test-sleep test-replace-var \
+ test-utf8 test-util test-date test-sleep test-replace-var \
test-sched-prio test-calendarspec test-strip-tab-ansi \
test-cgroup-util test-prioq test-fileio test-time test-hashmap \
- test-bus-marshal test-bus-signature test-bus-chat \
- test-bus-server test-bus-match test-bus-kernel test-id128 \
- test-journal test-journal-send test-journal-syslog \
- test-journal-match test-journal-stream test-journal-verify \
- test-mmap-cache test-catalog
+ test-list test-tables test-device-nodes test-bus-marshal \
+ test-bus-signature test-bus-chat test-bus-server \
+ test-bus-match test-bus-kernel test-bus-kernel-bloom \
+ test-bus-kernel-benchmark test-bus-memfd test-bus-zero-copy \
+ test-id128 test-journal test-journal-send test-journal-syslog \
+ test-journal-match test-journal-stream test-journal-init \
+ test-journal-verify test-journal-interleaving test-mmap-cache \
+ test-catalog $(am__append_169) $(am__append_185)
# ------------------------------------------------------------------------------
manual_tests = test-engine test-ns test-loopback test-hostname \
test-daemon test-cgroup test-install test-watchdog test-log \
- $(am__append_45) test-libudev test-udev test-journal-enum \
- $(am__append_158)
+ $(am__append_48) test-libudev test-udev test-journal-enum \
+ $(am__append_184)
AM_CPPFLAGS = \
-include $(top_builddir)/config.h \
-DPKGSYSCONFDIR=\"$(pkgsysconfdir)\" \
@@ -3402,7 +3759,7 @@ AM_CPPFLAGS = \
-DSYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH=\"$(rootbindir)/systemd-tty-ask-password-agent\" \
-DSYSTEMD_STDIO_BRIDGE_BINARY_PATH=\"$(bindir)/systemd-stdio-bridge\" \
-DROOTPREFIX=\"$(rootprefix)\" \
- -DRANDOM_SEED=\"$(localstatedir)/lib/random-seed\" \
+ -DRANDOM_SEED=\"$(localstatedir)/lib/systemd/random-seed\" \
-DSYSTEMD_CRYPTSETUP_PATH=\"$(rootlibexecdir)/systemd-cryptsetup\" \
-DSYSTEM_GENERATOR_PATH=\"$(systemgeneratordir)\" \
-DUSER_GENERATOR_PATH=\"$(usergeneratordir)\" \
@@ -3413,6 +3770,7 @@ AM_CPPFLAGS = \
-DUDEVLIBEXECDIR=\"$(udevlibexecdir)\" \
-DPOLKIT_AGENT_BINARY_PATH=\"$(bindir)/pkttyagent\" \
-DQUOTACHECK=\"$(QUOTACHECK)\" \
+ -DKEXEC=\"$(KEXEC)\" \
-I $(top_srcdir)/src \
-I $(top_srcdir)/src/shared \
-I $(top_srcdir)/src/login \
@@ -3422,6 +3780,7 @@ AM_CPPFLAGS = \
-I $(top_srcdir)/src/core \
-I $(top_srcdir)/src/libudev \
-I $(top_srcdir)/src/udev \
+ -I $(top_builddir)/src/udev \
-I $(top_srcdir)/src/libsystemd-bus \
$(OUR_CPPFLAGS)
@@ -3429,9 +3788,9 @@ AM_CFLAGS = $(OUR_CFLAGS)
AM_LDFLAGS = $(OUR_LDFLAGS)
# ------------------------------------------------------------------------------
-INSTALL_DIRS = $(sysconfdir)/udev/rules.d $(sysconfdir)/udev/hwdb.d \
- $(am__append_101) $(am__append_147) $(am__append_170) \
- $(am__append_185) $(tmpfilesdir) $(sysconfdir)/tmpfiles.d \
+INSTALL_DIRS = $(am__append_61) $(sysconfdir)/udev/rules.d \
+ $(sysconfdir)/udev/hwdb.d $(am__append_111) $(am__append_160) \
+ $(am__append_197) $(am__append_212) \
$(prefix)/lib/modules-load.d $(sysconfdir)/modules-load.d \
$(prefix)/lib/sysctl.d $(sysconfdir)/sysctl.d \
$(prefix)/lib/kernel/install.d $(sysconfdir)/kernel/install.d \
@@ -3441,34 +3800,34 @@ INSTALL_DIRS = $(sysconfdir)/udev/rules.d $(sysconfdir)/udev/hwdb.d \
$(pkgsysconfdir)/system/getty.target.wants \
$(pkgsysconfdir)/user $(dbussessionservicedir) \
$(sysconfdir)/xdg/systemd
-RUNLEVEL1_TARGET_WANTS = $(am__append_179)
-RUNLEVEL2_TARGET_WANTS = $(am__append_180)
-RUNLEVEL3_TARGET_WANTS = $(am__append_181)
-RUNLEVEL4_TARGET_WANTS = $(am__append_182)
-RUNLEVEL5_TARGET_WANTS = $(am__append_183)
-SHUTDOWN_TARGET_WANTS = $(am__append_116) \
- systemd-update-utmp-shutdown.service
+RUNLEVEL1_TARGET_WANTS = $(am__append_206)
+RUNLEVEL2_TARGET_WANTS = $(am__append_207)
+RUNLEVEL3_TARGET_WANTS = $(am__append_208)
+RUNLEVEL4_TARGET_WANTS = $(am__append_209)
+RUNLEVEL5_TARGET_WANTS = $(am__append_210)
+SHUTDOWN_TARGET_WANTS =
LOCAL_FS_TARGET_WANTS = systemd-remount-fs.service \
systemd-fsck-root.service tmp.mount
-MULTI_USER_TARGET_WANTS = $(am__append_171) getty.target \
+MULTI_USER_TARGET_WANTS = $(am__append_198) getty.target \
systemd-ask-password-wall.path
-SYSINIT_TARGET_WANTS = $(am__append_48) systemd-udevd.service \
+SYSINIT_TARGET_WANTS = $(am__append_51) $(am__append_53) \
+ $(am__append_58) systemd-udevd.service \
systemd-udev-trigger.service systemd-journald.service \
- systemd-journal-flush.service $(am__append_102) \
- $(am__append_105) $(am__append_117) $(am__append_121) \
- dev-hugepages.mount dev-mqueue.mount sys-kernel-config.mount \
+ systemd-journal-flush.service $(am__append_112) \
+ $(am__append_115) $(am__append_126) $(am__append_132) \
+ systemd-update-utmp.service dev-hugepages.mount \
+ dev-mqueue.mount sys-kernel-config.mount \
sys-kernel-debug.mount sys-fs-fuse-connections.mount \
- systemd-tmpfiles-setup-dev.service \
- systemd-tmpfiles-setup.service systemd-sysctl.service \
- systemd-ask-password-console.path
+ systemd-sysctl.service systemd-ask-password-console.path
SOCKETS_TARGET_WANTS = systemd-udevd-control.socket \
systemd-udevd-kernel.socket systemd-journald.socket \
systemd-initctl.socket systemd-shutdownd.socket
-TIMERS_TARGET_WANTS = systemd-tmpfiles-clean.timer
-SYSTEM_UNIT_ALIASES = $(am__append_128) $(am__append_137) \
- $(am__append_148) $(am__append_172) $(am__append_184) \
- graphical.target default.target reboot.target \
- ctrl-alt-del.target getty@.service autovt@.service
+TIMERS_TARGET_WANTS = $(am__append_60)
+SYSTEM_UNIT_ALIASES = $(am__append_139) $(am__append_149) \
+ $(am__append_161) $(am__append_175) $(am__append_199) \
+ $(am__append_211) graphical.target default.target \
+ reboot.target ctrl-alt-del.target getty@.service \
+ autovt@.service
USER_UNIT_ALIASES = $(systemunitdir)/shutdown.target shutdown.target \
$(systemunitdir)/sockets.target sockets.target \
$(systemunitdir)/timers.target timers.target \
@@ -3519,11 +3878,21 @@ systemd_analyze_LDADD = \
dist_bashcompletion_DATA = shell-completion/bash/journalctl \
shell-completion/bash/systemctl \
shell-completion/bash/systemd-analyze \
- shell-completion/bash/udevadm $(am__append_96) \
- $(am__append_130) $(am__append_140) $(am__append_150) \
- $(am__append_157)
-dist_tmpfiles_DATA = tmpfiles.d/systemd.conf tmpfiles.d/tmp.conf \
- tmpfiles.d/x11.conf $(am__append_1)
+ shell-completion/bash/systemd-run \
+ shell-completion/bash/udevadm \
+ shell-completion/bash/kernel-install $(am__append_105) \
+ $(am__append_141) $(am__append_152) $(am__append_163) \
+ $(am__append_182)
+dist_zshcompletion_DATA = shell-completion/zsh/_systemctl \
+ shell-completion/zsh/_journalctl shell-completion/zsh/_udevadm \
+ shell-completion/zsh/_kernel-install \
+ shell-completion/zsh/_systemd-nspawn \
+ shell-completion/zsh/_systemd-analyze \
+ shell-completion/zsh/_sd_hosts_or_user_at_host \
+ shell-completion/zsh/_systemd-delta \
+ shell-completion/zsh/_systemd $(am__append_59) \
+ $(am__append_106) $(am__append_142) $(am__append_153) \
+ $(am__append_164) $(am__append_174) $(am__append_183)
dist_sysctl_DATA = \
sysctl.d/50-default.conf
@@ -3542,30 +3911,28 @@ dist_systemunit_DATA = units/graphical.target units/multi-user.target \
units/shutdown.target units/final.target units/umount.target \
units/sigpwr.target units/sleep.target units/sockets.target \
units/timers.target units/paths.target units/suspend.target \
- units/swap.target units/systemd-initctl.socket \
+ units/swap.target units/slices.target units/system.slice \
+ units/x-.slice units/systemd-initctl.socket \
units/systemd-shutdownd.socket units/syslog.socket \
units/dev-hugepages.mount units/dev-mqueue.mount \
units/sys-kernel-config.mount units/sys-kernel-debug.mount \
units/sys-fs-fuse-connections.mount units/tmp.mount \
units/printer.target units/sound.target units/bluetooth.target \
- units/smartcard.target units/systemd-tmpfiles-clean.timer \
- units/quotaon.service units/systemd-ask-password-wall.path \
+ units/smartcard.target units/systemd-ask-password-wall.path \
units/systemd-ask-password-console.path \
units/systemd-udevd-control.socket \
units/systemd-udevd-kernel.socket units/system-update.target \
- units/initrd-switch-root.target units/systemd-journald.socket \
- $(am__append_91) $(am__append_99) $(am__append_108) \
- $(am__append_120)
+ units/initrd-switch-root.target $(am__append_55) \
+ units/systemd-journald.socket $(am__append_100) \
+ $(am__append_109) $(am__append_118) $(am__append_131) \
+ $(am__append_171) $(am__append_189)
nodist_systemunit_DATA = units/getty@.service \
units/serial-getty@.service units/console-shell.service \
units/console-getty.service units/systemd-initctl.service \
units/systemd-shutdownd.service \
units/systemd-remount-fs.service \
+ units/systemd-update-utmp.service \
units/systemd-update-utmp-runlevel.service \
- units/systemd-update-utmp-shutdown.service \
- units/systemd-tmpfiles-setup-dev.service \
- units/systemd-tmpfiles-setup.service \
- units/systemd-tmpfiles-clean.service \
units/systemd-ask-password-wall.service \
units/systemd-ask-password-console.service \
units/systemd-sysctl.service units/emergency.service \
@@ -3581,13 +3948,13 @@ nodist_systemunit_DATA = units/getty@.service \
units/initrd-parse-etc.service units/initrd-cleanup.service \
units/initrd-udevadm-cleanup-db.service \
units/initrd-switch-root.service units/systemd-nspawn@.service \
- $(am__append_2) $(am__append_47) \
- units/systemd-journald.service \
- units/systemd-journal-flush.service $(am__append_92) \
- $(am__append_100) $(am__append_104) $(am__append_109) \
- $(am__append_113) units/quotaon.service $(am__append_115) \
- $(am__append_123) $(am__append_131) $(am__append_144) \
- $(am__append_161)
+ $(am__append_1) $(am__append_50) $(am__append_52) \
+ $(am__append_56) units/systemd-journald.service \
+ units/systemd-journal-flush.service $(am__append_101) \
+ $(am__append_110) $(am__append_114) $(am__append_119) \
+ $(am__append_123) units/quotaon.service $(am__append_125) \
+ $(am__append_128) $(am__append_134) $(am__append_143) \
+ $(am__append_157) $(am__append_170) $(am__append_188)
dist_userunit_DATA = \
units/user/default.target \
units/user/exit.target
@@ -3596,7 +3963,7 @@ nodist_userunit_DATA = \
units/user/systemd-exit.service
dist_doc_DATA = README NEWS LICENSE.LGPL2.1 LICENSE.GPL2 LICENSE.MIT \
- DISTRO_PORTING $(am__append_70) $(am__append_106)
+ DISTRO_PORTING $(am__append_116)
# ------------------------------------------------------------------------------
MANPAGES = man/bootup.7 man/daemon.7 man/halt.8 man/hostname.5 \
@@ -3620,49 +3987,52 @@ MANPAGES = man/bootup.7 man/daemon.7 man/halt.8 man/hostname.5 \
man/systemd-ask-password-console.service.8 \
man/systemd-ask-password.1 man/systemd-cat.1 \
man/systemd-cgls.1 man/systemd-cgtop.1 man/systemd-delta.1 \
- man/systemd-detect-virt.1 man/systemd-fsck@.service.8 \
- man/systemd-fstab-generator.8 man/systemd-getty-generator.8 \
+ man/systemd-detect-virt.1 man/systemd-efi-boot-generator.8 \
+ man/systemd-fsck@.service.8 man/systemd-fstab-generator.8 \
+ man/systemd-getty-generator.8 man/systemd-gpt-auto-generator.8 \
man/systemd-halt.service.8 man/systemd-inhibit.1 \
man/systemd-initctl.service.8 man/systemd-journald.service.8 \
man/systemd-machine-id-setup.1 man/systemd-notify.1 \
man/systemd-nspawn.1 man/systemd-remount-fs.service.8 \
- man/systemd-shutdownd.service.8 man/systemd-sleep.conf.5 \
- man/systemd-suspend.service.8 man/systemd-sysctl.service.8 \
+ man/systemd-run.1 man/systemd-shutdownd.service.8 \
+ man/systemd-sleep.conf.5 man/systemd-suspend.service.8 \
+ man/systemd-sysctl.service.8 \
man/systemd-system-update-generator.8 \
man/systemd-system.conf.5 man/systemd-tmpfiles.8 \
man/systemd-tty-ask-password-agent.1 \
- man/systemd-udevd.service.8 \
- man/systemd-update-utmp-runlevel.service.8 man/systemd.1 \
- man/systemd.automount.5 man/systemd.device.5 \
+ man/systemd-udevd.service.8 man/systemd-update-utmp.service.8 \
+ man/systemd.1 man/systemd.automount.5 man/systemd.device.5 \
man/systemd.exec.5 man/systemd.journal-fields.7 \
man/systemd.kill.5 man/systemd.mount.5 man/systemd.path.5 \
- man/systemd.preset.5 man/systemd.service.5 \
+ man/systemd.preset.5 man/systemd.resource-control.5 \
+ man/systemd.scope.5 man/systemd.service.5 man/systemd.slice.5 \
man/systemd.snapshot.5 man/systemd.socket.5 \
man/systemd.special.7 man/systemd.swap.5 man/systemd.target.5 \
man/systemd.time.7 man/systemd.timer.5 man/systemd.unit.5 \
man/telinit.8 man/tmpfiles.d.5 man/udev.7 man/udevadm.8 \
- $(am__append_4) $(am__append_6) $(am__append_8) \
- $(am__append_10) $(am__append_12) $(am__append_14) \
- $(am__append_16) $(am__append_18) $(am__append_20) \
- $(am__append_22) $(am__append_24) $(am__append_26) \
- $(am__append_28) $(am__append_30) $(am__append_32) \
- $(am__append_34) $(am__append_36)
+ $(am__append_3) $(am__append_5) $(am__append_7) \
+ $(am__append_9) $(am__append_11) $(am__append_13) \
+ $(am__append_15) $(am__append_17) $(am__append_19) \
+ $(am__append_21) $(am__append_23) $(am__append_25) \
+ $(am__append_27) $(am__append_29) $(am__append_31) \
+ $(am__append_33) $(am__append_35) $(am__append_37) \
+ $(am__append_39)
MANPAGES_ALIAS = man/SD_ALERT.3 man/SD_CRIT.3 man/SD_DEBUG.3 \
man/SD_EMERG.3 man/SD_ERR.3 man/SD_ID128_CONST_STR.3 \
man/SD_ID128_FORMAT_STR.3 man/SD_ID128_FORMAT_VAL.3 \
man/SD_ID128_MAKE.3 man/SD_INFO.3 man/SD_JOURNAL_APPEND.3 \
- man/SD_JOURNAL_FOREACH.3 man/SD_JOURNAL_FOREACH_BACKWARDS.3 \
+ man/SD_JOURNAL_CURRENT_USER.3 man/SD_JOURNAL_FOREACH.3 \
+ man/SD_JOURNAL_FOREACH_BACKWARDS.3 \
man/SD_JOURNAL_FOREACH_DATA.3 man/SD_JOURNAL_FOREACH_UNIQUE.3 \
man/SD_JOURNAL_INVALIDATE.3 man/SD_JOURNAL_LOCAL_ONLY.3 \
man/SD_JOURNAL_NOP.3 man/SD_JOURNAL_RUNTIME_ONLY.3 \
- man/SD_JOURNAL_SUPPRESS_LOCATION.3 \
- man/SD_JOURNAL_SYSTEM_ONLY.3 man/SD_LISTEN_FDS_START.3 \
- man/SD_NOTICE.3 man/SD_WARNING.3 man/init.1 man/poweroff.8 \
- man/reboot.8 man/sd_id128_equal.3 man/sd_id128_from_string.3 \
- man/sd_id128_get_boot.3 man/sd_id128_t.3 man/sd_is_mq.3 \
- man/sd_is_socket.3 man/sd_is_socket_inet.3 \
- man/sd_is_socket_unix.3 man/sd_journal.3 \
- man/sd_journal_add_conjunction.3 \
+ man/SD_JOURNAL_SUPPRESS_LOCATION.3 man/SD_JOURNAL_SYSTEM.3 \
+ man/SD_LISTEN_FDS_START.3 man/SD_NOTICE.3 man/SD_WARNING.3 \
+ man/init.1 man/poweroff.8 man/reboot.8 man/sd_id128_equal.3 \
+ man/sd_id128_from_string.3 man/sd_id128_get_boot.3 \
+ man/sd_id128_t.3 man/sd_is_mq.3 man/sd_is_socket.3 \
+ man/sd_is_socket_inet.3 man/sd_is_socket_unix.3 \
+ man/sd_journal.3 man/sd_journal_add_conjunction.3 \
man/sd_journal_add_disjunction.3 man/sd_journal_close.3 \
man/sd_journal_enumerate_data.3 \
man/sd_journal_enumerate_unique.3 \
@@ -3673,11 +4043,12 @@ MANPAGES_ALIAS = man/SD_ALERT.3 man/SD_CRIT.3 man/SD_DEBUG.3 \
man/sd_journal_get_events.3 \
man/sd_journal_get_monotonic_usec.3 \
man/sd_journal_get_timeout.3 man/sd_journal_next_skip.3 \
- man/sd_journal_open_directory.3 man/sd_journal_perror.3 \
- man/sd_journal_previous.3 man/sd_journal_previous_skip.3 \
- man/sd_journal_printv.3 man/sd_journal_process.3 \
- man/sd_journal_reliable_fd.3 man/sd_journal_restart_data.3 \
- man/sd_journal_restart_unique.3 man/sd_journal_seek_cursor.3 \
+ man/sd_journal_open_directory.3 man/sd_journal_open_files.3 \
+ man/sd_journal_perror.3 man/sd_journal_previous.3 \
+ man/sd_journal_previous_skip.3 man/sd_journal_printv.3 \
+ man/sd_journal_process.3 man/sd_journal_reliable_fd.3 \
+ man/sd_journal_restart_data.3 man/sd_journal_restart_unique.3 \
+ man/sd_journal_seek_cursor.3 \
man/sd_journal_seek_monotonic_usec.3 \
man/sd_journal_seek_realtime_usec.3 man/sd_journal_seek_tail.3 \
man/sd_journal_send.3 man/sd_journal_sendv.3 \
@@ -3701,14 +4072,15 @@ MANPAGES_ALIAS = man/SD_ALERT.3 man/SD_CRIT.3 man/SD_DEBUG.3 \
man/systemd-tmpfiles-setup.service.8 \
man/systemd-udevd-control.socket.8 \
man/systemd-udevd-kernel.socket.8 man/systemd-udevd.8 \
- man/systemd-update-utmp-shutdown.service.8 \
+ man/systemd-update-utmp-runlevel.service.8 \
man/systemd-update-utmp.8 man/systemd-user.conf.5 \
- $(am__append_5) $(am__append_7) $(am__append_9) \
- $(am__append_11) $(am__append_13) $(am__append_15) \
- $(am__append_17) $(am__append_19) $(am__append_21) \
- $(am__append_23) $(am__append_25) $(am__append_27) \
- $(am__append_29) $(am__append_31) $(am__append_33) \
- $(am__append_35) $(am__append_37)
+ $(am__append_4) $(am__append_6) $(am__append_8) \
+ $(am__append_10) $(am__append_12) $(am__append_14) \
+ $(am__append_16) $(am__append_18) $(am__append_20) \
+ $(am__append_22) $(am__append_24) $(am__append_26) \
+ $(am__append_28) $(am__append_30) $(am__append_32) \
+ $(am__append_34) $(am__append_36) $(am__append_38) \
+ $(am__append_40)
XML_FILES = \
${patsubst %.1,%.xml,${patsubst %.3,%.xml,${patsubst %.5,%.xml,${patsubst %.7,%.xml,${patsubst %.8,%.xml,$(MANPAGES)}}}}}
@@ -3734,6 +4106,8 @@ libsystemd_shared_la_SOURCES = \
src/shared/list.h \
src/shared/macro.h \
src/shared/def.h \
+ src/shared/device-nodes.c \
+ src/shared/device-nodes.h \
src/shared/sparse-endian.h \
src/shared/util.c \
src/shared/util.h \
@@ -3806,7 +4180,14 @@ libsystemd_shared_la_SOURCES = \
src/shared/fileio.h \
src/shared/output-mode.h \
src/shared/MurmurHash3.c \
- src/shared/MurmurHash3.h
+ src/shared/MurmurHash3.h \
+ src/shared/acpi-fpdt.h \
+ src/shared/acpi-fpdt.c \
+ src/shared/boot-timestamps.h \
+ src/shared/boot-timestamps.c \
+ src/shared/refcnt.h \
+ src/shared/mkdir.c \
+ src/shared/mkdir.h
libsystemd_dbus_la_SOURCES = \
src/shared/dbus-common.c \
@@ -3838,14 +4219,12 @@ libsystemd_units_la_CFLAGS = \
$(DBUS_CFLAGS)
libsystemd_label_la_SOURCES = \
- src/shared/cgroup-label.c \
src/shared/socket-label.c \
src/shared/label.c \
src/shared/label.h \
src/shared/selinux-util.c \
src/shared/selinux-util.h \
- src/shared/mkdir.c \
- src/shared/mkdir.h \
+ src/shared/mkdir-label.c \
src/shared/ask-password-api.c \
src/shared/ask-password-api.h \
src/shared/fileio-label.c \
@@ -3913,24 +4292,29 @@ libsystemd_core_la_SOURCES = src/core/unit.c src/core/unit.h \
src/core/device.h src/core/target.c src/core/target.h \
src/core/snapshot.c src/core/snapshot.h src/core/socket.c \
src/core/socket.h src/core/timer.c src/core/timer.h \
- src/core/path.c src/core/path.h src/core/load-dropin.c \
- src/core/load-dropin.h src/core/execute.c src/core/execute.h \
- src/core/kill.c src/core/kill.h src/core/dbus.c \
- src/core/dbus.h src/core/dbus-manager.c \
- src/core/dbus-manager.h src/core/dbus-unit.c \
- src/core/dbus-unit.h src/core/dbus-job.c src/core/dbus-job.h \
- src/core/dbus-service.c src/core/dbus-service.h \
- src/core/dbus-socket.c src/core/dbus-socket.h \
- src/core/dbus-timer.c src/core/dbus-timer.h \
- src/core/dbus-target.c src/core/dbus-target.h \
- src/core/dbus-mount.c src/core/dbus-mount.h \
- src/core/dbus-automount.c src/core/dbus-automount.h \
- src/core/dbus-swap.c src/core/dbus-swap.h \
- src/core/dbus-snapshot.c src/core/dbus-snapshot.h \
- src/core/dbus-device.c src/core/dbus-device.h \
- src/core/dbus-execute.c src/core/dbus-execute.h \
- src/core/dbus-kill.c src/core/dbus-kill.h src/core/dbus-path.c \
- src/core/dbus-path.h src/core/cgroup.c src/core/cgroup.h \
+ src/core/path.c src/core/path.h src/core/slice.c \
+ src/core/slice.h src/core/scope.c src/core/scope.h \
+ src/core/load-dropin.c src/core/load-dropin.h \
+ src/core/execute.c src/core/execute.h src/core/kill.c \
+ src/core/kill.h src/core/dbus.c src/core/dbus.h \
+ src/core/dbus-manager.c src/core/dbus-manager.h \
+ src/core/dbus-unit.c src/core/dbus-unit.h src/core/dbus-job.c \
+ src/core/dbus-job.h src/core/dbus-service.c \
+ src/core/dbus-service.h src/core/dbus-socket.c \
+ src/core/dbus-socket.h src/core/dbus-timer.c \
+ src/core/dbus-timer.h src/core/dbus-target.c \
+ src/core/dbus-target.h src/core/dbus-mount.c \
+ src/core/dbus-mount.h src/core/dbus-automount.c \
+ src/core/dbus-automount.h src/core/dbus-swap.c \
+ src/core/dbus-swap.h src/core/dbus-snapshot.c \
+ src/core/dbus-snapshot.h src/core/dbus-device.c \
+ src/core/dbus-device.h src/core/dbus-path.c \
+ src/core/dbus-path.h src/core/dbus-slice.c \
+ src/core/dbus-slice.h src/core/dbus-scope.c \
+ src/core/dbus-scope.h src/core/dbus-execute.c \
+ src/core/dbus-execute.h src/core/dbus-kill.c \
+ src/core/dbus-kill.h src/core/dbus-cgroup.c \
+ src/core/dbus-cgroup.h src/core/cgroup.c src/core/cgroup.h \
src/core/selinux-access.c src/core/selinux-access.h \
src/core/selinux-setup.c src/core/selinux-setup.h \
src/core/smack-setup.c src/core/smack-setup.h \
@@ -3942,15 +4326,13 @@ libsystemd_core_la_SOURCES = src/core/unit.c src/core/unit.h \
src/core/loopback-setup.h src/core/loopback-setup.c \
src/core/condition.c src/core/condition.h src/core/namespace.c \
src/core/namespace.h src/core/tcpwrap.c src/core/tcpwrap.h \
- src/core/cgroup-attr.c src/core/cgroup-attr.h \
- src/core/cgroup-semantics.c src/core/cgroup-semantics.h \
src/core/securebits.h src/core/initreq.h src/core/special.h \
src/core/bus-errors.h src/core/build.h src/core/sysfs-show.h \
src/core/switch-root.h src/core/switch-root.c \
src/core/killall.h src/core/killall.c src/core/syscall-list.c \
src/core/syscall-list.h src/core/audit-fd.c \
- src/core/audit-fd.h src/core/sync.c src/core/sync.h \
- $(am__append_44)
+ src/core/audit-fd.h src/core/async.c src/core/async.h \
+ $(am__append_47)
nodist_libsystemd_core_la_SOURCES = \
src/core/load-fragment-gperf.c \
src/core/load-fragment-gperf-nulstr.c \
@@ -4003,6 +4385,12 @@ pkgconfigdata_DATA = \
nodist_rpmmacros_DATA = \
src/core/macros.systemd
+test_device_nodes_SOURCES = \
+ src/test/test-device-nodes.c
+
+test_device_nodes_LDADD = \
+ libsystemd-shared.la
+
test_engine_SOURCES = \
src/test/test-engine.c
@@ -4032,6 +4420,10 @@ test_ns_SOURCES = \
test_ns_LDADD = \
libsystemd-core.la
+test_ns_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
test_loopback_SOURCES = \
src/test/test-loopback.c
@@ -4045,10 +4437,10 @@ test_hostname_SOURCES = \
test_hostname_LDADD = \
libsystemd-core.la
-@ENABLE_EFI_TRUE@test_efivars_SOURCES = \
-@ENABLE_EFI_TRUE@ src/test/test-efivars.c
+@ENABLE_EFI_TRUE@test_boot_timestamp_SOURCES = \
+@ENABLE_EFI_TRUE@ src/test/test-boot-timestamps.c
-@ENABLE_EFI_TRUE@test_efivars_LDADD = \
+@ENABLE_EFI_TRUE@test_boot_timestamp_LDADD = \
@ENABLE_EFI_TRUE@ libsystemd-shared.la
test_unit_name_SOURCES = \
@@ -4071,6 +4463,15 @@ test_unit_file_CFLAGS = \
test_unit_file_LDADD = \
libsystemd-core.la
+test_utf8_SOURCES = \
+ src/test/test-utf8.c
+
+test_utf8_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_utf8_LDADD = \
+ libsystemd-shared.la
+
test_util_SOURCES = \
src/test/test-util.c
@@ -4089,6 +4490,27 @@ test_hashmap_CFLAGS = \
test_hashmap_LDADD = \
libsystemd-core.la
+test_list_SOURCES = \
+ src/test/test-list.c
+
+test_list_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_list_LDADD = \
+ libsystemd-core.la
+
+test_tables_SOURCES = \
+ src/test/test-tables.c \
+ src/shared/test-tables.h
+
+test_tables_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(DBUS_CFLAGS)
+
+test_tables_LDADD = \
+ libsystemd-core.la \
+ libsystemd-logs.la
+
test_prioq_SOURCES = \
src/test/test-prioq.c
@@ -4171,7 +4593,8 @@ test_cgroup_util_SOURCES = \
test_cgroup_util_LDADD = \
libsystemd-label.la \
- libsystemd-shared.la
+ libsystemd-shared.la \
+ libsystemd-daemon.la
test_env_replace_SOURCES = \
src/test/test-env-replace.c
@@ -4236,6 +4659,8 @@ test_sched_prio_LDADD = \
libsystemd-core.la \
libsystemd-daemon.la
+coverage_dir = coverage
+coverage_opts = --base-directory $(srcdir) --directory $(builddir) --rc 'geninfo_adjust_src_path=$(abspath $(srcdir))=>$(abspath $(builddir))'
# ------------------------------------------------------------------------------
systemd_initctl_SOURCES = \
@@ -4306,14 +4731,20 @@ systemd_shutdown_LDADD = \
# ------------------------------------------------------------------------------
-systemd_tmpfiles_SOURCES = \
- src/tmpfiles/tmpfiles.c
+@ENABLE_TMPFILES_TRUE@systemd_tmpfiles_SOURCES = \
+@ENABLE_TMPFILES_TRUE@ src/tmpfiles/tmpfiles.c \
+@ENABLE_TMPFILES_TRUE@ src/shared/specifier.c \
+@ENABLE_TMPFILES_TRUE@ src/shared/specifier.h
-systemd_tmpfiles_LDADD = \
- libsystemd-label.la \
- libsystemd-shared.la \
- libsystemd-capability.la
+@ENABLE_TMPFILES_TRUE@systemd_tmpfiles_LDADD = \
+@ENABLE_TMPFILES_TRUE@ libsystemd-label.la \
+@ENABLE_TMPFILES_TRUE@ libsystemd-shared.la \
+@ENABLE_TMPFILES_TRUE@ libsystemd-capability.la \
+@ENABLE_TMPFILES_TRUE@ libsystemd-id128-internal.la
+@ENABLE_TMPFILES_TRUE@dist_tmpfiles_DATA = tmpfiles.d/systemd.conf \
+@ENABLE_TMPFILES_TRUE@ tmpfiles.d/tmp.conf tmpfiles.d/x11.conf \
+@ENABLE_TMPFILES_TRUE@ $(am__append_57)
# ------------------------------------------------------------------------------
systemd_machine_id_setup_SOURCES = \
@@ -4358,14 +4789,6 @@ systemd_fsck_LDADD = \
# ------------------------------------------------------------------------------
-systemd_timestamp_SOURCES = \
- src/timestamp/timestamp.c
-
-systemd_timestamp_LDADD = \
- libsystemd-shared.la
-
-
-# ------------------------------------------------------------------------------
systemd_ac_power_SOURCES = \
src/ac-power/ac-power.c
@@ -4426,6 +4849,34 @@ systemd_system_update_generator_LDADD = \
# ------------------------------------------------------------------------------
+@ENABLE_EFI_TRUE@bootctl_SOURCES = \
+@ENABLE_EFI_TRUE@ src/boot/boot.h \
+@ENABLE_EFI_TRUE@ src/boot/boot-loader.h \
+@ENABLE_EFI_TRUE@ src/boot/bootctl.c \
+@ENABLE_EFI_TRUE@ src/boot/boot-loader.c \
+@ENABLE_EFI_TRUE@ src/boot/boot-efi.c
+
+@ENABLE_EFI_TRUE@bootctl_LDADD = \
+@ENABLE_EFI_TRUE@ libsystemd-shared.la \
+@ENABLE_EFI_TRUE@ libsystemd-id128.la \
+@ENABLE_EFI_TRUE@ libsystemd-daemon.la
+
+@HAVE_BLKID_TRUE@systemd_gpt_auto_generator_SOURCES = \
+@HAVE_BLKID_TRUE@ src/gpt-auto-generator/gpt-auto-generator.c
+
+@HAVE_BLKID_TRUE@systemd_gpt_auto_generator_LDADD = \
+@HAVE_BLKID_TRUE@ libsystemd-label.la \
+@HAVE_BLKID_TRUE@ libsystemd-shared.la \
+@HAVE_BLKID_TRUE@ libsystemd-id128-internal.la \
+@HAVE_BLKID_TRUE@ libudev-private.la \
+@HAVE_BLKID_TRUE@ $(BLKID_LIBS)
+
+@HAVE_BLKID_TRUE@systemd_gpt_auto_generator_CFLAGS = \
+@HAVE_BLKID_TRUE@ $(AM_CFLAGS) \
+@HAVE_BLKID_TRUE@ $(BLKID_CFLAGS)
+
+
+# ------------------------------------------------------------------------------
systemd_rc_local_generator_SOURCES = \
src/rc-local-generator/rc-local-generator.c
@@ -4531,7 +4982,21 @@ systemd_nspawn_LDADD = \
libsystemd-capability.la \
libsystemd-shared.la \
libsystemd-daemon.la \
- libsystemd-id128-internal.la
+ libsystemd-id128-internal.la \
+ libsystemd-bus.la
+
+
+# ------------------------------------------------------------------------------
+systemd_run_SOURCES = \
+ src/run/run.c
+
+systemd_run_LDADD = \
+ libsystemd-label.la \
+ libsystemd-capability.la \
+ libsystemd-shared.la \
+ libsystemd-daemon.la \
+ libsystemd-id128-internal.la \
+ libsystemd-bus.la
# ------------------------------------------------------------------------------
@@ -4570,11 +5035,15 @@ libsystemd_daemon_la_LDFLAGS = \
-version-info $(LIBSYSTEMD_DAEMON_CURRENT):$(LIBSYSTEMD_DAEMON_REVISION):$(LIBSYSTEMD_DAEMON_AGE) \
-Wl,--version-script=$(top_srcdir)/src/libsystemd-daemon/libsystemd-daemon.sym
+libsystemd_daemon_la_LIBADD = \
+ $(RT_LIBS)
+
# ------------------------------------------------------------------------------
libsystemd_bus_la_SOURCES = \
src/systemd/sd-bus.h \
src/systemd/sd-bus-protocol.h \
+ src/systemd/sd-memfd.h \
src/libsystemd-bus/sd-bus.c \
src/libsystemd-bus/bus-control.c \
src/libsystemd-bus/bus-control.h \
@@ -4596,13 +5065,18 @@ libsystemd_bus_la_SOURCES = \
src/libsystemd-bus/bus-match.h \
src/libsystemd-bus/bus-bloom.c \
src/libsystemd-bus/bus-bloom.h \
- src/libsystemd-bus/kdbus.h
+ src/libsystemd-bus/kdbus.h \
+ src/libsystemd-bus/sd-memfd.c
libsystemd_bus_la_LIBADD = \
libsystemd-id128-internal.la \
libsystemd-shared.la \
libsystemd-daemon.la
+libsystemd_bus_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ -pthread
+
test_bus_marshal_SOURCES = \
src/libsystemd-bus/test-bus-marshal.c
@@ -4670,6 +5144,48 @@ test_bus_kernel_LDADD = \
libsystemd-bus.la \
libsystemd-id128-internal.la
+test_bus_kernel_bloom_SOURCES = \
+ src/libsystemd-bus/test-bus-kernel-bloom.c
+
+test_bus_kernel_bloom_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_kernel_bloom_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la \
+ libsystemd-id128-internal.la
+
+test_bus_kernel_benchmark_SOURCES = \
+ src/libsystemd-bus/test-bus-kernel-benchmark.c
+
+test_bus_kernel_benchmark_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_kernel_benchmark_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la \
+ libsystemd-id128-internal.la
+
+test_bus_memfd_SOURCES = \
+ src/libsystemd-bus/test-bus-memfd.c
+
+test_bus_memfd_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_memfd_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la
+
+test_bus_zero_copy_SOURCES = \
+ src/libsystemd-bus/test-bus-zero-copy.c
+
+test_bus_zero_copy_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_bus_zero_copy_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-bus.la
+
busctl_SOURCES = \
src/libsystemd-bus/busctl.c
@@ -4700,7 +5216,9 @@ libudev_la_LDFLAGS = \
libudev_la_LIBADD = \
libsystemd-shared.la \
+ libsystemd-label.la \
libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
libsystemd-id128-internal.la
libudev_private_la_SOURCES = \
@@ -4722,7 +5240,8 @@ dist_udevhwdb_DATA = \
hwdb/20-usb-classes.hwdb \
hwdb/20-bluetooth-vendor-product.hwdb \
hwdb/20-acpi-vendor.hwdb \
- hwdb/20-OUI.hwdb
+ hwdb/20-OUI.hwdb \
+ hwdb/60-keyboard.hwdb
udevconfdir = $(sysconfdir)/udev
dist_udevconf_DATA = \
@@ -4737,17 +5256,22 @@ libudev_core_la_SOURCES = src/udev/udev.h src/udev/udev-event.c \
src/udev/udev-rules.c src/udev/udev-ctrl.c \
src/udev/udev-builtin.c src/udev/udev-builtin-btrfs.c \
src/udev/udev-builtin-hwdb.c src/udev/udev-builtin-input_id.c \
+ src/udev/udev-builtin-keyboard.c \
src/udev/udev-builtin-net_id.c src/udev/udev-builtin-path_id.c \
- src/udev/udev-builtin-usb_id.c $(am__append_52) \
- $(am__append_54) $(am__append_56) $(am__append_57)
+ src/udev/udev-builtin-usb_id.c $(am__append_67) \
+ $(am__append_69) $(am__append_71) $(am__append_72)
+nodist_libudev_core_la_SOURCES = \
+ src/udev/keyboard-keys-from-name.h \
+ src/udev/keyboard-keys-to-name.h
+
libudev_core_la_CFLAGS = \
$(AM_CFLAGS) \
$(BLKID_CFLAGS) \
$(KMOD_CFLAGS)
libudev_core_la_LIBADD = libudev-private.la libsystemd-label.la \
- libsystemd-daemon-internal.la libsystemd-shared.la \
- $(BLKID_LIBS) $(KMOD_LIBS) $(am__append_58)
+ libsystemd-daemon-internal.la $(RT_LIBS) libsystemd-shared.la \
+ $(BLKID_LIBS) $(KMOD_LIBS) $(am__append_73)
libudev_core_la_CPPFLAGS = \
$(AM_CPPFLAGS) \
-DFIRMWARE_PATH="$(FIRMWARE_PATH)"
@@ -4785,7 +5309,7 @@ test_udev_SOURCES = \
src/test/test-udev.c
test_udev_LDADD = libudev-core.la libsystemd-shared.la $(BLKID_LIBS) \
- $(KMOD_LIBS) $(SELINUX_LIBS) $(am__append_59)
+ $(KMOD_LIBS) $(SELINUX_LIBS) $(am__append_74)
# ------------------------------------------------------------------------------
ata_id_SOURCES = \
@@ -4936,99 +5460,6 @@ accelerometer_LDADD = \
# ------------------------------------------------------------------------------
-@ENABLE_KEYMAP_TRUE@keymap_SOURCES = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keymap.c
-
-@ENABLE_KEYMAP_TRUE@keymap_CPPFLAGS = \
-@ENABLE_KEYMAP_TRUE@ $(AM_CPPFLAGS) -I src/udev/keymap
-
-@ENABLE_KEYMAP_TRUE@keymap_LDADD = \
-@ENABLE_KEYMAP_TRUE@ libsystemd-shared.la
-
-@ENABLE_KEYMAP_TRUE@nodist_keymap_SOURCES = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keys-from-name.h \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keys-to-name.h
-
-@ENABLE_KEYMAP_TRUE@dist_udevhome_SCRIPTS = \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/findkeyboards \
-@ENABLE_KEYMAP_TRUE@ src/udev/keymap/keyboard-force-release.sh
-
-@ENABLE_KEYMAP_TRUE@udevkeymapdir = $(udevlibexecdir)/keymaps
-@ENABLE_KEYMAP_TRUE@dist_udevkeymap_DATA = \
-@ENABLE_KEYMAP_TRUE@ keymaps/acer \
-@ENABLE_KEYMAP_TRUE@ keymaps/acer-aspire_5720 \
-@ENABLE_KEYMAP_TRUE@ keymaps/acer-aspire_8930 \
-@ENABLE_KEYMAP_TRUE@ keymaps/acer-aspire_5920g \
-@ENABLE_KEYMAP_TRUE@ keymaps/acer-aspire_6920 \
-@ENABLE_KEYMAP_TRUE@ keymaps/acer-travelmate_c300 \
-@ENABLE_KEYMAP_TRUE@ keymaps/asus \
-@ENABLE_KEYMAP_TRUE@ keymaps/compaq-e_evo \
-@ENABLE_KEYMAP_TRUE@ keymaps/dell \
-@ENABLE_KEYMAP_TRUE@ keymaps/dell-latitude-xt2 \
-@ENABLE_KEYMAP_TRUE@ keymaps/everex-xt5000 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-amilo_li_2732 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-amilo_pa_2548 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-amilo_pro_edition_v3505 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-amilo_pro_v3205 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-amilo_si_1520 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-esprimo_mobile_v5 \
-@ENABLE_KEYMAP_TRUE@ keymaps/fujitsu-esprimo_mobile_v6 \
-@ENABLE_KEYMAP_TRUE@ keymaps/genius-slimstar-320 \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-2510p_2530p \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-compaq_elitebook \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-pavilion \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-presario-2100 \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-tablet \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-tx2 \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard_elitebook-8440p \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard_elitebook-8460p \
-@ENABLE_KEYMAP_TRUE@ keymaps/hewlett-packard-hdx9494nr \
-@ENABLE_KEYMAP_TRUE@ keymaps/ibm-thinkpad-usb-keyboard-trackpoint \
-@ENABLE_KEYMAP_TRUE@ keymaps/inventec-symphony_6.0_7.0 \
-@ENABLE_KEYMAP_TRUE@ keymaps/lenovo-3000 \
-@ENABLE_KEYMAP_TRUE@ keymaps/lenovo-ideapad \
-@ENABLE_KEYMAP_TRUE@ keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \
-@ENABLE_KEYMAP_TRUE@ keymaps/lenovo-thinkpad_x6_tablet \
-@ENABLE_KEYMAP_TRUE@ keymaps/lenovo-thinkpad_x200_tablet \
-@ENABLE_KEYMAP_TRUE@ keymaps/lg-x110 \
-@ENABLE_KEYMAP_TRUE@ keymaps/logitech-wave \
-@ENABLE_KEYMAP_TRUE@ keymaps/logitech-wave-cordless \
-@ENABLE_KEYMAP_TRUE@ keymaps/logitech-wave-pro-cordless \
-@ENABLE_KEYMAP_TRUE@ keymaps/maxdata-pro_7000 \
-@ENABLE_KEYMAP_TRUE@ keymaps/medion-fid2060 \
-@ENABLE_KEYMAP_TRUE@ keymaps/medionnb-a555 \
-@ENABLE_KEYMAP_TRUE@ keymaps/micro-star \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-asus-w3j \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-ibm \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-lenovo \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-sony \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-sony-old \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-sony-vgn \
-@ENABLE_KEYMAP_TRUE@ keymaps/module-sony-vpc \
-@ENABLE_KEYMAP_TRUE@ keymaps/olpc-xo \
-@ENABLE_KEYMAP_TRUE@ keymaps/onkyo \
-@ENABLE_KEYMAP_TRUE@ keymaps/oqo-model2 \
-@ENABLE_KEYMAP_TRUE@ keymaps/samsung-other \
-@ENABLE_KEYMAP_TRUE@ keymaps/samsung-series-9 \
-@ENABLE_KEYMAP_TRUE@ keymaps/samsung-sq1us \
-@ENABLE_KEYMAP_TRUE@ keymaps/samsung-sx20s \
-@ENABLE_KEYMAP_TRUE@ keymaps/toshiba-satellite_a100 \
-@ENABLE_KEYMAP_TRUE@ keymaps/toshiba-satellite_a110 \
-@ENABLE_KEYMAP_TRUE@ keymaps/toshiba-satellite_m30x \
-@ENABLE_KEYMAP_TRUE@ keymaps/zepto-znote
-
-@ENABLE_KEYMAP_TRUE@udevkeymapforcereldir = $(udevlibexecdir)/keymaps/force-release
-@ENABLE_KEYMAP_TRUE@dist_udevkeymapforcerel_DATA = \
-@ENABLE_KEYMAP_TRUE@ keymaps-force-release/dell-touchpad \
-@ENABLE_KEYMAP_TRUE@ keymaps-force-release/dell-xps \
-@ENABLE_KEYMAP_TRUE@ keymaps-force-release/hp-other \
-@ENABLE_KEYMAP_TRUE@ keymaps-force-release/samsung-other \
-@ENABLE_KEYMAP_TRUE@ keymaps-force-release/samsung-series-9 \
-@ENABLE_KEYMAP_TRUE@ keymaps-force-release/common-volume-keys
-
-
-# ------------------------------------------------------------------------------
mtd_probe_SOURCES = \
src/udev/mtd_probe/mtd_probe.c \
src/udev/mtd_probe/mtd_probe.h \
@@ -5053,7 +5484,9 @@ libsystemd_id128_la_LDFLAGS = \
libsystemd_id128_la_LIBADD = \
libsystemd-shared.la \
- libsystemd-daemon-internal.la
+ libsystemd-label.la \
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS)
libsystemd_id128_internal_la_SOURCES = \
$(libsystemd_id128_la_SOURCES)
@@ -5063,7 +5496,8 @@ test_id128_SOURCES = \
test_id128_LDADD = \
libsystemd-shared.la \
- libsystemd-id128-internal.la
+ libsystemd-id128-internal.la \
+ libsystemd-daemon.la
systemd_activate_SOURCES = \
src/activate/activate.c
@@ -5090,11 +5524,11 @@ systemd_cat_LDADD = \
libsystemd-shared.la \
libsystemd-journal-internal.la
-journalctl_SOURCES = src/journal/journalctl.c $(am__append_75)
-journalctl_CFLAGS = $(AM_CFLAGS) $(am__append_76)
+journalctl_SOURCES = src/journal/journalctl.c $(am__append_84)
+journalctl_CFLAGS = $(AM_CFLAGS) $(am__append_85)
journalctl_LDADD = libsystemd-shared.la libsystemd-journal-internal.la \
libsystemd-id128-internal.la libsystemd-logs.la \
- $(am__append_74) $(am__append_77)
+ $(am__append_83) $(am__append_86)
test_journal_SOURCES = \
src/journal/test-journal.c
@@ -5143,6 +5577,15 @@ test_journal_stream_LDADD = \
libsystemd-journal-internal.la \
libsystemd-id128-internal.la
+test_journal_init_SOURCES = \
+ src/journal/test-journal-init.c
+
+test_journal_init_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-daemon-internal.la \
+ $(RT_LIBS) \
+ libsystemd-journal.la
+
test_journal_verify_SOURCES = \
src/journal/test-journal-verify.c
@@ -5151,6 +5594,14 @@ test_journal_verify_LDADD = \
libsystemd-journal-internal.la \
libsystemd-id128-internal.la
+test_journal_interleaving_SOURCES = \
+ src/journal/test-journal-interleaving.c
+
+test_journal_interleaving_LDADD = \
+ libsystemd-shared.la \
+ libsystemd-journal-internal.la \
+ libsystemd-id128-internal.la
+
test_mmap_cache_SOURCES = \
src/journal/test-mmap-cache.c
@@ -5161,6 +5612,10 @@ test_mmap_cache_LDADD = \
test_catalog_SOURCES = \
src/journal/test-catalog.c
+test_catalog_CFLAGS = \
+ $(AM_CFLAGS) \
+ -DCATALOG_DIR=\"$(abs_top_srcdir)/catalog\"
+
test_catalog_LDADD = \
libsystemd-shared.la \
libsystemd-label.la \
@@ -5176,17 +5631,17 @@ libsystemd_journal_la_SOURCES = src/journal/sd-journal.c \
src/journal/journal-def.h src/journal/compress.h \
src/journal/catalog.c src/journal/catalog.h \
src/journal/mmap-cache.c src/journal/mmap-cache.h \
- $(am__append_80) $(am__append_85)
+ $(am__append_89) $(am__append_94)
libsystemd_journal_la_CFLAGS = $(AM_CFLAGS) -fvisibility=hidden \
- $(am__append_81) $(am__append_86)
+ $(am__append_90) $(am__append_95)
libsystemd_journal_la_LDFLAGS = \
$(AM_LDFLAGS) \
-version-info $(LIBSYSTEMD_JOURNAL_CURRENT):$(LIBSYSTEMD_JOURNAL_REVISION):$(LIBSYSTEMD_JOURNAL_AGE) \
-Wl,--version-script=$(top_srcdir)/src/journal/libsystemd-journal.sym
libsystemd_journal_la_LIBADD = libsystemd-shared.la \
- libsystemd-label.la libsystemd-daemon-internal.la \
- libsystemd-id128-internal.la $(am__append_82) $(am__append_87)
+ libsystemd-label.la libsystemd-daemon-internal.la $(RT_LIBS) \
+ libsystemd-id128-internal.la $(am__append_91) $(am__append_96)
libsystemd_journal_internal_la_SOURCES = \
$(libsystemd_journal_la_SOURCES) \
src/journal/journald-kmsg.c \
@@ -5205,12 +5660,12 @@ libsystemd_journal_internal_la_SOURCES = \
src/journal/journald-rate-limit.h \
src/journal/journal-internal.h
-libsystemd_journal_internal_la_CFLAGS = $(AM_CFLAGS) $(am__append_83) \
- $(am__append_88)
+libsystemd_journal_internal_la_CFLAGS = $(AM_CFLAGS) $(am__append_92) \
+ $(am__append_97)
libsystemd_journal_internal_la_LIBADD = libsystemd-label.la \
libsystemd-audit.la libsystemd-daemon.la libudev.la \
- libsystemd-shared.la libsystemd-label.la $(am__append_78) \
- $(am__append_79) $(am__append_84) $(am__append_89)
+ libsystemd-shared.la libsystemd-label.la $(am__append_87) \
+ $(am__append_88) $(am__append_93) $(am__append_98)
nodist_libsystemd_journal_internal_la_SOURCES = \
src/journal/journald-gperf.c
@@ -5250,13 +5705,15 @@ dist_catalog_DATA = \
@ENABLE_COREDUMP_TRUE@systemd_coredump_LDADD = \
@ENABLE_COREDUMP_TRUE@ libsystemd-journal-internal.la \
@ENABLE_COREDUMP_TRUE@ libsystemd-label.la libsystemd-shared.la \
-@ENABLE_COREDUMP_TRUE@ $(am__append_93)
+@ENABLE_COREDUMP_TRUE@ $(am__append_102)
@ENABLE_COREDUMP_TRUE@systemd_coredumpctl_SOURCES = \
@ENABLE_COREDUMP_TRUE@ src/journal/coredumpctl.c
@ENABLE_COREDUMP_TRUE@systemd_coredumpctl_LDADD = \
@ENABLE_COREDUMP_TRUE@ libsystemd-shared.la \
-@ENABLE_COREDUMP_TRUE@ libsystemd-journal.la
+@ENABLE_COREDUMP_TRUE@ libsystemd-journal.la \
+@ENABLE_COREDUMP_TRUE@ libsystemd-journal-internal.la \
+@ENABLE_COREDUMP_TRUE@ libsystemd-id128-internal.la
@ENABLE_COREDUMP_TRUE@sysctl_DATA = \
@ENABLE_COREDUMP_TRUE@ sysctl.d/50-coredump.conf
@@ -5319,6 +5776,14 @@ dist_catalog_DATA = \
@ENABLE_RANDOMSEED_TRUE@ libsystemd-label.la \
@ENABLE_RANDOMSEED_TRUE@ libsystemd-shared.la
+@ENABLE_BACKLIGHT_TRUE@systemd_backlight_SOURCES = \
+@ENABLE_BACKLIGHT_TRUE@ src/backlight/backlight.c
+
+@ENABLE_BACKLIGHT_TRUE@systemd_backlight_LDADD = \
+@ENABLE_BACKLIGHT_TRUE@ libsystemd-label.la \
+@ENABLE_BACKLIGHT_TRUE@ libsystemd-shared.la \
+@ENABLE_BACKLIGHT_TRUE@ libudev-private.la
+
@HAVE_LIBCRYPTSETUP_TRUE@systemd_cryptsetup_SOURCES = \
@HAVE_LIBCRYPTSETUP_TRUE@ src/cryptsetup/cryptsetup.c
@@ -5424,20 +5889,6 @@ dist_catalog_DATA = \
# ------------------------------------------------------------------------------
-@ENABLE_EFI_TRUE@bootctl_SOURCES = \
-@ENABLE_EFI_TRUE@ src/boot/boot.h \
-@ENABLE_EFI_TRUE@ src/boot/boot-loader.h \
-@ENABLE_EFI_TRUE@ src/boot/bootctl.c \
-@ENABLE_EFI_TRUE@ src/boot/boot-loader.c \
-@ENABLE_EFI_TRUE@ src/boot/boot-efi.c
-
-@ENABLE_EFI_TRUE@bootctl_LDADD = \
-@ENABLE_EFI_TRUE@ libsystemd-shared.la \
-@ENABLE_EFI_TRUE@ libsystemd-id128.la \
-@ENABLE_EFI_TRUE@ libsystemd-daemon.la
-
-
-# ------------------------------------------------------------------------------
@HAVE_MYHOSTNAME_TRUE@libnss_myhostname_la_SOURCES = \
@HAVE_MYHOSTNAME_TRUE@ src/nss-myhostname/nss-myhostname.c \
@HAVE_MYHOSTNAME_TRUE@ src/nss-myhostname/ifconf.h \
@@ -5456,8 +5907,77 @@ dist_catalog_DATA = \
# ------------------------------------------------------------------------------
-@ENABLE_LOGIND_TRUE@systemd_logind_SOURCES = src/login/logind.c \
-@ENABLE_LOGIND_TRUE@ src/login/logind.h src/login/logind-dbus.c \
+@ENABLE_MACHINED_TRUE@systemd_machined_SOURCES = \
+@ENABLE_MACHINED_TRUE@ src/machine/machined.c \
+@ENABLE_MACHINED_TRUE@ src/machine/machined.h
+
+@ENABLE_MACHINED_TRUE@systemd_machined_CFLAGS = \
+@ENABLE_MACHINED_TRUE@ $(libsystemd_machine_core_la_CFLAGS)
+
+@ENABLE_MACHINED_TRUE@systemd_machined_LDADD = \
+@ENABLE_MACHINED_TRUE@ libsystemd-machine-core.la \
+@ENABLE_MACHINED_TRUE@ $(libsystemd_machine_core_la_LIBADD)
+
+@ENABLE_MACHINED_TRUE@libsystemd_machine_core_la_SOURCES = \
+@ENABLE_MACHINED_TRUE@ src/machine/machined-dbus.c \
+@ENABLE_MACHINED_TRUE@ src/machine/machine.c \
+@ENABLE_MACHINED_TRUE@ src/machine/machine.h \
+@ENABLE_MACHINED_TRUE@ src/machine/machine-dbus.c
+
+@ENABLE_MACHINED_TRUE@libsystemd_machine_core_la_CFLAGS = \
+@ENABLE_MACHINED_TRUE@ $(AM_CFLAGS) \
+@ENABLE_MACHINED_TRUE@ $(DBUS_CFLAGS)
+
+@ENABLE_MACHINED_TRUE@libsystemd_machine_core_la_LIBADD = \
+@ENABLE_MACHINED_TRUE@ libsystemd-label.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-audit.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-shared.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-daemon.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-dbus.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-id128-internal.la \
+@ENABLE_MACHINED_TRUE@ libudev.la
+
+@ENABLE_MACHINED_TRUE@machinectl_SOURCES = \
+@ENABLE_MACHINED_TRUE@ src/machine/machinectl.c
+
+@ENABLE_MACHINED_TRUE@machinectl_CFLAGS = \
+@ENABLE_MACHINED_TRUE@ $(AM_CFLAGS) \
+@ENABLE_MACHINED_TRUE@ $(DBUS_CFLAGS)
+
+@ENABLE_MACHINED_TRUE@machinectl_LDADD = \
+@ENABLE_MACHINED_TRUE@ libsystemd-shared.la \
+@ENABLE_MACHINED_TRUE@ libsystemd-dbus.la \
+@ENABLE_MACHINED_TRUE@ libudev.la
+
+@ENABLE_MACHINED_TRUE@test_machine_tables_SOURCES = \
+@ENABLE_MACHINED_TRUE@ src/machine/test-machine-tables.c
+
+@ENABLE_MACHINED_TRUE@test_machine_tables_CFLAGS = \
+@ENABLE_MACHINED_TRUE@ $(AM_CFLAGS) \
+@ENABLE_MACHINED_TRUE@ $(DBUS_CFLAGS)
+
+@ENABLE_MACHINED_TRUE@test_machine_tables_LDADD = \
+@ENABLE_MACHINED_TRUE@ libsystemd-machine-core.la
+
+
+# ------------------------------------------------------------------------------
+@ENABLE_LOGIND_TRUE@systemd_logind_SOURCES = \
+@ENABLE_LOGIND_TRUE@ src/login/logind.c \
+@ENABLE_LOGIND_TRUE@ src/login/logind.h
+
+@ENABLE_LOGIND_TRUE@nodist_systemd_logind_SOURCES = \
+@ENABLE_LOGIND_TRUE@ src/login/logind-gperf.c
+
+@ENABLE_LOGIND_TRUE@systemd_logind_CFLAGS = \
+@ENABLE_LOGIND_TRUE@ $(libsystemd_logind_core_la_CFLAGS)
+
+@ENABLE_LOGIND_TRUE@systemd_logind_LDADD = \
+@ENABLE_LOGIND_TRUE@ libsystemd-logind-core.la \
+@ENABLE_LOGIND_TRUE@ $(libsystemd_logind_core_la_LIBADD)
+
+@ENABLE_LOGIND_TRUE@libsystemd_logind_core_la_SOURCES = \
+@ENABLE_LOGIND_TRUE@ src/login/logind-core.c \
+@ENABLE_LOGIND_TRUE@ src/login/logind-dbus.c \
@ENABLE_LOGIND_TRUE@ src/login/logind-device.c \
@ENABLE_LOGIND_TRUE@ src/login/logind-device.h \
@ENABLE_LOGIND_TRUE@ src/login/logind-button.c \
@@ -5468,6 +5988,8 @@ dist_catalog_DATA = \
@ENABLE_LOGIND_TRUE@ src/login/logind-seat.h \
@ENABLE_LOGIND_TRUE@ src/login/logind-session.c \
@ENABLE_LOGIND_TRUE@ src/login/logind-session.h \
+@ENABLE_LOGIND_TRUE@ src/login/logind-session-device.c \
+@ENABLE_LOGIND_TRUE@ src/login/logind-session-device.h \
@ENABLE_LOGIND_TRUE@ src/login/logind-user.c \
@ENABLE_LOGIND_TRUE@ src/login/logind-user.h \
@ENABLE_LOGIND_TRUE@ src/login/logind-inhibit.c \
@@ -5475,18 +5997,19 @@ dist_catalog_DATA = \
@ENABLE_LOGIND_TRUE@ src/login/logind-session-dbus.c \
@ENABLE_LOGIND_TRUE@ src/login/logind-seat-dbus.c \
@ENABLE_LOGIND_TRUE@ src/login/logind-user-dbus.c \
-@ENABLE_LOGIND_TRUE@ src/login/logind-acl.h $(am__append_153)
-@ENABLE_LOGIND_TRUE@nodist_systemd_logind_SOURCES = \
-@ENABLE_LOGIND_TRUE@ src/login/logind-gperf.c
-
-@ENABLE_LOGIND_TRUE@systemd_logind_CFLAGS = \
+@ENABLE_LOGIND_TRUE@ src/login/logind-acl.h \
+@ENABLE_LOGIND_TRUE@ src/login/login-shared.c \
+@ENABLE_LOGIND_TRUE@ src/login/login-shared.h $(am__append_177)
+@ENABLE_LOGIND_TRUE@libsystemd_logind_core_la_CFLAGS = \
@ENABLE_LOGIND_TRUE@ $(AM_CFLAGS) \
-@ENABLE_LOGIND_TRUE@ $(DBUS_CFLAGS)
+@ENABLE_LOGIND_TRUE@ $(DBUS_CFLAGS)
-@ENABLE_LOGIND_TRUE@systemd_logind_LDADD = libsystemd-label.la \
-@ENABLE_LOGIND_TRUE@ libsystemd-audit.la libsystemd-shared.la \
-@ENABLE_LOGIND_TRUE@ libsystemd-daemon.la libsystemd-dbus.la \
-@ENABLE_LOGIND_TRUE@ libudev.la $(am__append_154)
+@ENABLE_LOGIND_TRUE@libsystemd_logind_core_la_LIBADD = \
+@ENABLE_LOGIND_TRUE@ libsystemd-label.la libsystemd-audit.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-shared.la libsystemd-daemon.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-dbus.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-id128-internal.la libudev.la \
+@ENABLE_LOGIND_TRUE@ $(am__append_178)
@ENABLE_LOGIND_TRUE@systemd_user_sessions_SOURCES = \
@ENABLE_LOGIND_TRUE@ src/login/user-sessions.c
@@ -5524,6 +6047,13 @@ dist_catalog_DATA = \
@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la \
@ENABLE_LOGIND_TRUE@ libsystemd-shared.la
+@ENABLE_LOGIND_TRUE@test_login_shared_SOURCES = \
+@ENABLE_LOGIND_TRUE@ src/login/test-login-shared.c
+
+@ENABLE_LOGIND_TRUE@test_login_shared_LDADD = \
+@ENABLE_LOGIND_TRUE@ libsystemd-login-internal.la \
+@ENABLE_LOGIND_TRUE@ libsystemd-shared.la
+
@ENABLE_LOGIND_TRUE@test_inhibit_SOURCES = \
@ENABLE_LOGIND_TRUE@ src/login/test-inhibit.c
@@ -5535,8 +6065,21 @@ dist_catalog_DATA = \
@ENABLE_LOGIND_TRUE@ $(AM_CFLAGS) \
@ENABLE_LOGIND_TRUE@ $(DBUS_CFLAGS)
+@ENABLE_LOGIND_TRUE@test_login_tables_SOURCES = \
+@ENABLE_LOGIND_TRUE@ src/login/test-login-tables.c
+
+@ENABLE_LOGIND_TRUE@test_login_tables_CFLAGS = \
+@ENABLE_LOGIND_TRUE@ $(AM_CFLAGS) \
+@ENABLE_LOGIND_TRUE@ $(DBUS_CFLAGS)
+
+@ENABLE_LOGIND_TRUE@test_login_tables_LDADD = \
+@ENABLE_LOGIND_TRUE@ libsystemd-logind-core.la
+
@ENABLE_LOGIND_TRUE@libsystemd_login_la_SOURCES = \
-@ENABLE_LOGIND_TRUE@ src/login/sd-login.c
+@ENABLE_LOGIND_TRUE@ src/login/sd-login.c \
+@ENABLE_LOGIND_TRUE@ src/systemd/sd-login.h \
+@ENABLE_LOGIND_TRUE@ src/login/login-shared.c \
+@ENABLE_LOGIND_TRUE@ src/login/login-shared.h
@ENABLE_LOGIND_TRUE@libsystemd_login_la_CFLAGS = \
@ENABLE_LOGIND_TRUE@ $(AM_CFLAGS) \
@@ -5549,7 +6092,8 @@ dist_catalog_DATA = \
@ENABLE_LOGIND_TRUE@libsystemd_login_la_LIBADD = \
@ENABLE_LOGIND_TRUE@ libsystemd-shared.la \
-@ENABLE_LOGIND_TRUE@ libsystemd-daemon-internal.la
+@ENABLE_LOGIND_TRUE@ libsystemd-daemon-internal.la \
+@ENABLE_LOGIND_TRUE@ $(RT_LIBS)
@ENABLE_LOGIND_TRUE@libsystemd_login_internal_la_SOURCES = \
@ENABLE_LOGIND_TRUE@ $(libsystemd_login_la_SOURCES)
@@ -5576,11 +6120,15 @@ dist_catalog_DATA = \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ libsystemd-dbus.la \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ libsystemd-shared.la \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ libsystemd-daemon-internal.la \
+@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ $(RT_LIBS) \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ $(PAM_LIBS)
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@pamlib_LTLIBRARIES = \
@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ pam_systemd.la
+@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@dist_pamconf_DATA = \
+@ENABLE_LOGIND_TRUE@@HAVE_PAM_TRUE@ src/login/systemd-user
+
@ENABLE_LOGIND_TRUE@systemd_multi_seat_x_SOURCES = \
@ENABLE_LOGIND_TRUE@ src/login/multi-seat-x.c
@@ -5603,7 +6151,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@_journal_la_CFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -fvisibility=default \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_CFLAGS)
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_CFLAGS)
@HAVE_PYTHON_DEVEL_TRUE@_journal_la_LDFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_LDFLAGS) \
@@ -5612,7 +6160,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@ -avoid-version
@HAVE_PYTHON_DEVEL_TRUE@_journal_la_LIBADD = \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_LIBS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_LIBS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-journal.la
@HAVE_PYTHON_DEVEL_TRUE@id128_la_SOURCES = \
@@ -5624,7 +6172,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@id128_la_CFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -fvisibility=default \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_CFLAGS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -I$(top_builddir)/src/python-systemd
@HAVE_PYTHON_DEVEL_TRUE@id128_la_LDFLAGS = \
@@ -5634,7 +6182,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@ -avoid-version
@HAVE_PYTHON_DEVEL_TRUE@id128_la_LIBADD = \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_LIBS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_LIBS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-id128.la
@HAVE_PYTHON_DEVEL_TRUE@_daemon_la_SOURCES = \
@@ -5645,7 +6193,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@_daemon_la_CFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -fvisibility=default \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_CFLAGS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -I$(top_builddir)/src/python-systemd
@HAVE_PYTHON_DEVEL_TRUE@_daemon_la_LDFLAGS = \
@@ -5655,7 +6203,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@ -avoid-version
@HAVE_PYTHON_DEVEL_TRUE@_daemon_la_LIBADD = \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_LIBS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_LIBS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon.la
@HAVE_PYTHON_DEVEL_TRUE@_reader_la_SOURCES = \
@@ -5666,7 +6214,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@_reader_la_CFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -fvisibility=default \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_CFLAGS)
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_CFLAGS)
@HAVE_PYTHON_DEVEL_TRUE@_reader_la_LDFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_LDFLAGS) \
@@ -5675,11 +6223,12 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@ -avoid-version
@HAVE_PYTHON_DEVEL_TRUE@_reader_la_LIBADD = \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_LIBS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_LIBS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-journal.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-id128.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-shared.la \
-@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la
+@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la \
+@HAVE_PYTHON_DEVEL_TRUE@ $(RT_LIBS)
@HAVE_PYTHON_DEVEL_TRUE@login_la_SOURCES = \
@HAVE_PYTHON_DEVEL_TRUE@ src/python-systemd/login.c \
@@ -5689,7 +6238,7 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@login_la_CFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_CFLAGS) \
@HAVE_PYTHON_DEVEL_TRUE@ -fvisibility=default \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_CFLAGS)
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_CFLAGS)
@HAVE_PYTHON_DEVEL_TRUE@login_la_LDFLAGS = \
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_LDFLAGS) \
@@ -5698,11 +6247,12 @@ dist_catalog_DATA = \
@HAVE_PYTHON_DEVEL_TRUE@ -avoid-version
@HAVE_PYTHON_DEVEL_TRUE@login_la_LIBADD = \
-@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_LIBS) \
+@HAVE_PYTHON_DEVEL_TRUE@ $(PYTHON_DEVEL_LIBS) \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-journal.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-login.la \
@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-shared.la \
-@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la
+@HAVE_PYTHON_DEVEL_TRUE@ libsystemd-daemon-internal.la \
+@HAVE_PYTHON_DEVEL_TRUE@ $(RT_LIBS)
@HAVE_PYTHON_DEVEL_TRUE@dist_pkgpyexec_PYTHON = \
@HAVE_PYTHON_DEVEL_TRUE@ src/python-systemd/journal.py \
@@ -5731,10 +6281,12 @@ substitutions = \
'|catalogdir=$(catalogdir)|' \
'|tmpfilesdir=$(tmpfilesdir)|' \
'|sysctldir=$(sysctldir)|' \
+ '|systemgeneratordir=$(systemgeneratordir)|' \
+ '|usergeneratordir=$(usergeneratordir)|' \
'|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \
'|PACKAGE_NAME=$(PACKAGE_NAME)|' \
'|PACKAGE_URL=$(PACKAGE_URL)|' \
- '|RANDOM_SEED=$(localstatedir)/lib/random-seed|' \
+ '|RANDOM_SEED=$(localstatedir)/lib/systemd/random-seed|' \
'|prefix=$(prefix)|' \
'|exec_prefix=$(exec_prefix)|' \
'|libdir=$(libdir)|' \
@@ -5745,6 +6297,8 @@ substitutions = \
'|SUSHELL=$(SUSHELL)|' \
'|DEBUGTTY=$(DEBUGTTY)|' \
'|KILL=$(KILL)|' \
+ '|KMOD=$(KMOD)|' \
+ '|MKDIR_P=$(MKDIR_P)|' \
'|QUOTAON=$(QUOTAON)|' \
'|QUOTACHECK=$(QUOTACHECK)|' \
'|SYSTEM_SYSVINIT_PATH=$(sysvinitdir)|' \
@@ -5793,9 +6347,11 @@ DISTCHECK_CONFIGURE_FLAGS = \
--with-dbussystemservicedir=$$dc_install_base/$(dbussystemservicedir) \
--with-dbusinterfacedir=$$dc_install_base/$(dbusinterfacedir) \
--with-bashcompletiondir=$$dc_install_base/$(bashcompletiondir) \
+ --with-zshcompletiondir=$$dc_install_base/$(zshcompletiondir) \
--with-pamlibdir=$$dc_install_base/$(pamlibdir) \
+ --with-pamconfdir=$$dc_install_base/$(pamconfdir) \
--with-rootprefix=$$dc_install_base --disable-split-usr \
- $(am__append_186) $(am__append_187) $(am__append_188)
+ $(am__append_213) $(am__append_214) $(am__append_215)
www_target = www.freedesktop.org:/srv/www.freedesktop.org/www/software/systemd
all: $(BUILT_SOURCES) config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -5817,7 +6373,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile-man.am $(am__co
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -5980,11 +6535,13 @@ src/python-systemd/_daemon_la-_daemon.lo: \
src/python-systemd/_daemon_la-pyutil.lo: \
src/python-systemd/$(am__dirstamp) \
src/python-systemd/$(DEPDIR)/$(am__dirstamp)
+
_daemon.la: $(_daemon_la_OBJECTS) $(_daemon_la_DEPENDENCIES) $(EXTRA__daemon_la_DEPENDENCIES)
$(AM_V_CCLD)$(_daemon_la_LINK) $(am__daemon_la_rpath) $(_daemon_la_OBJECTS) $(_daemon_la_LIBADD) $(LIBS)
src/python-systemd/_journal_la-_journal.lo: \
src/python-systemd/$(am__dirstamp) \
src/python-systemd/$(DEPDIR)/$(am__dirstamp)
+
_journal.la: $(_journal_la_OBJECTS) $(_journal_la_DEPENDENCIES) $(EXTRA__journal_la_DEPENDENCIES)
$(AM_V_CCLD)$(_journal_la_LINK) $(am__journal_la_rpath) $(_journal_la_OBJECTS) $(_journal_la_LIBADD) $(LIBS)
src/python-systemd/_reader_la-_reader.lo: \
@@ -5993,6 +6550,7 @@ src/python-systemd/_reader_la-_reader.lo: \
src/python-systemd/_reader_la-pyutil.lo: \
src/python-systemd/$(am__dirstamp) \
src/python-systemd/$(DEPDIR)/$(am__dirstamp)
+
_reader.la: $(_reader_la_OBJECTS) $(_reader_la_DEPENDENCIES) $(EXTRA__reader_la_DEPENDENCIES)
$(AM_V_CCLD)$(_reader_la_LINK) $(am__reader_la_rpath) $(_reader_la_OBJECTS) $(_reader_la_LIBADD) $(LIBS)
src/python-systemd/id128_la-id128.lo: \
@@ -6001,6 +6559,7 @@ src/python-systemd/id128_la-id128.lo: \
src/python-systemd/id128_la-pyutil.lo: \
src/python-systemd/$(am__dirstamp) \
src/python-systemd/$(DEPDIR)/$(am__dirstamp)
+
id128.la: $(id128_la_OBJECTS) $(id128_la_DEPENDENCIES) $(EXTRA_id128_la_DEPENDENCIES)
$(AM_V_CCLD)$(id128_la_LINK) $(am_id128_la_rpath) $(id128_la_OBJECTS) $(id128_la_LIBADD) $(LIBS)
src/gudev/$(am__dirstamp):
@@ -6019,6 +6578,7 @@ src/gudev/libgudev_1_0_la-gudevmarshal.lo: src/gudev/$(am__dirstamp) \
src/gudev/$(DEPDIR)/$(am__dirstamp)
src/gudev/libgudev_1_0_la-gudevenumtypes.lo: \
src/gudev/$(am__dirstamp) src/gudev/$(DEPDIR)/$(am__dirstamp)
+
libgudev-1.0.la: $(libgudev_1_0_la_OBJECTS) $(libgudev_1_0_la_DEPENDENCIES) $(EXTRA_libgudev_1_0_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgudev_1_0_la_LINK) $(am_libgudev_1_0_la_rpath) $(libgudev_1_0_la_OBJECTS) $(libgudev_1_0_la_LIBADD) $(LIBS)
src/nss-myhostname/$(am__dirstamp):
@@ -6033,6 +6593,7 @@ src/nss-myhostname/libnss_myhostname_la-nss-myhostname.lo: \
src/nss-myhostname/libnss_myhostname_la-netlink.lo: \
src/nss-myhostname/$(am__dirstamp) \
src/nss-myhostname/$(DEPDIR)/$(am__dirstamp)
+
libnss_myhostname.la: $(libnss_myhostname_la_OBJECTS) $(libnss_myhostname_la_DEPENDENCIES) $(EXTRA_libnss_myhostname_la_DEPENDENCIES)
$(AM_V_CCLD)$(libnss_myhostname_la_LINK) $(am_libnss_myhostname_la_rpath) $(libnss_myhostname_la_OBJECTS) $(libnss_myhostname_la_LIBADD) $(LIBS)
src/shared/$(am__dirstamp):
@@ -6043,10 +6604,12 @@ src/shared/$(DEPDIR)/$(am__dirstamp):
@: > src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/libsystemd_acl_la-acl-util.lo: src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-acl.la: $(libsystemd_acl_la_OBJECTS) $(libsystemd_acl_la_DEPENDENCIES) $(EXTRA_libsystemd_acl_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_acl_la_LINK) $(am_libsystemd_acl_la_rpath) $(libsystemd_acl_la_OBJECTS) $(libsystemd_acl_la_LIBADD) $(LIBS)
src/shared/audit.lo: src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-audit.la: $(libsystemd_audit_la_OBJECTS) $(libsystemd_audit_la_DEPENDENCIES) $(EXTRA_libsystemd_audit_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libsystemd_audit_la_OBJECTS) $(libsystemd_audit_la_LIBADD) $(LIBS)
src/libsystemd-bus/$(am__dirstamp):
@@ -6055,35 +6618,49 @@ src/libsystemd-bus/$(am__dirstamp):
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/libsystemd-bus/$(DEPDIR)
@: > src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/sd-bus.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
+ src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+src/libsystemd-bus/libsystemd_bus_la-bus-control.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-control.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-error.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-error.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-internal.lo: \
+src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo: \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-socket.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-kernel.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-message.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-message.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-signature.lo: \
+src/libsystemd-bus/libsystemd_bus_la-bus-type.lo: \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-type.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-match.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-match.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
-src/libsystemd-bus/bus-bloom.lo: src/libsystemd-bus/$(am__dirstamp) \
+src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo: \
+ src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-bus.la: $(libsystemd_bus_la_OBJECTS) $(libsystemd_bus_la_DEPENDENCIES) $(EXTRA_libsystemd_bus_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) $(libsystemd_bus_la_OBJECTS) $(libsystemd_bus_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(libsystemd_bus_la_LINK) $(libsystemd_bus_la_OBJECTS) $(libsystemd_bus_la_LIBADD) $(LIBS)
src/shared/libsystemd_capability_la-capability.lo: \
src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-capability.la: $(libsystemd_capability_la_OBJECTS) $(libsystemd_capability_la_DEPENDENCIES) $(EXTRA_libsystemd_capability_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_capability_la_LINK) $(libsystemd_capability_la_OBJECTS) $(libsystemd_capability_la_LIBADD) $(LIBS)
src/core/$(am__dirstamp):
@@ -6124,6 +6701,10 @@ src/core/libsystemd_core_la-timer.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-path.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+src/core/libsystemd_core_la-slice.lo: src/core/$(am__dirstamp) \
+ src/core/$(DEPDIR)/$(am__dirstamp)
+src/core/libsystemd_core_la-scope.lo: src/core/$(am__dirstamp) \
+ src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-load-dropin.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-execute.lo: src/core/$(am__dirstamp) \
@@ -6156,11 +6737,17 @@ src/core/libsystemd_core_la-dbus-snapshot.lo: \
src/core/$(am__dirstamp) src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-dbus-device.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+src/core/libsystemd_core_la-dbus-path.lo: src/core/$(am__dirstamp) \
+ src/core/$(DEPDIR)/$(am__dirstamp)
+src/core/libsystemd_core_la-dbus-slice.lo: src/core/$(am__dirstamp) \
+ src/core/$(DEPDIR)/$(am__dirstamp)
+src/core/libsystemd_core_la-dbus-scope.lo: src/core/$(am__dirstamp) \
+ src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-dbus-execute.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-dbus-kill.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
-src/core/libsystemd_core_la-dbus-path.lo: src/core/$(am__dirstamp) \
+src/core/libsystemd_core_la-dbus-cgroup.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-cgroup.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
@@ -6188,10 +6775,6 @@ src/core/libsystemd_core_la-namespace.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-tcpwrap.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
-src/core/libsystemd_core_la-cgroup-attr.lo: src/core/$(am__dirstamp) \
- src/core/$(DEPDIR)/$(am__dirstamp)
-src/core/libsystemd_core_la-cgroup-semantics.lo: \
- src/core/$(am__dirstamp) src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-switch-root.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-killall.lo: src/core/$(am__dirstamp) \
@@ -6200,7 +6783,7 @@ src/core/libsystemd_core_la-syscall-list.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-audit-fd.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
-src/core/libsystemd_core_la-sync.lo: src/core/$(am__dirstamp) \
+src/core/libsystemd_core_la-async.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-kmod-setup.lo: src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
@@ -6208,6 +6791,7 @@ src/core/libsystemd_core_la-load-fragment-gperf.lo: \
src/core/$(am__dirstamp) src/core/$(DEPDIR)/$(am__dirstamp)
src/core/libsystemd_core_la-load-fragment-gperf-nulstr.lo: \
src/core/$(am__dirstamp) src/core/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-core.la: $(libsystemd_core_la_OBJECTS) $(libsystemd_core_la_DEPENDENCIES) $(EXTRA_libsystemd_core_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_core_la_LINK) $(libsystemd_core_la_OBJECTS) $(libsystemd_core_la_LIBADD) $(LIBS)
src/libsystemd-daemon/$(am__dirstamp):
@@ -6219,11 +6803,13 @@ src/libsystemd-daemon/$(DEPDIR)/$(am__dirstamp):
src/libsystemd-daemon/sd-daemon.lo: \
src/libsystemd-daemon/$(am__dirstamp) \
src/libsystemd-daemon/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-daemon-internal.la: $(libsystemd_daemon_internal_la_OBJECTS) $(libsystemd_daemon_internal_la_DEPENDENCIES) $(EXTRA_libsystemd_daemon_internal_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libsystemd_daemon_internal_la_OBJECTS) $(libsystemd_daemon_internal_la_LIBADD) $(LIBS)
src/libsystemd-daemon/libsystemd_daemon_la-sd-daemon.lo: \
src/libsystemd-daemon/$(am__dirstamp) \
src/libsystemd-daemon/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-daemon.la: $(libsystemd_daemon_la_OBJECTS) $(libsystemd_daemon_la_DEPENDENCIES) $(EXTRA_libsystemd_daemon_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_daemon_la_LINK) -rpath $(libdir) $(libsystemd_daemon_la_OBJECTS) $(libsystemd_daemon_la_LIBADD) $(LIBS)
src/shared/libsystemd_dbus_la-dbus-common.lo: \
@@ -6234,6 +6820,7 @@ src/shared/libsystemd_dbus_la-dbus-loop.lo: \
src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/libsystemd_dbus_la-polkit.lo: src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-dbus.la: $(libsystemd_dbus_la_OBJECTS) $(libsystemd_dbus_la_DEPENDENCIES) $(EXTRA_libsystemd_dbus_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_dbus_la_LINK) $(libsystemd_dbus_la_OBJECTS) $(libsystemd_dbus_la_LIBADD) $(LIBS)
src/libsystemd-id128/$(am__dirstamp):
@@ -6245,11 +6832,13 @@ src/libsystemd-id128/$(DEPDIR)/$(am__dirstamp):
src/libsystemd-id128/sd-id128.lo: \
src/libsystemd-id128/$(am__dirstamp) \
src/libsystemd-id128/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-id128-internal.la: $(libsystemd_id128_internal_la_OBJECTS) $(libsystemd_id128_internal_la_DEPENDENCIES) $(EXTRA_libsystemd_id128_internal_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libsystemd_id128_internal_la_OBJECTS) $(libsystemd_id128_internal_la_LIBADD) $(LIBS)
src/libsystemd-id128/libsystemd_id128_la-sd-id128.lo: \
src/libsystemd-id128/$(am__dirstamp) \
src/libsystemd-id128/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-id128.la: $(libsystemd_id128_la_OBJECTS) $(libsystemd_id128_la_DEPENDENCIES) $(EXTRA_libsystemd_id128_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_id128_la_LINK) -rpath $(libdir) $(libsystemd_id128_la_OBJECTS) $(libsystemd_id128_la_LIBADD) $(LIBS)
src/journal/$(am__dirstamp):
@@ -6315,6 +6904,7 @@ src/journal/libsystemd_journal_internal_la-journald-rate-limit.lo: \
src/journal/libsystemd_journal_internal_la-journald-gperf.lo: \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-journal-internal.la: $(libsystemd_journal_internal_la_OBJECTS) $(libsystemd_journal_internal_la_DEPENDENCIES) $(EXTRA_libsystemd_journal_internal_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_journal_internal_la_LINK) $(libsystemd_journal_internal_la_OBJECTS) $(libsystemd_journal_internal_la_LIBADD) $(LIBS)
src/journal/libsystemd_journal_la-sd-journal.lo: \
@@ -6350,11 +6940,9 @@ src/journal/libsystemd_journal_la-journal-authenticate.lo: \
src/journal/libsystemd_journal_la-fsprg.lo: \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-journal.la: $(libsystemd_journal_la_OBJECTS) $(libsystemd_journal_la_DEPENDENCIES) $(EXTRA_libsystemd_journal_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_journal_la_LINK) -rpath $(libdir) $(libsystemd_journal_la_OBJECTS) $(libsystemd_journal_la_LIBADD) $(LIBS)
-src/shared/libsystemd_label_la-cgroup-label.lo: \
- src/shared/$(am__dirstamp) \
- src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/libsystemd_label_la-socket-label.lo: \
src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
@@ -6363,7 +6951,8 @@ src/shared/libsystemd_label_la-label.lo: src/shared/$(am__dirstamp) \
src/shared/libsystemd_label_la-selinux-util.lo: \
src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
-src/shared/libsystemd_label_la-mkdir.lo: src/shared/$(am__dirstamp) \
+src/shared/libsystemd_label_la-mkdir-label.lo: \
+ src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/libsystemd_label_la-ask-password-api.lo: \
src/shared/$(am__dirstamp) \
@@ -6374,6 +6963,7 @@ src/shared/libsystemd_label_la-fileio-label.lo: \
src/shared/libsystemd_label_la-dev-setup.lo: \
src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-label.la: $(libsystemd_label_la_OBJECTS) $(libsystemd_label_la_DEPENDENCIES) $(EXTRA_libsystemd_label_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_label_la_LINK) $(libsystemd_label_la_OBJECTS) $(libsystemd_label_la_LIBADD) $(LIBS)
src/login/$(am__dirstamp):
@@ -6384,17 +6974,77 @@ src/login/$(DEPDIR)/$(am__dirstamp):
@: > src/login/$(DEPDIR)/$(am__dirstamp)
src/login/sd-login.lo: src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/login-shared.lo: src/login/$(am__dirstamp) \
+ src/login/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-login-internal.la: $(libsystemd_login_internal_la_OBJECTS) $(libsystemd_login_internal_la_DEPENDENCIES) $(EXTRA_libsystemd_login_internal_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(am_libsystemd_login_internal_la_rpath) $(libsystemd_login_internal_la_OBJECTS) $(libsystemd_login_internal_la_LIBADD) $(LIBS)
src/login/libsystemd_login_la-sd-login.lo: src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_login_la-login-shared.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-login.la: $(libsystemd_login_la_OBJECTS) $(libsystemd_login_la_DEPENDENCIES) $(EXTRA_libsystemd_login_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_login_la_LINK) $(am_libsystemd_login_la_rpath) $(libsystemd_login_la_OBJECTS) $(libsystemd_login_la_LIBADD) $(LIBS)
+src/login/libsystemd_logind_core_la-logind-core.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-dbus.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-device.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-button.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-action.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-seat.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-session.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-session-device.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-user.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-inhibit.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-session-dbus.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-seat-dbus.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-user-dbus.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-login-shared.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libsystemd_logind_core_la-logind-acl.lo: \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+
+libsystemd-logind-core.la: $(libsystemd_logind_core_la_OBJECTS) $(libsystemd_logind_core_la_DEPENDENCIES) $(EXTRA_libsystemd_logind_core_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libsystemd_logind_core_la_LINK) $(am_libsystemd_logind_core_la_rpath) $(libsystemd_logind_core_la_OBJECTS) $(libsystemd_logind_core_la_LIBADD) $(LIBS)
src/shared/libsystemd_logs_la-logs-show.lo: \
src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-logs.la: $(libsystemd_logs_la_OBJECTS) $(libsystemd_logs_la_DEPENDENCIES) $(EXTRA_libsystemd_logs_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_logs_la_LINK) $(libsystemd_logs_la_OBJECTS) $(libsystemd_logs_la_LIBADD) $(LIBS)
+src/machine/$(am__dirstamp):
+ @$(MKDIR_P) src/machine
+ @: > src/machine/$(am__dirstamp)
+src/machine/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/machine/$(DEPDIR)
+ @: > src/machine/$(DEPDIR)/$(am__dirstamp)
+src/machine/libsystemd_machine_core_la-machined-dbus.lo: \
+ src/machine/$(am__dirstamp) \
+ src/machine/$(DEPDIR)/$(am__dirstamp)
+src/machine/libsystemd_machine_core_la-machine.lo: \
+ src/machine/$(am__dirstamp) \
+ src/machine/$(DEPDIR)/$(am__dirstamp)
+src/machine/libsystemd_machine_core_la-machine-dbus.lo: \
+ src/machine/$(am__dirstamp) \
+ src/machine/$(DEPDIR)/$(am__dirstamp)
+
+libsystemd-machine-core.la: $(libsystemd_machine_core_la_OBJECTS) $(libsystemd_machine_core_la_DEPENDENCIES) $(EXTRA_libsystemd_machine_core_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libsystemd_machine_core_la_LINK) $(am_libsystemd_machine_core_la_rpath) $(libsystemd_machine_core_la_OBJECTS) $(libsystemd_machine_core_la_LIBADD) $(LIBS)
+src/shared/device-nodes.lo: src/shared/$(am__dirstamp) \
+ src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/util.lo: src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/virt.lo: src/shared/$(am__dirstamp) \
@@ -6465,6 +7115,13 @@ src/shared/fileio.lo: src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
src/shared/MurmurHash3.lo: src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+src/shared/acpi-fpdt.lo: src/shared/$(am__dirstamp) \
+ src/shared/$(DEPDIR)/$(am__dirstamp)
+src/shared/boot-timestamps.lo: src/shared/$(am__dirstamp) \
+ src/shared/$(DEPDIR)/$(am__dirstamp)
+src/shared/mkdir.lo: src/shared/$(am__dirstamp) \
+ src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-shared.la: $(libsystemd_shared_la_OBJECTS) $(libsystemd_shared_la_DEPENDENCIES) $(EXTRA_libsystemd_shared_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) $(libsystemd_shared_la_OBJECTS) $(libsystemd_shared_la_LIBADD) $(LIBS)
src/shared/libsystemd_units_la-install.lo: src/shared/$(am__dirstamp) \
@@ -6478,6 +7135,7 @@ src/shared/libsystemd_units_la-path-lookup.lo: \
src/shared/libsystemd_units_la-specifier.lo: \
src/shared/$(am__dirstamp) \
src/shared/$(DEPDIR)/$(am__dirstamp)
+
libsystemd-units.la: $(libsystemd_units_la_OBJECTS) $(libsystemd_units_la_DEPENDENCIES) $(EXTRA_libsystemd_units_la_DEPENDENCIES)
$(AM_V_CCLD)$(libsystemd_units_la_LINK) $(libsystemd_units_la_OBJECTS) $(libsystemd_units_la_LIBADD) $(LIBS)
src/udev/$(am__dirstamp):
@@ -6504,6 +7162,8 @@ src/udev/libudev_core_la-udev-builtin-hwdb.lo: \
src/udev/$(am__dirstamp) src/udev/$(DEPDIR)/$(am__dirstamp)
src/udev/libudev_core_la-udev-builtin-input_id.lo: \
src/udev/$(am__dirstamp) src/udev/$(DEPDIR)/$(am__dirstamp)
+src/udev/libudev_core_la-udev-builtin-keyboard.lo: \
+ src/udev/$(am__dirstamp) src/udev/$(DEPDIR)/$(am__dirstamp)
src/udev/libudev_core_la-udev-builtin-net_id.lo: \
src/udev/$(am__dirstamp) src/udev/$(DEPDIR)/$(am__dirstamp)
src/udev/libudev_core_la-udev-builtin-path_id.lo: \
@@ -6522,6 +7182,9 @@ src/login/libudev_core_la-logind-acl.lo: src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
src/login/libudev_core_la-sd-login.lo: src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+src/login/libudev_core_la-login-shared.lo: src/login/$(am__dirstamp) \
+ src/login/$(DEPDIR)/$(am__dirstamp)
+
libudev-core.la: $(libudev_core_la_OBJECTS) $(libudev_core_la_DEPENDENCIES) $(EXTRA_libudev_core_la_DEPENDENCIES)
$(AM_V_CCLD)$(libudev_core_la_LINK) $(libudev_core_la_OBJECTS) $(libudev_core_la_LIBADD) $(LIBS)
src/libudev/$(am__dirstamp):
@@ -6560,6 +7223,7 @@ src/libudev/libudev_private_la-libudev-device-private.lo: \
src/libudev/libudev_private_la-libudev-queue-private.lo: \
src/libudev/$(am__dirstamp) \
src/libudev/$(DEPDIR)/$(am__dirstamp)
+
libudev-private.la: $(libudev_private_la_OBJECTS) $(libudev_private_la_DEPENDENCIES) $(EXTRA_libudev_private_la_DEPENDENCIES)
$(AM_V_CCLD)$(libudev_private_la_LINK) $(libudev_private_la_OBJECTS) $(libudev_private_la_LIBADD) $(LIBS)
src/libudev/libudev_la-libudev.lo: src/libudev/$(am__dirstamp) \
@@ -6580,6 +7244,7 @@ src/libudev/libudev_la-libudev-queue.lo: src/libudev/$(am__dirstamp) \
src/libudev/$(DEPDIR)/$(am__dirstamp)
src/libudev/libudev_la-libudev-hwdb.lo: src/libudev/$(am__dirstamp) \
src/libudev/$(DEPDIR)/$(am__dirstamp)
+
libudev.la: $(libudev_la_OBJECTS) $(libudev_la_DEPENDENCIES) $(EXTRA_libudev_la_DEPENDENCIES)
$(AM_V_CCLD)$(libudev_la_LINK) -rpath $(libdir) $(libudev_la_OBJECTS) $(libudev_la_LIBADD) $(LIBS)
src/python-systemd/login_la-login.lo: \
@@ -6588,10 +7253,12 @@ src/python-systemd/login_la-login.lo: \
src/python-systemd/login_la-pyutil.lo: \
src/python-systemd/$(am__dirstamp) \
src/python-systemd/$(DEPDIR)/$(am__dirstamp)
+
login.la: $(login_la_OBJECTS) $(login_la_DEPENDENCIES) $(EXTRA_login_la_DEPENDENCIES)
$(AM_V_CCLD)$(login_la_LINK) $(am_login_la_rpath) $(login_la_OBJECTS) $(login_la_LIBADD) $(LIBS)
src/login/pam_systemd_la-pam-module.lo: src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+
pam_systemd.la: $(pam_systemd_la_OBJECTS) $(pam_systemd_la_DEPENDENCIES) $(EXTRA_pam_systemd_la_DEPENDENCIES)
$(AM_V_CCLD)$(pam_systemd_la_LINK) $(am_pam_systemd_la_rpath) $(pam_systemd_la_OBJECTS) $(pam_systemd_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@@ -6866,6 +7533,7 @@ src/udev/accelerometer/$(DEPDIR)/$(am__dirstamp):
src/udev/accelerometer/accelerometer.$(OBJEXT): \
src/udev/accelerometer/$(am__dirstamp) \
src/udev/accelerometer/$(DEPDIR)/$(am__dirstamp)
+
accelerometer$(EXEEXT): $(accelerometer_OBJECTS) $(accelerometer_DEPENDENCIES) $(EXTRA_accelerometer_DEPENDENCIES)
@rm -f accelerometer$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(accelerometer_OBJECTS) $(accelerometer_LDADD) $(LIBS)
@@ -6877,6 +7545,7 @@ src/udev/ata_id/$(DEPDIR)/$(am__dirstamp):
@: > src/udev/ata_id/$(DEPDIR)/$(am__dirstamp)
src/udev/ata_id/ata_id.$(OBJEXT): src/udev/ata_id/$(am__dirstamp) \
src/udev/ata_id/$(DEPDIR)/$(am__dirstamp)
+
ata_id$(EXEEXT): $(ata_id_OBJECTS) $(ata_id_DEPENDENCIES) $(EXTRA_ata_id_DEPENDENCIES)
@rm -f ata_id$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ata_id_OBJECTS) $(ata_id_LDADD) $(LIBS)
@@ -6892,12 +7561,14 @@ src/boot/boot-loader.$(OBJEXT): src/boot/$(am__dirstamp) \
src/boot/$(DEPDIR)/$(am__dirstamp)
src/boot/boot-efi.$(OBJEXT): src/boot/$(am__dirstamp) \
src/boot/$(DEPDIR)/$(am__dirstamp)
+
bootctl$(EXEEXT): $(bootctl_OBJECTS) $(bootctl_DEPENDENCIES) $(EXTRA_bootctl_DEPENDENCIES)
@rm -f bootctl$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(bootctl_OBJECTS) $(bootctl_LDADD) $(LIBS)
src/libsystemd-bus/busctl.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
busctl$(EXEEXT): $(busctl_OBJECTS) $(busctl_DEPENDENCIES) $(EXTRA_busctl_DEPENDENCIES)
@rm -f busctl$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(busctl_OBJECTS) $(busctl_LDADD) $(LIBS)
@@ -6910,6 +7581,7 @@ src/udev/cdrom_id/$(DEPDIR)/$(am__dirstamp):
src/udev/cdrom_id/cdrom_id.$(OBJEXT): \
src/udev/cdrom_id/$(am__dirstamp) \
src/udev/cdrom_id/$(DEPDIR)/$(am__dirstamp)
+
cdrom_id$(EXEEXT): $(cdrom_id_OBJECTS) $(cdrom_id_DEPENDENCIES) $(EXTRA_cdrom_id_DEPENDENCIES)
@rm -f cdrom_id$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(cdrom_id_OBJECTS) $(cdrom_id_LDADD) $(LIBS)
@@ -6921,6 +7593,7 @@ src/udev/collect/$(DEPDIR)/$(am__dirstamp):
@: > src/udev/collect/$(DEPDIR)/$(am__dirstamp)
src/udev/collect/collect.$(OBJEXT): src/udev/collect/$(am__dirstamp) \
src/udev/collect/$(DEPDIR)/$(am__dirstamp)
+
collect$(EXEEXT): $(collect_OBJECTS) $(collect_DEPENDENCIES) $(EXTRA_collect_DEPENDENCIES)
@rm -f collect$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(collect_OBJECTS) $(collect_LDADD) $(LIBS)
@@ -6933,6 +7606,7 @@ src/hostname/$(DEPDIR)/$(am__dirstamp):
src/hostname/hostnamectl-hostnamectl.$(OBJEXT): \
src/hostname/$(am__dirstamp) \
src/hostname/$(DEPDIR)/$(am__dirstamp)
+
hostnamectl$(EXEEXT): $(hostnamectl_OBJECTS) $(hostnamectl_DEPENDENCIES) $(EXTRA_hostnamectl_DEPENDENCIES)
@rm -f hostnamectl$(EXEEXT)
$(AM_V_CCLD)$(hostnamectl_LINK) $(hostnamectl_OBJECTS) $(hostnamectl_LDADD) $(LIBS)
@@ -6942,21 +7616,10 @@ src/journal/journalctl-journalctl.$(OBJEXT): \
src/journal/journalctl-journal-qrcode.$(OBJEXT): \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
journalctl$(EXEEXT): $(journalctl_OBJECTS) $(journalctl_DEPENDENCIES) $(EXTRA_journalctl_DEPENDENCIES)
@rm -f journalctl$(EXEEXT)
$(AM_V_CCLD)$(journalctl_LINK) $(journalctl_OBJECTS) $(journalctl_LDADD) $(LIBS)
-src/udev/keymap/$(am__dirstamp):
- @$(MKDIR_P) src/udev/keymap
- @: > src/udev/keymap/$(am__dirstamp)
-src/udev/keymap/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/udev/keymap/$(DEPDIR)
- @: > src/udev/keymap/$(DEPDIR)/$(am__dirstamp)
-src/udev/keymap/keymap-keymap.$(OBJEXT): \
- src/udev/keymap/$(am__dirstamp) \
- src/udev/keymap/$(DEPDIR)/$(am__dirstamp)
-keymap$(EXEEXT): $(keymap_OBJECTS) $(keymap_DEPENDENCIES) $(EXTRA_keymap_DEPENDENCIES)
- @rm -f keymap$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(keymap_OBJECTS) $(keymap_LDADD) $(LIBS)
src/locale/$(am__dirstamp):
@$(MKDIR_P) src/locale
@: > src/locale/$(am__dirstamp)
@@ -6965,6 +7628,7 @@ src/locale/$(DEPDIR)/$(am__dirstamp):
@: > src/locale/$(DEPDIR)/$(am__dirstamp)
src/locale/localectl-localectl.$(OBJEXT): src/locale/$(am__dirstamp) \
src/locale/$(DEPDIR)/$(am__dirstamp)
+
localectl$(EXEEXT): $(localectl_OBJECTS) $(localectl_DEPENDENCIES) $(EXTRA_localectl_DEPENDENCIES)
@rm -f localectl$(EXEEXT)
$(AM_V_CCLD)$(localectl_LINK) $(localectl_OBJECTS) $(localectl_LDADD) $(LIBS)
@@ -6972,9 +7636,17 @@ src/login/loginctl-loginctl.$(OBJEXT): src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
src/login/loginctl-sysfs-show.$(OBJEXT): src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+
loginctl$(EXEEXT): $(loginctl_OBJECTS) $(loginctl_DEPENDENCIES) $(EXTRA_loginctl_DEPENDENCIES)
@rm -f loginctl$(EXEEXT)
$(AM_V_CCLD)$(loginctl_LINK) $(loginctl_OBJECTS) $(loginctl_LDADD) $(LIBS)
+src/machine/machinectl-machinectl.$(OBJEXT): \
+ src/machine/$(am__dirstamp) \
+ src/machine/$(DEPDIR)/$(am__dirstamp)
+
+machinectl$(EXEEXT): $(machinectl_OBJECTS) $(machinectl_DEPENDENCIES) $(EXTRA_machinectl_DEPENDENCIES)
+ @rm -f machinectl$(EXEEXT)
+ $(AM_V_CCLD)$(machinectl_LINK) $(machinectl_OBJECTS) $(machinectl_LDADD) $(LIBS)
src/udev/mtd_probe/$(am__dirstamp):
@$(MKDIR_P) src/udev/mtd_probe
@: > src/udev/mtd_probe/$(am__dirstamp)
@@ -6987,6 +7659,7 @@ src/udev/mtd_probe/mtd_probe-mtd_probe.$(OBJEXT): \
src/udev/mtd_probe/mtd_probe-probe_smartmedia.$(OBJEXT): \
src/udev/mtd_probe/$(am__dirstamp) \
src/udev/mtd_probe/$(DEPDIR)/$(am__dirstamp)
+
mtd_probe$(EXEEXT): $(mtd_probe_OBJECTS) $(mtd_probe_DEPENDENCIES) $(EXTRA_mtd_probe_DEPENDENCIES)
@rm -f mtd_probe$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(mtd_probe_OBJECTS) $(mtd_probe_LDADD) $(LIBS)
@@ -7001,6 +7674,7 @@ src/udev/scsi_id/scsi_id.$(OBJEXT): src/udev/scsi_id/$(am__dirstamp) \
src/udev/scsi_id/scsi_serial.$(OBJEXT): \
src/udev/scsi_id/$(am__dirstamp) \
src/udev/scsi_id/$(DEPDIR)/$(am__dirstamp)
+
scsi_id$(EXEEXT): $(scsi_id_OBJECTS) $(scsi_id_DEPENDENCIES) $(EXTRA_scsi_id_DEPENDENCIES)
@rm -f scsi_id$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(scsi_id_OBJECTS) $(scsi_id_LDADD) $(LIBS)
@@ -7013,11 +7687,13 @@ src/systemctl/$(DEPDIR)/$(am__dirstamp):
src/systemctl/systemctl-systemctl.$(OBJEXT): \
src/systemctl/$(am__dirstamp) \
src/systemctl/$(DEPDIR)/$(am__dirstamp)
+
systemctl$(EXEEXT): $(systemctl_OBJECTS) $(systemctl_DEPENDENCIES) $(EXTRA_systemctl_DEPENDENCIES)
@rm -f systemctl$(EXEEXT)
$(AM_V_CCLD)$(systemctl_LINK) $(systemctl_OBJECTS) $(systemctl_LDADD) $(LIBS)
src/core/systemd-main.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+
systemd$(EXEEXT): $(systemd_OBJECTS) $(systemd_DEPENDENCIES) $(EXTRA_systemd_DEPENDENCIES)
@rm -f systemd$(EXEEXT)
$(AM_V_CCLD)$(systemd_LINK) $(systemd_OBJECTS) $(systemd_LDADD) $(LIBS)
@@ -7029,6 +7705,7 @@ src/ac-power/$(DEPDIR)/$(am__dirstamp):
@: > src/ac-power/$(DEPDIR)/$(am__dirstamp)
src/ac-power/ac-power.$(OBJEXT): src/ac-power/$(am__dirstamp) \
src/ac-power/$(DEPDIR)/$(am__dirstamp)
+
systemd-ac-power$(EXEEXT): $(systemd_ac_power_OBJECTS) $(systemd_ac_power_DEPENDENCIES) $(EXTRA_systemd_ac_power_DEPENDENCIES)
@rm -f systemd-ac-power$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_ac_power_OBJECTS) $(systemd_ac_power_LDADD) $(LIBS)
@@ -7040,6 +7717,7 @@ src/activate/$(DEPDIR)/$(am__dirstamp):
@: > src/activate/$(DEPDIR)/$(am__dirstamp)
src/activate/activate.$(OBJEXT): src/activate/$(am__dirstamp) \
src/activate/$(DEPDIR)/$(am__dirstamp)
+
systemd-activate$(EXEEXT): $(systemd_activate_OBJECTS) $(systemd_activate_DEPENDENCIES) $(EXTRA_systemd_activate_DEPENDENCIES)
@rm -f systemd-activate$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_activate_OBJECTS) $(systemd_activate_LDADD) $(LIBS)
@@ -7052,6 +7730,7 @@ src/analyze/$(DEPDIR)/$(am__dirstamp):
src/analyze/systemd_analyze-systemd-analyze.$(OBJEXT): \
src/analyze/$(am__dirstamp) \
src/analyze/$(DEPDIR)/$(am__dirstamp)
+
systemd-analyze$(EXEEXT): $(systemd_analyze_OBJECTS) $(systemd_analyze_DEPENDENCIES) $(EXTRA_systemd_analyze_DEPENDENCIES)
@rm -f systemd-analyze$(EXEEXT)
$(AM_V_CCLD)$(systemd_analyze_LINK) $(systemd_analyze_OBJECTS) $(systemd_analyze_LDADD) $(LIBS)
@@ -7064,9 +7743,22 @@ src/ask-password/$(DEPDIR)/$(am__dirstamp):
src/ask-password/ask-password.$(OBJEXT): \
src/ask-password/$(am__dirstamp) \
src/ask-password/$(DEPDIR)/$(am__dirstamp)
+
systemd-ask-password$(EXEEXT): $(systemd_ask_password_OBJECTS) $(systemd_ask_password_DEPENDENCIES) $(EXTRA_systemd_ask_password_DEPENDENCIES)
@rm -f systemd-ask-password$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_ask_password_OBJECTS) $(systemd_ask_password_LDADD) $(LIBS)
+src/backlight/$(am__dirstamp):
+ @$(MKDIR_P) src/backlight
+ @: > src/backlight/$(am__dirstamp)
+src/backlight/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/backlight/$(DEPDIR)
+ @: > src/backlight/$(DEPDIR)/$(am__dirstamp)
+src/backlight/backlight.$(OBJEXT): src/backlight/$(am__dirstamp) \
+ src/backlight/$(DEPDIR)/$(am__dirstamp)
+
+systemd-backlight$(EXEEXT): $(systemd_backlight_OBJECTS) $(systemd_backlight_DEPENDENCIES) $(EXTRA_systemd_backlight_DEPENDENCIES)
+ @rm -f systemd-backlight$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(systemd_backlight_OBJECTS) $(systemd_backlight_LDADD) $(LIBS)
src/binfmt/$(am__dirstamp):
@$(MKDIR_P) src/binfmt
@: > src/binfmt/$(am__dirstamp)
@@ -7075,6 +7767,7 @@ src/binfmt/$(DEPDIR)/$(am__dirstamp):
@: > src/binfmt/$(DEPDIR)/$(am__dirstamp)
src/binfmt/binfmt.$(OBJEXT): src/binfmt/$(am__dirstamp) \
src/binfmt/$(DEPDIR)/$(am__dirstamp)
+
systemd-binfmt$(EXEEXT): $(systemd_binfmt_OBJECTS) $(systemd_binfmt_DEPENDENCIES) $(EXTRA_systemd_binfmt_DEPENDENCIES)
@rm -f systemd-binfmt$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_binfmt_OBJECTS) $(systemd_binfmt_LDADD) $(LIBS)
@@ -7090,11 +7783,13 @@ src/bootchart/store.$(OBJEXT): src/bootchart/$(am__dirstamp) \
src/bootchart/$(DEPDIR)/$(am__dirstamp)
src/bootchart/svg.$(OBJEXT): src/bootchart/$(am__dirstamp) \
src/bootchart/$(DEPDIR)/$(am__dirstamp)
+
systemd-bootchart$(EXEEXT): $(systemd_bootchart_OBJECTS) $(systemd_bootchart_DEPENDENCIES) $(EXTRA_systemd_bootchart_DEPENDENCIES)
@rm -f systemd-bootchart$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_bootchart_OBJECTS) $(systemd_bootchart_LDADD) $(LIBS)
src/journal/cat.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
systemd-cat$(EXEEXT): $(systemd_cat_OBJECTS) $(systemd_cat_DEPENDENCIES) $(EXTRA_systemd_cat_DEPENDENCIES)
@rm -f systemd-cat$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_cat_OBJECTS) $(systemd_cat_LDADD) $(LIBS)
@@ -7106,6 +7801,7 @@ src/cgls/$(DEPDIR)/$(am__dirstamp):
@: > src/cgls/$(DEPDIR)/$(am__dirstamp)
src/cgls/cgls.$(OBJEXT): src/cgls/$(am__dirstamp) \
src/cgls/$(DEPDIR)/$(am__dirstamp)
+
systemd-cgls$(EXEEXT): $(systemd_cgls_OBJECTS) $(systemd_cgls_DEPENDENCIES) $(EXTRA_systemd_cgls_DEPENDENCIES)
@rm -f systemd-cgls$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_cgls_OBJECTS) $(systemd_cgls_LDADD) $(LIBS)
@@ -7118,6 +7814,7 @@ src/cgroups-agent/$(DEPDIR)/$(am__dirstamp):
src/cgroups-agent/systemd_cgroups_agent-cgroups-agent.$(OBJEXT): \
src/cgroups-agent/$(am__dirstamp) \
src/cgroups-agent/$(DEPDIR)/$(am__dirstamp)
+
systemd-cgroups-agent$(EXEEXT): $(systemd_cgroups_agent_OBJECTS) $(systemd_cgroups_agent_DEPENDENCIES) $(EXTRA_systemd_cgroups_agent_DEPENDENCIES)
@rm -f systemd-cgroups-agent$(EXEEXT)
$(AM_V_CCLD)$(systemd_cgroups_agent_LINK) $(systemd_cgroups_agent_OBJECTS) $(systemd_cgroups_agent_LDADD) $(LIBS)
@@ -7129,16 +7826,19 @@ src/cgtop/$(DEPDIR)/$(am__dirstamp):
@: > src/cgtop/$(DEPDIR)/$(am__dirstamp)
src/cgtop/cgtop.$(OBJEXT): src/cgtop/$(am__dirstamp) \
src/cgtop/$(DEPDIR)/$(am__dirstamp)
+
systemd-cgtop$(EXEEXT): $(systemd_cgtop_OBJECTS) $(systemd_cgtop_DEPENDENCIES) $(EXTRA_systemd_cgtop_DEPENDENCIES)
@rm -f systemd-cgtop$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_cgtop_OBJECTS) $(systemd_cgtop_LDADD) $(LIBS)
src/journal/coredump.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
systemd-coredump$(EXEEXT): $(systemd_coredump_OBJECTS) $(systemd_coredump_DEPENDENCIES) $(EXTRA_systemd_coredump_DEPENDENCIES)
@rm -f systemd-coredump$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_coredump_OBJECTS) $(systemd_coredump_LDADD) $(LIBS)
src/journal/coredumpctl.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
systemd-coredumpctl$(EXEEXT): $(systemd_coredumpctl_OBJECTS) $(systemd_coredumpctl_DEPENDENCIES) $(EXTRA_systemd_coredumpctl_DEPENDENCIES)
@rm -f systemd-coredumpctl$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_coredumpctl_OBJECTS) $(systemd_coredumpctl_LDADD) $(LIBS)
@@ -7151,12 +7851,14 @@ src/cryptsetup/$(DEPDIR)/$(am__dirstamp):
src/cryptsetup/systemd_cryptsetup-cryptsetup.$(OBJEXT): \
src/cryptsetup/$(am__dirstamp) \
src/cryptsetup/$(DEPDIR)/$(am__dirstamp)
+
systemd-cryptsetup$(EXEEXT): $(systemd_cryptsetup_OBJECTS) $(systemd_cryptsetup_DEPENDENCIES) $(EXTRA_systemd_cryptsetup_DEPENDENCIES)
@rm -f systemd-cryptsetup$(EXEEXT)
$(AM_V_CCLD)$(systemd_cryptsetup_LINK) $(systemd_cryptsetup_OBJECTS) $(systemd_cryptsetup_LDADD) $(LIBS)
src/cryptsetup/cryptsetup-generator.$(OBJEXT): \
src/cryptsetup/$(am__dirstamp) \
src/cryptsetup/$(DEPDIR)/$(am__dirstamp)
+
systemd-cryptsetup-generator$(EXEEXT): $(systemd_cryptsetup_generator_OBJECTS) $(systemd_cryptsetup_generator_DEPENDENCIES) $(EXTRA_systemd_cryptsetup_generator_DEPENDENCIES)
@rm -f systemd-cryptsetup-generator$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_cryptsetup_generator_OBJECTS) $(systemd_cryptsetup_generator_LDADD) $(LIBS)
@@ -7168,6 +7870,7 @@ src/delta/$(DEPDIR)/$(am__dirstamp):
@: > src/delta/$(DEPDIR)/$(am__dirstamp)
src/delta/delta.$(OBJEXT): src/delta/$(am__dirstamp) \
src/delta/$(DEPDIR)/$(am__dirstamp)
+
systemd-delta$(EXEEXT): $(systemd_delta_OBJECTS) $(systemd_delta_DEPENDENCIES) $(EXTRA_systemd_delta_DEPENDENCIES)
@rm -f systemd-delta$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_delta_OBJECTS) $(systemd_delta_LDADD) $(LIBS)
@@ -7180,6 +7883,7 @@ src/detect-virt/$(DEPDIR)/$(am__dirstamp):
src/detect-virt/detect-virt.$(OBJEXT): \
src/detect-virt/$(am__dirstamp) \
src/detect-virt/$(DEPDIR)/$(am__dirstamp)
+
systemd-detect-virt$(EXEEXT): $(systemd_detect_virt_OBJECTS) $(systemd_detect_virt_DEPENDENCIES) $(EXTRA_systemd_detect_virt_DEPENDENCIES)
@rm -f systemd-detect-virt$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_detect_virt_OBJECTS) $(systemd_detect_virt_LDADD) $(LIBS)
@@ -7192,6 +7896,7 @@ src/efi-boot-generator/$(DEPDIR)/$(am__dirstamp):
src/efi-boot-generator/efi-boot-generator.$(OBJEXT): \
src/efi-boot-generator/$(am__dirstamp) \
src/efi-boot-generator/$(DEPDIR)/$(am__dirstamp)
+
systemd-efi-boot-generator$(EXEEXT): $(systemd_efi_boot_generator_OBJECTS) $(systemd_efi_boot_generator_DEPENDENCIES) $(EXTRA_systemd_efi_boot_generator_DEPENDENCIES)
@rm -f systemd-efi-boot-generator$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_efi_boot_generator_OBJECTS) $(systemd_efi_boot_generator_LDADD) $(LIBS)
@@ -7203,6 +7908,7 @@ src/fsck/$(DEPDIR)/$(am__dirstamp):
@: > src/fsck/$(DEPDIR)/$(am__dirstamp)
src/fsck/systemd_fsck-fsck.$(OBJEXT): src/fsck/$(am__dirstamp) \
src/fsck/$(DEPDIR)/$(am__dirstamp)
+
systemd-fsck$(EXEEXT): $(systemd_fsck_OBJECTS) $(systemd_fsck_DEPENDENCIES) $(EXTRA_systemd_fsck_DEPENDENCIES)
@rm -f systemd-fsck$(EXEEXT)
$(AM_V_CCLD)$(systemd_fsck_LINK) $(systemd_fsck_OBJECTS) $(systemd_fsck_LDADD) $(LIBS)
@@ -7217,6 +7923,7 @@ src/fstab-generator/fstab-generator.$(OBJEXT): \
src/fstab-generator/$(DEPDIR)/$(am__dirstamp)
src/core/mount-setup.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+
systemd-fstab-generator$(EXEEXT): $(systemd_fstab_generator_OBJECTS) $(systemd_fstab_generator_DEPENDENCIES) $(EXTRA_systemd_fstab_generator_DEPENDENCIES)
@rm -f systemd-fstab-generator$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_fstab_generator_OBJECTS) $(systemd_fstab_generator_LDADD) $(LIBS)
@@ -7229,17 +7936,33 @@ src/getty-generator/$(DEPDIR)/$(am__dirstamp):
src/getty-generator/getty-generator.$(OBJEXT): \
src/getty-generator/$(am__dirstamp) \
src/getty-generator/$(DEPDIR)/$(am__dirstamp)
+
systemd-getty-generator$(EXEEXT): $(systemd_getty_generator_OBJECTS) $(systemd_getty_generator_DEPENDENCIES) $(EXTRA_systemd_getty_generator_DEPENDENCIES)
@rm -f systemd-getty-generator$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_getty_generator_OBJECTS) $(systemd_getty_generator_LDADD) $(LIBS)
+src/gpt-auto-generator/$(am__dirstamp):
+ @$(MKDIR_P) src/gpt-auto-generator
+ @: > src/gpt-auto-generator/$(am__dirstamp)
+src/gpt-auto-generator/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/gpt-auto-generator/$(DEPDIR)
+ @: > src/gpt-auto-generator/$(DEPDIR)/$(am__dirstamp)
+src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.$(OBJEXT): \
+ src/gpt-auto-generator/$(am__dirstamp) \
+ src/gpt-auto-generator/$(DEPDIR)/$(am__dirstamp)
+
+systemd-gpt-auto-generator$(EXEEXT): $(systemd_gpt_auto_generator_OBJECTS) $(systemd_gpt_auto_generator_DEPENDENCIES) $(EXTRA_systemd_gpt_auto_generator_DEPENDENCIES)
+ @rm -f systemd-gpt-auto-generator$(EXEEXT)
+ $(AM_V_CCLD)$(systemd_gpt_auto_generator_LINK) $(systemd_gpt_auto_generator_OBJECTS) $(systemd_gpt_auto_generator_LDADD) $(LIBS)
src/hostname/systemd_hostnamed-hostnamed.$(OBJEXT): \
src/hostname/$(am__dirstamp) \
src/hostname/$(DEPDIR)/$(am__dirstamp)
+
systemd-hostnamed$(EXEEXT): $(systemd_hostnamed_OBJECTS) $(systemd_hostnamed_DEPENDENCIES) $(EXTRA_systemd_hostnamed_DEPENDENCIES)
@rm -f systemd-hostnamed$(EXEEXT)
$(AM_V_CCLD)$(systemd_hostnamed_LINK) $(systemd_hostnamed_OBJECTS) $(systemd_hostnamed_LDADD) $(LIBS)
src/login/systemd_inhibit-inhibit.$(OBJEXT): \
src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+
systemd-inhibit$(EXEEXT): $(systemd_inhibit_OBJECTS) $(systemd_inhibit_DEPENDENCIES) $(EXTRA_systemd_inhibit_DEPENDENCIES)
@rm -f systemd-inhibit$(EXEEXT)
$(AM_V_CCLD)$(systemd_inhibit_LINK) $(systemd_inhibit_OBJECTS) $(systemd_inhibit_LDADD) $(LIBS)
@@ -7252,6 +7975,7 @@ src/initctl/$(DEPDIR)/$(am__dirstamp):
src/initctl/systemd_initctl-initctl.$(OBJEXT): \
src/initctl/$(am__dirstamp) \
src/initctl/$(DEPDIR)/$(am__dirstamp)
+
systemd-initctl$(EXEEXT): $(systemd_initctl_OBJECTS) $(systemd_initctl_DEPENDENCIES) $(EXTRA_systemd_initctl_DEPENDENCIES)
@rm -f systemd-initctl$(EXEEXT)
$(AM_V_CCLD)$(systemd_initctl_LINK) $(systemd_initctl_OBJECTS) $(systemd_initctl_LDADD) $(LIBS)
@@ -7261,48 +7985,28 @@ src/journal/systemd_journal_gatewayd-journal-gatewayd.$(OBJEXT): \
src/journal/systemd_journal_gatewayd-microhttpd-util.$(OBJEXT): \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
systemd-journal-gatewayd$(EXEEXT): $(systemd_journal_gatewayd_OBJECTS) $(systemd_journal_gatewayd_DEPENDENCIES) $(EXTRA_systemd_journal_gatewayd_DEPENDENCIES)
@rm -f systemd-journal-gatewayd$(EXEEXT)
$(AM_V_CCLD)$(systemd_journal_gatewayd_LINK) $(systemd_journal_gatewayd_OBJECTS) $(systemd_journal_gatewayd_LDADD) $(LIBS)
src/journal/journald.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
systemd-journald$(EXEEXT): $(systemd_journald_OBJECTS) $(systemd_journald_DEPENDENCIES) $(EXTRA_systemd_journald_DEPENDENCIES)
@rm -f systemd-journald$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_journald_OBJECTS) $(systemd_journald_LDADD) $(LIBS)
src/locale/systemd_localed-localed.$(OBJEXT): \
src/locale/$(am__dirstamp) \
src/locale/$(DEPDIR)/$(am__dirstamp)
+
systemd-localed$(EXEEXT): $(systemd_localed_OBJECTS) $(systemd_localed_DEPENDENCIES) $(EXTRA_systemd_localed_DEPENDENCIES)
@rm -f systemd-localed$(EXEEXT)
$(AM_V_CCLD)$(systemd_localed_LINK) $(systemd_localed_OBJECTS) $(systemd_localed_LDADD) $(LIBS)
src/login/systemd_logind-logind.$(OBJEXT): src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-dbus.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-device.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-button.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-action.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-seat.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-session.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-user.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-inhibit.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-session-dbus.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-seat-dbus.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-user-dbus.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
-src/login/systemd_logind-logind-acl.$(OBJEXT): \
- src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
src/login/systemd_logind-logind-gperf.$(OBJEXT): \
src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+
systemd-logind$(EXEEXT): $(systemd_logind_OBJECTS) $(systemd_logind_DEPENDENCIES) $(EXTRA_systemd_logind_DEPENDENCIES)
@rm -f systemd-logind$(EXEEXT)
$(AM_V_CCLD)$(systemd_logind_LINK) $(systemd_logind_OBJECTS) $(systemd_logind_LDADD) $(LIBS)
@@ -7317,9 +8021,17 @@ src/machine-id-setup/machine-id-setup-main.$(OBJEXT): \
src/machine-id-setup/$(DEPDIR)/$(am__dirstamp)
src/core/machine-id-setup.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+
systemd-machine-id-setup$(EXEEXT): $(systemd_machine_id_setup_OBJECTS) $(systemd_machine_id_setup_DEPENDENCIES) $(EXTRA_systemd_machine_id_setup_DEPENDENCIES)
@rm -f systemd-machine-id-setup$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_machine_id_setup_OBJECTS) $(systemd_machine_id_setup_LDADD) $(LIBS)
+src/machine/systemd_machined-machined.$(OBJEXT): \
+ src/machine/$(am__dirstamp) \
+ src/machine/$(DEPDIR)/$(am__dirstamp)
+
+systemd-machined$(EXEEXT): $(systemd_machined_OBJECTS) $(systemd_machined_DEPENDENCIES) $(EXTRA_systemd_machined_DEPENDENCIES)
+ @rm -f systemd-machined$(EXEEXT)
+ $(AM_V_CCLD)$(systemd_machined_LINK) $(systemd_machined_OBJECTS) $(systemd_machined_LDADD) $(LIBS)
src/modules-load/$(am__dirstamp):
@$(MKDIR_P) src/modules-load
@: > src/modules-load/$(am__dirstamp)
@@ -7329,11 +8041,13 @@ src/modules-load/$(DEPDIR)/$(am__dirstamp):
src/modules-load/systemd_modules_load-modules-load.$(OBJEXT): \
src/modules-load/$(am__dirstamp) \
src/modules-load/$(DEPDIR)/$(am__dirstamp)
+
systemd-modules-load$(EXEEXT): $(systemd_modules_load_OBJECTS) $(systemd_modules_load_DEPENDENCIES) $(EXTRA_systemd_modules_load_DEPENDENCIES)
@rm -f systemd-modules-load$(EXEEXT)
$(AM_V_CCLD)$(systemd_modules_load_LINK) $(systemd_modules_load_OBJECTS) $(systemd_modules_load_LDADD) $(LIBS)
src/login/multi-seat-x.$(OBJEXT): src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+
systemd-multi-seat-x$(EXEEXT): $(systemd_multi_seat_x_OBJECTS) $(systemd_multi_seat_x_DEPENDENCIES) $(EXTRA_systemd_multi_seat_x_DEPENDENCIES)
@rm -f systemd-multi-seat-x$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_multi_seat_x_OBJECTS) $(systemd_multi_seat_x_LDADD) $(LIBS)
@@ -7353,6 +8067,7 @@ src/readahead/$(DEPDIR)/$(am__dirstamp):
@: > src/readahead/$(DEPDIR)/$(am__dirstamp)
src/readahead/sd-readahead.$(OBJEXT): src/readahead/$(am__dirstamp) \
src/readahead/$(DEPDIR)/$(am__dirstamp)
+
systemd-notify$(EXEEXT): $(systemd_notify_OBJECTS) $(systemd_notify_DEPENDENCIES) $(EXTRA_systemd_notify_DEPENDENCIES)
@rm -f systemd-notify$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_notify_OBJECTS) $(systemd_notify_LDADD) $(LIBS)
@@ -7366,6 +8081,7 @@ src/nspawn/nspawn.$(OBJEXT): src/nspawn/$(am__dirstamp) \
src/nspawn/$(DEPDIR)/$(am__dirstamp)
src/core/loopback-setup.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+
systemd-nspawn$(EXEEXT): $(systemd_nspawn_OBJECTS) $(systemd_nspawn_DEPENDENCIES) $(EXTRA_systemd_nspawn_DEPENDENCIES)
@rm -f systemd-nspawn$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_nspawn_OBJECTS) $(systemd_nspawn_LDADD) $(LIBS)
@@ -7377,6 +8093,7 @@ src/quotacheck/$(DEPDIR)/$(am__dirstamp):
@: > src/quotacheck/$(DEPDIR)/$(am__dirstamp)
src/quotacheck/quotacheck.$(OBJEXT): src/quotacheck/$(am__dirstamp) \
src/quotacheck/$(DEPDIR)/$(am__dirstamp)
+
systemd-quotacheck$(EXEEXT): $(systemd_quotacheck_OBJECTS) $(systemd_quotacheck_DEPENDENCIES) $(EXTRA_systemd_quotacheck_DEPENDENCIES)
@rm -f systemd-quotacheck$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_quotacheck_OBJECTS) $(systemd_quotacheck_LDADD) $(LIBS)
@@ -7389,6 +8106,7 @@ src/random-seed/$(DEPDIR)/$(am__dirstamp):
src/random-seed/random-seed.$(OBJEXT): \
src/random-seed/$(am__dirstamp) \
src/random-seed/$(DEPDIR)/$(am__dirstamp)
+
systemd-random-seed$(EXEEXT): $(systemd_random_seed_OBJECTS) $(systemd_random_seed_DEPENDENCIES) $(EXTRA_systemd_random_seed_DEPENDENCIES)
@rm -f systemd-random-seed$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_random_seed_OBJECTS) $(systemd_random_seed_LDADD) $(LIBS)
@@ -7401,6 +8119,7 @@ src/rc-local-generator/$(DEPDIR)/$(am__dirstamp):
src/rc-local-generator/rc-local-generator.$(OBJEXT): \
src/rc-local-generator/$(am__dirstamp) \
src/rc-local-generator/$(DEPDIR)/$(am__dirstamp)
+
systemd-rc-local-generator$(EXEEXT): $(systemd_rc_local_generator_OBJECTS) $(systemd_rc_local_generator_DEPENDENCIES) $(EXTRA_systemd_rc_local_generator_DEPENDENCIES)
@rm -f systemd-rc-local-generator$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_rc_local_generator_OBJECTS) $(systemd_rc_local_generator_LDADD) $(LIBS)
@@ -7418,6 +8137,7 @@ src/readahead/readahead-analyze.$(OBJEXT): \
src/readahead/readahead-common.$(OBJEXT): \
src/readahead/$(am__dirstamp) \
src/readahead/$(DEPDIR)/$(am__dirstamp)
+
systemd-readahead$(EXEEXT): $(systemd_readahead_OBJECTS) $(systemd_readahead_DEPENDENCIES) $(EXTRA_systemd_readahead_DEPENDENCIES)
@rm -f systemd-readahead$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_readahead_OBJECTS) $(systemd_readahead_LDADD) $(LIBS)
@@ -7429,6 +8149,7 @@ src/remount-fs/$(DEPDIR)/$(am__dirstamp):
@: > src/remount-fs/$(DEPDIR)/$(am__dirstamp)
src/remount-fs/remount-fs.$(OBJEXT): src/remount-fs/$(am__dirstamp) \
src/remount-fs/$(DEPDIR)/$(am__dirstamp)
+
systemd-remount-fs$(EXEEXT): $(systemd_remount_fs_OBJECTS) $(systemd_remount_fs_DEPENDENCIES) $(EXTRA_systemd_remount_fs_DEPENDENCIES)
@rm -f systemd-remount-fs$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_remount_fs_OBJECTS) $(systemd_remount_fs_LDADD) $(LIBS)
@@ -7441,15 +8162,29 @@ src/reply-password/$(DEPDIR)/$(am__dirstamp):
src/reply-password/reply-password.$(OBJEXT): \
src/reply-password/$(am__dirstamp) \
src/reply-password/$(DEPDIR)/$(am__dirstamp)
+
systemd-reply-password$(EXEEXT): $(systemd_reply_password_OBJECTS) $(systemd_reply_password_DEPENDENCIES) $(EXTRA_systemd_reply_password_DEPENDENCIES)
@rm -f systemd-reply-password$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_reply_password_OBJECTS) $(systemd_reply_password_LDADD) $(LIBS)
+src/run/$(am__dirstamp):
+ @$(MKDIR_P) src/run
+ @: > src/run/$(am__dirstamp)
+src/run/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/run/$(DEPDIR)
+ @: > src/run/$(DEPDIR)/$(am__dirstamp)
+src/run/run.$(OBJEXT): src/run/$(am__dirstamp) \
+ src/run/$(DEPDIR)/$(am__dirstamp)
+
+systemd-run$(EXEEXT): $(systemd_run_OBJECTS) $(systemd_run_DEPENDENCIES) $(EXTRA_systemd_run_DEPENDENCIES)
+ @rm -f systemd-run$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(systemd_run_OBJECTS) $(systemd_run_LDADD) $(LIBS)
src/core/umount.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/shutdown.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
src/core/killall.$(OBJEXT): src/core/$(am__dirstamp) \
src/core/$(DEPDIR)/$(am__dirstamp)
+
systemd-shutdown$(EXEEXT): $(systemd_shutdown_OBJECTS) $(systemd_shutdown_DEPENDENCIES) $(EXTRA_systemd_shutdown_DEPENDENCIES)
@rm -f systemd-shutdown$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_shutdown_OBJECTS) $(systemd_shutdown_LDADD) $(LIBS)
@@ -7461,6 +8196,7 @@ src/shutdownd/$(DEPDIR)/$(am__dirstamp):
@: > src/shutdownd/$(DEPDIR)/$(am__dirstamp)
src/shutdownd/shutdownd.$(OBJEXT): src/shutdownd/$(am__dirstamp) \
src/shutdownd/$(DEPDIR)/$(am__dirstamp)
+
systemd-shutdownd$(EXEEXT): $(systemd_shutdownd_OBJECTS) $(systemd_shutdownd_DEPENDENCIES) $(EXTRA_systemd_shutdownd_DEPENDENCIES)
@rm -f systemd-shutdownd$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_shutdownd_OBJECTS) $(systemd_shutdownd_LDADD) $(LIBS)
@@ -7472,6 +8208,7 @@ src/sleep/$(DEPDIR)/$(am__dirstamp):
@: > src/sleep/$(DEPDIR)/$(am__dirstamp)
src/sleep/sleep.$(OBJEXT): src/sleep/$(am__dirstamp) \
src/sleep/$(DEPDIR)/$(am__dirstamp)
+
systemd-sleep$(EXEEXT): $(systemd_sleep_OBJECTS) $(systemd_sleep_DEPENDENCIES) $(EXTRA_systemd_sleep_DEPENDENCIES)
@rm -f systemd-sleep$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_sleep_OBJECTS) $(systemd_sleep_LDADD) $(LIBS)
@@ -7484,6 +8221,7 @@ src/stdio-bridge/$(DEPDIR)/$(am__dirstamp):
src/stdio-bridge/stdio-bridge.$(OBJEXT): \
src/stdio-bridge/$(am__dirstamp) \
src/stdio-bridge/$(DEPDIR)/$(am__dirstamp)
+
systemd-stdio-bridge$(EXEEXT): $(systemd_stdio_bridge_OBJECTS) $(systemd_stdio_bridge_DEPENDENCIES) $(EXTRA_systemd_stdio_bridge_DEPENDENCIES)
@rm -f systemd-stdio-bridge$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_stdio_bridge_OBJECTS) $(systemd_stdio_bridge_LDADD) $(LIBS)
@@ -7495,6 +8233,7 @@ src/sysctl/$(DEPDIR)/$(am__dirstamp):
@: > src/sysctl/$(DEPDIR)/$(am__dirstamp)
src/sysctl/sysctl.$(OBJEXT): src/sysctl/$(am__dirstamp) \
src/sysctl/$(DEPDIR)/$(am__dirstamp)
+
systemd-sysctl$(EXEEXT): $(systemd_sysctl_OBJECTS) $(systemd_sysctl_DEPENDENCIES) $(EXTRA_systemd_sysctl_DEPENDENCIES)
@rm -f systemd-sysctl$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_sysctl_OBJECTS) $(systemd_sysctl_LDADD) $(LIBS)
@@ -7507,6 +8246,7 @@ src/system-update-generator/$(DEPDIR)/$(am__dirstamp):
src/system-update-generator/system-update-generator.$(OBJEXT): \
src/system-update-generator/$(am__dirstamp) \
src/system-update-generator/$(DEPDIR)/$(am__dirstamp)
+
systemd-system-update-generator$(EXEEXT): $(systemd_system_update_generator_OBJECTS) $(systemd_system_update_generator_DEPENDENCIES) $(EXTRA_systemd_system_update_generator_DEPENDENCIES)
@rm -f systemd-system-update-generator$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_system_update_generator_OBJECTS) $(systemd_system_update_generator_LDADD) $(LIBS)
@@ -7519,20 +8259,10 @@ src/timedate/$(DEPDIR)/$(am__dirstamp):
src/timedate/systemd_timedated-timedated.$(OBJEXT): \
src/timedate/$(am__dirstamp) \
src/timedate/$(DEPDIR)/$(am__dirstamp)
+
systemd-timedated$(EXEEXT): $(systemd_timedated_OBJECTS) $(systemd_timedated_DEPENDENCIES) $(EXTRA_systemd_timedated_DEPENDENCIES)
@rm -f systemd-timedated$(EXEEXT)
$(AM_V_CCLD)$(systemd_timedated_LINK) $(systemd_timedated_OBJECTS) $(systemd_timedated_LDADD) $(LIBS)
-src/timestamp/$(am__dirstamp):
- @$(MKDIR_P) src/timestamp
- @: > src/timestamp/$(am__dirstamp)
-src/timestamp/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/timestamp/$(DEPDIR)
- @: > src/timestamp/$(DEPDIR)/$(am__dirstamp)
-src/timestamp/timestamp.$(OBJEXT): src/timestamp/$(am__dirstamp) \
- src/timestamp/$(DEPDIR)/$(am__dirstamp)
-systemd-timestamp$(EXEEXT): $(systemd_timestamp_OBJECTS) $(systemd_timestamp_DEPENDENCIES) $(EXTRA_systemd_timestamp_DEPENDENCIES)
- @rm -f systemd-timestamp$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(systemd_timestamp_OBJECTS) $(systemd_timestamp_LDADD) $(LIBS)
src/tmpfiles/$(am__dirstamp):
@$(MKDIR_P) src/tmpfiles
@: > src/tmpfiles/$(am__dirstamp)
@@ -7541,6 +8271,9 @@ src/tmpfiles/$(DEPDIR)/$(am__dirstamp):
@: > src/tmpfiles/$(DEPDIR)/$(am__dirstamp)
src/tmpfiles/tmpfiles.$(OBJEXT): src/tmpfiles/$(am__dirstamp) \
src/tmpfiles/$(DEPDIR)/$(am__dirstamp)
+src/shared/specifier.$(OBJEXT): src/shared/$(am__dirstamp) \
+ src/shared/$(DEPDIR)/$(am__dirstamp)
+
systemd-tmpfiles$(EXEEXT): $(systemd_tmpfiles_OBJECTS) $(systemd_tmpfiles_DEPENDENCIES) $(EXTRA_systemd_tmpfiles_DEPENDENCIES)
@rm -f systemd-tmpfiles$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_tmpfiles_OBJECTS) $(systemd_tmpfiles_LDADD) $(LIBS)
@@ -7553,11 +8286,13 @@ src/tty-ask-password-agent/$(DEPDIR)/$(am__dirstamp):
src/tty-ask-password-agent/tty-ask-password-agent.$(OBJEXT): \
src/tty-ask-password-agent/$(am__dirstamp) \
src/tty-ask-password-agent/$(DEPDIR)/$(am__dirstamp)
+
systemd-tty-ask-password-agent$(EXEEXT): $(systemd_tty_ask_password_agent_OBJECTS) $(systemd_tty_ask_password_agent_DEPENDENCIES) $(EXTRA_systemd_tty_ask_password_agent_DEPENDENCIES)
@rm -f systemd-tty-ask-password-agent$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_tty_ask_password_agent_OBJECTS) $(systemd_tty_ask_password_agent_LDADD) $(LIBS)
src/udev/udevd.$(OBJEXT): src/udev/$(am__dirstamp) \
src/udev/$(DEPDIR)/$(am__dirstamp)
+
systemd-udevd$(EXEEXT): $(systemd_udevd_OBJECTS) $(systemd_udevd_DEPENDENCIES) $(EXTRA_systemd_udevd_DEPENDENCIES)
@rm -f systemd-udevd$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_udevd_OBJECTS) $(systemd_udevd_LDADD) $(LIBS)
@@ -7570,11 +8305,13 @@ src/update-utmp/$(DEPDIR)/$(am__dirstamp):
src/update-utmp/systemd_update_utmp-update-utmp.$(OBJEXT): \
src/update-utmp/$(am__dirstamp) \
src/update-utmp/$(DEPDIR)/$(am__dirstamp)
+
systemd-update-utmp$(EXEEXT): $(systemd_update_utmp_OBJECTS) $(systemd_update_utmp_DEPENDENCIES) $(EXTRA_systemd_update_utmp_DEPENDENCIES)
@rm -f systemd-update-utmp$(EXEEXT)
$(AM_V_CCLD)$(systemd_update_utmp_LINK) $(systemd_update_utmp_OBJECTS) $(systemd_update_utmp_LDADD) $(LIBS)
src/login/user-sessions.$(OBJEXT): src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+
systemd-user-sessions$(EXEEXT): $(systemd_user_sessions_OBJECTS) $(systemd_user_sessions_DEPENDENCIES) $(EXTRA_systemd_user_sessions_DEPENDENCIES)
@rm -f systemd-user-sessions$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_user_sessions_OBJECTS) $(systemd_user_sessions_LDADD) $(LIBS)
@@ -7586,277 +8323,414 @@ src/vconsole/$(DEPDIR)/$(am__dirstamp):
@: > src/vconsole/$(DEPDIR)/$(am__dirstamp)
src/vconsole/vconsole-setup.$(OBJEXT): src/vconsole/$(am__dirstamp) \
src/vconsole/$(DEPDIR)/$(am__dirstamp)
+
systemd-vconsole-setup$(EXEEXT): $(systemd_vconsole_setup_OBJECTS) $(systemd_vconsole_setup_DEPENDENCIES) $(EXTRA_systemd_vconsole_setup_DEPENDENCIES)
@rm -f systemd-vconsole-setup$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(systemd_vconsole_setup_OBJECTS) $(systemd_vconsole_setup_LDADD) $(LIBS)
+src/test/$(am__dirstamp):
+ @$(MKDIR_P) src/test
+ @: > src/test/$(am__dirstamp)
+src/test/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/test/$(DEPDIR)
+ @: > src/test/$(DEPDIR)/$(am__dirstamp)
+src/test/test-boot-timestamps.$(OBJEXT): src/test/$(am__dirstamp) \
+ src/test/$(DEPDIR)/$(am__dirstamp)
+
+test-boot-timestamp$(EXEEXT): $(test_boot_timestamp_OBJECTS) $(test_boot_timestamp_DEPENDENCIES) $(EXTRA_test_boot_timestamp_DEPENDENCIES)
+ @rm -f test-boot-timestamp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_boot_timestamp_OBJECTS) $(test_boot_timestamp_LDADD) $(LIBS)
src/libsystemd-bus/test_bus_chat-test-bus-chat.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
test-bus-chat$(EXEEXT): $(test_bus_chat_OBJECTS) $(test_bus_chat_DEPENDENCIES) $(EXTRA_test_bus_chat_DEPENDENCIES)
@rm -f test-bus-chat$(EXEEXT)
$(AM_V_CCLD)$(test_bus_chat_LINK) $(test_bus_chat_OBJECTS) $(test_bus_chat_LDADD) $(LIBS)
src/libsystemd-bus/test_bus_kernel-test-bus-kernel.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
test-bus-kernel$(EXEEXT): $(test_bus_kernel_OBJECTS) $(test_bus_kernel_DEPENDENCIES) $(EXTRA_test_bus_kernel_DEPENDENCIES)
@rm -f test-bus-kernel$(EXEEXT)
$(AM_V_CCLD)$(test_bus_kernel_LINK) $(test_bus_kernel_OBJECTS) $(test_bus_kernel_LDADD) $(LIBS)
+src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.$(OBJEXT): \
+ src/libsystemd-bus/$(am__dirstamp) \
+ src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
+test-bus-kernel-benchmark$(EXEEXT): $(test_bus_kernel_benchmark_OBJECTS) $(test_bus_kernel_benchmark_DEPENDENCIES) $(EXTRA_test_bus_kernel_benchmark_DEPENDENCIES)
+ @rm -f test-bus-kernel-benchmark$(EXEEXT)
+ $(AM_V_CCLD)$(test_bus_kernel_benchmark_LINK) $(test_bus_kernel_benchmark_OBJECTS) $(test_bus_kernel_benchmark_LDADD) $(LIBS)
+src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.$(OBJEXT): \
+ src/libsystemd-bus/$(am__dirstamp) \
+ src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
+test-bus-kernel-bloom$(EXEEXT): $(test_bus_kernel_bloom_OBJECTS) $(test_bus_kernel_bloom_DEPENDENCIES) $(EXTRA_test_bus_kernel_bloom_DEPENDENCIES)
+ @rm -f test-bus-kernel-bloom$(EXEEXT)
+ $(AM_V_CCLD)$(test_bus_kernel_bloom_LINK) $(test_bus_kernel_bloom_OBJECTS) $(test_bus_kernel_bloom_LDADD) $(LIBS)
src/libsystemd-bus/test_bus_marshal-test-bus-marshal.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
test-bus-marshal$(EXEEXT): $(test_bus_marshal_OBJECTS) $(test_bus_marshal_DEPENDENCIES) $(EXTRA_test_bus_marshal_DEPENDENCIES)
@rm -f test-bus-marshal$(EXEEXT)
$(AM_V_CCLD)$(test_bus_marshal_LINK) $(test_bus_marshal_OBJECTS) $(test_bus_marshal_LDADD) $(LIBS)
src/libsystemd-bus/test_bus_match-test-bus-match.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
test-bus-match$(EXEEXT): $(test_bus_match_OBJECTS) $(test_bus_match_DEPENDENCIES) $(EXTRA_test_bus_match_DEPENDENCIES)
@rm -f test-bus-match$(EXEEXT)
$(AM_V_CCLD)$(test_bus_match_LINK) $(test_bus_match_OBJECTS) $(test_bus_match_LDADD) $(LIBS)
+src/libsystemd-bus/test_bus_memfd-test-bus-memfd.$(OBJEXT): \
+ src/libsystemd-bus/$(am__dirstamp) \
+ src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
+test-bus-memfd$(EXEEXT): $(test_bus_memfd_OBJECTS) $(test_bus_memfd_DEPENDENCIES) $(EXTRA_test_bus_memfd_DEPENDENCIES)
+ @rm -f test-bus-memfd$(EXEEXT)
+ $(AM_V_CCLD)$(test_bus_memfd_LINK) $(test_bus_memfd_OBJECTS) $(test_bus_memfd_LDADD) $(LIBS)
src/libsystemd-bus/test_bus_server-test-bus-server.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
test-bus-server$(EXEEXT): $(test_bus_server_OBJECTS) $(test_bus_server_DEPENDENCIES) $(EXTRA_test_bus_server_DEPENDENCIES)
@rm -f test-bus-server$(EXEEXT)
$(AM_V_CCLD)$(test_bus_server_LINK) $(test_bus_server_OBJECTS) $(test_bus_server_LDADD) $(LIBS)
src/libsystemd-bus/test-bus-signature.$(OBJEXT): \
src/libsystemd-bus/$(am__dirstamp) \
src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
test-bus-signature$(EXEEXT): $(test_bus_signature_OBJECTS) $(test_bus_signature_DEPENDENCIES) $(EXTRA_test_bus_signature_DEPENDENCIES)
@rm -f test-bus-signature$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_bus_signature_OBJECTS) $(test_bus_signature_LDADD) $(LIBS)
-src/test/$(am__dirstamp):
- @$(MKDIR_P) src/test
- @: > src/test/$(am__dirstamp)
-src/test/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) src/test/$(DEPDIR)
- @: > src/test/$(DEPDIR)/$(am__dirstamp)
+src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.$(OBJEXT): \
+ src/libsystemd-bus/$(am__dirstamp) \
+ src/libsystemd-bus/$(DEPDIR)/$(am__dirstamp)
+
+test-bus-zero-copy$(EXEEXT): $(test_bus_zero_copy_OBJECTS) $(test_bus_zero_copy_DEPENDENCIES) $(EXTRA_test_bus_zero_copy_DEPENDENCIES)
+ @rm -f test-bus-zero-copy$(EXEEXT)
+ $(AM_V_CCLD)$(test_bus_zero_copy_LINK) $(test_bus_zero_copy_OBJECTS) $(test_bus_zero_copy_LDADD) $(LIBS)
src/test/test-calendarspec.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-calendarspec$(EXEEXT): $(test_calendarspec_OBJECTS) $(test_calendarspec_DEPENDENCIES) $(EXTRA_test_calendarspec_DEPENDENCIES)
@rm -f test-calendarspec$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_calendarspec_OBJECTS) $(test_calendarspec_LDADD) $(LIBS)
-src/journal/test-catalog.$(OBJEXT): src/journal/$(am__dirstamp) \
+src/journal/test_catalog-test-catalog.$(OBJEXT): \
+ src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-catalog$(EXEEXT): $(test_catalog_OBJECTS) $(test_catalog_DEPENDENCIES) $(EXTRA_test_catalog_DEPENDENCIES)
@rm -f test-catalog$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(test_catalog_OBJECTS) $(test_catalog_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(test_catalog_LINK) $(test_catalog_OBJECTS) $(test_catalog_LDADD) $(LIBS)
src/test/test-cgroup.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-cgroup$(EXEEXT): $(test_cgroup_OBJECTS) $(test_cgroup_DEPENDENCIES) $(EXTRA_test_cgroup_DEPENDENCIES)
@rm -f test-cgroup$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_cgroup_OBJECTS) $(test_cgroup_LDADD) $(LIBS)
src/test/test-cgroup-util.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-cgroup-util$(EXEEXT): $(test_cgroup_util_OBJECTS) $(test_cgroup_util_DEPENDENCIES) $(EXTRA_test_cgroup_util_DEPENDENCIES)
@rm -f test-cgroup-util$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_cgroup_util_OBJECTS) $(test_cgroup_util_LDADD) $(LIBS)
src/test/test-daemon.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-daemon$(EXEEXT): $(test_daemon_OBJECTS) $(test_daemon_DEPENDENCIES) $(EXTRA_test_daemon_DEPENDENCIES)
@rm -f test-daemon$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_daemon_OBJECTS) $(test_daemon_LDADD) $(LIBS)
src/test/test-date.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-date$(EXEEXT): $(test_date_OBJECTS) $(test_date_DEPENDENCIES) $(EXTRA_test_date_DEPENDENCIES)
@rm -f test-date$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_date_OBJECTS) $(test_date_LDADD) $(LIBS)
-src/test/test-efivars.$(OBJEXT): src/test/$(am__dirstamp) \
+src/test/test-device-nodes.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
-test-efivars$(EXEEXT): $(test_efivars_OBJECTS) $(test_efivars_DEPENDENCIES) $(EXTRA_test_efivars_DEPENDENCIES)
- @rm -f test-efivars$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(test_efivars_OBJECTS) $(test_efivars_LDADD) $(LIBS)
+
+test-device-nodes$(EXEEXT): $(test_device_nodes_OBJECTS) $(test_device_nodes_DEPENDENCIES) $(EXTRA_test_device_nodes_DEPENDENCIES)
+ @rm -f test-device-nodes$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_device_nodes_OBJECTS) $(test_device_nodes_LDADD) $(LIBS)
src/test/test_engine-test-engine.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-engine$(EXEEXT): $(test_engine_OBJECTS) $(test_engine_DEPENDENCIES) $(EXTRA_test_engine_DEPENDENCIES)
@rm -f test-engine$(EXEEXT)
$(AM_V_CCLD)$(test_engine_LINK) $(test_engine_OBJECTS) $(test_engine_LDADD) $(LIBS)
src/test/test-env-replace.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-env-replace$(EXEEXT): $(test_env_replace_OBJECTS) $(test_env_replace_DEPENDENCIES) $(EXTRA_test_env_replace_DEPENDENCIES)
@rm -f test-env-replace$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_env_replace_OBJECTS) $(test_env_replace_LDADD) $(LIBS)
src/test/test_fileio-test-fileio.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-fileio$(EXEEXT): $(test_fileio_OBJECTS) $(test_fileio_DEPENDENCIES) $(EXTRA_test_fileio_DEPENDENCIES)
@rm -f test-fileio$(EXEEXT)
$(AM_V_CCLD)$(test_fileio_LINK) $(test_fileio_OBJECTS) $(test_fileio_LDADD) $(LIBS)
src/test/test_hashmap-test-hashmap.$(OBJEXT): \
src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+
test-hashmap$(EXEEXT): $(test_hashmap_OBJECTS) $(test_hashmap_DEPENDENCIES) $(EXTRA_test_hashmap_DEPENDENCIES)
@rm -f test-hashmap$(EXEEXT)
$(AM_V_CCLD)$(test_hashmap_LINK) $(test_hashmap_OBJECTS) $(test_hashmap_LDADD) $(LIBS)
src/test/test-hostname.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-hostname$(EXEEXT): $(test_hostname_OBJECTS) $(test_hostname_DEPENDENCIES) $(EXTRA_test_hostname_DEPENDENCIES)
@rm -f test-hostname$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_hostname_OBJECTS) $(test_hostname_LDADD) $(LIBS)
src/test/test-id128.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-id128$(EXEEXT): $(test_id128_OBJECTS) $(test_id128_DEPENDENCIES) $(EXTRA_test_id128_DEPENDENCIES)
@rm -f test-id128$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_id128_OBJECTS) $(test_id128_LDADD) $(LIBS)
src/login/test_inhibit-test-inhibit.$(OBJEXT): \
src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+
test-inhibit$(EXEEXT): $(test_inhibit_OBJECTS) $(test_inhibit_DEPENDENCIES) $(EXTRA_test_inhibit_DEPENDENCIES)
@rm -f test-inhibit$(EXEEXT)
$(AM_V_CCLD)$(test_inhibit_LINK) $(test_inhibit_OBJECTS) $(test_inhibit_LDADD) $(LIBS)
src/test/test_install-test-install.$(OBJEXT): \
src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+
test-install$(EXEEXT): $(test_install_OBJECTS) $(test_install_DEPENDENCIES) $(EXTRA_test_install_DEPENDENCIES)
@rm -f test-install$(EXEEXT)
$(AM_V_CCLD)$(test_install_LINK) $(test_install_OBJECTS) $(test_install_LDADD) $(LIBS)
src/test/test_job_type-test-job-type.$(OBJEXT): \
src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+
test-job-type$(EXEEXT): $(test_job_type_OBJECTS) $(test_job_type_DEPENDENCIES) $(EXTRA_test_job_type_DEPENDENCIES)
@rm -f test-job-type$(EXEEXT)
$(AM_V_CCLD)$(test_job_type_LINK) $(test_job_type_OBJECTS) $(test_job_type_LDADD) $(LIBS)
src/journal/test-journal.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal$(EXEEXT): $(test_journal_OBJECTS) $(test_journal_DEPENDENCIES) $(EXTRA_test_journal_DEPENDENCIES)
@rm -f test-journal$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_OBJECTS) $(test_journal_LDADD) $(LIBS)
src/journal/test-journal-enum.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal-enum$(EXEEXT): $(test_journal_enum_OBJECTS) $(test_journal_enum_DEPENDENCIES) $(EXTRA_test_journal_enum_DEPENDENCIES)
@rm -f test-journal-enum$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_enum_OBJECTS) $(test_journal_enum_LDADD) $(LIBS)
+src/journal/test-journal-init.$(OBJEXT): src/journal/$(am__dirstamp) \
+ src/journal/$(DEPDIR)/$(am__dirstamp)
+
+test-journal-init$(EXEEXT): $(test_journal_init_OBJECTS) $(test_journal_init_DEPENDENCIES) $(EXTRA_test_journal_init_DEPENDENCIES)
+ @rm -f test-journal-init$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_journal_init_OBJECTS) $(test_journal_init_LDADD) $(LIBS)
+src/journal/test-journal-interleaving.$(OBJEXT): \
+ src/journal/$(am__dirstamp) \
+ src/journal/$(DEPDIR)/$(am__dirstamp)
+
+test-journal-interleaving$(EXEEXT): $(test_journal_interleaving_OBJECTS) $(test_journal_interleaving_DEPENDENCIES) $(EXTRA_test_journal_interleaving_DEPENDENCIES)
+ @rm -f test-journal-interleaving$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_journal_interleaving_OBJECTS) $(test_journal_interleaving_LDADD) $(LIBS)
src/journal/test-journal-match.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal-match$(EXEEXT): $(test_journal_match_OBJECTS) $(test_journal_match_DEPENDENCIES) $(EXTRA_test_journal_match_DEPENDENCIES)
@rm -f test-journal-match$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_match_OBJECTS) $(test_journal_match_LDADD) $(LIBS)
src/journal/test-journal-send.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal-send$(EXEEXT): $(test_journal_send_OBJECTS) $(test_journal_send_DEPENDENCIES) $(EXTRA_test_journal_send_DEPENDENCIES)
@rm -f test-journal-send$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_send_OBJECTS) $(test_journal_send_LDADD) $(LIBS)
src/journal/test-journal-stream.$(OBJEXT): \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal-stream$(EXEEXT): $(test_journal_stream_OBJECTS) $(test_journal_stream_DEPENDENCIES) $(EXTRA_test_journal_stream_DEPENDENCIES)
@rm -f test-journal-stream$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_stream_OBJECTS) $(test_journal_stream_LDADD) $(LIBS)
src/journal/test-journal-syslog.$(OBJEXT): \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal-syslog$(EXEEXT): $(test_journal_syslog_OBJECTS) $(test_journal_syslog_DEPENDENCIES) $(EXTRA_test_journal_syslog_DEPENDENCIES)
@rm -f test-journal-syslog$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_syslog_OBJECTS) $(test_journal_syslog_LDADD) $(LIBS)
src/journal/test-journal-verify.$(OBJEXT): \
src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-journal-verify$(EXEEXT): $(test_journal_verify_OBJECTS) $(test_journal_verify_DEPENDENCIES) $(EXTRA_test_journal_verify_DEPENDENCIES)
@rm -f test-journal-verify$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_journal_verify_OBJECTS) $(test_journal_verify_LDADD) $(LIBS)
src/test/test-libudev.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-libudev$(EXEEXT): $(test_libudev_OBJECTS) $(test_libudev_DEPENDENCIES) $(EXTRA_test_libudev_DEPENDENCIES)
@rm -f test-libudev$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_libudev_OBJECTS) $(test_libudev_LDADD) $(LIBS)
+src/test/test_list-test-list.$(OBJEXT): src/test/$(am__dirstamp) \
+ src/test/$(DEPDIR)/$(am__dirstamp)
+
+test-list$(EXEEXT): $(test_list_OBJECTS) $(test_list_DEPENDENCIES) $(EXTRA_test_list_DEPENDENCIES)
+ @rm -f test-list$(EXEEXT)
+ $(AM_V_CCLD)$(test_list_LINK) $(test_list_OBJECTS) $(test_list_LDADD) $(LIBS)
src/test/test-log.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-log$(EXEEXT): $(test_log_OBJECTS) $(test_log_DEPENDENCIES) $(EXTRA_test_log_DEPENDENCIES)
@rm -f test-log$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_log_OBJECTS) $(test_log_LDADD) $(LIBS)
src/login/test-login.$(OBJEXT): src/login/$(am__dirstamp) \
src/login/$(DEPDIR)/$(am__dirstamp)
+
test-login$(EXEEXT): $(test_login_OBJECTS) $(test_login_DEPENDENCIES) $(EXTRA_test_login_DEPENDENCIES)
@rm -f test-login$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_login_OBJECTS) $(test_login_LDADD) $(LIBS)
+src/login/test-login-shared.$(OBJEXT): src/login/$(am__dirstamp) \
+ src/login/$(DEPDIR)/$(am__dirstamp)
+
+test-login-shared$(EXEEXT): $(test_login_shared_OBJECTS) $(test_login_shared_DEPENDENCIES) $(EXTRA_test_login_shared_DEPENDENCIES)
+ @rm -f test-login-shared$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_login_shared_OBJECTS) $(test_login_shared_LDADD) $(LIBS)
+src/login/test_login_tables-test-login-tables.$(OBJEXT): \
+ src/login/$(am__dirstamp) src/login/$(DEPDIR)/$(am__dirstamp)
+
+test-login-tables$(EXEEXT): $(test_login_tables_OBJECTS) $(test_login_tables_DEPENDENCIES) $(EXTRA_test_login_tables_DEPENDENCIES)
+ @rm -f test-login-tables$(EXEEXT)
+ $(AM_V_CCLD)$(test_login_tables_LINK) $(test_login_tables_OBJECTS) $(test_login_tables_LDADD) $(LIBS)
src/test/test-loopback.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-loopback$(EXEEXT): $(test_loopback_OBJECTS) $(test_loopback_DEPENDENCIES) $(EXTRA_test_loopback_DEPENDENCIES)
@rm -f test-loopback$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_loopback_OBJECTS) $(test_loopback_LDADD) $(LIBS)
+src/machine/test_machine_tables-test-machine-tables.$(OBJEXT): \
+ src/machine/$(am__dirstamp) \
+ src/machine/$(DEPDIR)/$(am__dirstamp)
+
+test-machine-tables$(EXEEXT): $(test_machine_tables_OBJECTS) $(test_machine_tables_DEPENDENCIES) $(EXTRA_test_machine_tables_DEPENDENCIES)
+ @rm -f test-machine-tables$(EXEEXT)
+ $(AM_V_CCLD)$(test_machine_tables_LINK) $(test_machine_tables_OBJECTS) $(test_machine_tables_LDADD) $(LIBS)
src/journal/test-mmap-cache.$(OBJEXT): src/journal/$(am__dirstamp) \
src/journal/$(DEPDIR)/$(am__dirstamp)
+
test-mmap-cache$(EXEEXT): $(test_mmap_cache_OBJECTS) $(test_mmap_cache_DEPENDENCIES) $(EXTRA_test_mmap_cache_DEPENDENCIES)
@rm -f test-mmap-cache$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_mmap_cache_OBJECTS) $(test_mmap_cache_LDADD) $(LIBS)
-src/test/test-ns.$(OBJEXT): src/test/$(am__dirstamp) \
+src/test/test_ns-test-ns.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-ns$(EXEEXT): $(test_ns_OBJECTS) $(test_ns_DEPENDENCIES) $(EXTRA_test_ns_DEPENDENCIES)
@rm -f test-ns$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(test_ns_OBJECTS) $(test_ns_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(test_ns_LINK) $(test_ns_OBJECTS) $(test_ns_LDADD) $(LIBS)
src/test/test-path-util.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-path-util$(EXEEXT): $(test_path_util_OBJECTS) $(test_path_util_DEPENDENCIES) $(EXTRA_test_path_util_DEPENDENCIES)
@rm -f test-path-util$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_path_util_OBJECTS) $(test_path_util_LDADD) $(LIBS)
src/test/test_prioq-test-prioq.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-prioq$(EXEEXT): $(test_prioq_OBJECTS) $(test_prioq_DEPENDENCIES) $(EXTRA_test_prioq_DEPENDENCIES)
@rm -f test-prioq$(EXEEXT)
$(AM_V_CCLD)$(test_prioq_LINK) $(test_prioq_OBJECTS) $(test_prioq_LDADD) $(LIBS)
src/test/test-replace-var.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-replace-var$(EXEEXT): $(test_replace_var_OBJECTS) $(test_replace_var_DEPENDENCIES) $(EXTRA_test_replace_var_DEPENDENCIES)
@rm -f test-replace-var$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_replace_var_OBJECTS) $(test_replace_var_LDADD) $(LIBS)
src/test/test_sched_prio-test-sched-prio.$(OBJEXT): \
src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+
test-sched-prio$(EXEEXT): $(test_sched_prio_OBJECTS) $(test_sched_prio_DEPENDENCIES) $(EXTRA_test_sched_prio_DEPENDENCIES)
@rm -f test-sched-prio$(EXEEXT)
$(AM_V_CCLD)$(test_sched_prio_LINK) $(test_sched_prio_OBJECTS) $(test_sched_prio_LDADD) $(LIBS)
src/test/test-sleep.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-sleep$(EXEEXT): $(test_sleep_OBJECTS) $(test_sleep_DEPENDENCIES) $(EXTRA_test_sleep_DEPENDENCIES)
@rm -f test-sleep$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_sleep_OBJECTS) $(test_sleep_LDADD) $(LIBS)
src/test/test-strbuf.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-strbuf$(EXEEXT): $(test_strbuf_OBJECTS) $(test_strbuf_DEPENDENCIES) $(EXTRA_test_strbuf_DEPENDENCIES)
@rm -f test-strbuf$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_strbuf_OBJECTS) $(test_strbuf_LDADD) $(LIBS)
src/test/test-strip-tab-ansi.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-strip-tab-ansi$(EXEEXT): $(test_strip_tab_ansi_OBJECTS) $(test_strip_tab_ansi_DEPENDENCIES) $(EXTRA_test_strip_tab_ansi_DEPENDENCIES)
@rm -f test-strip-tab-ansi$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_strip_tab_ansi_OBJECTS) $(test_strip_tab_ansi_LDADD) $(LIBS)
src/test/test-strv.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-strv$(EXEEXT): $(test_strv_OBJECTS) $(test_strv_DEPENDENCIES) $(EXTRA_test_strv_DEPENDENCIES)
@rm -f test-strv$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_strv_OBJECTS) $(test_strv_LDADD) $(LIBS)
src/test/test-strxcpyx.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-strxcpyx$(EXEEXT): $(test_strxcpyx_OBJECTS) $(test_strxcpyx_DEPENDENCIES) $(EXTRA_test_strxcpyx_DEPENDENCIES)
@rm -f test-strxcpyx$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_strxcpyx_OBJECTS) $(test_strxcpyx_LDADD) $(LIBS)
+src/test/test_tables-test-tables.$(OBJEXT): src/test/$(am__dirstamp) \
+ src/test/$(DEPDIR)/$(am__dirstamp)
+
+test-tables$(EXEEXT): $(test_tables_OBJECTS) $(test_tables_DEPENDENCIES) $(EXTRA_test_tables_DEPENDENCIES)
+ @rm -f test-tables$(EXEEXT)
+ $(AM_V_CCLD)$(test_tables_LINK) $(test_tables_OBJECTS) $(test_tables_LDADD) $(LIBS)
src/test/test_time-test-time.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-time$(EXEEXT): $(test_time_OBJECTS) $(test_time_DEPENDENCIES) $(EXTRA_test_time_DEPENDENCIES)
@rm -f test-time$(EXEEXT)
$(AM_V_CCLD)$(test_time_LINK) $(test_time_OBJECTS) $(test_time_LDADD) $(LIBS)
src/test/test-udev.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-udev$(EXEEXT): $(test_udev_OBJECTS) $(test_udev_DEPENDENCIES) $(EXTRA_test_udev_DEPENDENCIES)
@rm -f test-udev$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_udev_OBJECTS) $(test_udev_LDADD) $(LIBS)
src/test/test_unit_file-test-unit-file.$(OBJEXT): \
src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+
test-unit-file$(EXEEXT): $(test_unit_file_OBJECTS) $(test_unit_file_DEPENDENCIES) $(EXTRA_test_unit_file_DEPENDENCIES)
@rm -f test-unit-file$(EXEEXT)
$(AM_V_CCLD)$(test_unit_file_LINK) $(test_unit_file_OBJECTS) $(test_unit_file_LDADD) $(LIBS)
src/test/test_unit_name-test-unit-name.$(OBJEXT): \
src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp)
+
test-unit-name$(EXEEXT): $(test_unit_name_OBJECTS) $(test_unit_name_DEPENDENCIES) $(EXTRA_test_unit_name_DEPENDENCIES)
@rm -f test-unit-name$(EXEEXT)
$(AM_V_CCLD)$(test_unit_name_LINK) $(test_unit_name_OBJECTS) $(test_unit_name_LDADD) $(LIBS)
+src/test/test_utf8-test-utf8.$(OBJEXT): src/test/$(am__dirstamp) \
+ src/test/$(DEPDIR)/$(am__dirstamp)
+
+test-utf8$(EXEEXT): $(test_utf8_OBJECTS) $(test_utf8_DEPENDENCIES) $(EXTRA_test_utf8_DEPENDENCIES)
+ @rm -f test-utf8$(EXEEXT)
+ $(AM_V_CCLD)$(test_utf8_LINK) $(test_utf8_OBJECTS) $(test_utf8_LDADD) $(LIBS)
src/test/test_util-test-util.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-util$(EXEEXT): $(test_util_OBJECTS) $(test_util_DEPENDENCIES) $(EXTRA_test_util_DEPENDENCIES)
@rm -f test-util$(EXEEXT)
$(AM_V_CCLD)$(test_util_LINK) $(test_util_OBJECTS) $(test_util_LDADD) $(LIBS)
src/test/test-watchdog.$(OBJEXT): src/test/$(am__dirstamp) \
src/test/$(DEPDIR)/$(am__dirstamp)
+
test-watchdog$(EXEEXT): $(test_watchdog_OBJECTS) $(test_watchdog_DEPENDENCIES) $(EXTRA_test_watchdog_DEPENDENCIES)
@rm -f test-watchdog$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(test_watchdog_OBJECTS) $(test_watchdog_LDADD) $(LIBS)
src/timedate/timedatectl-timedatectl.$(OBJEXT): \
src/timedate/$(am__dirstamp) \
src/timedate/$(DEPDIR)/$(am__dirstamp)
+
timedatectl$(EXEEXT): $(timedatectl_OBJECTS) $(timedatectl_DEPENDENCIES) $(EXTRA_timedatectl_DEPENDENCIES)
@rm -f timedatectl$(EXEEXT)
$(AM_V_CCLD)$(timedatectl_LINK) $(timedatectl_OBJECTS) $(timedatectl_LDADD) $(LIBS)
@@ -7878,6 +8752,7 @@ src/udev/udevadm-test.$(OBJEXT): src/udev/$(am__dirstamp) \
src/udev/$(DEPDIR)/$(am__dirstamp)
src/udev/udevadm-test-builtin.$(OBJEXT): src/udev/$(am__dirstamp) \
src/udev/$(DEPDIR)/$(am__dirstamp)
+
udevadm$(EXEEXT): $(udevadm_OBJECTS) $(udevadm_DEPENDENCIES) $(EXTRA_udevadm_DEPENDENCIES)
@rm -f udevadm$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(udevadm_OBJECTS) $(udevadm_LDADD) $(LIBS)
@@ -7889,6 +8764,7 @@ src/udev/v4l_id/$(DEPDIR)/$(am__dirstamp):
@: > src/udev/v4l_id/$(DEPDIR)/$(am__dirstamp)
src/udev/v4l_id/v4l_id.$(OBJEXT): src/udev/v4l_id/$(am__dirstamp) \
src/udev/v4l_id/$(DEPDIR)/$(am__dirstamp)
+
v4l_id$(EXEEXT): $(v4l_id_OBJECTS) $(v4l_id_DEPENDENCIES) $(EXTRA_v4l_id_DEPENDENCIES)
@rm -f v4l_id$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(v4l_id_OBJECTS) $(v4l_id_LDADD) $(LIBS)
@@ -7962,41 +8838,6 @@ uninstall-dist_kernelinstallSCRIPTS:
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
dir='$(DESTDIR)$(kernelinstalldir)'; $(am__uninstall_files_from_dir)
-install-dist_udevhomeSCRIPTS: $(dist_udevhome_SCRIPTS)
- @$(NORMAL_INSTALL)
- @list='$(dist_udevhome_SCRIPTS)'; test -n "$(udevhomedir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(udevhomedir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(udevhomedir)" || exit 1; \
- fi; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n' \
- -e 'h;s|.*|.|' \
- -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) { files[d] = files[d] " " $$1; \
- if (++n[d] == $(am__install_max)) { \
- print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
- else { print "f", d "/" $$4, $$1 } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(udevhomedir)$$dir'"; \
- $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(udevhomedir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-dist_udevhomeSCRIPTS:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_udevhome_SCRIPTS)'; test -n "$(udevhomedir)" || exit 0; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 's,.*/,,;$(transform)'`; \
- dir='$(DESTDIR)$(udevhomedir)'; $(am__uninstall_files_from_dir)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -8004,6 +8845,7 @@ mostlyclean-compile:
-rm -f src/activate/*.$(OBJEXT)
-rm -f src/analyze/*.$(OBJEXT)
-rm -f src/ask-password/*.$(OBJEXT)
+ -rm -f src/backlight/*.$(OBJEXT)
-rm -f src/binfmt/*.$(OBJEXT)
-rm -f src/boot/*.$(OBJEXT)
-rm -f src/bootchart/*.$(OBJEXT)
@@ -8019,6 +8861,7 @@ mostlyclean-compile:
-rm -f src/fsck/*.$(OBJEXT)
-rm -f src/fstab-generator/*.$(OBJEXT)
-rm -f src/getty-generator/*.$(OBJEXT)
+ -rm -f src/gpt-auto-generator/*.$(OBJEXT)
-rm -f src/gudev/*.$(OBJEXT)
-rm -f src/gudev/*.lo
-rm -f src/hostname/*.$(OBJEXT)
@@ -8037,6 +8880,8 @@ mostlyclean-compile:
-rm -f src/login/*.$(OBJEXT)
-rm -f src/login/*.lo
-rm -f src/machine-id-setup/*.$(OBJEXT)
+ -rm -f src/machine/*.$(OBJEXT)
+ -rm -f src/machine/*.lo
-rm -f src/modules-load/*.$(OBJEXT)
-rm -f src/notify/*.$(OBJEXT)
-rm -f src/nspawn/*.$(OBJEXT)
@@ -8050,6 +8895,7 @@ mostlyclean-compile:
-rm -f src/readahead/*.$(OBJEXT)
-rm -f src/remount-fs/*.$(OBJEXT)
-rm -f src/reply-password/*.$(OBJEXT)
+ -rm -f src/run/*.$(OBJEXT)
-rm -f src/shared/*.$(OBJEXT)
-rm -f src/shared/*.lo
-rm -f src/shutdownd/*.$(OBJEXT)
@@ -8060,7 +8906,6 @@ mostlyclean-compile:
-rm -f src/systemctl/*.$(OBJEXT)
-rm -f src/test/*.$(OBJEXT)
-rm -f src/timedate/*.$(OBJEXT)
- -rm -f src/timestamp/*.$(OBJEXT)
-rm -f src/tmpfiles/*.$(OBJEXT)
-rm -f src/tty-ask-password-agent/*.$(OBJEXT)
-rm -f src/udev/*.$(OBJEXT)
@@ -8069,7 +8914,6 @@ mostlyclean-compile:
-rm -f src/udev/ata_id/*.$(OBJEXT)
-rm -f src/udev/cdrom_id/*.$(OBJEXT)
-rm -f src/udev/collect/*.$(OBJEXT)
- -rm -f src/udev/keymap/*.$(OBJEXT)
-rm -f src/udev/mtd_probe/*.$(OBJEXT)
-rm -f src/udev/scsi_id/*.$(OBJEXT)
-rm -f src/udev/v4l_id/*.$(OBJEXT)
@@ -8083,6 +8927,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/activate/$(DEPDIR)/activate.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/analyze/$(DEPDIR)/systemd_analyze-systemd-analyze.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/ask-password/$(DEPDIR)/ask-password.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/backlight/$(DEPDIR)/backlight.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/binfmt/$(DEPDIR)/binfmt.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/boot/$(DEPDIR)/boot-efi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/boot/$(DEPDIR)/boot-loader.Po@am__quote@
@@ -8094,13 +8939,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/cgroups-agent/$(DEPDIR)/systemd_cgroups_agent-cgroups-agent.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/cgtop/$(DEPDIR)/cgtop.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/killall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-async.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-audit-fd.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-automount.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-cgroup-attr.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-cgroup-semantics.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-cgroup.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-condition.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-automount.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-cgroup.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-device.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-execute.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-job.Plo@am__quote@
@@ -8108,7 +8953,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-manager.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-mount.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-scope.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-service.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-slice.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-snapshot.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-socket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-dbus-swap.Plo@am__quote@
@@ -8136,15 +8983,16 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-mount.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-namespace.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-path.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-scope.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-selinux-access.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-selinux-setup.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-service.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-slice.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-smack-setup.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-snapshot.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-socket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-swap.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-switch-root.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-sync.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-syscall-list.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-target.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/libsystemd_core_la-tcpwrap.Plo@am__quote@
@@ -8166,6 +9014,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/fsck/$(DEPDIR)/systemd_fsck-fsck.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/fstab-generator/$(DEPDIR)/fstab-generator.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/getty-generator/$(DEPDIR)/getty-generator.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevclient.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevdevice.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/gudev/$(DEPDIR)/libgudev_1_0_la-gudevenumerator.Plo@am__quote@
@@ -8212,8 +9061,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/libsystemd_journal_la-sd-journal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/systemd_journal_gatewayd-journal-gatewayd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/systemd_journal_gatewayd-microhttpd-util.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-catalog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-enum.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-interleaving.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-match.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-send.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-stream.Po@am__quote@
@@ -8221,24 +9071,30 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal-verify.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-journal.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test-mmap-cache.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-bloom.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-control.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-error.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-internal.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-kernel.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-match.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-message.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-signature.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-socket.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/bus-type.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/journal/$(DEPDIR)/test_catalog-test-catalog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/busctl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/sd-bus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-bloom.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-control.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-internal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-kernel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-match.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-message.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-signature.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-socket.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-type.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-bus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-memfd.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test-bus-signature.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_chat-test-bus-chat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_kernel-test-bus-kernel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_marshal-test-bus-marshal.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_match-test-bus-match.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_server-test-bus-server.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-daemon/$(DEPDIR)/libsystemd_daemon_la-sd-daemon.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-daemon/$(DEPDIR)/sd-daemon.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/libsystemd-id128/$(DEPDIR)/libsystemd_id128_la-sd-id128.Plo@am__quote@
@@ -8263,33 +9119,47 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/libudev/$(DEPDIR)/libudev_private_la-libudev.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/locale/$(DEPDIR)/localectl-localectl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/locale/$(DEPDIR)/systemd_localed-localed.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_login_la-login-shared.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_login_la-sd-login.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-login-shared.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-acl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-action.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-button.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-core.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-dbus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-inhibit.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat-dbus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-dbus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-device.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user-dbus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libudev_core_la-login-shared.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libudev_core_la-logind-acl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/libudev_core_la-sd-login.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/login-shared.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/loginctl-loginctl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/loginctl-sysfs-show.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/multi-seat-x.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/pam_systemd_la-pam-module.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/sd-login.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_inhibit-inhibit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-acl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-action.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-button.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-dbus.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-device.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-gperf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-seat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-session.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind-user.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/systemd_logind-logind.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/test-login-shared.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/test-login.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/test_inhibit-test-inhibit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/test_login_tables-test-login-tables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/login/$(DEPDIR)/user-sessions.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/machine-id-setup/$(DEPDIR)/machine-id-setup-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine-dbus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/machine/$(DEPDIR)/libsystemd_machine_core_la-machined-dbus.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/machine/$(DEPDIR)/machinectl-machinectl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/machine/$(DEPDIR)/systemd_machined-machined.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/modules-load/$(DEPDIR)/systemd_modules_load-modules-load.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/notify/$(DEPDIR)/notify.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/nspawn/$(DEPDIR)/nspawn.Po@am__quote@
@@ -8315,13 +9185,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/readahead/$(DEPDIR)/sd-readahead.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/remount-fs/$(DEPDIR)/remount-fs.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/reply-password/$(DEPDIR)/reply-password.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/run/$(DEPDIR)/run.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/MurmurHash3.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/acpi-fpdt.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/audit.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/boot-timestamps.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/calendarspec.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/cgroup-show.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/cgroup-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/conf-files.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/conf-parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/device-nodes.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/efivars.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/env-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/exit-status.Plo@am__quote@
@@ -8335,11 +9209,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_dbus_la-dbus-loop.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_dbus_la-polkit.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-ask-password-api.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-cgroup-label.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-dev-setup.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-fileio-label.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-label.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-mkdir.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-mkdir-label.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-selinux-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_label_la-socket-label.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_logs_la-logs-show.Plo@am__quote@
@@ -8348,6 +9221,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_units_la-path-lookup.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/libsystemd_units_la-specifier.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/log.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/mkdir.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/pager.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/path-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/prioq.Plo@am__quote@
@@ -8358,6 +9232,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/socket-util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/spawn-ask-password-agent.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/spawn-polkit-agent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/specifier.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/strbuf.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/strv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/shared/$(DEPDIR)/strxcpyx.Plo@am__quote@
@@ -8375,19 +9250,19 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/sysctl/$(DEPDIR)/sysctl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/system-update-generator/$(DEPDIR)/system-update-generator.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/systemctl/$(DEPDIR)/systemctl-systemctl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-boot-timestamps.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-calendarspec.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-cgroup-util.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-cgroup.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-daemon.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-date.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-efivars.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-device-nodes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-env-replace.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-hostname.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-id128.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-libudev.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-log.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-loopback.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-ns.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-path-util.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-replace-var.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test-sleep.Po@am__quote@
@@ -8402,15 +9277,18 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_hashmap-test-hashmap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_install-test-install.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_job_type-test-job-type.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_list-test-list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_ns-test-ns.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_prioq-test-prioq.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_sched_prio-test-sched-prio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_tables-test-tables.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_time-test-time.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_unit_file-test-unit-file.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_unit_name-test-unit-name.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_utf8-test-utf8.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/test_util-test-util.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/timedate/$(DEPDIR)/systemd_timedated-timedated.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/timedate/$(DEPDIR)/timedatectl-timedatectl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/timestamp/$(DEPDIR)/timestamp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/tmpfiles/$(DEPDIR)/tmpfiles.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/tty-ask-password-agent/$(DEPDIR)/tty-ask-password-agent.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-blkid.Plo@am__quote@
@@ -8418,6 +9296,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-firmware.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-hwdb.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-input_id.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-keyboard.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-kmod.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-net_id.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-path_id.Plo@am__quote@
@@ -8443,7 +9322,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/ata_id/$(DEPDIR)/ata_id.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/cdrom_id/$(DEPDIR)/cdrom_id.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/collect/$(DEPDIR)/collect.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/udev/keymap/$(DEPDIR)/keymap-keymap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/mtd_probe/$(DEPDIR)/mtd_probe-probe_smartmedia.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/udev/scsi_id/$(DEPDIR)/scsi_id.Po@am__quote@
@@ -8581,6 +9459,90 @@ src/shared/libsystemd_acl_la-acl-util.lo: src/shared/acl-util.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_acl_la_CFLAGS) $(CFLAGS) -c -o src/shared/libsystemd_acl_la-acl-util.lo `test -f 'src/shared/acl-util.c' || echo '$(srcdir)/'`src/shared/acl-util.c
+src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo: src/libsystemd-bus/sd-bus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-bus.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo `test -f 'src/libsystemd-bus/sd-bus.c' || echo '$(srcdir)/'`src/libsystemd-bus/sd-bus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-bus.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-bus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/sd-bus.c' object='src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-sd-bus.lo `test -f 'src/libsystemd-bus/sd-bus.c' || echo '$(srcdir)/'`src/libsystemd-bus/sd-bus.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-control.lo: src/libsystemd-bus/bus-control.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-control.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-control.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-control.lo `test -f 'src/libsystemd-bus/bus-control.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-control.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-control.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-control.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-control.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-control.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-control.lo `test -f 'src/libsystemd-bus/bus-control.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-control.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-error.lo: src/libsystemd-bus/bus-error.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-error.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-error.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-error.lo `test -f 'src/libsystemd-bus/bus-error.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-error.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-error.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-error.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-error.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-error.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-error.lo `test -f 'src/libsystemd-bus/bus-error.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-error.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo: src/libsystemd-bus/bus-internal.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-internal.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo `test -f 'src/libsystemd-bus/bus-internal.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-internal.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-internal.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-internal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-internal.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-internal.lo `test -f 'src/libsystemd-bus/bus-internal.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-internal.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo: src/libsystemd-bus/bus-socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-socket.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo `test -f 'src/libsystemd-bus/bus-socket.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-socket.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-socket.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-socket.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-socket.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-socket.lo `test -f 'src/libsystemd-bus/bus-socket.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-socket.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo: src/libsystemd-bus/bus-kernel.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-kernel.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo `test -f 'src/libsystemd-bus/bus-kernel.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-kernel.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-kernel.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-kernel.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-kernel.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-kernel.lo `test -f 'src/libsystemd-bus/bus-kernel.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-kernel.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-message.lo: src/libsystemd-bus/bus-message.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-message.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-message.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-message.lo `test -f 'src/libsystemd-bus/bus-message.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-message.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-message.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-message.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-message.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-message.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-message.lo `test -f 'src/libsystemd-bus/bus-message.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-message.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo: src/libsystemd-bus/bus-signature.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-signature.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo `test -f 'src/libsystemd-bus/bus-signature.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-signature.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-signature.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-signature.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-signature.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-signature.lo `test -f 'src/libsystemd-bus/bus-signature.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-signature.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-type.lo: src/libsystemd-bus/bus-type.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-type.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-type.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-type.lo `test -f 'src/libsystemd-bus/bus-type.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-type.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-type.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-type.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-type.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-type.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-type.lo `test -f 'src/libsystemd-bus/bus-type.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-type.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-match.lo: src/libsystemd-bus/bus-match.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-match.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-match.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-match.lo `test -f 'src/libsystemd-bus/bus-match.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-match.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-match.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-match.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-match.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-match.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-match.lo `test -f 'src/libsystemd-bus/bus-match.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-match.c
+
+src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo: src/libsystemd-bus/bus-bloom.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-bloom.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo `test -f 'src/libsystemd-bus/bus-bloom.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-bloom.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-bloom.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-bus-bloom.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/bus-bloom.c' object='src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-bus-bloom.lo `test -f 'src/libsystemd-bus/bus-bloom.c' || echo '$(srcdir)/'`src/libsystemd-bus/bus-bloom.c
+
+src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo: src/libsystemd-bus/sd-memfd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-memfd.Tpo -c -o src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo `test -f 'src/libsystemd-bus/sd-memfd.c' || echo '$(srcdir)/'`src/libsystemd-bus/sd-memfd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-memfd.Tpo src/libsystemd-bus/$(DEPDIR)/libsystemd_bus_la-sd-memfd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/sd-memfd.c' object='src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_bus_la_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/libsystemd_bus_la-sd-memfd.lo `test -f 'src/libsystemd-bus/sd-memfd.c' || echo '$(srcdir)/'`src/libsystemd-bus/sd-memfd.c
+
src/shared/libsystemd_capability_la-capability.lo: src/shared/capability.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_capability_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_capability_la-capability.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_capability_la-capability.Tpo -c -o src/shared/libsystemd_capability_la-capability.lo `test -f 'src/shared/capability.c' || echo '$(srcdir)/'`src/shared/capability.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_capability_la-capability.Tpo src/shared/$(DEPDIR)/libsystemd_capability_la-capability.Plo
@@ -8700,6 +9662,20 @@ src/core/libsystemd_core_la-path.lo: src/core/path.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-path.lo `test -f 'src/core/path.c' || echo '$(srcdir)/'`src/core/path.c
+src/core/libsystemd_core_la-slice.lo: src/core/slice.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-slice.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-slice.Tpo -c -o src/core/libsystemd_core_la-slice.lo `test -f 'src/core/slice.c' || echo '$(srcdir)/'`src/core/slice.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-slice.Tpo src/core/$(DEPDIR)/libsystemd_core_la-slice.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/slice.c' object='src/core/libsystemd_core_la-slice.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-slice.lo `test -f 'src/core/slice.c' || echo '$(srcdir)/'`src/core/slice.c
+
+src/core/libsystemd_core_la-scope.lo: src/core/scope.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-scope.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-scope.Tpo -c -o src/core/libsystemd_core_la-scope.lo `test -f 'src/core/scope.c' || echo '$(srcdir)/'`src/core/scope.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-scope.Tpo src/core/$(DEPDIR)/libsystemd_core_la-scope.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/scope.c' object='src/core/libsystemd_core_la-scope.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-scope.lo `test -f 'src/core/scope.c' || echo '$(srcdir)/'`src/core/scope.c
+
src/core/libsystemd_core_la-load-dropin.lo: src/core/load-dropin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-load-dropin.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-load-dropin.Tpo -c -o src/core/libsystemd_core_la-load-dropin.lo `test -f 'src/core/load-dropin.c' || echo '$(srcdir)/'`src/core/load-dropin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-load-dropin.Tpo src/core/$(DEPDIR)/libsystemd_core_la-load-dropin.Plo
@@ -8812,6 +9788,27 @@ src/core/libsystemd_core_la-dbus-device.lo: src/core/dbus-device.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-device.lo `test -f 'src/core/dbus-device.c' || echo '$(srcdir)/'`src/core/dbus-device.c
+src/core/libsystemd_core_la-dbus-path.lo: src/core/dbus-path.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-dbus-path.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Tpo -c -o src/core/libsystemd_core_la-dbus-path.lo `test -f 'src/core/dbus-path.c' || echo '$(srcdir)/'`src/core/dbus-path.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Tpo src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/dbus-path.c' object='src/core/libsystemd_core_la-dbus-path.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-path.lo `test -f 'src/core/dbus-path.c' || echo '$(srcdir)/'`src/core/dbus-path.c
+
+src/core/libsystemd_core_la-dbus-slice.lo: src/core/dbus-slice.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-dbus-slice.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-dbus-slice.Tpo -c -o src/core/libsystemd_core_la-dbus-slice.lo `test -f 'src/core/dbus-slice.c' || echo '$(srcdir)/'`src/core/dbus-slice.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-dbus-slice.Tpo src/core/$(DEPDIR)/libsystemd_core_la-dbus-slice.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/dbus-slice.c' object='src/core/libsystemd_core_la-dbus-slice.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-slice.lo `test -f 'src/core/dbus-slice.c' || echo '$(srcdir)/'`src/core/dbus-slice.c
+
+src/core/libsystemd_core_la-dbus-scope.lo: src/core/dbus-scope.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-dbus-scope.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-dbus-scope.Tpo -c -o src/core/libsystemd_core_la-dbus-scope.lo `test -f 'src/core/dbus-scope.c' || echo '$(srcdir)/'`src/core/dbus-scope.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-dbus-scope.Tpo src/core/$(DEPDIR)/libsystemd_core_la-dbus-scope.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/dbus-scope.c' object='src/core/libsystemd_core_la-dbus-scope.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-scope.lo `test -f 'src/core/dbus-scope.c' || echo '$(srcdir)/'`src/core/dbus-scope.c
+
src/core/libsystemd_core_la-dbus-execute.lo: src/core/dbus-execute.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-dbus-execute.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-dbus-execute.Tpo -c -o src/core/libsystemd_core_la-dbus-execute.lo `test -f 'src/core/dbus-execute.c' || echo '$(srcdir)/'`src/core/dbus-execute.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-dbus-execute.Tpo src/core/$(DEPDIR)/libsystemd_core_la-dbus-execute.Plo
@@ -8826,12 +9823,12 @@ src/core/libsystemd_core_la-dbus-kill.lo: src/core/dbus-kill.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-kill.lo `test -f 'src/core/dbus-kill.c' || echo '$(srcdir)/'`src/core/dbus-kill.c
-src/core/libsystemd_core_la-dbus-path.lo: src/core/dbus-path.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-dbus-path.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Tpo -c -o src/core/libsystemd_core_la-dbus-path.lo `test -f 'src/core/dbus-path.c' || echo '$(srcdir)/'`src/core/dbus-path.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Tpo src/core/$(DEPDIR)/libsystemd_core_la-dbus-path.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/dbus-path.c' object='src/core/libsystemd_core_la-dbus-path.lo' libtool=yes @AMDEPBACKSLASH@
+src/core/libsystemd_core_la-dbus-cgroup.lo: src/core/dbus-cgroup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-dbus-cgroup.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-dbus-cgroup.Tpo -c -o src/core/libsystemd_core_la-dbus-cgroup.lo `test -f 'src/core/dbus-cgroup.c' || echo '$(srcdir)/'`src/core/dbus-cgroup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-dbus-cgroup.Tpo src/core/$(DEPDIR)/libsystemd_core_la-dbus-cgroup.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/dbus-cgroup.c' object='src/core/libsystemd_core_la-dbus-cgroup.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-path.lo `test -f 'src/core/dbus-path.c' || echo '$(srcdir)/'`src/core/dbus-path.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-dbus-cgroup.lo `test -f 'src/core/dbus-cgroup.c' || echo '$(srcdir)/'`src/core/dbus-cgroup.c
src/core/libsystemd_core_la-cgroup.lo: src/core/cgroup.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-cgroup.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-cgroup.Tpo -c -o src/core/libsystemd_core_la-cgroup.lo `test -f 'src/core/cgroup.c' || echo '$(srcdir)/'`src/core/cgroup.c
@@ -8924,20 +9921,6 @@ src/core/libsystemd_core_la-tcpwrap.lo: src/core/tcpwrap.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-tcpwrap.lo `test -f 'src/core/tcpwrap.c' || echo '$(srcdir)/'`src/core/tcpwrap.c
-src/core/libsystemd_core_la-cgroup-attr.lo: src/core/cgroup-attr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-cgroup-attr.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-cgroup-attr.Tpo -c -o src/core/libsystemd_core_la-cgroup-attr.lo `test -f 'src/core/cgroup-attr.c' || echo '$(srcdir)/'`src/core/cgroup-attr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-cgroup-attr.Tpo src/core/$(DEPDIR)/libsystemd_core_la-cgroup-attr.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/cgroup-attr.c' object='src/core/libsystemd_core_la-cgroup-attr.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-cgroup-attr.lo `test -f 'src/core/cgroup-attr.c' || echo '$(srcdir)/'`src/core/cgroup-attr.c
-
-src/core/libsystemd_core_la-cgroup-semantics.lo: src/core/cgroup-semantics.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-cgroup-semantics.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-cgroup-semantics.Tpo -c -o src/core/libsystemd_core_la-cgroup-semantics.lo `test -f 'src/core/cgroup-semantics.c' || echo '$(srcdir)/'`src/core/cgroup-semantics.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-cgroup-semantics.Tpo src/core/$(DEPDIR)/libsystemd_core_la-cgroup-semantics.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/cgroup-semantics.c' object='src/core/libsystemd_core_la-cgroup-semantics.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-cgroup-semantics.lo `test -f 'src/core/cgroup-semantics.c' || echo '$(srcdir)/'`src/core/cgroup-semantics.c
-
src/core/libsystemd_core_la-switch-root.lo: src/core/switch-root.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-switch-root.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-switch-root.Tpo -c -o src/core/libsystemd_core_la-switch-root.lo `test -f 'src/core/switch-root.c' || echo '$(srcdir)/'`src/core/switch-root.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-switch-root.Tpo src/core/$(DEPDIR)/libsystemd_core_la-switch-root.Plo
@@ -8966,12 +9949,12 @@ src/core/libsystemd_core_la-audit-fd.lo: src/core/audit-fd.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-audit-fd.lo `test -f 'src/core/audit-fd.c' || echo '$(srcdir)/'`src/core/audit-fd.c
-src/core/libsystemd_core_la-sync.lo: src/core/sync.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-sync.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-sync.Tpo -c -o src/core/libsystemd_core_la-sync.lo `test -f 'src/core/sync.c' || echo '$(srcdir)/'`src/core/sync.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-sync.Tpo src/core/$(DEPDIR)/libsystemd_core_la-sync.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/sync.c' object='src/core/libsystemd_core_la-sync.lo' libtool=yes @AMDEPBACKSLASH@
+src/core/libsystemd_core_la-async.lo: src/core/async.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-async.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-async.Tpo -c -o src/core/libsystemd_core_la-async.lo `test -f 'src/core/async.c' || echo '$(srcdir)/'`src/core/async.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/libsystemd_core_la-async.Tpo src/core/$(DEPDIR)/libsystemd_core_la-async.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/core/async.c' object='src/core/libsystemd_core_la-async.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-sync.lo `test -f 'src/core/sync.c' || echo '$(srcdir)/'`src/core/sync.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -c -o src/core/libsystemd_core_la-async.lo `test -f 'src/core/async.c' || echo '$(srcdir)/'`src/core/async.c
src/core/libsystemd_core_la-kmod-setup.lo: src/core/kmod-setup.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_core_la_CFLAGS) $(CFLAGS) -MT src/core/libsystemd_core_la-kmod-setup.lo -MD -MP -MF src/core/$(DEPDIR)/libsystemd_core_la-kmod-setup.Tpo -c -o src/core/libsystemd_core_la-kmod-setup.lo `test -f 'src/core/kmod-setup.c' || echo '$(srcdir)/'`src/core/kmod-setup.c
@@ -9239,13 +10222,6 @@ src/journal/libsystemd_journal_la-fsprg.lo: src/journal/fsprg.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_journal_la_CFLAGS) $(CFLAGS) -c -o src/journal/libsystemd_journal_la-fsprg.lo `test -f 'src/journal/fsprg.c' || echo '$(srcdir)/'`src/journal/fsprg.c
-src/shared/libsystemd_label_la-cgroup-label.lo: src/shared/cgroup-label.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_label_la-cgroup-label.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_label_la-cgroup-label.Tpo -c -o src/shared/libsystemd_label_la-cgroup-label.lo `test -f 'src/shared/cgroup-label.c' || echo '$(srcdir)/'`src/shared/cgroup-label.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_label_la-cgroup-label.Tpo src/shared/$(DEPDIR)/libsystemd_label_la-cgroup-label.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/shared/cgroup-label.c' object='src/shared/libsystemd_label_la-cgroup-label.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -c -o src/shared/libsystemd_label_la-cgroup-label.lo `test -f 'src/shared/cgroup-label.c' || echo '$(srcdir)/'`src/shared/cgroup-label.c
-
src/shared/libsystemd_label_la-socket-label.lo: src/shared/socket-label.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_label_la-socket-label.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_label_la-socket-label.Tpo -c -o src/shared/libsystemd_label_la-socket-label.lo `test -f 'src/shared/socket-label.c' || echo '$(srcdir)/'`src/shared/socket-label.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_label_la-socket-label.Tpo src/shared/$(DEPDIR)/libsystemd_label_la-socket-label.Plo
@@ -9267,12 +10243,12 @@ src/shared/libsystemd_label_la-selinux-util.lo: src/shared/selinux-util.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -c -o src/shared/libsystemd_label_la-selinux-util.lo `test -f 'src/shared/selinux-util.c' || echo '$(srcdir)/'`src/shared/selinux-util.c
-src/shared/libsystemd_label_la-mkdir.lo: src/shared/mkdir.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_label_la-mkdir.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_label_la-mkdir.Tpo -c -o src/shared/libsystemd_label_la-mkdir.lo `test -f 'src/shared/mkdir.c' || echo '$(srcdir)/'`src/shared/mkdir.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_label_la-mkdir.Tpo src/shared/$(DEPDIR)/libsystemd_label_la-mkdir.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/shared/mkdir.c' object='src/shared/libsystemd_label_la-mkdir.lo' libtool=yes @AMDEPBACKSLASH@
+src/shared/libsystemd_label_la-mkdir-label.lo: src/shared/mkdir-label.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_label_la-mkdir-label.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_label_la-mkdir-label.Tpo -c -o src/shared/libsystemd_label_la-mkdir-label.lo `test -f 'src/shared/mkdir-label.c' || echo '$(srcdir)/'`src/shared/mkdir-label.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_label_la-mkdir-label.Tpo src/shared/$(DEPDIR)/libsystemd_label_la-mkdir-label.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/shared/mkdir-label.c' object='src/shared/libsystemd_label_la-mkdir-label.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -c -o src/shared/libsystemd_label_la-mkdir.lo `test -f 'src/shared/mkdir.c' || echo '$(srcdir)/'`src/shared/mkdir.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -c -o src/shared/libsystemd_label_la-mkdir-label.lo `test -f 'src/shared/mkdir-label.c' || echo '$(srcdir)/'`src/shared/mkdir-label.c
src/shared/libsystemd_label_la-ask-password-api.lo: src/shared/ask-password-api.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_label_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_label_la-ask-password-api.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_label_la-ask-password-api.Tpo -c -o src/shared/libsystemd_label_la-ask-password-api.lo `test -f 'src/shared/ask-password-api.c' || echo '$(srcdir)/'`src/shared/ask-password-api.c
@@ -9302,6 +10278,118 @@ src/login/libsystemd_login_la-sd-login.lo: src/login/sd-login.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_login_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_login_la-sd-login.lo `test -f 'src/login/sd-login.c' || echo '$(srcdir)/'`src/login/sd-login.c
+src/login/libsystemd_login_la-login-shared.lo: src/login/login-shared.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_login_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_login_la-login-shared.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_login_la-login-shared.Tpo -c -o src/login/libsystemd_login_la-login-shared.lo `test -f 'src/login/login-shared.c' || echo '$(srcdir)/'`src/login/login-shared.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_login_la-login-shared.Tpo src/login/$(DEPDIR)/libsystemd_login_la-login-shared.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/login-shared.c' object='src/login/libsystemd_login_la-login-shared.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_login_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_login_la-login-shared.lo `test -f 'src/login/login-shared.c' || echo '$(srcdir)/'`src/login/login-shared.c
+
+src/login/libsystemd_logind_core_la-logind-core.lo: src/login/logind-core.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-core.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-core.Tpo -c -o src/login/libsystemd_logind_core_la-logind-core.lo `test -f 'src/login/logind-core.c' || echo '$(srcdir)/'`src/login/logind-core.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-core.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-core.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-core.c' object='src/login/libsystemd_logind_core_la-logind-core.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-core.lo `test -f 'src/login/logind-core.c' || echo '$(srcdir)/'`src/login/logind-core.c
+
+src/login/libsystemd_logind_core_la-logind-dbus.lo: src/login/logind-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-dbus.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-dbus.Tpo -c -o src/login/libsystemd_logind_core_la-logind-dbus.lo `test -f 'src/login/logind-dbus.c' || echo '$(srcdir)/'`src/login/logind-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-dbus.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-dbus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-dbus.c' object='src/login/libsystemd_logind_core_la-logind-dbus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-dbus.lo `test -f 'src/login/logind-dbus.c' || echo '$(srcdir)/'`src/login/logind-dbus.c
+
+src/login/libsystemd_logind_core_la-logind-device.lo: src/login/logind-device.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-device.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-device.Tpo -c -o src/login/libsystemd_logind_core_la-logind-device.lo `test -f 'src/login/logind-device.c' || echo '$(srcdir)/'`src/login/logind-device.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-device.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-device.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-device.c' object='src/login/libsystemd_logind_core_la-logind-device.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-device.lo `test -f 'src/login/logind-device.c' || echo '$(srcdir)/'`src/login/logind-device.c
+
+src/login/libsystemd_logind_core_la-logind-button.lo: src/login/logind-button.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-button.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-button.Tpo -c -o src/login/libsystemd_logind_core_la-logind-button.lo `test -f 'src/login/logind-button.c' || echo '$(srcdir)/'`src/login/logind-button.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-button.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-button.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-button.c' object='src/login/libsystemd_logind_core_la-logind-button.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-button.lo `test -f 'src/login/logind-button.c' || echo '$(srcdir)/'`src/login/logind-button.c
+
+src/login/libsystemd_logind_core_la-logind-action.lo: src/login/logind-action.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-action.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-action.Tpo -c -o src/login/libsystemd_logind_core_la-logind-action.lo `test -f 'src/login/logind-action.c' || echo '$(srcdir)/'`src/login/logind-action.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-action.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-action.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-action.c' object='src/login/libsystemd_logind_core_la-logind-action.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-action.lo `test -f 'src/login/logind-action.c' || echo '$(srcdir)/'`src/login/logind-action.c
+
+src/login/libsystemd_logind_core_la-logind-seat.lo: src/login/logind-seat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-seat.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat.Tpo -c -o src/login/libsystemd_logind_core_la-logind-seat.lo `test -f 'src/login/logind-seat.c' || echo '$(srcdir)/'`src/login/logind-seat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-seat.c' object='src/login/libsystemd_logind_core_la-logind-seat.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-seat.lo `test -f 'src/login/logind-seat.c' || echo '$(srcdir)/'`src/login/logind-seat.c
+
+src/login/libsystemd_logind_core_la-logind-session.lo: src/login/logind-session.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-session.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session.Tpo -c -o src/login/libsystemd_logind_core_la-logind-session.lo `test -f 'src/login/logind-session.c' || echo '$(srcdir)/'`src/login/logind-session.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session.c' object='src/login/libsystemd_logind_core_la-logind-session.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-session.lo `test -f 'src/login/logind-session.c' || echo '$(srcdir)/'`src/login/logind-session.c
+
+src/login/libsystemd_logind_core_la-logind-session-device.lo: src/login/logind-session-device.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-session-device.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-device.Tpo -c -o src/login/libsystemd_logind_core_la-logind-session-device.lo `test -f 'src/login/logind-session-device.c' || echo '$(srcdir)/'`src/login/logind-session-device.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-device.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-device.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session-device.c' object='src/login/libsystemd_logind_core_la-logind-session-device.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-session-device.lo `test -f 'src/login/logind-session-device.c' || echo '$(srcdir)/'`src/login/logind-session-device.c
+
+src/login/libsystemd_logind_core_la-logind-user.lo: src/login/logind-user.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-user.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user.Tpo -c -o src/login/libsystemd_logind_core_la-logind-user.lo `test -f 'src/login/logind-user.c' || echo '$(srcdir)/'`src/login/logind-user.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-user.c' object='src/login/libsystemd_logind_core_la-logind-user.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-user.lo `test -f 'src/login/logind-user.c' || echo '$(srcdir)/'`src/login/logind-user.c
+
+src/login/libsystemd_logind_core_la-logind-inhibit.lo: src/login/logind-inhibit.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-inhibit.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-inhibit.Tpo -c -o src/login/libsystemd_logind_core_la-logind-inhibit.lo `test -f 'src/login/logind-inhibit.c' || echo '$(srcdir)/'`src/login/logind-inhibit.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-inhibit.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-inhibit.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-inhibit.c' object='src/login/libsystemd_logind_core_la-logind-inhibit.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-inhibit.lo `test -f 'src/login/logind-inhibit.c' || echo '$(srcdir)/'`src/login/logind-inhibit.c
+
+src/login/libsystemd_logind_core_la-logind-session-dbus.lo: src/login/logind-session-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-session-dbus.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-dbus.Tpo -c -o src/login/libsystemd_logind_core_la-logind-session-dbus.lo `test -f 'src/login/logind-session-dbus.c' || echo '$(srcdir)/'`src/login/logind-session-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-dbus.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-session-dbus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session-dbus.c' object='src/login/libsystemd_logind_core_la-logind-session-dbus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-session-dbus.lo `test -f 'src/login/logind-session-dbus.c' || echo '$(srcdir)/'`src/login/logind-session-dbus.c
+
+src/login/libsystemd_logind_core_la-logind-seat-dbus.lo: src/login/logind-seat-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-seat-dbus.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat-dbus.Tpo -c -o src/login/libsystemd_logind_core_la-logind-seat-dbus.lo `test -f 'src/login/logind-seat-dbus.c' || echo '$(srcdir)/'`src/login/logind-seat-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat-dbus.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-seat-dbus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-seat-dbus.c' object='src/login/libsystemd_logind_core_la-logind-seat-dbus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-seat-dbus.lo `test -f 'src/login/logind-seat-dbus.c' || echo '$(srcdir)/'`src/login/logind-seat-dbus.c
+
+src/login/libsystemd_logind_core_la-logind-user-dbus.lo: src/login/logind-user-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-user-dbus.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user-dbus.Tpo -c -o src/login/libsystemd_logind_core_la-logind-user-dbus.lo `test -f 'src/login/logind-user-dbus.c' || echo '$(srcdir)/'`src/login/logind-user-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user-dbus.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-user-dbus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-user-dbus.c' object='src/login/libsystemd_logind_core_la-logind-user-dbus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-user-dbus.lo `test -f 'src/login/logind-user-dbus.c' || echo '$(srcdir)/'`src/login/logind-user-dbus.c
+
+src/login/libsystemd_logind_core_la-login-shared.lo: src/login/login-shared.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-login-shared.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-login-shared.Tpo -c -o src/login/libsystemd_logind_core_la-login-shared.lo `test -f 'src/login/login-shared.c' || echo '$(srcdir)/'`src/login/login-shared.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-login-shared.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-login-shared.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/login-shared.c' object='src/login/libsystemd_logind_core_la-login-shared.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-login-shared.lo `test -f 'src/login/login-shared.c' || echo '$(srcdir)/'`src/login/login-shared.c
+
+src/login/libsystemd_logind_core_la-logind-acl.lo: src/login/logind-acl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -MT src/login/libsystemd_logind_core_la-logind-acl.lo -MD -MP -MF src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-acl.Tpo -c -o src/login/libsystemd_logind_core_la-logind-acl.lo `test -f 'src/login/logind-acl.c' || echo '$(srcdir)/'`src/login/logind-acl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-acl.Tpo src/login/$(DEPDIR)/libsystemd_logind_core_la-logind-acl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-acl.c' object='src/login/libsystemd_logind_core_la-logind-acl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logind_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libsystemd_logind_core_la-logind-acl.lo `test -f 'src/login/logind-acl.c' || echo '$(srcdir)/'`src/login/logind-acl.c
+
src/shared/libsystemd_logs_la-logs-show.lo: src/shared/logs-show.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logs_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_logs_la-logs-show.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_logs_la-logs-show.Tpo -c -o src/shared/libsystemd_logs_la-logs-show.lo `test -f 'src/shared/logs-show.c' || echo '$(srcdir)/'`src/shared/logs-show.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_logs_la-logs-show.Tpo src/shared/$(DEPDIR)/libsystemd_logs_la-logs-show.Plo
@@ -9309,6 +10397,27 @@ src/shared/libsystemd_logs_la-logs-show.lo: src/shared/logs-show.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_logs_la_CFLAGS) $(CFLAGS) -c -o src/shared/libsystemd_logs_la-logs-show.lo `test -f 'src/shared/logs-show.c' || echo '$(srcdir)/'`src/shared/logs-show.c
+src/machine/libsystemd_machine_core_la-machined-dbus.lo: src/machine/machined-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) -MT src/machine/libsystemd_machine_core_la-machined-dbus.lo -MD -MP -MF src/machine/$(DEPDIR)/libsystemd_machine_core_la-machined-dbus.Tpo -c -o src/machine/libsystemd_machine_core_la-machined-dbus.lo `test -f 'src/machine/machined-dbus.c' || echo '$(srcdir)/'`src/machine/machined-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/libsystemd_machine_core_la-machined-dbus.Tpo src/machine/$(DEPDIR)/libsystemd_machine_core_la-machined-dbus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machined-dbus.c' object='src/machine/libsystemd_machine_core_la-machined-dbus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) -c -o src/machine/libsystemd_machine_core_la-machined-dbus.lo `test -f 'src/machine/machined-dbus.c' || echo '$(srcdir)/'`src/machine/machined-dbus.c
+
+src/machine/libsystemd_machine_core_la-machine.lo: src/machine/machine.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) -MT src/machine/libsystemd_machine_core_la-machine.lo -MD -MP -MF src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine.Tpo -c -o src/machine/libsystemd_machine_core_la-machine.lo `test -f 'src/machine/machine.c' || echo '$(srcdir)/'`src/machine/machine.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine.Tpo src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machine.c' object='src/machine/libsystemd_machine_core_la-machine.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) -c -o src/machine/libsystemd_machine_core_la-machine.lo `test -f 'src/machine/machine.c' || echo '$(srcdir)/'`src/machine/machine.c
+
+src/machine/libsystemd_machine_core_la-machine-dbus.lo: src/machine/machine-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) -MT src/machine/libsystemd_machine_core_la-machine-dbus.lo -MD -MP -MF src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine-dbus.Tpo -c -o src/machine/libsystemd_machine_core_la-machine-dbus.lo `test -f 'src/machine/machine-dbus.c' || echo '$(srcdir)/'`src/machine/machine-dbus.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine-dbus.Tpo src/machine/$(DEPDIR)/libsystemd_machine_core_la-machine-dbus.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machine-dbus.c' object='src/machine/libsystemd_machine_core_la-machine-dbus.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_machine_core_la_CFLAGS) $(CFLAGS) -c -o src/machine/libsystemd_machine_core_la-machine-dbus.lo `test -f 'src/machine/machine-dbus.c' || echo '$(srcdir)/'`src/machine/machine-dbus.c
+
src/shared/libsystemd_units_la-install.lo: src/shared/install.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libsystemd_units_la_CFLAGS) $(CFLAGS) -MT src/shared/libsystemd_units_la-install.lo -MD -MP -MF src/shared/$(DEPDIR)/libsystemd_units_la-install.Tpo -c -o src/shared/libsystemd_units_la-install.lo `test -f 'src/shared/install.c' || echo '$(srcdir)/'`src/shared/install.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/shared/$(DEPDIR)/libsystemd_units_la-install.Tpo src/shared/$(DEPDIR)/libsystemd_units_la-install.Plo
@@ -9400,6 +10509,13 @@ src/udev/libudev_core_la-udev-builtin-input_id.lo: src/udev/udev-builtin-input_i
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -c -o src/udev/libudev_core_la-udev-builtin-input_id.lo `test -f 'src/udev/udev-builtin-input_id.c' || echo '$(srcdir)/'`src/udev/udev-builtin-input_id.c
+src/udev/libudev_core_la-udev-builtin-keyboard.lo: src/udev/udev-builtin-keyboard.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -MT src/udev/libudev_core_la-udev-builtin-keyboard.lo -MD -MP -MF src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-keyboard.Tpo -c -o src/udev/libudev_core_la-udev-builtin-keyboard.lo `test -f 'src/udev/udev-builtin-keyboard.c' || echo '$(srcdir)/'`src/udev/udev-builtin-keyboard.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-keyboard.Tpo src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-keyboard.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev/udev-builtin-keyboard.c' object='src/udev/libudev_core_la-udev-builtin-keyboard.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -c -o src/udev/libudev_core_la-udev-builtin-keyboard.lo `test -f 'src/udev/udev-builtin-keyboard.c' || echo '$(srcdir)/'`src/udev/udev-builtin-keyboard.c
+
src/udev/libudev_core_la-udev-builtin-net_id.lo: src/udev/udev-builtin-net_id.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -MT src/udev/libudev_core_la-udev-builtin-net_id.lo -MD -MP -MF src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-net_id.Tpo -c -o src/udev/libudev_core_la-udev-builtin-net_id.lo `test -f 'src/udev/udev-builtin-net_id.c' || echo '$(srcdir)/'`src/udev/udev-builtin-net_id.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-net_id.Tpo src/udev/$(DEPDIR)/libudev_core_la-udev-builtin-net_id.Plo
@@ -9463,6 +10579,13 @@ src/login/libudev_core_la-sd-login.lo: src/login/sd-login.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libudev_core_la-sd-login.lo `test -f 'src/login/sd-login.c' || echo '$(srcdir)/'`src/login/sd-login.c
+src/login/libudev_core_la-login-shared.lo: src/login/login-shared.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -MT src/login/libudev_core_la-login-shared.lo -MD -MP -MF src/login/$(DEPDIR)/libudev_core_la-login-shared.Tpo -c -o src/login/libudev_core_la-login-shared.lo `test -f 'src/login/login-shared.c' || echo '$(srcdir)/'`src/login/login-shared.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/libudev_core_la-login-shared.Tpo src/login/$(DEPDIR)/libudev_core_la-login-shared.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/login-shared.c' object='src/login/libudev_core_la-login-shared.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libudev_core_la_CPPFLAGS) $(CPPFLAGS) $(libudev_core_la_CFLAGS) $(CFLAGS) -c -o src/login/libudev_core_la-login-shared.lo `test -f 'src/login/login-shared.c' || echo '$(srcdir)/'`src/login/login-shared.c
+
src/libudev/libudev_private_la-libudev.lo: src/libudev/libudev.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libudev_private_la_CFLAGS) $(CFLAGS) -MT src/libudev/libudev_private_la-libudev.lo -MD -MP -MF src/libudev/$(DEPDIR)/libudev_private_la-libudev.Tpo -c -o src/libudev/libudev_private_la-libudev.lo `test -f 'src/libudev/libudev.c' || echo '$(srcdir)/'`src/libudev/libudev.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libudev/$(DEPDIR)/libudev_private_la-libudev.Tpo src/libudev/$(DEPDIR)/libudev_private_la-libudev.Plo
@@ -9652,20 +10775,6 @@ src/journal/journalctl-journal-qrcode.obj: src/journal/journal-qrcode.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(journalctl_CFLAGS) $(CFLAGS) -c -o src/journal/journalctl-journal-qrcode.obj `if test -f 'src/journal/journal-qrcode.c'; then $(CYGPATH_W) 'src/journal/journal-qrcode.c'; else $(CYGPATH_W) '$(srcdir)/src/journal/journal-qrcode.c'; fi`
-src/udev/keymap/keymap-keymap.o: src/udev/keymap/keymap.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/udev/keymap/keymap-keymap.o -MD -MP -MF src/udev/keymap/$(DEPDIR)/keymap-keymap.Tpo -c -o src/udev/keymap/keymap-keymap.o `test -f 'src/udev/keymap/keymap.c' || echo '$(srcdir)/'`src/udev/keymap/keymap.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/udev/keymap/$(DEPDIR)/keymap-keymap.Tpo src/udev/keymap/$(DEPDIR)/keymap-keymap.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev/keymap/keymap.c' object='src/udev/keymap/keymap-keymap.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/udev/keymap/keymap-keymap.o `test -f 'src/udev/keymap/keymap.c' || echo '$(srcdir)/'`src/udev/keymap/keymap.c
-
-src/udev/keymap/keymap-keymap.obj: src/udev/keymap/keymap.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/udev/keymap/keymap-keymap.obj -MD -MP -MF src/udev/keymap/$(DEPDIR)/keymap-keymap.Tpo -c -o src/udev/keymap/keymap-keymap.obj `if test -f 'src/udev/keymap/keymap.c'; then $(CYGPATH_W) 'src/udev/keymap/keymap.c'; else $(CYGPATH_W) '$(srcdir)/src/udev/keymap/keymap.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/udev/keymap/$(DEPDIR)/keymap-keymap.Tpo src/udev/keymap/$(DEPDIR)/keymap-keymap.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/udev/keymap/keymap.c' object='src/udev/keymap/keymap-keymap.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/udev/keymap/keymap-keymap.obj `if test -f 'src/udev/keymap/keymap.c'; then $(CYGPATH_W) 'src/udev/keymap/keymap.c'; else $(CYGPATH_W) '$(srcdir)/src/udev/keymap/keymap.c'; fi`
-
src/locale/localectl-localectl.o: src/locale/localectl.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(localectl_CFLAGS) $(CFLAGS) -MT src/locale/localectl-localectl.o -MD -MP -MF src/locale/$(DEPDIR)/localectl-localectl.Tpo -c -o src/locale/localectl-localectl.o `test -f 'src/locale/localectl.c' || echo '$(srcdir)/'`src/locale/localectl.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/locale/$(DEPDIR)/localectl-localectl.Tpo src/locale/$(DEPDIR)/localectl-localectl.Po
@@ -9708,6 +10817,20 @@ src/login/loginctl-sysfs-show.obj: src/login/sysfs-show.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(loginctl_CFLAGS) $(CFLAGS) -c -o src/login/loginctl-sysfs-show.obj `if test -f 'src/login/sysfs-show.c'; then $(CYGPATH_W) 'src/login/sysfs-show.c'; else $(CYGPATH_W) '$(srcdir)/src/login/sysfs-show.c'; fi`
+src/machine/machinectl-machinectl.o: src/machine/machinectl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(machinectl_CFLAGS) $(CFLAGS) -MT src/machine/machinectl-machinectl.o -MD -MP -MF src/machine/$(DEPDIR)/machinectl-machinectl.Tpo -c -o src/machine/machinectl-machinectl.o `test -f 'src/machine/machinectl.c' || echo '$(srcdir)/'`src/machine/machinectl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/machinectl-machinectl.Tpo src/machine/$(DEPDIR)/machinectl-machinectl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machinectl.c' object='src/machine/machinectl-machinectl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(machinectl_CFLAGS) $(CFLAGS) -c -o src/machine/machinectl-machinectl.o `test -f 'src/machine/machinectl.c' || echo '$(srcdir)/'`src/machine/machinectl.c
+
+src/machine/machinectl-machinectl.obj: src/machine/machinectl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(machinectl_CFLAGS) $(CFLAGS) -MT src/machine/machinectl-machinectl.obj -MD -MP -MF src/machine/$(DEPDIR)/machinectl-machinectl.Tpo -c -o src/machine/machinectl-machinectl.obj `if test -f 'src/machine/machinectl.c'; then $(CYGPATH_W) 'src/machine/machinectl.c'; else $(CYGPATH_W) '$(srcdir)/src/machine/machinectl.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/machinectl-machinectl.Tpo src/machine/$(DEPDIR)/machinectl-machinectl.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machinectl.c' object='src/machine/machinectl-machinectl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(machinectl_CFLAGS) $(CFLAGS) -c -o src/machine/machinectl-machinectl.obj `if test -f 'src/machine/machinectl.c'; then $(CYGPATH_W) 'src/machine/machinectl.c'; else $(CYGPATH_W) '$(srcdir)/src/machine/machinectl.c'; fi`
+
src/udev/mtd_probe/mtd_probe-mtd_probe.o: src/udev/mtd_probe/mtd_probe.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mtd_probe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/udev/mtd_probe/mtd_probe-mtd_probe.o -MD -MP -MF src/udev/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Tpo -c -o src/udev/mtd_probe/mtd_probe-mtd_probe.o `test -f 'src/udev/mtd_probe/mtd_probe.c' || echo '$(srcdir)/'`src/udev/mtd_probe/mtd_probe.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/udev/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Tpo src/udev/mtd_probe/$(DEPDIR)/mtd_probe-mtd_probe.Po
@@ -9820,6 +10943,20 @@ src/fsck/systemd_fsck-fsck.obj: src/fsck/fsck.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_fsck_CFLAGS) $(CFLAGS) -c -o src/fsck/systemd_fsck-fsck.obj `if test -f 'src/fsck/fsck.c'; then $(CYGPATH_W) 'src/fsck/fsck.c'; else $(CYGPATH_W) '$(srcdir)/src/fsck/fsck.c'; fi`
+src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.o: src/gpt-auto-generator/gpt-auto-generator.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_gpt_auto_generator_CFLAGS) $(CFLAGS) -MT src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.o -MD -MP -MF src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Tpo -c -o src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.o `test -f 'src/gpt-auto-generator/gpt-auto-generator.c' || echo '$(srcdir)/'`src/gpt-auto-generator/gpt-auto-generator.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Tpo src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gpt-auto-generator/gpt-auto-generator.c' object='src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_gpt_auto_generator_CFLAGS) $(CFLAGS) -c -o src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.o `test -f 'src/gpt-auto-generator/gpt-auto-generator.c' || echo '$(srcdir)/'`src/gpt-auto-generator/gpt-auto-generator.c
+
+src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.obj: src/gpt-auto-generator/gpt-auto-generator.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_gpt_auto_generator_CFLAGS) $(CFLAGS) -MT src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.obj -MD -MP -MF src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Tpo -c -o src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.obj `if test -f 'src/gpt-auto-generator/gpt-auto-generator.c'; then $(CYGPATH_W) 'src/gpt-auto-generator/gpt-auto-generator.c'; else $(CYGPATH_W) '$(srcdir)/src/gpt-auto-generator/gpt-auto-generator.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Tpo src/gpt-auto-generator/$(DEPDIR)/systemd_gpt_auto_generator-gpt-auto-generator.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/gpt-auto-generator/gpt-auto-generator.c' object='src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_gpt_auto_generator_CFLAGS) $(CFLAGS) -c -o src/gpt-auto-generator/systemd_gpt_auto_generator-gpt-auto-generator.obj `if test -f 'src/gpt-auto-generator/gpt-auto-generator.c'; then $(CYGPATH_W) 'src/gpt-auto-generator/gpt-auto-generator.c'; else $(CYGPATH_W) '$(srcdir)/src/gpt-auto-generator/gpt-auto-generator.c'; fi`
+
src/hostname/systemd_hostnamed-hostnamed.o: src/hostname/hostnamed.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_hostnamed_CFLAGS) $(CFLAGS) -MT src/hostname/systemd_hostnamed-hostnamed.o -MD -MP -MF src/hostname/$(DEPDIR)/systemd_hostnamed-hostnamed.Tpo -c -o src/hostname/systemd_hostnamed-hostnamed.o `test -f 'src/hostname/hostnamed.c' || echo '$(srcdir)/'`src/hostname/hostnamed.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/hostname/$(DEPDIR)/systemd_hostnamed-hostnamed.Tpo src/hostname/$(DEPDIR)/systemd_hostnamed-hostnamed.Po
@@ -9918,174 +11055,6 @@ src/login/systemd_logind-logind.obj: src/login/logind.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind.obj `if test -f 'src/login/logind.c'; then $(CYGPATH_W) 'src/login/logind.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind.c'; fi`
-src/login/systemd_logind-logind-dbus.o: src/login/logind-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-dbus.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-dbus.Tpo -c -o src/login/systemd_logind-logind-dbus.o `test -f 'src/login/logind-dbus.c' || echo '$(srcdir)/'`src/login/logind-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-dbus.c' object='src/login/systemd_logind-logind-dbus.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-dbus.o `test -f 'src/login/logind-dbus.c' || echo '$(srcdir)/'`src/login/logind-dbus.c
-
-src/login/systemd_logind-logind-dbus.obj: src/login/logind-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-dbus.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-dbus.Tpo -c -o src/login/systemd_logind-logind-dbus.obj `if test -f 'src/login/logind-dbus.c'; then $(CYGPATH_W) 'src/login/logind-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-dbus.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-dbus.c' object='src/login/systemd_logind-logind-dbus.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-dbus.obj `if test -f 'src/login/logind-dbus.c'; then $(CYGPATH_W) 'src/login/logind-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-dbus.c'; fi`
-
-src/login/systemd_logind-logind-device.o: src/login/logind-device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-device.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-device.Tpo -c -o src/login/systemd_logind-logind-device.o `test -f 'src/login/logind-device.c' || echo '$(srcdir)/'`src/login/logind-device.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-device.Tpo src/login/$(DEPDIR)/systemd_logind-logind-device.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-device.c' object='src/login/systemd_logind-logind-device.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-device.o `test -f 'src/login/logind-device.c' || echo '$(srcdir)/'`src/login/logind-device.c
-
-src/login/systemd_logind-logind-device.obj: src/login/logind-device.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-device.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-device.Tpo -c -o src/login/systemd_logind-logind-device.obj `if test -f 'src/login/logind-device.c'; then $(CYGPATH_W) 'src/login/logind-device.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-device.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-device.Tpo src/login/$(DEPDIR)/systemd_logind-logind-device.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-device.c' object='src/login/systemd_logind-logind-device.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-device.obj `if test -f 'src/login/logind-device.c'; then $(CYGPATH_W) 'src/login/logind-device.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-device.c'; fi`
-
-src/login/systemd_logind-logind-button.o: src/login/logind-button.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-button.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-button.Tpo -c -o src/login/systemd_logind-logind-button.o `test -f 'src/login/logind-button.c' || echo '$(srcdir)/'`src/login/logind-button.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-button.Tpo src/login/$(DEPDIR)/systemd_logind-logind-button.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-button.c' object='src/login/systemd_logind-logind-button.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-button.o `test -f 'src/login/logind-button.c' || echo '$(srcdir)/'`src/login/logind-button.c
-
-src/login/systemd_logind-logind-button.obj: src/login/logind-button.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-button.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-button.Tpo -c -o src/login/systemd_logind-logind-button.obj `if test -f 'src/login/logind-button.c'; then $(CYGPATH_W) 'src/login/logind-button.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-button.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-button.Tpo src/login/$(DEPDIR)/systemd_logind-logind-button.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-button.c' object='src/login/systemd_logind-logind-button.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-button.obj `if test -f 'src/login/logind-button.c'; then $(CYGPATH_W) 'src/login/logind-button.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-button.c'; fi`
-
-src/login/systemd_logind-logind-action.o: src/login/logind-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-action.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-action.Tpo -c -o src/login/systemd_logind-logind-action.o `test -f 'src/login/logind-action.c' || echo '$(srcdir)/'`src/login/logind-action.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-action.Tpo src/login/$(DEPDIR)/systemd_logind-logind-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-action.c' object='src/login/systemd_logind-logind-action.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-action.o `test -f 'src/login/logind-action.c' || echo '$(srcdir)/'`src/login/logind-action.c
-
-src/login/systemd_logind-logind-action.obj: src/login/logind-action.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-action.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-action.Tpo -c -o src/login/systemd_logind-logind-action.obj `if test -f 'src/login/logind-action.c'; then $(CYGPATH_W) 'src/login/logind-action.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-action.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-action.Tpo src/login/$(DEPDIR)/systemd_logind-logind-action.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-action.c' object='src/login/systemd_logind-logind-action.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-action.obj `if test -f 'src/login/logind-action.c'; then $(CYGPATH_W) 'src/login/logind-action.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-action.c'; fi`
-
-src/login/systemd_logind-logind-seat.o: src/login/logind-seat.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-seat.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-seat.Tpo -c -o src/login/systemd_logind-logind-seat.o `test -f 'src/login/logind-seat.c' || echo '$(srcdir)/'`src/login/logind-seat.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-seat.Tpo src/login/$(DEPDIR)/systemd_logind-logind-seat.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-seat.c' object='src/login/systemd_logind-logind-seat.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-seat.o `test -f 'src/login/logind-seat.c' || echo '$(srcdir)/'`src/login/logind-seat.c
-
-src/login/systemd_logind-logind-seat.obj: src/login/logind-seat.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-seat.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-seat.Tpo -c -o src/login/systemd_logind-logind-seat.obj `if test -f 'src/login/logind-seat.c'; then $(CYGPATH_W) 'src/login/logind-seat.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-seat.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-seat.Tpo src/login/$(DEPDIR)/systemd_logind-logind-seat.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-seat.c' object='src/login/systemd_logind-logind-seat.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-seat.obj `if test -f 'src/login/logind-seat.c'; then $(CYGPATH_W) 'src/login/logind-seat.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-seat.c'; fi`
-
-src/login/systemd_logind-logind-session.o: src/login/logind-session.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-session.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-session.Tpo -c -o src/login/systemd_logind-logind-session.o `test -f 'src/login/logind-session.c' || echo '$(srcdir)/'`src/login/logind-session.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-session.Tpo src/login/$(DEPDIR)/systemd_logind-logind-session.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session.c' object='src/login/systemd_logind-logind-session.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-session.o `test -f 'src/login/logind-session.c' || echo '$(srcdir)/'`src/login/logind-session.c
-
-src/login/systemd_logind-logind-session.obj: src/login/logind-session.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-session.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-session.Tpo -c -o src/login/systemd_logind-logind-session.obj `if test -f 'src/login/logind-session.c'; then $(CYGPATH_W) 'src/login/logind-session.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-session.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-session.Tpo src/login/$(DEPDIR)/systemd_logind-logind-session.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session.c' object='src/login/systemd_logind-logind-session.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-session.obj `if test -f 'src/login/logind-session.c'; then $(CYGPATH_W) 'src/login/logind-session.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-session.c'; fi`
-
-src/login/systemd_logind-logind-user.o: src/login/logind-user.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-user.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-user.Tpo -c -o src/login/systemd_logind-logind-user.o `test -f 'src/login/logind-user.c' || echo '$(srcdir)/'`src/login/logind-user.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-user.Tpo src/login/$(DEPDIR)/systemd_logind-logind-user.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-user.c' object='src/login/systemd_logind-logind-user.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-user.o `test -f 'src/login/logind-user.c' || echo '$(srcdir)/'`src/login/logind-user.c
-
-src/login/systemd_logind-logind-user.obj: src/login/logind-user.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-user.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-user.Tpo -c -o src/login/systemd_logind-logind-user.obj `if test -f 'src/login/logind-user.c'; then $(CYGPATH_W) 'src/login/logind-user.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-user.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-user.Tpo src/login/$(DEPDIR)/systemd_logind-logind-user.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-user.c' object='src/login/systemd_logind-logind-user.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-user.obj `if test -f 'src/login/logind-user.c'; then $(CYGPATH_W) 'src/login/logind-user.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-user.c'; fi`
-
-src/login/systemd_logind-logind-inhibit.o: src/login/logind-inhibit.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-inhibit.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Tpo -c -o src/login/systemd_logind-logind-inhibit.o `test -f 'src/login/logind-inhibit.c' || echo '$(srcdir)/'`src/login/logind-inhibit.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Tpo src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-inhibit.c' object='src/login/systemd_logind-logind-inhibit.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-inhibit.o `test -f 'src/login/logind-inhibit.c' || echo '$(srcdir)/'`src/login/logind-inhibit.c
-
-src/login/systemd_logind-logind-inhibit.obj: src/login/logind-inhibit.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-inhibit.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Tpo -c -o src/login/systemd_logind-logind-inhibit.obj `if test -f 'src/login/logind-inhibit.c'; then $(CYGPATH_W) 'src/login/logind-inhibit.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-inhibit.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Tpo src/login/$(DEPDIR)/systemd_logind-logind-inhibit.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-inhibit.c' object='src/login/systemd_logind-logind-inhibit.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-inhibit.obj `if test -f 'src/login/logind-inhibit.c'; then $(CYGPATH_W) 'src/login/logind-inhibit.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-inhibit.c'; fi`
-
-src/login/systemd_logind-logind-session-dbus.o: src/login/logind-session-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-session-dbus.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Tpo -c -o src/login/systemd_logind-logind-session-dbus.o `test -f 'src/login/logind-session-dbus.c' || echo '$(srcdir)/'`src/login/logind-session-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session-dbus.c' object='src/login/systemd_logind-logind-session-dbus.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-session-dbus.o `test -f 'src/login/logind-session-dbus.c' || echo '$(srcdir)/'`src/login/logind-session-dbus.c
-
-src/login/systemd_logind-logind-session-dbus.obj: src/login/logind-session-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-session-dbus.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Tpo -c -o src/login/systemd_logind-logind-session-dbus.obj `if test -f 'src/login/logind-session-dbus.c'; then $(CYGPATH_W) 'src/login/logind-session-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-session-dbus.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-session-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-session-dbus.c' object='src/login/systemd_logind-logind-session-dbus.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-session-dbus.obj `if test -f 'src/login/logind-session-dbus.c'; then $(CYGPATH_W) 'src/login/logind-session-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-session-dbus.c'; fi`
-
-src/login/systemd_logind-logind-seat-dbus.o: src/login/logind-seat-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-seat-dbus.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Tpo -c -o src/login/systemd_logind-logind-seat-dbus.o `test -f 'src/login/logind-seat-dbus.c' || echo '$(srcdir)/'`src/login/logind-seat-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-seat-dbus.c' object='src/login/systemd_logind-logind-seat-dbus.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-seat-dbus.o `test -f 'src/login/logind-seat-dbus.c' || echo '$(srcdir)/'`src/login/logind-seat-dbus.c
-
-src/login/systemd_logind-logind-seat-dbus.obj: src/login/logind-seat-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-seat-dbus.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Tpo -c -o src/login/systemd_logind-logind-seat-dbus.obj `if test -f 'src/login/logind-seat-dbus.c'; then $(CYGPATH_W) 'src/login/logind-seat-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-seat-dbus.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-seat-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-seat-dbus.c' object='src/login/systemd_logind-logind-seat-dbus.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-seat-dbus.obj `if test -f 'src/login/logind-seat-dbus.c'; then $(CYGPATH_W) 'src/login/logind-seat-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-seat-dbus.c'; fi`
-
-src/login/systemd_logind-logind-user-dbus.o: src/login/logind-user-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-user-dbus.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Tpo -c -o src/login/systemd_logind-logind-user-dbus.o `test -f 'src/login/logind-user-dbus.c' || echo '$(srcdir)/'`src/login/logind-user-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-user-dbus.c' object='src/login/systemd_logind-logind-user-dbus.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-user-dbus.o `test -f 'src/login/logind-user-dbus.c' || echo '$(srcdir)/'`src/login/logind-user-dbus.c
-
-src/login/systemd_logind-logind-user-dbus.obj: src/login/logind-user-dbus.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-user-dbus.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Tpo -c -o src/login/systemd_logind-logind-user-dbus.obj `if test -f 'src/login/logind-user-dbus.c'; then $(CYGPATH_W) 'src/login/logind-user-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-user-dbus.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Tpo src/login/$(DEPDIR)/systemd_logind-logind-user-dbus.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-user-dbus.c' object='src/login/systemd_logind-logind-user-dbus.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-user-dbus.obj `if test -f 'src/login/logind-user-dbus.c'; then $(CYGPATH_W) 'src/login/logind-user-dbus.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-user-dbus.c'; fi`
-
-src/login/systemd_logind-logind-acl.o: src/login/logind-acl.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-acl.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-acl.Tpo -c -o src/login/systemd_logind-logind-acl.o `test -f 'src/login/logind-acl.c' || echo '$(srcdir)/'`src/login/logind-acl.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-acl.Tpo src/login/$(DEPDIR)/systemd_logind-logind-acl.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-acl.c' object='src/login/systemd_logind-logind-acl.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-acl.o `test -f 'src/login/logind-acl.c' || echo '$(srcdir)/'`src/login/logind-acl.c
-
-src/login/systemd_logind-logind-acl.obj: src/login/logind-acl.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-acl.obj -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-acl.Tpo -c -o src/login/systemd_logind-logind-acl.obj `if test -f 'src/login/logind-acl.c'; then $(CYGPATH_W) 'src/login/logind-acl.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-acl.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-acl.Tpo src/login/$(DEPDIR)/systemd_logind-logind-acl.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/logind-acl.c' object='src/login/systemd_logind-logind-acl.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-acl.obj `if test -f 'src/login/logind-acl.c'; then $(CYGPATH_W) 'src/login/logind-acl.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-acl.c'; fi`
-
src/login/systemd_logind-logind-gperf.o: src/login/logind-gperf.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -MT src/login/systemd_logind-logind-gperf.o -MD -MP -MF src/login/$(DEPDIR)/systemd_logind-logind-gperf.Tpo -c -o src/login/systemd_logind-logind-gperf.o `test -f 'src/login/logind-gperf.c' || echo '$(srcdir)/'`src/login/logind-gperf.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/systemd_logind-logind-gperf.Tpo src/login/$(DEPDIR)/systemd_logind-logind-gperf.Po
@@ -10100,6 +11069,20 @@ src/login/systemd_logind-logind-gperf.obj: src/login/logind-gperf.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_logind_CFLAGS) $(CFLAGS) -c -o src/login/systemd_logind-logind-gperf.obj `if test -f 'src/login/logind-gperf.c'; then $(CYGPATH_W) 'src/login/logind-gperf.c'; else $(CYGPATH_W) '$(srcdir)/src/login/logind-gperf.c'; fi`
+src/machine/systemd_machined-machined.o: src/machine/machined.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_machined_CFLAGS) $(CFLAGS) -MT src/machine/systemd_machined-machined.o -MD -MP -MF src/machine/$(DEPDIR)/systemd_machined-machined.Tpo -c -o src/machine/systemd_machined-machined.o `test -f 'src/machine/machined.c' || echo '$(srcdir)/'`src/machine/machined.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/systemd_machined-machined.Tpo src/machine/$(DEPDIR)/systemd_machined-machined.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machined.c' object='src/machine/systemd_machined-machined.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_machined_CFLAGS) $(CFLAGS) -c -o src/machine/systemd_machined-machined.o `test -f 'src/machine/machined.c' || echo '$(srcdir)/'`src/machine/machined.c
+
+src/machine/systemd_machined-machined.obj: src/machine/machined.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_machined_CFLAGS) $(CFLAGS) -MT src/machine/systemd_machined-machined.obj -MD -MP -MF src/machine/$(DEPDIR)/systemd_machined-machined.Tpo -c -o src/machine/systemd_machined-machined.obj `if test -f 'src/machine/machined.c'; then $(CYGPATH_W) 'src/machine/machined.c'; else $(CYGPATH_W) '$(srcdir)/src/machine/machined.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/systemd_machined-machined.Tpo src/machine/$(DEPDIR)/systemd_machined-machined.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/machined.c' object='src/machine/systemd_machined-machined.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_machined_CFLAGS) $(CFLAGS) -c -o src/machine/systemd_machined-machined.obj `if test -f 'src/machine/machined.c'; then $(CYGPATH_W) 'src/machine/machined.c'; else $(CYGPATH_W) '$(srcdir)/src/machine/machined.c'; fi`
+
src/modules-load/systemd_modules_load-modules-load.o: src/modules-load/modules-load.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(systemd_modules_load_CFLAGS) $(CFLAGS) -MT src/modules-load/systemd_modules_load-modules-load.o -MD -MP -MF src/modules-load/$(DEPDIR)/systemd_modules_load-modules-load.Tpo -c -o src/modules-load/systemd_modules_load-modules-load.o `test -f 'src/modules-load/modules-load.c' || echo '$(srcdir)/'`src/modules-load/modules-load.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/modules-load/$(DEPDIR)/systemd_modules_load-modules-load.Tpo src/modules-load/$(DEPDIR)/systemd_modules_load-modules-load.Po
@@ -10170,6 +11153,34 @@ src/libsystemd-bus/test_bus_kernel-test-bus-kernel.obj: src/libsystemd-bus/test-
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_kernel-test-bus-kernel.obj `if test -f 'src/libsystemd-bus/test-bus-kernel.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-kernel.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-kernel.c'; fi`
+src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.o: src/libsystemd-bus/test-bus-kernel-benchmark.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_benchmark_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.o -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Tpo -c -o src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.o `test -f 'src/libsystemd-bus/test-bus-kernel-benchmark.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-kernel-benchmark.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-kernel-benchmark.c' object='src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_benchmark_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.o `test -f 'src/libsystemd-bus/test-bus-kernel-benchmark.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-kernel-benchmark.c
+
+src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.obj: src/libsystemd-bus/test-bus-kernel-benchmark.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_benchmark_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.obj -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Tpo -c -o src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.obj `if test -f 'src/libsystemd-bus/test-bus-kernel-benchmark.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-kernel-benchmark.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-kernel-benchmark.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_benchmark-test-bus-kernel-benchmark.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-kernel-benchmark.c' object='src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_benchmark_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_kernel_benchmark-test-bus-kernel-benchmark.obj `if test -f 'src/libsystemd-bus/test-bus-kernel-benchmark.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-kernel-benchmark.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-kernel-benchmark.c'; fi`
+
+src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.o: src/libsystemd-bus/test-bus-kernel-bloom.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_bloom_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.o -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Tpo -c -o src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.o `test -f 'src/libsystemd-bus/test-bus-kernel-bloom.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-kernel-bloom.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-kernel-bloom.c' object='src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_bloom_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.o `test -f 'src/libsystemd-bus/test-bus-kernel-bloom.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-kernel-bloom.c
+
+src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.obj: src/libsystemd-bus/test-bus-kernel-bloom.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_bloom_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.obj -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Tpo -c -o src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.obj `if test -f 'src/libsystemd-bus/test-bus-kernel-bloom.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-kernel-bloom.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-kernel-bloom.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_kernel_bloom-test-bus-kernel-bloom.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-kernel-bloom.c' object='src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_kernel_bloom_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_kernel_bloom-test-bus-kernel-bloom.obj `if test -f 'src/libsystemd-bus/test-bus-kernel-bloom.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-kernel-bloom.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-kernel-bloom.c'; fi`
+
src/libsystemd-bus/test_bus_marshal-test-bus-marshal.o: src/libsystemd-bus/test-bus-marshal.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_marshal_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_marshal-test-bus-marshal.o -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_marshal-test-bus-marshal.Tpo -c -o src/libsystemd-bus/test_bus_marshal-test-bus-marshal.o `test -f 'src/libsystemd-bus/test-bus-marshal.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-marshal.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_marshal-test-bus-marshal.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_marshal-test-bus-marshal.Po
@@ -10198,6 +11209,20 @@ src/libsystemd-bus/test_bus_match-test-bus-match.obj: src/libsystemd-bus/test-bu
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_match_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_match-test-bus-match.obj `if test -f 'src/libsystemd-bus/test-bus-match.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-match.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-match.c'; fi`
+src/libsystemd-bus/test_bus_memfd-test-bus-memfd.o: src/libsystemd-bus/test-bus-memfd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_memfd_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_memfd-test-bus-memfd.o -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Tpo -c -o src/libsystemd-bus/test_bus_memfd-test-bus-memfd.o `test -f 'src/libsystemd-bus/test-bus-memfd.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-memfd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-memfd.c' object='src/libsystemd-bus/test_bus_memfd-test-bus-memfd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_memfd_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_memfd-test-bus-memfd.o `test -f 'src/libsystemd-bus/test-bus-memfd.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-memfd.c
+
+src/libsystemd-bus/test_bus_memfd-test-bus-memfd.obj: src/libsystemd-bus/test-bus-memfd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_memfd_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_memfd-test-bus-memfd.obj -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Tpo -c -o src/libsystemd-bus/test_bus_memfd-test-bus-memfd.obj `if test -f 'src/libsystemd-bus/test-bus-memfd.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-memfd.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-memfd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_memfd-test-bus-memfd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-memfd.c' object='src/libsystemd-bus/test_bus_memfd-test-bus-memfd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_memfd_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_memfd-test-bus-memfd.obj `if test -f 'src/libsystemd-bus/test-bus-memfd.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-memfd.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-memfd.c'; fi`
+
src/libsystemd-bus/test_bus_server-test-bus-server.o: src/libsystemd-bus/test-bus-server.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_server_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_server-test-bus-server.o -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_server-test-bus-server.Tpo -c -o src/libsystemd-bus/test_bus_server-test-bus-server.o `test -f 'src/libsystemd-bus/test-bus-server.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-server.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_server-test-bus-server.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_server-test-bus-server.Po
@@ -10212,6 +11237,34 @@ src/libsystemd-bus/test_bus_server-test-bus-server.obj: src/libsystemd-bus/test-
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_server_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_server-test-bus-server.obj `if test -f 'src/libsystemd-bus/test-bus-server.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-server.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-server.c'; fi`
+src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.o: src/libsystemd-bus/test-bus-zero-copy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_zero_copy_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.o -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Tpo -c -o src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.o `test -f 'src/libsystemd-bus/test-bus-zero-copy.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-zero-copy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-zero-copy.c' object='src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_zero_copy_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.o `test -f 'src/libsystemd-bus/test-bus-zero-copy.c' || echo '$(srcdir)/'`src/libsystemd-bus/test-bus-zero-copy.c
+
+src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.obj: src/libsystemd-bus/test-bus-zero-copy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_zero_copy_CFLAGS) $(CFLAGS) -MT src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.obj -MD -MP -MF src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Tpo -c -o src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.obj `if test -f 'src/libsystemd-bus/test-bus-zero-copy.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-zero-copy.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-zero-copy.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Tpo src/libsystemd-bus/$(DEPDIR)/test_bus_zero_copy-test-bus-zero-copy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libsystemd-bus/test-bus-zero-copy.c' object='src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_bus_zero_copy_CFLAGS) $(CFLAGS) -c -o src/libsystemd-bus/test_bus_zero_copy-test-bus-zero-copy.obj `if test -f 'src/libsystemd-bus/test-bus-zero-copy.c'; then $(CYGPATH_W) 'src/libsystemd-bus/test-bus-zero-copy.c'; else $(CYGPATH_W) '$(srcdir)/src/libsystemd-bus/test-bus-zero-copy.c'; fi`
+
+src/journal/test_catalog-test-catalog.o: src/journal/test-catalog.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_catalog_CFLAGS) $(CFLAGS) -MT src/journal/test_catalog-test-catalog.o -MD -MP -MF src/journal/$(DEPDIR)/test_catalog-test-catalog.Tpo -c -o src/journal/test_catalog-test-catalog.o `test -f 'src/journal/test-catalog.c' || echo '$(srcdir)/'`src/journal/test-catalog.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/journal/$(DEPDIR)/test_catalog-test-catalog.Tpo src/journal/$(DEPDIR)/test_catalog-test-catalog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/journal/test-catalog.c' object='src/journal/test_catalog-test-catalog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_catalog_CFLAGS) $(CFLAGS) -c -o src/journal/test_catalog-test-catalog.o `test -f 'src/journal/test-catalog.c' || echo '$(srcdir)/'`src/journal/test-catalog.c
+
+src/journal/test_catalog-test-catalog.obj: src/journal/test-catalog.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_catalog_CFLAGS) $(CFLAGS) -MT src/journal/test_catalog-test-catalog.obj -MD -MP -MF src/journal/$(DEPDIR)/test_catalog-test-catalog.Tpo -c -o src/journal/test_catalog-test-catalog.obj `if test -f 'src/journal/test-catalog.c'; then $(CYGPATH_W) 'src/journal/test-catalog.c'; else $(CYGPATH_W) '$(srcdir)/src/journal/test-catalog.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/journal/$(DEPDIR)/test_catalog-test-catalog.Tpo src/journal/$(DEPDIR)/test_catalog-test-catalog.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/journal/test-catalog.c' object='src/journal/test_catalog-test-catalog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_catalog_CFLAGS) $(CFLAGS) -c -o src/journal/test_catalog-test-catalog.obj `if test -f 'src/journal/test-catalog.c'; then $(CYGPATH_W) 'src/journal/test-catalog.c'; else $(CYGPATH_W) '$(srcdir)/src/journal/test-catalog.c'; fi`
+
src/test/test_engine-test-engine.o: src/test/test-engine.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_engine_CFLAGS) $(CFLAGS) -MT src/test/test_engine-test-engine.o -MD -MP -MF src/test/$(DEPDIR)/test_engine-test-engine.Tpo -c -o src/test/test_engine-test-engine.o `test -f 'src/test/test-engine.c' || echo '$(srcdir)/'`src/test/test-engine.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_engine-test-engine.Tpo src/test/$(DEPDIR)/test_engine-test-engine.Po
@@ -10296,6 +11349,62 @@ src/test/test_job_type-test-job-type.obj: src/test/test-job-type.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_job_type_CFLAGS) $(CFLAGS) -c -o src/test/test_job_type-test-job-type.obj `if test -f 'src/test/test-job-type.c'; then $(CYGPATH_W) 'src/test/test-job-type.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-job-type.c'; fi`
+src/test/test_list-test-list.o: src/test/test-list.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_list_CFLAGS) $(CFLAGS) -MT src/test/test_list-test-list.o -MD -MP -MF src/test/$(DEPDIR)/test_list-test-list.Tpo -c -o src/test/test_list-test-list.o `test -f 'src/test/test-list.c' || echo '$(srcdir)/'`src/test/test-list.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_list-test-list.Tpo src/test/$(DEPDIR)/test_list-test-list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-list.c' object='src/test/test_list-test-list.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_list_CFLAGS) $(CFLAGS) -c -o src/test/test_list-test-list.o `test -f 'src/test/test-list.c' || echo '$(srcdir)/'`src/test/test-list.c
+
+src/test/test_list-test-list.obj: src/test/test-list.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_list_CFLAGS) $(CFLAGS) -MT src/test/test_list-test-list.obj -MD -MP -MF src/test/$(DEPDIR)/test_list-test-list.Tpo -c -o src/test/test_list-test-list.obj `if test -f 'src/test/test-list.c'; then $(CYGPATH_W) 'src/test/test-list.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-list.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_list-test-list.Tpo src/test/$(DEPDIR)/test_list-test-list.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-list.c' object='src/test/test_list-test-list.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_list_CFLAGS) $(CFLAGS) -c -o src/test/test_list-test-list.obj `if test -f 'src/test/test-list.c'; then $(CYGPATH_W) 'src/test/test-list.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-list.c'; fi`
+
+src/login/test_login_tables-test-login-tables.o: src/login/test-login-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_login_tables_CFLAGS) $(CFLAGS) -MT src/login/test_login_tables-test-login-tables.o -MD -MP -MF src/login/$(DEPDIR)/test_login_tables-test-login-tables.Tpo -c -o src/login/test_login_tables-test-login-tables.o `test -f 'src/login/test-login-tables.c' || echo '$(srcdir)/'`src/login/test-login-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/test_login_tables-test-login-tables.Tpo src/login/$(DEPDIR)/test_login_tables-test-login-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/test-login-tables.c' object='src/login/test_login_tables-test-login-tables.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_login_tables_CFLAGS) $(CFLAGS) -c -o src/login/test_login_tables-test-login-tables.o `test -f 'src/login/test-login-tables.c' || echo '$(srcdir)/'`src/login/test-login-tables.c
+
+src/login/test_login_tables-test-login-tables.obj: src/login/test-login-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_login_tables_CFLAGS) $(CFLAGS) -MT src/login/test_login_tables-test-login-tables.obj -MD -MP -MF src/login/$(DEPDIR)/test_login_tables-test-login-tables.Tpo -c -o src/login/test_login_tables-test-login-tables.obj `if test -f 'src/login/test-login-tables.c'; then $(CYGPATH_W) 'src/login/test-login-tables.c'; else $(CYGPATH_W) '$(srcdir)/src/login/test-login-tables.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/login/$(DEPDIR)/test_login_tables-test-login-tables.Tpo src/login/$(DEPDIR)/test_login_tables-test-login-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/login/test-login-tables.c' object='src/login/test_login_tables-test-login-tables.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_login_tables_CFLAGS) $(CFLAGS) -c -o src/login/test_login_tables-test-login-tables.obj `if test -f 'src/login/test-login-tables.c'; then $(CYGPATH_W) 'src/login/test-login-tables.c'; else $(CYGPATH_W) '$(srcdir)/src/login/test-login-tables.c'; fi`
+
+src/machine/test_machine_tables-test-machine-tables.o: src/machine/test-machine-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_machine_tables_CFLAGS) $(CFLAGS) -MT src/machine/test_machine_tables-test-machine-tables.o -MD -MP -MF src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Tpo -c -o src/machine/test_machine_tables-test-machine-tables.o `test -f 'src/machine/test-machine-tables.c' || echo '$(srcdir)/'`src/machine/test-machine-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Tpo src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/test-machine-tables.c' object='src/machine/test_machine_tables-test-machine-tables.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_machine_tables_CFLAGS) $(CFLAGS) -c -o src/machine/test_machine_tables-test-machine-tables.o `test -f 'src/machine/test-machine-tables.c' || echo '$(srcdir)/'`src/machine/test-machine-tables.c
+
+src/machine/test_machine_tables-test-machine-tables.obj: src/machine/test-machine-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_machine_tables_CFLAGS) $(CFLAGS) -MT src/machine/test_machine_tables-test-machine-tables.obj -MD -MP -MF src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Tpo -c -o src/machine/test_machine_tables-test-machine-tables.obj `if test -f 'src/machine/test-machine-tables.c'; then $(CYGPATH_W) 'src/machine/test-machine-tables.c'; else $(CYGPATH_W) '$(srcdir)/src/machine/test-machine-tables.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Tpo src/machine/$(DEPDIR)/test_machine_tables-test-machine-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/machine/test-machine-tables.c' object='src/machine/test_machine_tables-test-machine-tables.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_machine_tables_CFLAGS) $(CFLAGS) -c -o src/machine/test_machine_tables-test-machine-tables.obj `if test -f 'src/machine/test-machine-tables.c'; then $(CYGPATH_W) 'src/machine/test-machine-tables.c'; else $(CYGPATH_W) '$(srcdir)/src/machine/test-machine-tables.c'; fi`
+
+src/test/test_ns-test-ns.o: src/test/test-ns.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ns_CFLAGS) $(CFLAGS) -MT src/test/test_ns-test-ns.o -MD -MP -MF src/test/$(DEPDIR)/test_ns-test-ns.Tpo -c -o src/test/test_ns-test-ns.o `test -f 'src/test/test-ns.c' || echo '$(srcdir)/'`src/test/test-ns.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_ns-test-ns.Tpo src/test/$(DEPDIR)/test_ns-test-ns.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-ns.c' object='src/test/test_ns-test-ns.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ns_CFLAGS) $(CFLAGS) -c -o src/test/test_ns-test-ns.o `test -f 'src/test/test-ns.c' || echo '$(srcdir)/'`src/test/test-ns.c
+
+src/test/test_ns-test-ns.obj: src/test/test-ns.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ns_CFLAGS) $(CFLAGS) -MT src/test/test_ns-test-ns.obj -MD -MP -MF src/test/$(DEPDIR)/test_ns-test-ns.Tpo -c -o src/test/test_ns-test-ns.obj `if test -f 'src/test/test-ns.c'; then $(CYGPATH_W) 'src/test/test-ns.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-ns.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_ns-test-ns.Tpo src/test/$(DEPDIR)/test_ns-test-ns.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-ns.c' object='src/test/test_ns-test-ns.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ns_CFLAGS) $(CFLAGS) -c -o src/test/test_ns-test-ns.obj `if test -f 'src/test/test-ns.c'; then $(CYGPATH_W) 'src/test/test-ns.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-ns.c'; fi`
+
src/test/test_prioq-test-prioq.o: src/test/test-prioq.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prioq_CFLAGS) $(CFLAGS) -MT src/test/test_prioq-test-prioq.o -MD -MP -MF src/test/$(DEPDIR)/test_prioq-test-prioq.Tpo -c -o src/test/test_prioq-test-prioq.o `test -f 'src/test/test-prioq.c' || echo '$(srcdir)/'`src/test/test-prioq.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_prioq-test-prioq.Tpo src/test/$(DEPDIR)/test_prioq-test-prioq.Po
@@ -10324,6 +11433,20 @@ src/test/test_sched_prio-test-sched-prio.obj: src/test/test-sched-prio.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sched_prio_CFLAGS) $(CFLAGS) -c -o src/test/test_sched_prio-test-sched-prio.obj `if test -f 'src/test/test-sched-prio.c'; then $(CYGPATH_W) 'src/test/test-sched-prio.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-sched-prio.c'; fi`
+src/test/test_tables-test-tables.o: src/test/test-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tables_CFLAGS) $(CFLAGS) -MT src/test/test_tables-test-tables.o -MD -MP -MF src/test/$(DEPDIR)/test_tables-test-tables.Tpo -c -o src/test/test_tables-test-tables.o `test -f 'src/test/test-tables.c' || echo '$(srcdir)/'`src/test/test-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_tables-test-tables.Tpo src/test/$(DEPDIR)/test_tables-test-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-tables.c' object='src/test/test_tables-test-tables.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tables_CFLAGS) $(CFLAGS) -c -o src/test/test_tables-test-tables.o `test -f 'src/test/test-tables.c' || echo '$(srcdir)/'`src/test/test-tables.c
+
+src/test/test_tables-test-tables.obj: src/test/test-tables.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tables_CFLAGS) $(CFLAGS) -MT src/test/test_tables-test-tables.obj -MD -MP -MF src/test/$(DEPDIR)/test_tables-test-tables.Tpo -c -o src/test/test_tables-test-tables.obj `if test -f 'src/test/test-tables.c'; then $(CYGPATH_W) 'src/test/test-tables.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-tables.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_tables-test-tables.Tpo src/test/$(DEPDIR)/test_tables-test-tables.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-tables.c' object='src/test/test_tables-test-tables.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tables_CFLAGS) $(CFLAGS) -c -o src/test/test_tables-test-tables.obj `if test -f 'src/test/test-tables.c'; then $(CYGPATH_W) 'src/test/test-tables.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-tables.c'; fi`
+
src/test/test_time-test-time.o: src/test/test-time.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_time_CFLAGS) $(CFLAGS) -MT src/test/test_time-test-time.o -MD -MP -MF src/test/$(DEPDIR)/test_time-test-time.Tpo -c -o src/test/test_time-test-time.o `test -f 'src/test/test-time.c' || echo '$(srcdir)/'`src/test/test-time.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_time-test-time.Tpo src/test/$(DEPDIR)/test_time-test-time.Po
@@ -10366,6 +11489,20 @@ src/test/test_unit_name-test-unit-name.obj: src/test/test-unit-name.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_unit_name_CFLAGS) $(CFLAGS) -c -o src/test/test_unit_name-test-unit-name.obj `if test -f 'src/test/test-unit-name.c'; then $(CYGPATH_W) 'src/test/test-unit-name.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-unit-name.c'; fi`
+src/test/test_utf8-test-utf8.o: src/test/test-utf8.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utf8_CFLAGS) $(CFLAGS) -MT src/test/test_utf8-test-utf8.o -MD -MP -MF src/test/$(DEPDIR)/test_utf8-test-utf8.Tpo -c -o src/test/test_utf8-test-utf8.o `test -f 'src/test/test-utf8.c' || echo '$(srcdir)/'`src/test/test-utf8.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_utf8-test-utf8.Tpo src/test/$(DEPDIR)/test_utf8-test-utf8.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-utf8.c' object='src/test/test_utf8-test-utf8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utf8_CFLAGS) $(CFLAGS) -c -o src/test/test_utf8-test-utf8.o `test -f 'src/test/test-utf8.c' || echo '$(srcdir)/'`src/test/test-utf8.c
+
+src/test/test_utf8-test-utf8.obj: src/test/test-utf8.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utf8_CFLAGS) $(CFLAGS) -MT src/test/test_utf8-test-utf8.obj -MD -MP -MF src/test/$(DEPDIR)/test_utf8-test-utf8.Tpo -c -o src/test/test_utf8-test-utf8.obj `if test -f 'src/test/test-utf8.c'; then $(CYGPATH_W) 'src/test/test-utf8.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-utf8.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_utf8-test-utf8.Tpo src/test/$(DEPDIR)/test_utf8-test-utf8.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/test/test-utf8.c' object='src/test/test_utf8-test-utf8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utf8_CFLAGS) $(CFLAGS) -c -o src/test/test_utf8-test-utf8.obj `if test -f 'src/test/test-utf8.c'; then $(CYGPATH_W) 'src/test/test-utf8.c'; else $(CYGPATH_W) '$(srcdir)/src/test/test-utf8.c'; fi`
+
src/test/test_util-test-util.o: src/test/test-util.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_util_CFLAGS) $(CFLAGS) -MT src/test/test_util-test-util.o -MD -MP -MF src/test/$(DEPDIR)/test_util-test-util.Tpo -c -o src/test/test_util-test-util.o `test -f 'src/test/test-util.c' || echo '$(srcdir)/'`src/test/test-util.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/test_util-test-util.Tpo src/test/$(DEPDIR)/test_util-test-util.Po
@@ -10407,6 +11544,7 @@ clean-libtool:
-rm -rf src/libsystemd-id128/.libs src/libsystemd-id128/_libs
-rm -rf src/libudev/.libs src/libudev/_libs
-rm -rf src/login/.libs src/login/_libs
+ -rm -rf src/machine/.libs src/machine/_libs
-rm -rf src/nss-myhostname/.libs src/nss-myhostname/_libs
-rm -rf src/python-systemd/.libs src/python-systemd/_libs
-rm -rf src/shared/.libs src/shared/_libs
@@ -10824,6 +11962,27 @@ uninstall-dist_gatewayddocumentrootDATA:
@list='$(dist_gatewayddocumentroot_DATA)'; test -n "$(gatewayddocumentrootdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(gatewayddocumentrootdir)'; $(am__uninstall_files_from_dir)
+install-dist_pamconfDATA: $(dist_pamconf_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_pamconf_DATA)'; test -n "$(pamconfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pamconfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pamconfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pamconfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pamconfdir)" || exit $$?; \
+ done
+
+uninstall-dist_pamconfDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_pamconf_DATA)'; test -n "$(pamconfdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pamconfdir)'; $(am__uninstall_files_from_dir)
install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
@$(NORMAL_INSTALL)
@list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
@@ -10971,48 +12130,6 @@ uninstall-dist_udevhwdbDATA:
@list='$(dist_udevhwdb_DATA)'; test -n "$(udevhwdbdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(udevhwdbdir)'; $(am__uninstall_files_from_dir)
-install-dist_udevkeymapDATA: $(dist_udevkeymap_DATA)
- @$(NORMAL_INSTALL)
- @list='$(dist_udevkeymap_DATA)'; test -n "$(udevkeymapdir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(udevkeymapdir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(udevkeymapdir)" || exit 1; \
- fi; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevkeymapdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(udevkeymapdir)" || exit $$?; \
- done
-
-uninstall-dist_udevkeymapDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_udevkeymap_DATA)'; test -n "$(udevkeymapdir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- dir='$(DESTDIR)$(udevkeymapdir)'; $(am__uninstall_files_from_dir)
-install-dist_udevkeymapforcerelDATA: $(dist_udevkeymapforcerel_DATA)
- @$(NORMAL_INSTALL)
- @list='$(dist_udevkeymapforcerel_DATA)'; test -n "$(udevkeymapforcereldir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(udevkeymapforcereldir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(udevkeymapforcereldir)" || exit 1; \
- fi; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevkeymapforcereldir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(udevkeymapforcereldir)" || exit $$?; \
- done
-
-uninstall-dist_udevkeymapforcerelDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(dist_udevkeymapforcerel_DATA)'; test -n "$(udevkeymapforcereldir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- dir='$(DESTDIR)$(udevkeymapforcereldir)'; $(am__uninstall_files_from_dir)
install-dist_udevrulesDATA: $(dist_udevrules_DATA)
@$(NORMAL_INSTALL)
@list='$(dist_udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \
@@ -11055,6 +12172,27 @@ uninstall-dist_userunitDATA:
@list='$(dist_userunit_DATA)'; test -n "$(userunitdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(userunitdir)'; $(am__uninstall_files_from_dir)
+install-dist_zshcompletionDATA: $(dist_zshcompletion_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_zshcompletion_DATA)'; test -n "$(zshcompletiondir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(zshcompletiondir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(zshcompletiondir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(zshcompletiondir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(zshcompletiondir)" || exit $$?; \
+ done
+
+uninstall-dist_zshcompletionDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_zshcompletion_DATA)'; test -n "$(zshcompletiondir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(zshcompletiondir)'; $(am__uninstall_files_from_dir)
install-girDATA: $(gir_DATA)
@$(NORMAL_INSTALL)
@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
@@ -11399,13 +12537,12 @@ uninstall-pkgincludeHEADERS:
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
case "$@" in \
@@ -11508,7 +12645,7 @@ distclean-tags:
$(MAKE) $(AM_MAKEFLAGS) $<
# Leading 'am--fnord' is there to ensure the list of targets does not
-# exand to empty, as could happen e.g. with make check TESTS=''.
+# expand to empty, as could happen e.g. with make check TESTS=''.
am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
am--force-recheck:
@:
@@ -11654,13 +12791,6 @@ test/rules-test.sh.log: test/rules-test.sh
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-src/udev/keymap/check-keymaps.sh.log: src/udev/keymap/check-keymaps.sh
- @p='src/udev/keymap/check-keymaps.sh'; \
- b='src/udev/keymap/check-keymaps.sh'; \
- $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
test-job-type.log: test-job-type$(EXEEXT)
@p='test-job-type$(EXEEXT)'; \
b='test-job-type'; \
@@ -11717,6 +12847,13 @@ test-unit-file.log: test-unit-file$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-utf8.log: test-utf8$(EXEEXT)
+ @p='test-utf8$(EXEEXT)'; \
+ b='test-utf8'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
test-util.log: test-util$(EXEEXT)
@p='test-util$(EXEEXT)'; \
b='test-util'; \
@@ -11801,6 +12938,27 @@ test-hashmap.log: test-hashmap$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-list.log: test-list$(EXEEXT)
+ @p='test-list$(EXEEXT)'; \
+ b='test-list'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-tables.log: test-tables$(EXEEXT)
+ @p='test-tables$(EXEEXT)'; \
+ b='test-tables'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-device-nodes.log: test-device-nodes$(EXEEXT)
+ @p='test-device-nodes$(EXEEXT)'; \
+ b='test-device-nodes'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
test-bus-marshal.log: test-bus-marshal$(EXEEXT)
@p='test-bus-marshal$(EXEEXT)'; \
b='test-bus-marshal'; \
@@ -11843,6 +13001,34 @@ test-bus-kernel.log: test-bus-kernel$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-bus-kernel-bloom.log: test-bus-kernel-bloom$(EXEEXT)
+ @p='test-bus-kernel-bloom$(EXEEXT)'; \
+ b='test-bus-kernel-bloom'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-bus-kernel-benchmark.log: test-bus-kernel-benchmark$(EXEEXT)
+ @p='test-bus-kernel-benchmark$(EXEEXT)'; \
+ b='test-bus-kernel-benchmark'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-bus-memfd.log: test-bus-memfd$(EXEEXT)
+ @p='test-bus-memfd$(EXEEXT)'; \
+ b='test-bus-memfd'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-bus-zero-copy.log: test-bus-zero-copy$(EXEEXT)
+ @p='test-bus-zero-copy$(EXEEXT)'; \
+ b='test-bus-zero-copy'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
test-id128.log: test-id128$(EXEEXT)
@p='test-id128$(EXEEXT)'; \
b='test-id128'; \
@@ -11885,6 +13071,13 @@ test-journal-stream.log: test-journal-stream$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-journal-init.log: test-journal-init$(EXEEXT)
+ @p='test-journal-init$(EXEEXT)'; \
+ b='test-journal-init'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
test-journal-verify.log: test-journal-verify$(EXEEXT)
@p='test-journal-verify$(EXEEXT)'; \
b='test-journal-verify'; \
@@ -11892,6 +13085,13 @@ test-journal-verify.log: test-journal-verify$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-journal-interleaving.log: test-journal-interleaving$(EXEEXT)
+ @p='test-journal-interleaving$(EXEEXT)'; \
+ b='test-journal-interleaving'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
test-mmap-cache.log: test-mmap-cache$(EXEEXT)
@p='test-mmap-cache$(EXEEXT)'; \
b='test-mmap-cache'; \
@@ -11906,6 +13106,27 @@ test-catalog.log: test-catalog$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-machine-tables.log: test-machine-tables$(EXEEXT)
+ @p='test-machine-tables$(EXEEXT)'; \
+ b='test-machine-tables'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-login-tables.log: test-login-tables$(EXEEXT)
+ @p='test-login-tables$(EXEEXT)'; \
+ b='test-login-tables'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-login-shared.log: test-login-shared$(EXEEXT)
+ @p='test-login-shared$(EXEEXT)'; \
+ b='test-login-shared'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -12118,7 +13339,7 @@ install-binPROGRAMS: install-libLTLIBRARIES
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pamlibdir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(rootbindir)" "$(DESTDIR)$(rootlibexecdir)" "$(DESTDIR)$(systemgeneratordir)" "$(DESTDIR)$(udevlibexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(kernelinstalldir)" "$(DESTDIR)$(udevhomedir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(dbusinterfacedir)" "$(DESTDIR)$(bashcompletiondir)" "$(DESTDIR)$(catalogdir)" "$(DESTDIR)$(dbuspolicydir)" "$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(gatewayddocumentrootdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgsysconfdir)" "$(DESTDIR)$(sysctldir)" "$(DESTDIR)$(systemunitdir)" "$(DESTDIR)$(tmpfilesdir)" "$(DESTDIR)$(udevconfdir)" "$(DESTDIR)$(udevhwdbdir)" "$(DESTDIR)$(udevkeymapdir)" "$(DESTDIR)$(udevkeymapforcereldir)" "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(userunitdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(polkitpolicydir)" "$(DESTDIR)$(rpmmacrosdir)" "$(DESTDIR)$(systemunitdir)" "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(userunitdir)" "$(DESTDIR)$(pkgconfigdatadir)" "$(DESTDIR)$(pkgconfiglibdir)" "$(DESTDIR)$(sharepkgconfigdir)" "$(DESTDIR)$(sysctldir)" "$(DESTDIR)$(sysvinitdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(varlogdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(libgudev_includedir)" "$(DESTDIR)$(pkgincludedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pamlibdir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(rootbindir)" "$(DESTDIR)$(rootlibexecdir)" "$(DESTDIR)$(systemgeneratordir)" "$(DESTDIR)$(udevlibexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(kernelinstalldir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(dbusinterfacedir)" "$(DESTDIR)$(bashcompletiondir)" "$(DESTDIR)$(catalogdir)" "$(DESTDIR)$(dbuspolicydir)" "$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(gatewayddocumentrootdir)" "$(DESTDIR)$(pamconfdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgsysconfdir)" "$(DESTDIR)$(sysctldir)" "$(DESTDIR)$(systemunitdir)" "$(DESTDIR)$(tmpfilesdir)" "$(DESTDIR)$(udevconfdir)" "$(DESTDIR)$(udevhwdbdir)" "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(userunitdir)" "$(DESTDIR)$(zshcompletiondir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(polkitpolicydir)" "$(DESTDIR)$(rpmmacrosdir)" "$(DESTDIR)$(systemunitdir)" "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(userunitdir)" "$(DESTDIR)$(pkgconfigdatadir)" "$(DESTDIR)$(pkgconfiglibdir)" "$(DESTDIR)$(sharepkgconfigdir)" "$(DESTDIR)$(sysctldir)" "$(DESTDIR)$(sysvinitdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(varlogdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(libgudev_includedir)" "$(DESTDIR)$(pkgincludedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
@@ -12160,6 +13381,8 @@ distclean-generic:
-rm -f src/analyze/$(am__dirstamp)
-rm -f src/ask-password/$(DEPDIR)/$(am__dirstamp)
-rm -f src/ask-password/$(am__dirstamp)
+ -rm -f src/backlight/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/backlight/$(am__dirstamp)
-rm -f src/binfmt/$(DEPDIR)/$(am__dirstamp)
-rm -f src/binfmt/$(am__dirstamp)
-rm -f src/boot/$(DEPDIR)/$(am__dirstamp)
@@ -12188,6 +13411,8 @@ distclean-generic:
-rm -f src/fstab-generator/$(am__dirstamp)
-rm -f src/getty-generator/$(DEPDIR)/$(am__dirstamp)
-rm -f src/getty-generator/$(am__dirstamp)
+ -rm -f src/gpt-auto-generator/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/gpt-auto-generator/$(am__dirstamp)
-rm -f src/gudev/$(DEPDIR)/$(am__dirstamp)
-rm -f src/gudev/$(am__dirstamp)
-rm -f src/hostname/$(DEPDIR)/$(am__dirstamp)
@@ -12210,6 +13435,8 @@ distclean-generic:
-rm -f src/login/$(am__dirstamp)
-rm -f src/machine-id-setup/$(DEPDIR)/$(am__dirstamp)
-rm -f src/machine-id-setup/$(am__dirstamp)
+ -rm -f src/machine/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/machine/$(am__dirstamp)
-rm -f src/modules-load/$(DEPDIR)/$(am__dirstamp)
-rm -f src/modules-load/$(am__dirstamp)
-rm -f src/notify/$(DEPDIR)/$(am__dirstamp)
@@ -12232,6 +13459,8 @@ distclean-generic:
-rm -f src/remount-fs/$(am__dirstamp)
-rm -f src/reply-password/$(DEPDIR)/$(am__dirstamp)
-rm -f src/reply-password/$(am__dirstamp)
+ -rm -f src/run/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/run/$(am__dirstamp)
-rm -f src/shared/$(DEPDIR)/$(am__dirstamp)
-rm -f src/shared/$(am__dirstamp)
-rm -f src/shutdownd/$(DEPDIR)/$(am__dirstamp)
@@ -12250,8 +13479,6 @@ distclean-generic:
-rm -f src/test/$(am__dirstamp)
-rm -f src/timedate/$(DEPDIR)/$(am__dirstamp)
-rm -f src/timedate/$(am__dirstamp)
- -rm -f src/timestamp/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/timestamp/$(am__dirstamp)
-rm -f src/tmpfiles/$(DEPDIR)/$(am__dirstamp)
-rm -f src/tmpfiles/$(am__dirstamp)
-rm -f src/tty-ask-password-agent/$(DEPDIR)/$(am__dirstamp)
@@ -12266,8 +13493,6 @@ distclean-generic:
-rm -f src/udev/cdrom_id/$(am__dirstamp)
-rm -f src/udev/collect/$(DEPDIR)/$(am__dirstamp)
-rm -f src/udev/collect/$(am__dirstamp)
- -rm -f src/udev/keymap/$(DEPDIR)/$(am__dirstamp)
- -rm -f src/udev/keymap/$(am__dirstamp)
-rm -f src/udev/mtd_probe/$(DEPDIR)/$(am__dirstamp)
-rm -f src/udev/mtd_probe/$(am__dirstamp)
-rm -f src/udev/scsi_id/$(DEPDIR)/$(am__dirstamp)
@@ -12296,7 +13521,7 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf src/ac-power/$(DEPDIR) src/activate/$(DEPDIR) src/analyze/$(DEPDIR) src/ask-password/$(DEPDIR) src/binfmt/$(DEPDIR) src/boot/$(DEPDIR) src/bootchart/$(DEPDIR) src/cgls/$(DEPDIR) src/cgroups-agent/$(DEPDIR) src/cgtop/$(DEPDIR) src/core/$(DEPDIR) src/cryptsetup/$(DEPDIR) src/delta/$(DEPDIR) src/detect-virt/$(DEPDIR) src/efi-boot-generator/$(DEPDIR) src/fsck/$(DEPDIR) src/fstab-generator/$(DEPDIR) src/getty-generator/$(DEPDIR) src/gudev/$(DEPDIR) src/hostname/$(DEPDIR) src/initctl/$(DEPDIR) src/journal/$(DEPDIR) src/libsystemd-bus/$(DEPDIR) src/libsystemd-daemon/$(DEPDIR) src/libsystemd-id128/$(DEPDIR) src/libudev/$(DEPDIR) src/locale/$(DEPDIR) src/login/$(DEPDIR) src/machine-id-setup/$(DEPDIR) src/modules-load/$(DEPDIR) src/notify/$(DEPDIR) src/nspawn/$(DEPDIR) src/nss-myhostname/$(DEPDIR) src/python-systemd/$(DEPDIR) src/quotacheck/$(DEPDIR) src/random-seed/$(DEPDIR) src/rc-local-generator/$(DEPDIR) src/readahead/$(DEPDIR) src/remount-fs/$(DEPDIR) src/reply-password/$(DEPDIR) src/shared/$(DEPDIR) src/shutdownd/$(DEPDIR) src/sleep/$(DEPDIR) src/stdio-bridge/$(DEPDIR) src/sysctl/$(DEPDIR) src/system-update-generator/$(DEPDIR) src/systemctl/$(DEPDIR) src/test/$(DEPDIR) src/timedate/$(DEPDIR) src/timestamp/$(DEPDIR) src/tmpfiles/$(DEPDIR) src/tty-ask-password-agent/$(DEPDIR) src/udev/$(DEPDIR) src/udev/accelerometer/$(DEPDIR) src/udev/ata_id/$(DEPDIR) src/udev/cdrom_id/$(DEPDIR) src/udev/collect/$(DEPDIR) src/udev/keymap/$(DEPDIR) src/udev/mtd_probe/$(DEPDIR) src/udev/scsi_id/$(DEPDIR) src/udev/v4l_id/$(DEPDIR) src/update-utmp/$(DEPDIR) src/vconsole/$(DEPDIR)
+ -rm -rf src/ac-power/$(DEPDIR) src/activate/$(DEPDIR) src/analyze/$(DEPDIR) src/ask-password/$(DEPDIR) src/backlight/$(DEPDIR) src/binfmt/$(DEPDIR) src/boot/$(DEPDIR) src/bootchart/$(DEPDIR) src/cgls/$(DEPDIR) src/cgroups-agent/$(DEPDIR) src/cgtop/$(DEPDIR) src/core/$(DEPDIR) src/cryptsetup/$(DEPDIR) src/delta/$(DEPDIR) src/detect-virt/$(DEPDIR) src/efi-boot-generator/$(DEPDIR) src/fsck/$(DEPDIR) src/fstab-generator/$(DEPDIR) src/getty-generator/$(DEPDIR) src/gpt-auto-generator/$(DEPDIR) src/gudev/$(DEPDIR) src/hostname/$(DEPDIR) src/initctl/$(DEPDIR) src/journal/$(DEPDIR) src/libsystemd-bus/$(DEPDIR) src/libsystemd-daemon/$(DEPDIR) src/libsystemd-id128/$(DEPDIR) src/libudev/$(DEPDIR) src/locale/$(DEPDIR) src/login/$(DEPDIR) src/machine-id-setup/$(DEPDIR) src/machine/$(DEPDIR) src/modules-load/$(DEPDIR) src/notify/$(DEPDIR) src/nspawn/$(DEPDIR) src/nss-myhostname/$(DEPDIR) src/python-systemd/$(DEPDIR) src/quotacheck/$(DEPDIR) src/random-seed/$(DEPDIR) src/rc-local-generator/$(DEPDIR) src/readahead/$(DEPDIR) src/remount-fs/$(DEPDIR) src/reply-password/$(DEPDIR) src/run/$(DEPDIR) src/shared/$(DEPDIR) src/shutdownd/$(DEPDIR) src/sleep/$(DEPDIR) src/stdio-bridge/$(DEPDIR) src/sysctl/$(DEPDIR) src/system-update-generator/$(DEPDIR) src/systemctl/$(DEPDIR) src/test/$(DEPDIR) src/timedate/$(DEPDIR) src/tmpfiles/$(DEPDIR) src/tty-ask-password-agent/$(DEPDIR) src/udev/$(DEPDIR) src/udev/accelerometer/$(DEPDIR) src/udev/ata_id/$(DEPDIR) src/udev/cdrom_id/$(DEPDIR) src/udev/collect/$(DEPDIR) src/udev/mtd_probe/$(DEPDIR) src/udev/scsi_id/$(DEPDIR) src/udev/v4l_id/$(DEPDIR) src/update-utmp/$(DEPDIR) src/vconsole/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-local distclean-tags
@@ -12317,22 +13542,22 @@ install-data-am: install-dbusinterfaceDATA \
install-dist_bashcompletionDATA install-dist_catalogDATA \
install-dist_dbuspolicyDATA install-dist_dbussystemserviceDATA \
install-dist_docDATA install-dist_gatewayddocumentrootDATA \
- install-dist_kernelinstallSCRIPTS install-dist_pkgdataDATA \
- install-dist_pkgsysconfDATA install-dist_sysctlDATA \
- install-dist_systemunitDATA install-dist_tmpfilesDATA \
- install-dist_udevconfDATA install-dist_udevhomeSCRIPTS \
- install-dist_udevhwdbDATA install-dist_udevkeymapDATA \
- install-dist_udevkeymapforcerelDATA install-dist_udevrulesDATA \
- install-dist_userunitDATA install-girDATA \
- install-includeHEADERS install-libgudev_includeHEADERS \
- install-man install-nodist_polkitpolicyDATA \
- install-nodist_rpmmacrosDATA install-nodist_systemunitDATA \
- install-nodist_udevrulesDATA install-nodist_userunitDATA \
- install-pamlibLTLIBRARIES install-pkgconfigdataDATA \
- install-pkgconfiglibDATA install-pkgincludeHEADERS \
- install-rootbinPROGRAMS install-sharepkgconfigDATA \
- install-sysctlDATA install-systemgeneratorPROGRAMS \
- install-sysvinitDATA install-typelibsDATA install-varlogDATA
+ install-dist_kernelinstallSCRIPTS install-dist_pamconfDATA \
+ install-dist_pkgdataDATA install-dist_pkgsysconfDATA \
+ install-dist_sysctlDATA install-dist_systemunitDATA \
+ install-dist_tmpfilesDATA install-dist_udevconfDATA \
+ install-dist_udevhwdbDATA install-dist_udevrulesDATA \
+ install-dist_userunitDATA install-dist_zshcompletionDATA \
+ install-girDATA install-includeHEADERS \
+ install-libgudev_includeHEADERS install-man \
+ install-nodist_polkitpolicyDATA install-nodist_rpmmacrosDATA \
+ install-nodist_systemunitDATA install-nodist_udevrulesDATA \
+ install-nodist_userunitDATA install-pamlibLTLIBRARIES \
+ install-pkgconfigdataDATA install-pkgconfiglibDATA \
+ install-pkgincludeHEADERS install-rootbinPROGRAMS \
+ install-sharepkgconfigDATA install-sysctlDATA \
+ install-systemgeneratorPROGRAMS install-sysvinitDATA \
+ install-typelibsDATA install-varlogDATA
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-dvi: install-dvi-recursive
@@ -12369,7 +13594,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf src/ac-power/$(DEPDIR) src/activate/$(DEPDIR) src/analyze/$(DEPDIR) src/ask-password/$(DEPDIR) src/binfmt/$(DEPDIR) src/boot/$(DEPDIR) src/bootchart/$(DEPDIR) src/cgls/$(DEPDIR) src/cgroups-agent/$(DEPDIR) src/cgtop/$(DEPDIR) src/core/$(DEPDIR) src/cryptsetup/$(DEPDIR) src/delta/$(DEPDIR) src/detect-virt/$(DEPDIR) src/efi-boot-generator/$(DEPDIR) src/fsck/$(DEPDIR) src/fstab-generator/$(DEPDIR) src/getty-generator/$(DEPDIR) src/gudev/$(DEPDIR) src/hostname/$(DEPDIR) src/initctl/$(DEPDIR) src/journal/$(DEPDIR) src/libsystemd-bus/$(DEPDIR) src/libsystemd-daemon/$(DEPDIR) src/libsystemd-id128/$(DEPDIR) src/libudev/$(DEPDIR) src/locale/$(DEPDIR) src/login/$(DEPDIR) src/machine-id-setup/$(DEPDIR) src/modules-load/$(DEPDIR) src/notify/$(DEPDIR) src/nspawn/$(DEPDIR) src/nss-myhostname/$(DEPDIR) src/python-systemd/$(DEPDIR) src/quotacheck/$(DEPDIR) src/random-seed/$(DEPDIR) src/rc-local-generator/$(DEPDIR) src/readahead/$(DEPDIR) src/remount-fs/$(DEPDIR) src/reply-password/$(DEPDIR) src/shared/$(DEPDIR) src/shutdownd/$(DEPDIR) src/sleep/$(DEPDIR) src/stdio-bridge/$(DEPDIR) src/sysctl/$(DEPDIR) src/system-update-generator/$(DEPDIR) src/systemctl/$(DEPDIR) src/test/$(DEPDIR) src/timedate/$(DEPDIR) src/timestamp/$(DEPDIR) src/tmpfiles/$(DEPDIR) src/tty-ask-password-agent/$(DEPDIR) src/udev/$(DEPDIR) src/udev/accelerometer/$(DEPDIR) src/udev/ata_id/$(DEPDIR) src/udev/cdrom_id/$(DEPDIR) src/udev/collect/$(DEPDIR) src/udev/keymap/$(DEPDIR) src/udev/mtd_probe/$(DEPDIR) src/udev/scsi_id/$(DEPDIR) src/udev/v4l_id/$(DEPDIR) src/update-utmp/$(DEPDIR) src/vconsole/$(DEPDIR)
+ -rm -rf src/ac-power/$(DEPDIR) src/activate/$(DEPDIR) src/analyze/$(DEPDIR) src/ask-password/$(DEPDIR) src/backlight/$(DEPDIR) src/binfmt/$(DEPDIR) src/boot/$(DEPDIR) src/bootchart/$(DEPDIR) src/cgls/$(DEPDIR) src/cgroups-agent/$(DEPDIR) src/cgtop/$(DEPDIR) src/core/$(DEPDIR) src/cryptsetup/$(DEPDIR) src/delta/$(DEPDIR) src/detect-virt/$(DEPDIR) src/efi-boot-generator/$(DEPDIR) src/fsck/$(DEPDIR) src/fstab-generator/$(DEPDIR) src/getty-generator/$(DEPDIR) src/gpt-auto-generator/$(DEPDIR) src/gudev/$(DEPDIR) src/hostname/$(DEPDIR) src/initctl/$(DEPDIR) src/journal/$(DEPDIR) src/libsystemd-bus/$(DEPDIR) src/libsystemd-daemon/$(DEPDIR) src/libsystemd-id128/$(DEPDIR) src/libudev/$(DEPDIR) src/locale/$(DEPDIR) src/login/$(DEPDIR) src/machine-id-setup/$(DEPDIR) src/machine/$(DEPDIR) src/modules-load/$(DEPDIR) src/notify/$(DEPDIR) src/nspawn/$(DEPDIR) src/nss-myhostname/$(DEPDIR) src/python-systemd/$(DEPDIR) src/quotacheck/$(DEPDIR) src/random-seed/$(DEPDIR) src/rc-local-generator/$(DEPDIR) src/readahead/$(DEPDIR) src/remount-fs/$(DEPDIR) src/reply-password/$(DEPDIR) src/run/$(DEPDIR) src/shared/$(DEPDIR) src/shutdownd/$(DEPDIR) src/sleep/$(DEPDIR) src/stdio-bridge/$(DEPDIR) src/sysctl/$(DEPDIR) src/system-update-generator/$(DEPDIR) src/systemctl/$(DEPDIR) src/test/$(DEPDIR) src/timedate/$(DEPDIR) src/tmpfiles/$(DEPDIR) src/tty-ask-password-agent/$(DEPDIR) src/udev/$(DEPDIR) src/udev/accelerometer/$(DEPDIR) src/udev/ata_id/$(DEPDIR) src/udev/cdrom_id/$(DEPDIR) src/udev/collect/$(DEPDIR) src/udev/mtd_probe/$(DEPDIR) src/udev/scsi_id/$(DEPDIR) src/udev/v4l_id/$(DEPDIR) src/update-utmp/$(DEPDIR) src/vconsole/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -12391,17 +13616,16 @@ uninstall-am: uninstall-binPROGRAMS uninstall-dbusinterfaceDATA \
uninstall-dist_catalogDATA uninstall-dist_dbuspolicyDATA \
uninstall-dist_dbussystemserviceDATA uninstall-dist_docDATA \
uninstall-dist_gatewayddocumentrootDATA \
- uninstall-dist_kernelinstallSCRIPTS uninstall-dist_pkgdataDATA \
- uninstall-dist_pkgpyexecPYTHON uninstall-dist_pkgsysconfDATA \
- uninstall-dist_sysctlDATA uninstall-dist_systemunitDATA \
- uninstall-dist_tmpfilesDATA uninstall-dist_udevconfDATA \
- uninstall-dist_udevhomeSCRIPTS uninstall-dist_udevhwdbDATA \
- uninstall-dist_udevkeymapDATA \
- uninstall-dist_udevkeymapforcerelDATA \
+ uninstall-dist_kernelinstallSCRIPTS uninstall-dist_pamconfDATA \
+ uninstall-dist_pkgdataDATA uninstall-dist_pkgpyexecPYTHON \
+ uninstall-dist_pkgsysconfDATA uninstall-dist_sysctlDATA \
+ uninstall-dist_systemunitDATA uninstall-dist_tmpfilesDATA \
+ uninstall-dist_udevconfDATA uninstall-dist_udevhwdbDATA \
uninstall-dist_udevrulesDATA uninstall-dist_userunitDATA \
- uninstall-girDATA uninstall-includeHEADERS \
- uninstall-libLTLIBRARIES uninstall-libgudev_includeHEADERS \
- uninstall-man uninstall-nodist_polkitpolicyDATA \
+ uninstall-dist_zshcompletionDATA uninstall-girDATA \
+ uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+ uninstall-libgudev_includeHEADERS uninstall-man \
+ uninstall-nodist_polkitpolicyDATA \
uninstall-nodist_rpmmacrosDATA uninstall-nodist_systemunitDATA \
uninstall-nodist_udevrulesDATA uninstall-nodist_userunitDATA \
uninstall-pamlibLTLIBRARIES uninstall-pkgconfigdataDATA \
@@ -12438,14 +13662,13 @@ uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
install-dist_binSCRIPTS install-dist_catalogDATA \
install-dist_dbuspolicyDATA install-dist_dbussystemserviceDATA \
install-dist_docDATA install-dist_gatewayddocumentrootDATA \
- install-dist_kernelinstallSCRIPTS install-dist_pkgdataDATA \
- install-dist_pkgpyexecPYTHON install-dist_pkgsysconfDATA \
- install-dist_sysctlDATA install-dist_systemunitDATA \
- install-dist_tmpfilesDATA install-dist_udevconfDATA \
- install-dist_udevhomeSCRIPTS install-dist_udevhwdbDATA \
- install-dist_udevkeymapDATA \
- install-dist_udevkeymapforcerelDATA install-dist_udevrulesDATA \
- install-dist_userunitDATA install-dvi install-dvi-am \
+ install-dist_kernelinstallSCRIPTS install-dist_pamconfDATA \
+ install-dist_pkgdataDATA install-dist_pkgpyexecPYTHON \
+ install-dist_pkgsysconfDATA install-dist_sysctlDATA \
+ install-dist_systemunitDATA install-dist_tmpfilesDATA \
+ install-dist_udevconfDATA install-dist_udevhwdbDATA \
+ install-dist_udevrulesDATA install-dist_userunitDATA \
+ install-dist_zshcompletionDATA install-dvi install-dvi-am \
install-exec install-exec-am install-exec-hook install-girDATA \
install-html install-html-am install-includeHEADERS \
install-info install-info-am install-libLTLIBRARIES \
@@ -12471,15 +13694,14 @@ uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
uninstall-dist_dbuspolicyDATA \
uninstall-dist_dbussystemserviceDATA uninstall-dist_docDATA \
uninstall-dist_gatewayddocumentrootDATA \
- uninstall-dist_kernelinstallSCRIPTS uninstall-dist_pkgdataDATA \
- uninstall-dist_pkgpyexecPYTHON uninstall-dist_pkgsysconfDATA \
- uninstall-dist_sysctlDATA uninstall-dist_systemunitDATA \
- uninstall-dist_tmpfilesDATA uninstall-dist_udevconfDATA \
- uninstall-dist_udevhomeSCRIPTS uninstall-dist_udevhwdbDATA \
- uninstall-dist_udevkeymapDATA \
- uninstall-dist_udevkeymapforcerelDATA \
+ uninstall-dist_kernelinstallSCRIPTS uninstall-dist_pamconfDATA \
+ uninstall-dist_pkgdataDATA uninstall-dist_pkgpyexecPYTHON \
+ uninstall-dist_pkgsysconfDATA uninstall-dist_sysctlDATA \
+ uninstall-dist_systemunitDATA uninstall-dist_tmpfilesDATA \
+ uninstall-dist_udevconfDATA uninstall-dist_udevhwdbDATA \
uninstall-dist_udevrulesDATA uninstall-dist_userunitDATA \
- uninstall-girDATA uninstall-hook uninstall-includeHEADERS \
+ uninstall-dist_zshcompletionDATA uninstall-girDATA \
+ uninstall-hook uninstall-includeHEADERS \
uninstall-libLTLIBRARIES uninstall-libgudev_includeHEADERS \
uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
uninstall-man7 uninstall-man8 \
@@ -12501,6 +13723,9 @@ uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
# keep intermediate files
.SECONDARY:
+# Keep the test-suite.log
+.PRECIOUS: $(TEST_SUITE_LOG) Makefile
+
# ------------------------------------------------------------------------------
define move-to-rootlibdir
if test "$(libdir)" != "$(rootlibdir)"; then \
@@ -12524,6 +13749,7 @@ install-target-wants-hook:
what="$(SYSINIT_TARGET_WANTS)" && wants=sysinit.target && $(add-wants)
what="$(SOCKETS_TARGET_WANTS)" && wants=sockets.target && $(add-wants)
what="$(TIMERS_TARGET_WANTS)" && wants=timers.target && $(add-wants)
+ what="$(SLICES_TARGET_WANTS)" && wants=slices.target && $(add-wants)
define add-wants
[ -z "$$what" ] || ( \
@@ -12554,6 +13780,14 @@ define install-aliases
done
endef
+# automake is broken and can't handle files with a dash in front
+# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14728#8
+units-install-hook:
+ mv $(DESTDIR)$(systemunitdir)/x-.slice $(DESTDIR)/$(systemunitdir)/-.slice
+
+units-uninstall-hook:
+ rm -f $(DESTDIR)/$(systemunitdir)/-.slice
+
@INTLTOOL_POLICY_RULE@
man/SD_ALERT.3: man/sd-daemon.3
man/SD_CRIT.3: man/sd-daemon.3
@@ -12566,6 +13800,7 @@ man/SD_ID128_FORMAT_VAL.3: man/sd-id128.3
man/SD_ID128_MAKE.3: man/sd-id128.3
man/SD_INFO.3: man/sd-daemon.3
man/SD_JOURNAL_APPEND.3: man/sd_journal_get_fd.3
+man/SD_JOURNAL_CURRENT_USER.3: man/sd_journal_open.3
man/SD_JOURNAL_FOREACH.3: man/sd_journal_next.3
man/SD_JOURNAL_FOREACH_BACKWARDS.3: man/sd_journal_next.3
man/SD_JOURNAL_FOREACH_DATA.3: man/sd_journal_get_data.3
@@ -12575,7 +13810,7 @@ man/SD_JOURNAL_LOCAL_ONLY.3: man/sd_journal_open.3
man/SD_JOURNAL_NOP.3: man/sd_journal_get_fd.3
man/SD_JOURNAL_RUNTIME_ONLY.3: man/sd_journal_open.3
man/SD_JOURNAL_SUPPRESS_LOCATION.3: man/sd_journal_print.3
-man/SD_JOURNAL_SYSTEM_ONLY.3: man/sd_journal_open.3
+man/SD_JOURNAL_SYSTEM.3: man/sd_journal_open.3
man/SD_LISTEN_FDS_START.3: man/sd_listen_fds.3
man/SD_NOTICE.3: man/sd-daemon.3
man/SD_WARNING.3: man/sd-daemon.3
@@ -12605,6 +13840,7 @@ man/sd_journal_get_monotonic_usec.3: man/sd_journal_get_realtime_usec.3
man/sd_journal_get_timeout.3: man/sd_journal_get_fd.3
man/sd_journal_next_skip.3: man/sd_journal_next.3
man/sd_journal_open_directory.3: man/sd_journal_open.3
+man/sd_journal_open_files.3: man/sd_journal_open.3
man/sd_journal_perror.3: man/sd_journal_print.3
man/sd_journal_previous.3: man/sd_journal_next.3
man/sd_journal_previous_skip.3: man/sd_journal_next.3
@@ -12650,8 +13886,8 @@ man/systemd-tmpfiles-setup.service.8: man/systemd-tmpfiles.8
man/systemd-udevd-control.socket.8: man/systemd-udevd.service.8
man/systemd-udevd-kernel.socket.8: man/systemd-udevd.service.8
man/systemd-udevd.8: man/systemd-udevd.service.8
-man/systemd-update-utmp-shutdown.service.8: man/systemd-update-utmp-runlevel.service.8
-man/systemd-update-utmp.8: man/systemd-update-utmp-runlevel.service.8
+man/systemd-update-utmp-runlevel.service.8: man/systemd-update-utmp.service.8
+man/systemd-update-utmp.8: man/systemd-update-utmp.service.8
man/systemd-user.conf.5: man/systemd-system.conf.5
man/SD_ALERT.html: man/sd-daemon.html
$(html-alias)
@@ -12686,6 +13922,9 @@ man/SD_INFO.html: man/sd-daemon.html
man/SD_JOURNAL_APPEND.html: man/sd_journal_get_fd.html
$(html-alias)
+man/SD_JOURNAL_CURRENT_USER.html: man/sd_journal_open.html
+ $(html-alias)
+
man/SD_JOURNAL_FOREACH.html: man/sd_journal_next.html
$(html-alias)
@@ -12713,7 +13952,7 @@ man/SD_JOURNAL_RUNTIME_ONLY.html: man/sd_journal_open.html
man/SD_JOURNAL_SUPPRESS_LOCATION.html: man/sd_journal_print.html
$(html-alias)
-man/SD_JOURNAL_SYSTEM_ONLY.html: man/sd_journal_open.html
+man/SD_JOURNAL_SYSTEM.html: man/sd_journal_open.html
$(html-alias)
man/SD_LISTEN_FDS_START.html: man/sd_listen_fds.html
@@ -12803,6 +14042,9 @@ man/sd_journal_next_skip.html: man/sd_journal_next.html
man/sd_journal_open_directory.html: man/sd_journal_open.html
$(html-alias)
+man/sd_journal_open_files.html: man/sd_journal_open.html
+ $(html-alias)
+
man/sd_journal_perror.html: man/sd_journal_print.html
$(html-alias)
@@ -12938,14 +14180,17 @@ man/systemd-udevd-kernel.socket.html: man/systemd-udevd.service.html
man/systemd-udevd.html: man/systemd-udevd.service.html
$(html-alias)
-man/systemd-update-utmp-shutdown.service.html: man/systemd-update-utmp-runlevel.service.html
+man/systemd-update-utmp-runlevel.service.html: man/systemd-update-utmp.service.html
$(html-alias)
-man/systemd-update-utmp.html: man/systemd-update-utmp-runlevel.service.html
+man/systemd-update-utmp.html: man/systemd-update-utmp.service.html
$(html-alias)
man/systemd-user.conf.html: man/systemd-system.conf.html
$(html-alias)
+@ENABLE_BACKLIGHT_TRUE@man/systemd-backlight.8: man/systemd-backlight@.service.8
+@ENABLE_BACKLIGHT_TRUE@man/systemd-backlight.html: man/systemd-backlight@.service.html
+@ENABLE_BACKLIGHT_TRUE@ $(html-alias)
@ENABLE_BINFMT_TRUE@man/systemd-binfmt.8: man/systemd-binfmt.service.8
@ENABLE_BINFMT_TRUE@man/systemd-binfmt.html: man/systemd-binfmt.service.html
@ENABLE_BINFMT_TRUE@ $(html-alias)
@@ -12958,15 +14203,14 @@ man/systemd-user.conf.html: man/systemd-system.conf.html
@ENABLE_LOGIND_TRUE@man/systemd-logind.8: man/systemd-logind.service.8
@ENABLE_LOGIND_TRUE@man/systemd-logind.html: man/systemd-logind.service.html
@ENABLE_LOGIND_TRUE@ $(html-alias)
+@ENABLE_MACHINED_TRUE@man/systemd-machined.8: man/systemd-machined.service.8
+@ENABLE_MACHINED_TRUE@man/systemd-machined.html: man/systemd-machined.service.html
+@ENABLE_MACHINED_TRUE@ $(html-alias)
@ENABLE_QUOTACHECK_TRUE@man/systemd-quotacheck.8: man/systemd-quotacheck.service.8
@ENABLE_QUOTACHECK_TRUE@man/systemd-quotacheck.html: man/systemd-quotacheck.service.html
@ENABLE_QUOTACHECK_TRUE@ $(html-alias)
-@ENABLE_RANDOMSEED_TRUE@man/systemd-random-seed-save.service.8: man/systemd-random-seed-load.service.8
-@ENABLE_RANDOMSEED_TRUE@man/systemd-random-seed.8: man/systemd-random-seed-load.service.8
-@ENABLE_RANDOMSEED_TRUE@man/systemd-random-seed-save.service.html: man/systemd-random-seed-load.service.html
-@ENABLE_RANDOMSEED_TRUE@ $(html-alias)
-
-@ENABLE_RANDOMSEED_TRUE@man/systemd-random-seed.html: man/systemd-random-seed-load.service.html
+@ENABLE_RANDOMSEED_TRUE@man/systemd-random-seed.8: man/systemd-random-seed.service.8
+@ENABLE_RANDOMSEED_TRUE@man/systemd-random-seed.html: man/systemd-random-seed.service.html
@ENABLE_RANDOMSEED_TRUE@ $(html-alias)
@ENABLE_READAHEAD_TRUE@man/systemd-readahead-collect.service.8: man/systemd-readahead-replay.service.8
@ENABLE_READAHEAD_TRUE@man/systemd-readahead-done.service.8: man/systemd-readahead-replay.service.8
@@ -13013,6 +14257,7 @@ man/systemd-user.conf.html: man/systemd-system.conf.html
@HAVE_PAM_TRUE@man/sd_login_monitor_unref.3: man/sd_login_monitor_new.3
@HAVE_PAM_TRUE@man/sd_pid_get_machine_name.3: man/sd_pid_get_session.3
@HAVE_PAM_TRUE@man/sd_pid_get_owner_uid.3: man/sd_pid_get_session.3
+@HAVE_PAM_TRUE@man/sd_pid_get_slice.3: man/sd_pid_get_session.3
@HAVE_PAM_TRUE@man/sd_pid_get_unit.3: man/sd_pid_get_session.3
@HAVE_PAM_TRUE@man/sd_pid_get_user_unit.3: man/sd_pid_get_session.3
@HAVE_PAM_TRUE@man/sd_seat_can_multi_session.3: man/sd_seat_get_active.3
@@ -13025,6 +14270,7 @@ man/systemd-user.conf.html: man/systemd-system.conf.html
@HAVE_PAM_TRUE@man/sd_session_get_tty.3: man/sd_session_is_active.3
@HAVE_PAM_TRUE@man/sd_session_get_type.3: man/sd_session_is_active.3
@HAVE_PAM_TRUE@man/sd_session_get_uid.3: man/sd_session_is_active.3
+@HAVE_PAM_TRUE@man/sd_session_get_vt.3: man/sd_session_is_active.3
@HAVE_PAM_TRUE@man/sd_uid_get_seats.3: man/sd_uid_get_state.3
@HAVE_PAM_TRUE@man/sd_uid_get_sessions.3: man/sd_uid_get_state.3
@HAVE_PAM_TRUE@man/sd_uid_is_on_seat.3: man/sd_uid_get_state.3
@@ -13062,6 +14308,9 @@ man/systemd-user.conf.html: man/systemd-system.conf.html
@HAVE_PAM_TRUE@man/sd_pid_get_owner_uid.html: man/sd_pid_get_session.html
@HAVE_PAM_TRUE@ $(html-alias)
+@HAVE_PAM_TRUE@man/sd_pid_get_slice.html: man/sd_pid_get_session.html
+@HAVE_PAM_TRUE@ $(html-alias)
+
@HAVE_PAM_TRUE@man/sd_pid_get_unit.html: man/sd_pid_get_session.html
@HAVE_PAM_TRUE@ $(html-alias)
@@ -13098,6 +14347,9 @@ man/systemd-user.conf.html: man/systemd-system.conf.html
@HAVE_PAM_TRUE@man/sd_session_get_uid.html: man/sd_session_is_active.html
@HAVE_PAM_TRUE@ $(html-alias)
+@HAVE_PAM_TRUE@man/sd_session_get_vt.html: man/sd_session_is_active.html
+@HAVE_PAM_TRUE@ $(html-alias)
+
@HAVE_PAM_TRUE@man/sd_uid_get_seats.html: man/sd_uid_get_state.html
@HAVE_PAM_TRUE@ $(html-alias)
@@ -13110,6 +14362,9 @@ man/systemd-user.conf.html: man/systemd-system.conf.html
@HAVE_PAM_TRUE@man/systemd-user-sessions.html: man/systemd-user-sessions.service.html
@HAVE_PAM_TRUE@ $(html-alias)
+.PHONY: man
+man: $(MANPAGES) $(MANPAGES_ALIAS) $(HTML_FILES) $(HTML_ALIAS)
+
@ENABLE_MANPAGES_TRUE@docs/html/man:
@ENABLE_MANPAGES_TRUE@ $(AM_V_at)$(MKDIR_P) $(dir $@)
@ENABLE_MANPAGES_TRUE@ $(AM_V_LN)$(LN_S) -f ../../man $@
@@ -13136,7 +14391,7 @@ src/core/load-fragment-gperf-nulstr.c: src/core/load-fragment-gperf.gperf
src/core/syscall-list.txt: Makefile
$(AM_V_at)$(MKDIR_P) $(dir $@)
- $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include sys/syscall.h - < /dev/null | $(AWK) '/^#define[ \t]+__NR_[^ ]+[ \t]+[0-9(]/ { sub(/__NR_/, "", $$2); print $$2; }' > $@
+ $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include sys/syscall.h - < /dev/null | $(AWK) '/^#define[ \t]+__NR_[^ ]+[ \t]+[0-9(]/ { sub(/__NR_/, "", $$2); if ($$2 !~ /SYSCALL_BASE/) print $$2; }' > $@
src/core/syscall-from-name.gperf: src/core/syscall-list.txt Makefile
$(AM_V_at)$(MKDIR_P) $(dir $@)
@@ -13155,6 +14410,37 @@ org.freedesktop.systemd1.%.xml: systemd
$(STRINGS) $@.tmp | $(AWK) -f $(srcdir)/introspect.awk | \
$(DBUS_PREPROCESS) -o $@ - && rm $@.tmp
+# ------------------------------------------------------------------------------
+.PHONY: coverage lcov-run lcov-report
+
+# run lcov from scratch, always
+coverage:
+ $(MAKE) lcov-run
+ $(MAKE) lcov-report
+
+# reset run coverage tests
+@ENABLE_COVERAGE_TRUE@lcov-run:
+@ENABLE_COVERAGE_TRUE@ @rm -rf $(coverage_dir)
+@ENABLE_COVERAGE_TRUE@ lcov $(coverage_opts) --zerocounters
+@ENABLE_COVERAGE_TRUE@ -$(MAKE) check
+
+# generate report based on current coverage data
+@ENABLE_COVERAGE_TRUE@lcov-report:
+@ENABLE_COVERAGE_TRUE@ $(MKDIR_P) $(coverage_dir)
+@ENABLE_COVERAGE_TRUE@ lcov $(coverage_opts) --compat-libtool --capture --no-external \
+@ENABLE_COVERAGE_TRUE@ | sed 's|$(abspath $(builddir))|$(abspath $(srcdir))|' > $(coverage_dir)/.lcov.info
+@ENABLE_COVERAGE_TRUE@ genhtml -t "systemd test coverage" -o $(coverage_dir) $(coverage_dir)/.lcov.info
+@ENABLE_COVERAGE_TRUE@ @echo "Coverage report generated in $(abs_builddir)/$(coverage_dir)/index.html"
+
+# lcov doesn't work properly with vpath builds, make sure that bad
+# output is not uploaded by mistake.
+@ENABLE_COVERAGE_TRUE@coverage-sync: coverage
+@ENABLE_COVERAGE_TRUE@ test "$(builddir)" = "$(srcdir)"
+@ENABLE_COVERAGE_TRUE@ rsync -rlv --delete --omit-dir-times coverage/ $(www_target)/coverage
+
+@ENABLE_COVERAGE_FALSE@lcov-run lcov-report:
+@ENABLE_COVERAGE_FALSE@ echo "Need to reconfigure with --enable-coverage"
+
systemd-detect-virt-install-hook:
-$(SETCAP) cap_dac_override,cap_sys_ptrace=ep $(DESTDIR)$(bindir)/systemd-detect-virt
@@ -13180,6 +14466,19 @@ libudev-install-hook:
libudev-uninstall-hook:
rm -f $(DESTDIR)$(rootlibdir)/libudev.so*
+src/udev/keyboard-keys.txt: Makefile
+ $(AM_V_at)$(MKDIR_P) $(dir $@)
+ $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include linux/input.h - < /dev/null | $(AWK) '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
+
+src/udev/keyboard-keys-from-name.gperf: src/udev/keyboard-keys.txt Makefile
+ $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print tolower(substr($$1 ,5)) ", " $$1 }' < $< > $@
+
+src/udev/keyboard-keys-from-name.h: src/udev/keyboard-keys-from-name.gperf Makefile
+ $(AM_V_GPERF)$(GPERF) -L ANSI-C -t -N keyboard_lookup_key -H hash_key_name -p -C < $< > $@
+
+src/udev/keyboard-keys-to-name.h: src/udev/keyboard-keys.txt Makefile
+ $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
+
# Update hwdb on installation. Do not bother if installing
# in DESTDIR, since this is likely for packaging purposes.
hwdb-update-hook:
@@ -13220,19 +14519,6 @@ test-sys-distclean:
@ENABLE_GUDEV_TRUE@libgudev-uninstall-hook:
@ENABLE_GUDEV_TRUE@ rm -f $(DESTDIR)$(rootlibdir)/libgudev-1.0.so*
-@ENABLE_KEYMAP_TRUE@src/udev/keymap/keys.txt: Makefile
-@ENABLE_KEYMAP_TRUE@ $(AM_V_at)$(MKDIR_P) $(dir $@)
-@ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(CPP) $(CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -dM -include linux/input.h - < /dev/null | $(AWK) '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@
-
-@ENABLE_KEYMAP_TRUE@src/udev/keymap/keys-from-name.gperf: src/udev/keymap/keys.txt Makefile
-@ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@
-
-@ENABLE_KEYMAP_TRUE@src/udev/keymap/keys-from-name.h: src/udev/keymap/keys-from-name.gperf Makefile
-@ENABLE_KEYMAP_TRUE@ $(AM_V_GPERF)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@
-
-@ENABLE_KEYMAP_TRUE@src/udev/keymap/keys-to-name.h: src/udev/keymap/keys.txt Makefile
-@ENABLE_KEYMAP_TRUE@ $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
-
# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
libsystemd-id128-install-hook:
libname=libsystemd-id128.so && $(move-to-rootlibdir)
@@ -13297,6 +14583,10 @@ catalog-remove-hook:
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_V_GEN)PYTHONPATH=$(DESTDIR)$(pyexecdir) LD_LIBRARY_PATH=$(DESTDIR)$(libdir) $(SPHINX_BUILD) -b $* $(SPHINXOPTS) $(top_srcdir)/src/python-systemd/docs $(top_builddir)/docs/html/python-systemd/
@HAVE_PYTHON_DEVEL_TRUE@ $(AM_V_at)echo Output has been generated in $(abs_top_builddir)/docs/html/python-systemd/
+@HAVE_PYTHON_DEVEL_TRUE@python-shell:
+@HAVE_PYTHON_DEVEL_TRUE@ $(AM_V_at)echo "Starting python with $(DESTDIR)$(pyexecdir)"
+@HAVE_PYTHON_DEVEL_TRUE@ $(AM_V_at)PYTHONPATH=$(DESTDIR)$(pyexecdir) LD_LIBRARY_PATH=$(DESTDIR)$(libdir) $(PYTHON)
+
@HAVE_PYTHON_DEVEL_TRUE@destdir-sphinx: all
@HAVE_PYTHON_DEVEL_TRUE@ dir="$$(mktemp -d /tmp/systemd-install.XXXXXX)" && \
@HAVE_PYTHON_DEVEL_TRUE@ $(MAKE) DESTDIR="$$dir" install && \
@@ -13306,6 +14596,11 @@ catalog-remove-hook:
clean-sphinx:
-rm -rf docs/html/python-systemd/
+# Remove Python stuff, e.g. to force rebuilding for a different Python version.
+clean-python:
+ -rm -rf src/python-systemd/.libs src/python-systemd/*.l[ao]
+ -rm -f _daemon.la id128.la _journal.la login.la _reader.la
+
units/%: units/%.in Makefile
$(SED_PROCESS)
diff --git a/NEWS b/NEWS
index 6cfe0dfc59..557774dc1f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,432 @@
systemd System and Service Manager
+CHANGES WITH 208:
+
+ * logind has gained support for facilitating privileged input
+ and drm device access for unprivileged clients. This work is
+ useful to allow Wayland display servers (and similar
+ programs, such as kmscon) to run under the user's ID and
+ access input and drm devices which are normally
+ protected. When this is used (and the kernel is new enough)
+ logind will "mute" IO on the file descriptors passed to
+ Wayland as long as it is in the background and "unmute" it
+ if it returns into the foreground. This allows secure
+ session switching without allowing background sessions to
+ eavesdrop on input and display data. This also introduces
+ session switching support if VT support is turned off in the
+ kernel, and on seats that are not seat0.
+
+ * A new kernel command line option luks.options= is understood
+ now which allows specifiying LUKS options for usage for LUKS
+ encrypted partitions specified with luks.uuid=.
+
+ * tmpfiles.d(5) snippets may now use specifier expansion in
+ path names. More specifically %m, %b, %H, %v, are now
+ replaced by the local machine id, boot id, hostname, and
+ kernel version number.
+
+ * A new tmpfiles.d(5) command "m" has been introduced which
+ may be used to change the owner/group/access mode of a file
+ or directory if it exists, but do nothing if it doesn't.
+
+ * This release removes high-level support for the
+ MemorySoftLimit= cgroup setting. The underlying kernel
+ cgroup attribute memory.soft_limit= is currently badly
+ designed and likely to be removed from the kernel API in its
+ current form, hence we shouldn't expose it for now.
+
+ * The memory.use_hierarchy cgroup attribute is now enabled for
+ all cgroups systemd creates in the memory cgroup
+ hierarchy. This option is likely to be come the built-in
+ default in the kernel anyway, and the non-hierarchial mode
+ never made much sense in the intrinsically hierarchial
+ cgroup system.
+
+ * A new field _SYSTEMD_SLICE= is logged along with all journal
+ messages containing the slice a message was generated
+ from. This is useful to allow easy per-customer filtering of
+ logs among other things.
+
+ * systemd-journald will no longer adjust the group of journal
+ files it creates to the "systemd-journal" group. Instead we
+ rely on the journal directory to be owned by the
+ "systemd-journal" group, and its setgid bit set, so that the
+ kernel file system layer will automatically enforce that
+ journal files inherit this group assignment. The reason for
+ this change is that we cannot allow NSS look-ups from
+ journald which would be necessary to resolve
+ "systemd-journal" to a numeric GID, because this might
+ create deadlocks if NSS involves synchronous queries to
+ other daemons (such as nscd, or sssd) which in turn are
+ logging clients of journald and might block on it, which
+ would then dead lock. A tmpfiles.d(5) snippet included in
+ systemd will make sure the setgid bit and group are
+ properly set on the journal directory if it exists on every
+ boot. However, we recommend adjusting it manually after
+ upgrades too (or from RPM scriptlets), so that the change is
+ not delayed until next reboot.
+
+ * Backlight and random seed files in /var/lib/ have moved into
+ the /var/lib/systemd/ directory, in order to centralize all
+ systemd generated files in one directory.
+
+ * Boot time performance measurements (as displayed by
+ "systemd-analyze" for example) will now read ACPI 5.0 FPDT
+ performance information if that's available to determine how
+ much time BIOS and boot loader initialization required. With
+ a sufficiently new BIOS you hence no longer need to boot
+ with Gummiboot to get access to such information.
+
+ Contributions from: Andrey Borzenkov, Chen Jie, Colin Walters,
+ Cristian Rodríguez, Dave Reisner, David Herrmann, David
+ Mackey, David Strauss, Eelco Dolstra, Evan Callicoat, Gao
+ feng, Harald Hoyer, Jimmie Tauriainen, Kay Sievers, Lennart
+ Poettering, Lukas Nykryn, Mantas Mikulėnas, Martin Pitt,
+ Michael Scherer, Michał Górny, Mike Gilbert, Patrick McCarty,
+ Sebastian Ott, Tom Gundersen, Zbigniew Jędrzejewski-Szmek
+
+ -- Berlin, 2013-10-02
+
+CHANGES WITH 207:
+
+ * The Restart= option for services now understands a new
+ on-watchdog setting, which will restart the service
+ automatically if the service stops sending out watchdog keep
+ alive messages (as configured with WatchdogSec=).
+
+ * The getty generator (which is responsible for bringing up a
+ getty on configured serial consoles) will no longer only
+ start a getty on the primary kernel console but on all
+ others, too. This makes the order in which console= is
+ specified on the kernel command line less important.
+
+ * libsystemd-logind gained a new sd_session_get_vt() call to
+ retrieve the VT number of a session.
+
+ * If the option "tries=0" is set for an entry of /etc/crypttab
+ its passphrase is queried indefinitely instead of any
+ maximum number of tries.
+
+ * If a service with a configure PID file terminates its PID
+ file will now be removed automatically if it still exists
+ afterwards. This should put an end to stale PID files.
+
+ * systemd-run will now also take relative binary path names
+ for execution and no longer insists on absolute paths.
+
+ * InaccessibleDirectories= and ReadOnlyDirectories= now take
+ paths that are optionally prefixed with "-" to indicate that
+ it should not be considered a failure if they don't exist.
+
+ * journalctl -o (and similar commands) now understands a new
+ output mode "short-precise", it is similar to "short" but
+ shows timestamps with usec accuracy.
+
+ * The option "discard" (as known from Debian) is now
+ synonymous to "allow-discards" in /etc/crypttab. In fact,
+ "discard" is preferred now (since it is easier to remember
+ and type).
+
+ * Some licensing clean-ups were made, so that more code is now
+ LGPL-2.1 licensed than before.
+
+ * A minimal tool to save/restore the display backlight
+ brightness across reboots has been added. It will store the
+ backlight setting as late as possible at shutdown, and
+ restore it as early as possible during reboot.
+
+ * A logic to automatically discover and enable home and swap
+ partitions on GPT disks has been added. With this in place
+ /etc/fstab becomes optional for many setups as systemd can
+ discover certain partitions located on the root disk
+ automatically. Home partitions are recognized under their
+ GPT type ID 933ac7e12eb44f13b8440e14e2aef915. Swap
+ partitions are recognized under their GPT type ID
+ 0657fd6da4ab43c484e50933c84b4f4f.
+
+ * systemd will no longer pass any environment from the kernel
+ or initrd to system services. If you want to set an
+ environment for all services, do so via the kernel command
+ line systemd.setenv= assignment.
+
+ * The systemd-sysctl tool no longer natively reads the file
+ /etc/sysctl.conf. If desired, the file should be symlinked
+ from /etc/sysctl.d/99-sysctl.conf. Apart from providing
+ legacy support by a symlink rather than built-in code, it
+ also makes the otherwise hidden order of application of the
+ different files visible. (Note that this partly reverts to a
+ pre-198 application order of sysctl knobs!)
+
+ * The "systemctl set-log-level" and "systemctl dump" commands
+ have been moved to systemd-analyze.
+
+ * systemd-run learned the new --remain-after-exit switch,
+ which causes the scope unit not to be cleaned up
+ automatically after the process terminated.
+
+ * tmpfiles learned a new --exclude-prefix= switch to exclude
+ certain paths from operation.
+
+ * journald will now automatically flush all messages to disk
+ as soon as a message of the log priorities CRIT, ALERT or
+ EMERG is received.
+
+ Contributions from: Andrew Cook, Brandon Philips, Christian
+ Hesse, Christoph Junghans, Colin Walters, Daniel Schaal,
+ Daniel Wallace, Dave Reisner, David Herrmann, Gao feng, George
+ McCollister, Giovanni Campagna, Hannes Reinecke, Harald Hoyer,
+ Herczeg Zsolt, Holger Hans Peter Freyther, Jan Engelhardt,
+ Jesper Larsen, Kay Sievers, Khem Raj, Lennart Poettering,
+ Lukas Nykryn, Maciej Wereski, Mantas Mikulėnas, Marcel
+ Holtmann, Martin Pitt, Michael Biebl, Michael Marineau,
+ Michael Scherer, Michael Stapelberg, Michal Sekletar, Michał
+ Górny, Olivier Brunel, Ondrej Balaz, Ronny Chevalier, Shawn
+ Landden, Steven Hiscocks, Thomas Bächler, Thomas Hindoe
+ Paaboel Andersen, Tom Gundersen, Umut Tezduyar, WANG Chao,
+ William Giokas, Zbigniew Jędrzejewski-Szmek
+
+ -- Berlin, 2013-09-13
+
+CHANGES WITH 206:
+
+ * The documentation has been updated to cover the various new
+ concepts introduced with 205.
+
+ * Unit files now understand the new %v specifier which
+ resolves to the kernel version string as returned by "uname
+ -r".
+
+ * systemctl now supports filtering the unit list output by
+ load state, active state and sub state, using the new
+ --state= parameter.
+
+ * "systemctl status" will now show the results of the
+ condition checks (like ConditionPathExists= and similar) of
+ the last start attempts of the unit. They are also logged to
+ the journal.
+
+ * "journalctl -b" may now be used to look for boot output of a
+ specific boot. Try "journalctl -b -1" for the previous boot,
+ but the syntax is substantially more powerful.
+
+ * "journalctl --show-cursor" has been added which prints the
+ cursor string the last shown log line. This may then be used
+ with the new "journalctl --after-cursor=" switch to continue
+ browsing logs from that point on.
+
+ * "journalctl --force" may now be used to force regeneration
+ of an FSS key.
+
+ * Creation of "dead" device nodes has been moved from udev
+ into kmod and tmpfiles. Previously, udev would read the kmod
+ databases to pre-generate dead device nodes based on meta
+ information contained in kernel modules, so that these would
+ be auto-loaded on access rather then at boot. As this
+ doesn't really have much to do with the exposing actual
+ kernel devices to userspace this has always been slightly
+ alien in the udev codebase. Following the new scheme kmod
+ will now generate a runtime snippet for tmpfiles from the
+ module meta information and it now is tmpfiles' job to the
+ create the nodes. This also allows overriding access and
+ other parameters for the nodes using the usual tmpfiles
+ facilities. As side effect this allows us to remove the
+ CAP_SYS_MKNOD capability bit from udevd entirely.
+
+ * logind's device ACLs may now be applied to these "dead"
+ devices nodes too, thus finally allowing managed access to
+ devices such as /dev/snd/sequencer whithout loading the
+ backing module right-away.
+
+ * A new RPM macro has been added that may be used to apply
+ tmpfiles configuration during package installation.
+
+ * systemd-detect-virt and ConditionVirtualization= now can
+ detect User-Mode-Linux machines (UML).
+
+ * journald will now implicitly log the effective capabilities
+ set of processes in the message metadata.
+
+ * systemd-cryptsetup has gained support for TrueCrypt volumes.
+
+ * The initrd interface has been simplified (more specifically,
+ support for passing performance data via environment
+ variables and fsck results via files in /run has been
+ removed). These features were non-essential, and are
+ nowadays available in a much nicer way by having systemd in
+ the initrd serialize its state and have the hosts systemd
+ deserialize it again.
+
+ * The udev "keymap" data files and tools to apply keyboard
+ specific mappings of scan to key codes, and force-release
+ scan code lists have been entirely replaced by a udev
+ "keyboard" builtin and a hwdb data file.
+
+ * systemd will now honour the kernel's "quiet" command line
+ argument also during late shutdown, resulting in a
+ completely silent shutdown when used.
+
+ * There's now an option to control the SO_REUSEPORT socket
+ option in .socket units.
+
+ * Instance units will now automatically get a per-template
+ subslice of system.slice unless something else is explicitly
+ configured. For example, instances of sshd@.service will now
+ implicitly be placed in system-sshd.slice rather than
+ system.slice as before.
+
+ * Test coverage support may now be enabled at build time.
+
+ Contributions from: Dave Reisner, Frederic Crozat, Harald
+ Hoyer, Holger Hans Peter Freyther, Jan Engelhardt, Jan
+ Janssen, Jason St. John, Jesper Larsen, Kay Sievers, Lennart
+ Poettering, Lukas Nykryn, Maciej Wereski, Martin Pitt, Michael
+ Olbrich, Ramkumar Ramachandra, Ross Lagerwall, Shawn Landden,
+ Thomas H.P. Andersen, Tom Gundersen, Tomasz Torcz, William
+ Giokas, Zbigniew Jędrzejewski-Szmek
+
+ -- Berlin, 2013-07-23
+
+CHANGES WITH 205:
+
+ * Two new unit types have been introduced:
+
+ Scope units are very similar to service units, however, are
+ created out of pre-existing processes -- instead of PID 1
+ forking off the processes. By using scope units it is
+ possible for system services and applications to group their
+ own child processes (worker processes) in a powerful way
+ which then maybe used to organize them, or kill them
+ together, or apply resource limits on them.
+
+ Slice units may be used to partition system resources in an
+ hierarchial fashion and then assign other units to them. By
+ default there are now three slices: system.slice (for all
+ system services), user.slice (for all user sessions),
+ machine.slice (for VMs and containers).
+
+ Slices and scopes have been introduced primarily in
+ context of the work to move cgroup handling to a
+ single-writer scheme, where only PID 1
+ creates/removes/manages cgroups.
+
+ * There's a new concept of "transient" units. In contrast to
+ normal units these units are created via an API at runtime,
+ not from configuration from disk. More specifically this
+ means it is now possible to run arbitrary programs as
+ independent services, with all execution parameters passed
+ in via bus APIs rather than read from disk. Transient units
+ make systemd substantially more dynamic then it ever was,
+ and useful as a general batch manager.
+
+ * logind has been updated to make use of scope and slice units
+ for managing user sessions. As a user logs in he will get
+ his own private slice unit, to which all sessions are added
+ as scope units. We also added support for automatically
+ adding an instance of user@.service for the user into the
+ slice. Effectively logind will no longer create cgroup
+ hierarchies on its own now, it will defer entirely to PID 1
+ for this by means of scope, service and slice units. Since
+ user sessions this way become entities managed by PID 1
+ the output of "systemctl" is now a lot more comprehensive.
+
+ * A new mini-daemon "systemd-machined" has been added which
+ may be used by virtualization managers to register local
+ VMs/containers. nspawn has been updated accordingly, and
+ libvirt will be updated shortly. machined will collect a bit
+ of meta information about the VMs/containers, and assign
+ them their own scope unit (see above). The collected
+ meta-data is then made available via the "machinectl" tool,
+ and exposed in "ps" and similar tools. machined/machinectl
+ is compile-time optional.
+
+ * As discussed earlier, the low-level cgroup configuration
+ options ControlGroup=, ControlGroupModify=,
+ ControlGroupPersistent=, ControlGroupAttribute= have been
+ removed. Please use high-level attribute settings instead as
+ well as slice units.
+
+ * A new bus call SetUnitProperties() has been added to alter
+ various runtime parameters of a unit. This is primarily
+ useful to alter cgroup parameters dynamically in a nice way,
+ but will be extended later on to make more properties
+ modifiable at runtime. systemctl gained a new set-properties
+ command that wraps this call.
+
+ * A new tool "systemd-run" has been added which can be used to
+ run arbitrary command lines as transient services or scopes,
+ while configuring a number of settings via the command
+ line. This tool is currently very basic, however already
+ very useful. We plan to extend this tool to even allow
+ queuing of execution jobs with time triggers from the
+ command line, similar in fashion to "at".
+
+ * nspawn will now inform the user explicitly that kernels with
+ audit enabled break containers, and suggest the user to turn
+ off audit.
+
+ * Support for detecting the IMA and AppArmor security
+ frameworks with ConditionSecurity= has been added.
+
+ * journalctl gained a new "-k" switch for showing only kernel
+ messages, mimicking dmesg output; in addition to "--user"
+ and "--system" switches for showing only user's own logs
+ and system logs.
+
+ * systemd-delta can now show information about drop-in
+ snippets extending unit files.
+
+ * libsystemd-bus has been substantially updated but is still
+ not available as public API.
+
+ * systemd will now look for the "debug" argument on the kernel
+ command line and enable debug logging, similar to
+ "systemd.log_level=debug" already did before.
+
+ * "systemctl set-default", "systemctl get-default" has been
+ added to configure the default.target symlink, which
+ controls what to boot into by default.
+
+ * "systemctl set-log-level" has been added as a convenient
+ way to raise and lower systemd logging threshold.
+
+ * "systemd-analyze plot" will now show the time the various
+ generators needed for execution, as well as information
+ about the unit file loading.
+
+ * libsystemd-journal gained a new sd_journal_open_files() call
+ for opening specific journal files. journactl also gained a
+ new switch to expose this new functionality. Previously we
+ only supported opening all files from a directory, or all
+ files from the system, as opening individual files only is
+ racy due to journal file rotation.
+
+ * systemd gained the new DefaultEnvironment= setting in
+ /etc/systemd/system.conf to set environment variables for
+ all services.
+
+ * If a privileged process logs a journal message with the
+ OBJECT_PID= field set, then journald will automatically
+ augment this with additional OBJECT_UID=, OBJECT_GID=,
+ OBJECT_COMM=, OBJECT_EXE=, ... fields. This is useful if
+ system services want to log events about specific client
+ processes. journactl/systemctl has been updated to make use
+ of this information if all log messages regarding a specific
+ unit is requested.
+
+ Contributions from: Auke Kok, Chengwei Yang, Colin Walters,
+ Cristian Rodríguez, Daniel Albers, Daniel Wallace, Dave
+ Reisner, David Coppa, David King, David Strauss, Eelco
+ Dolstra, Gabriel de Perthuis, Harald Hoyer, Jan Alexander
+ Steffens, Jan Engelhardt, Jan Janssen, Jason St. John, Johan
+ Heikkilä, Karel Zak, Karol Lewandowski, Kay Sievers, Lennart
+ Poettering, Lukas Nykryn, Mantas Mikulėnas, Marius Vollmer,
+ Martin Pitt, Michael Biebl, Michael Olbrich, Michael Tremer,
+ Michal Schmidt, Michał Bartoszkiewicz, Nirbheek Chauhan,
+ Pierre Neidhardt, Ross Burton, Ross Lagerwall, Sean McGovern,
+ Thomas Hindoe Paaboel Andersen, Tom Gundersen, Umut Tezduyar,
+ Václav Pavlín, Zachary Cook, Zbigniew Jędrzejewski-Szmek,
+ Łukasz Stelmach, 장동준
+
CHANGES WITH 204:
* The Python bindings gained some minimal support for the APIs
@@ -1798,7 +2225,7 @@ CHANGES WITH 41:
understood to set system wide environment variables
dynamically at boot.
- * We now limit the set of capabilities of systemd-journald.
+ * We now limit the set of capabilities of systemd-journald.
* We now set SIGPIPE to ignore by default, since it only is
useful in shell pipelines, and has little use in general
diff --git a/README b/README
index b8d1f42e25..b39cd377df 100644
--- a/README
+++ b/README
@@ -31,10 +31,12 @@ AUTHOR:
LICENSE:
LGPLv2.1+ for all code
- except sd-daemon.[ch] and sd-readahead.[ch] which are MIT
- - except src/udev/ which is (currently still) GPLv2+
+ - except src/shared/MurmurHash3.c which is Public Domain
+ - except src/journal/lookup3.c which is Public Domain
+ - except src/udev/* which is (currently still) GPLv2, GPLv2+
REQUIREMENTS:
- Linux kernel >= 2.6.39
+ Linux kernel >= 3.0
CONFIG_DEVTMPFS
CONFIG_CGROUPS (it's OK to disable all controllers)
CONFIG_INOTIFY_USER
@@ -62,6 +64,10 @@ REQUIREMENTS:
Mount and bind mount handling might require it:
CONFIG_FHANDLE
+ Support for some SCSI devices serial number retrieval, to
+ create additional symlinks in /dev/disk/ and /dev/tape:
+ CONFIG_BLK_DEV_BSG
+
Optional but strongly recommended:
CONFIG_IPV6
CONFIG_AUTOFS4_FS
@@ -79,10 +85,17 @@ REQUIREMENTS:
CONFIG_EFI_VARS
CONFIG_EFI_PARTITION
+ Note that kernel auditing is broken when used with systemd's
+ container code. When using systemd in conjunction with
+ containers please make sure to either turn off auditing at
+ runtime using the kernel command line option "audit=0", or
+ turn it off at kernel compile time using:
+ CONFIG_AUDIT=n
+
dbus >= 1.4.0
libcap
libblkid >= 2.20 (from util-linux) (optional)
- libkmod >= 5 (optional)
+ libkmod >= 14 (optional)
PAM >= 1.1.2 (optional)
libcryptsetup (optional)
libaudit (optional)
diff --git a/TODO b/TODO
index 4f5af140f0..07269f47d2 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,9 @@
Bugfixes:
-* systemctl status *.path shows all logs, not only the ones since the unit is
- active
+
+* enabling an instance unit creates pointless link, and
+ the unit will be started with getty@getty.service:
+ $ systemctl enable getty@.service
+ ln -s '/usr/lib/systemd/system/getty@.service' '/etc/systemd/system/getty.target.wants/getty@.service'
* check systemd-tmpfiles for selinux context hookup for mknod(), symlink() and similar
@@ -14,30 +17,193 @@ Bugfixes:
* properly handle .mount unit state tracking when two mount points are stacked one on top of another on the exact same mount point.
-Fedora 19:
+* ellipsize_mem must take into account multi-byte unicode characters, and
+ - make the resulting line the requested number of *characters*, not *bytes*,
+ - avoid truncuating multi-byte sequences in the middle.
+
+* When we detect invalid UTF-8, we cant't use it in an error message:
+ log...("Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
+
+* shorten the message to sane length:
-* external: maybe it is time to patch procps so that "ps" links to
- libsystemd-logind to print a pretty service name, seat name, session
- name in its output. Currently it only shows cgroup membership, but
- that's sometimes kinda hard to parse for a human.
+ Cannot add dependency job for unit display-manager.service, ignoring: Unit display-manager.service failed to load: No such file or directory. See system logs and 'systemctl status display-manager.service' for details.
-* cgroup attrs:
- - update dbus interface docs in wiki
+Fedora 20:
+
+* external: ps should gain colums for slice and machine
* localed:
- localectl: support new converted x11→console keymaps
+* when installing fedora with yum --installroot /var/run is a directory, not a symlink
+ https://bugzilla.redhat.com/show_bug.cgi?id=975864
+
+CGroup Rework Completion:
+
+* introduce "mainpid" for scopes (or maybe not?)
+
+* implement system-wide DefaultCPUAccounting=1 switch (and similar for blockio, memory?)
+
+* implement per-slice CPUFairScheduling=1 switch
+
+* handle jointly mounted controllers correctly
+
+* introduce high-level settings for RT budget, swappiness
+
+* wiki: guidelines how to make use of new cgroup apis
+
Features:
+* set $SHELL where we set $HOME and $USER when User= is set of a service, drop its manual setting from user@.service
+
+* we probably should replace the left-over uses of strv_append() and replace them by strv_push() or strv_extend()
+
+* move config_parse_path_strv() out of conf-parser.c
+
+* libdsystemd-bus should expose utf8 validation calls
+
+* After coming back from hibernation reset hibernation swap partition
+
+* If we try to find a unit via a dangling symlink generate a clean
+ error. Currently we just ignore it and read the unit from the search
+ path anyway.
+
+* When a Type=forking service fails and needed another service that
+ service is not cleaned up again when it has StopWhenUnneeded=yes
+ http://lists.freedesktop.org/archives/systemd-devel/2013-July/012141.html
+
+* backlight: properly handle multiple backlight devices for the same
+ hardware: at shutdown we should only save the backlight setting for
+ the "best" way to access the backlight. Strategy should be: at
+ shutdown, ignore all backlights that are connected to a non-eDP or
+ non-LVDS port, and then prefer the firmware device over platform
+ device over raw device per-PCI card. Delete all old data. At boot
+ simply apply whatever data we find. Also see
+ http://cgit.freedesktop.org/libbacklight/tree/libbacklight.c#n194
+
+* rfkill: save/restore soft rfkill status across reboots
+
+* refuse boot if /etc/os-release is missing or /etc/machine-id cannot be set up
+
+* ensure scope units may be started only a single time
+
+* document that in instead of FsckPassNo= people should just add a manual dep to systemd-fsck@.service to their mount units.
+
+* better error message if you run systemctl without systemd running
+
+* systemctl status output should should include list of triggering units and their status
+
+* for transient units, instead of writing out drop-ins for all properties consider serializing them in the normal serialization stream
+
+* logind: when logging out, remove user-owned sysv and posix IPC objects
+
+* session scopes/user unit: add RequiresMountsFor for the home directory of the user
+
+* add a man page containing packaging guidelines and recommending usage of things like Documentation=, PrivateTmp=, PrivateNetwork= and ReadOnlyDirectories=/etc /usr.
+
+* journalctl: instead --after-cursor= maybe have a --cursor=XYZ+1 syntax?
+
+* given that logind/machined now let PID 1 do all nasty work we can
+ probably reduce the capability set they retain substantially.
+
+* btrfs raid assembly: some .device jobs stay stuck in the queue
+
+* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
+
+* Fedora: post FPC ticket to move add %tmpfiles_create to the packaging guidelines
+
+* make sure gdm doesn't use multi-user-x but the new default X configuration file, and then remove multi-user-x from systemd
+
+* when parsing calendar timestamps support the UTC timezone (even if we won't support arbitrary timezone specs, support UTC itself certainly makes sense), also support syntaxes such as +0200
+
+* when a kernel driver logs in a tight loop we should ratelimit that too.
+
+* "systemctl disable" of a unit instance removes all symlinks, should
+ only remove the instance symlink (systemctl disable of a template
+ unit however should remove them all).
+
+* journald: optionally, log debug messages to /run but everything else to /var
+
+* systemctl list-unit-files should list generated files (and probably with a new state "generated" for them, or so)
+
+* journald: when we drop syslog messages because the syslog socket is
+ full, make sure to write how many messages are lost as first thing
+ to syslog when it works again.
+
+* man: the documentation of Restart= currently is very misleading and suggests the tools from ExecStartPre= might get restarted.
+
+* load .d/*.conf dropins for device units
+
+* add a fixed dbus path for "my own unit", "my own session", ... to PID1, logind, ...
+
+* service_coldplug() appears to reinstall the wrong stop timeout watch?
+
+* transient units: allow creating auxiliary units with the same call
+
+* how to reset dynamically changed attributes sanely?
+
+* when reloading configuration, apply new cgroup configuration
+
+* journald: make sure ratelimit is actually really per-service with the new cgroup changes
+
+* gparted needs to disable auto-activation of mount units somehow, or
+ maybe we should stop doing auto-activation of this after boot
+ entirely. https://bugzilla.gnome.org/show_bug.cgi?id=701676
+ Maybe take a BSD lock at the disk device node and teach udev to
+ check for that and suppress event handling.
+
+* when recursively showing the cgroup hierarchy, optionally also show
+ the hierarchies of child processes
+
+* document logic of auto/noauto and fail/nofail in fstab in systemd.mount or systemd-fstab-generator man page
+
+* we should properly escape ssh hostnames we add into dbus server strings
+
+* something pulls in pcre as so dep into our daemons such as hostnamed.
+
+* document systemd-journal-flush.service properly
+
+* change systemd-journal-flush into a service that stays around during
+ boot, and causes the journal to be moved back to /run on shutdown,
+ so that we don't keep /var busy. This needs to happen synchronously,
+ hence doing this via signals is not going to work.
+
+* allow implementation of InaccessibleDirectories=/ plus
+ ReadOnlyDirectories=... for whitelisting files for a service.
+
+* libsystemd-bus:
+ - default policy (allow uid == 0 and our own uid)
+ - enforce alignment of pointers passed in
+ - when kdbus doesn't take our message without memfds, try again with memfds
+ - implement translator service
+ - port systemd to new library
+ - implement busname unit type in systemd
+ - move to gvariant
+ - merge busctl into systemctl or so?
+ - synthesize sd_bus_message objects from kernel messages
+ - properly implement name registry ioctls for kdbus
+ - get rid of object hash table, use decision tree everyhwere instead?
+ - implement monitor logic
+ - object vtable logic
+ - longer term:
+ * priority queues
+ * priority inheritance
+
+* in the final killing spree, detect processes from the root directory, and
+ complain loudly if they have argv[0][0] == '@' set.
+ https://bugzilla.redhat.com/show_bug.cgi?id=961044
+
+* add an option to nspawn that uses seccomp to make socket(AF_NETLINK,
+ SOCK_RAW, NETLINK_AUDIT) fail the the appropriate error code that
+ makes the audit userspace to think auditing is not available in the
+ kernel.
+
* Introduce a way how we can kill the main process of a service with KillSignal, but all processes with SIGKILL later on
https://bugzilla.redhat.com/show_bug.cgi?id=952634
-* maybe add a warning to the unit file parses whern the acces mode of unit files is non-sensical.
-
-* investigate endianess issues of UUID vs. GUID
+* maybe add a warning to the unit file parses where the access mode of unit files is nonsensical.
-* see if we can fix https://bugs.freedesktop.org/show_bug.cgi?id=63672
- without dropping the location cache entirely.
+* investigate endianness issues of UUID vs. GUID
* dbus: when a unit failed to load (i.e. is in UNIT_ERROR state), we
should be able to safely try another attempt when the bus call LoadUnit() is invoked.
@@ -57,10 +223,6 @@ Features:
* logind: add Suspend() bus calls which take timestamps to fix double suspend issues when somebody hits suspend and closes laptop quickly.
-* we need dynamic units
-
-* add s.th. like "systemctl set-log-level debug"
-
* cgtop: make cgtop useful in a container
* test/:
@@ -68,41 +230,24 @@ Features:
- make stuff in test/ work with separate output dir
- remove all the duplicated code in test/
-* suppress log output on shutdown when "quiet" is used
-
* systemctl delete x.snapshot leaves no trace in logs (at least at default level).
* make the coredump collector tool move itself into the user's cgroup
so that the coredump is properly written to the user's own journal
file.
-* move /usr/lib/modules/$(uname -r)/modules.devname parsing from udevd to
- kmod static-nodes
- call kmod as an early service, and drop CAP_MKNOD from udevd.service
-
-* systemd-delta needs to be made aware of *.d/*.conf drop-in files for
- units.
-
* seems that when we follow symlinks to units we prefer the symlink
destination path over /etc and /usr. We shouldn't do that. Instead
/etc should always override /run+/usr and also any symlink
destination.
-* remove duplicate default deps logic from fstab-generator vs. mount.c
-
* when isolating, try to figure out a way how we implicitly can order
all units we stop before the isolating unit...
-* teach udev + logind's uaccess to somehow handle the "dead" device nodes from:
- /lib/modules/$(uname -r)/modules.devname
- and apply ACLs to them if they have TAG=="uaccess" in udev rules.
-
* add ConditionArchitecture= or so
* teach ConditionKernelCommandLine= globs or regexes (in order to match foobar={no,0,off})
-* we should log capabilities too
-
* Support SO_REUSEPORT with socket activation:
- Let systemd maintain a pool of servers.
- Use for seamless upgrades, by running the new server before stopping the
@@ -123,7 +268,7 @@ Features:
and we might want to requeue the mounts local-fs acquired through
that automatically.
-* rework specifier logic so that we can distuingish OOM errors from other errors
+* rework specifier logic so that we can distinguish OOM errors from other errors
* systemd-inhibit: make taking delay locks useful: support sending SIGINT or SIGTERM on PrepareForSleep()
@@ -133,13 +278,13 @@ Features:
* documentation: recommend to connect the timer units of a service to the service via Also= in [Install]
-* add a tool that lists active timer units plus their next elapstion and the time the units ran last
+* add a tool that lists active timer units plus their next elapse and the time the units ran last
* man: document the very specific env the shutdown drop-in tools live in
* shutdown logging: store to EFI var, and store to USB stick?
-* man: extend runlevel(8) to mention that runlevels suck, and are dead. Maybe add runlevel(7) with a note about that too
+* man: extend runlevel(8) to mention that runlevels suck, and are dead. Maybe add runlevel(7) with a note about that too
* systemctl: maybe add "systemctl add-wants" or so...
@@ -160,9 +305,6 @@ Features:
* timedate: have global on/off switches for auto-time (NTP), and auto-timezone that connman can subscribe to.
-* Honour "-" prefix for InaccessibleDirectories= and ReadOnlyDirectories= to
- suppress errors of the specified path doesn't exist
-
* dev-setup.c: when running in a container, create a tiny stub udev
database with the systemd tag set for all network interfaces found,
so that libudev reports them as present, and systemd's .device units
@@ -177,7 +319,7 @@ Features:
- write man page for efi boot generator
- honor language efi variables for default language selection (if there are any?)
- honor timezone efi variables for default timezone selection (if there are any?)
- - introduce bootctl (backed by systemd-bootd) to control temporary and persistent default boot goal plus efi variables
+ - change bootctl to be backed by systemd-bootd to control temporary and persistent default boot goal plus efi variables
* maybe do not install getty@tty1.service symlink in /etc but in /usr?
@@ -196,7 +338,6 @@ Features:
- logind: wakelock/opportunistic suspend support
- Add pretty name for seats in logind
- logind: allow showing logout dialog from system?
- - logind: spawn user@..service on login
- logind: non-local X11 server handling
- logind: add equivalent to sd_pid_get_owner_uid() to the D-Bus API
- pam: when leaving a session explicitly exclude the ReleaseSession() caller process from the killing spree
@@ -205,8 +346,6 @@ Features:
* exec: when deinitializating a tty device fix the perms and group, too, not only when initializing. Set access mode/gid to 0620/tty.
-* DeviceAllow/DeviceDeny: disallow everything by default, but whitelist /dev/zero, /dev/null and friends
-
* service: watchdog logic: for testing purposes allow ping, but do not require pong
* journal:
@@ -235,14 +374,13 @@ Features:
- journal-send.c, log.c: when the log socket is clogged, and we drop, count this and write a message about this when it gets unclogged again.
- journal: find a way to allow dropping history early, based on priority, other rules
- journal: When used on NFS, check payload hashes
- - Introduce journalctl -b <nr> to show journal messages of a previous boot
- journald: check whether it is OK if the client can still modify delivered journal entries
- journal live copy, based on libneon (client) and libmicrohttpd (server)
- journald: add kernel cmdline option to disable ratelimiting for debug purposes
- refuse taking lower-case variable names in sd_journal_send() and friends.
- journald: we currently rotate only after MaxUse+MaxFilesize has been reached.
- journal: deal nicely with byte-by-byte copied files, especially regards header
- - journalctl: show multiline log messages sanely, expand tabs, and show all valid utf8 messages
+ - journalctl: expand tabs
- journal: store euid in journal if it differs from uid
- journal: sanely deal with entries which are larger than the individual file size, but where the components would fit
- Replace utmp, wtmp, btmp, and lastlog completely with journal
@@ -295,10 +433,6 @@ Features:
mode, it will never touch the RTC if the no reliable time source is active or the
user did not request anything like it.
-* hwdb:
- - implement conditional properties (dmi matches)
- - hwdb --filter=ID_DRIVE_*
-
* if booted in "quiet" mode, and an error happens, turn on status
output again, so that the emergency mode isn't totally
surprising. Also, terminate plymouth.
@@ -386,8 +520,6 @@ Features:
* Query Paul Moore about relabelling socket fds while they are open
-* system.conf should have controls for cgroups
-
* allow writing multiple conditions in unit files on one line
* explore multiple service instances per listening socket idea
@@ -405,8 +537,6 @@ Features:
when done. That means clients don't get a successful method reply,
but much rather a disconnect on success.
-* remember which condition failed for services, not just the fact that something failed
-
* use opterr = 0 for all getopt tools
* properly handle loop back mounts via fstab, especially regards to fsck/passno
@@ -454,12 +584,9 @@ Features:
* ExecOnFailure=/usr/bin/foo
-* ConditionSecurity= should learn about IMA and SMACK
-
* udev:
- remove src/udev/udev-builtin-firmware.c (CONFIG_FW_LOADER_USER_HELPER=n)
- move to LGPL
- - unify utf8 validator code with shared/
- kill scsi_id
- add trigger --subsystem-match=usb/usb_device device
@@ -483,10 +610,6 @@ Features:
* support crash reporting operation modes (https://live.gnome.org/GnomeOS/Design/Whiteboards/ProblemReporting)
-* clean up session cgroups that remain after logout (think sshd), but eventually run empty
-
-* when an instanced service exits, remove its parent cgroup too if possible.
-
* default to actual 32bit PIDs, via /proc/sys/kernel/pid_max
* be able to specify a forced restart of service A where service B depends on, in case B
@@ -520,6 +643,8 @@ Features:
when we start a service in order to avoid confusion when a user
assumes starting a service is enough to make it accessible
+* support User= and Group= attributes for AF_UNIX sockets.
+
* Make it possible to set the keymap independently from the font on
the kernel cmdline. Right now setting one resets also the other.
@@ -597,6 +722,8 @@ Features:
- document initcall_debug
- kernel cmdline "bootchart" option for simplicity?
+* systemd-run is missing zsh completion scripts
+
External:
* dbus:
diff --git a/aclocal.m4 b/aclocal.m4
index 7c62087a55..fe24920ca5 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.13.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -489,7 +489,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.13'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.13.1], [],
+m4_if([$1], [1.13.4], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -505,7 +505,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.13.1])dnl
+[AM_AUTOMAKE_VERSION([1.13.4])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -827,7 +827,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
+ test -z "$am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
@@ -1663,76 +1663,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
# $(am__untar) < result.tar
+#
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AC_SUBST([AMTAR], ['$${TAR-tar}'])
-m4_if([$1], [v7],
- [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
- [m4_case([$1], [ustar],, [pax],,
- [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
+
+# We'll loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of '-'.
-for _am_tool in $_am_tools
-do
- case $_am_tool in
- gnutar)
- for _am_tar in tar gnutar gtar;
- do
- AM_RUN_LOG([$_am_tar --version]) && break
- done
- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
- am__untar="$_am_tar -xf -"
- ;;
- plaintar)
- # Must skip GNU tar: if it does not support --format= it doesn't create
- # ustar tarball either.
- (tar --version) >/dev/null 2>&1 && continue
- am__tar='tar chf - "$$tardir"'
- am__tar_='tar chf - "$tardir"'
- am__untar='tar xf -'
- ;;
- pax)
- am__tar='pax -L -x $1 -w "$$tardir"'
- am__tar_='pax -L -x $1 -w "$tardir"'
- am__untar='pax -r'
- ;;
- cpio)
- am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
- am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
- am__untar='cpio -i -H $1 -d'
- ;;
- none)
- am__tar=false
- am__tar_=false
- am__untar=false
- ;;
- esac
- # If the value was cached, stop now. We just wanted to have am__tar
- # and am__untar set.
- test -n "${am_cv_prog_tar_$1}" && break
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
- # tar/untar a dummy directory, and stop if the command works
- rm -rf conftest.dir
- mkdir conftest.dir
- echo GrepMe > conftest.dir/file
- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
rm -rf conftest.dir
- if test -s conftest.tar; then
- AM_RUN_LOG([$am__untar <conftest.tar])
- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
- fi
-done
-rm -rf conftest.dir
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 1804e9fcdc..b79252d6b1 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,10 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012, 2013 Free Software Foundation, Inc.
+# Copyright 1992-2013 Free Software Foundation, Inc.
-timestamp='2012-12-29'
+timestamp='2013-06-10'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -26,7 +24,7 @@ timestamp='2012-12-29'
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
#
-# Originally written by Per Bothner.
+# Originally written by Per Bothner.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
@@ -52,9 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -136,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ ;;
+esac
+
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -857,21 +874,21 @@ EOF
exit ;;
*:GNU:*:*)
# the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
aarch64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -884,59 +901,54 @@ EOF
EV68*) UNAME_MACHINE=alphaev68 ;;
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arm*:Linux:*:*)
eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
fi
fi
exit ;;
avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
cris:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
crisv32:Linux:*:*)
- echo ${UNAME_MACHINE}-axis-linux-gnu
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
frv:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
hexagon:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:Linux:*:*)
- LIBC=gnu
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
@@ -955,54 +967,63 @@ EOF
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
+ or1k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
or32:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
+ echo sparc-unknown-linux-${LIBC}
exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
+ echo hppa64-unknown-linux-${LIBC}
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
esac
exit ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
+ echo powerpc64-unknown-linux-${LIBC}
exit ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
tile*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1235,19 +1256,21 @@ EOF
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- i386)
- eval $set_cc_for_build
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- UNAME_PROCESSOR="x86_64"
- fi
- fi ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 52f04bcd71..c765b34b7b 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,10 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-# 2011, 2012, 2013 Free Software Foundation, Inc.
+# Copyright 1992-2013 Free Software Foundation, Inc.
-timestamp='2012-12-29'
+timestamp='2013-04-24'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -70,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-2012, 2013 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -256,7 +252,7 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc \
+ | arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| be32 | be64 \
@@ -290,16 +286,17 @@ case $basic_machine in
| mipsisa64r2 | mipsisa64r2el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
| moxie \
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
- | nios | nios2 \
+ | nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
| open8 \
- | or32 \
+ | or1k | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
@@ -369,7 +366,7 @@ case $basic_machine in
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| be32-* | be64-* \
@@ -407,12 +404,13 @@ case $basic_machine in
| mipsisa64r2-* | mipsisa64r2el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
| orion-* \
@@ -1354,7 +1352,7 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* \
+ | -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1500,9 +1498,6 @@ case $os in
-aros*)
os=-aros
;;
- -kaos*)
- os=-kaos
- ;;
-zvmoe)
os=-zvmoe
;;
@@ -1594,6 +1589,9 @@ case $basic_machine in
mips*-*)
os=-elf
;;
+ or1k-*)
+ os=-elf
+ ;;
or32-*)
os=-coff
;;
diff --git a/build-aux/depcomp b/build-aux/depcomp
index 06b0882dd0..4ebd5b3a2f 100755
--- a/build-aux/depcomp
+++ b/build-aux/depcomp
@@ -1,7 +1,7 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2012-10-18.11; # UTC
+scriptversion=2013-05-30.07; # UTC
# Copyright (C) 1999-2013 Free Software Foundation, Inc.
@@ -552,6 +552,7 @@ $ {
G
p
}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
rm -f "$tmpdepfile"
;;
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
index 0af95975a7..63ae69dc6f 100644
--- a/build-aux/ltmain.sh
+++ b/build-aux/ltmain.sh
@@ -82,7 +82,6 @@ PROGRAM=libtool
PACKAGE=libtool
VERSION=2.4.2
TIMESTAMP=""
-: ${DD=dd}
package_revision=1.3337
# Be Bourne compatible
@@ -1225,21 +1224,6 @@ func_enable_tag "$optarg"
## Main. ##
## ----------- ##
-# func_try_sizelim file n
-# try to write at most the first N bytes from FILE to the standard output when
-# possible, otherwise put whole file
-func_try_sizelim ()
-{
- if test -n "$DD"; then
- $DD if="$1" bs=$2 count=1 2>/dev/null
- if test $? -eq 127; then
- cat "$1" 2>/dev/null
- fi
- else
- cat "$1" 2>/dev/null
- fi
-}
-
# func_lalib_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
# This function is only a basic sanity check; it will hardly flush out
@@ -1247,7 +1231,7 @@ func_try_sizelim ()
func_lalib_p ()
{
test -f "$1" &&
- func_try_sizelim "$1" 4096 | $SED -e 4q 2>/dev/null \
+ $SED -e 4q "$1" 2>/dev/null \
| $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
}
diff --git a/catalog/systemd.catalog b/catalog/systemd.catalog
index 62635c87b0..892b2adf78 100644
--- a/catalog/systemd.catalog
+++ b/catalog/systemd.catalog
@@ -138,7 +138,7 @@ Subject: Time zone change to @TIMEZONE@
Defined-By: systemd
Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-The system time zone has been changed to @TIMEZONE@.
+The system timezone has been changed to @TIMEZONE@.
-- b07a249cd024414a82dd00cd181378ff
Subject: System start-up is now complete
@@ -269,3 +269,21 @@ This does not interfere with mounting, but the pre-exisiting files in
this directory become inaccessible. To see those over-mounted files,
please manually mount the underlying file system to a secondary
location.
+
+-- 24d8d4452573402496068381a6312df2
+Subject: A virtual machine or container has been started
+Defined-By: systemd
+Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+
+The virtual machine @NAME@ with its leader PID @LEADER@ has been
+started is now ready to use.
+
+-- 58432bd3bace477cb514b56381b8a758
+Subject: A virtual machine or container has been terminated
+Defined-By: systemd
+Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
+Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@
+
+The virtual machine @NAME@ with its leader PID @LEADER@ has been
+shut down.
diff --git a/config.h.in b/config.h.in
index 8208fcc94f..391f6bd953 100644
--- a/config.h.in
+++ b/config.h.in
@@ -96,9 +96,15 @@
/* Have tcpwrap? */
#undef HAVE_LIBWRAP
+/* Define to 1 if you have the <linux/btrfs.h> header file. */
+#undef HAVE_LINUX_BTRFS_H
+
/* Logind support available */
#undef HAVE_LOGIND
+/* Machined support available */
+#undef HAVE_MACHINED
+
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#undef HAVE_MALLOC
@@ -145,6 +151,9 @@
/* Define if SELinux is available */
#undef HAVE_SELINUX
+/* Define if SMACK is available */
+#undef HAVE_SMACK
+
/* Define to 1 if you have the `socket' function. */
#undef HAVE_SOCKET
@@ -187,6 +196,9 @@
/* Define to 1 if you have the <sys/acl.h> header file. */
#undef HAVE_SYS_ACL_H
+/* Define to 1 if you have the <sys/auxv.h> header file. */
+#undef HAVE_SYS_AUXV_H
+
/* Define to 1 if you have the <sys/capability.h> header file. */
#undef HAVE_SYS_CAPABILITY_H
diff --git a/configure b/configure
index adda1a0318..cce2b9597d 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for systemd 204.
+# Generated by GNU Autoconf 2.69 for systemd 208.
#
# Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=systemd>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='systemd'
PACKAGE_TARNAME='systemd'
-PACKAGE_VERSION='204'
-PACKAGE_STRING='systemd 204'
+PACKAGE_VERSION='208'
+PACKAGE_STRING='systemd 208'
PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=systemd'
PACKAGE_URL='http://www.freedesktop.org/wiki/Software/systemd'
@@ -640,7 +640,9 @@ am__EXEEXT_TRUE
LTLIBOBJS
rootlibdir
rootprefix
+pamconfdir
pamlibdir
+zshcompletiondir
bashcompletiondir
dbusinterfacedir
dbussystemservicedir
@@ -657,9 +659,6 @@ SYSTEM_SYSVRCND_PATH
SYSTEM_SYSVINIT_PATH
ENABLE_MANPAGES_FALSE
ENABLE_MANPAGES_TRUE
-ENABLE_KEYMAP_FALSE
-ENABLE_KEYMAP_TRUE
-INCLUDE_PREFIX
ENABLE_GUDEV_FALSE
ENABLE_GUDEV_TRUE
GLIB_LIBS
@@ -687,10 +686,16 @@ ENABLE_TIMEDATED_FALSE
ENABLE_TIMEDATED_TRUE
ENABLE_HOSTNAMED_FALSE
ENABLE_HOSTNAMED_TRUE
+ENABLE_MACHINED_FALSE
+ENABLE_MACHINED_TRUE
ENABLE_LOGIND_FALSE
ENABLE_LOGIND_TRUE
+ENABLE_BACKLIGHT_FALSE
+ENABLE_BACKLIGHT_TRUE
ENABLE_RANDOMSEED_FALSE
ENABLE_RANDOMSEED_TRUE
+ENABLE_TMPFILES_FALSE
+ENABLE_TMPFILES_TRUE
ENABLE_QUOTACHECK_FALSE
ENABLE_QUOTACHECK_TRUE
ENABLE_BOOTCHART_FALSE
@@ -750,15 +755,18 @@ HAVE_KMOD_FALSE
HAVE_KMOD_TRUE
KMOD_LIBS
KMOD_CFLAGS
+ENABLE_COVERAGE_FALSE
+ENABLE_COVERAGE_TRUE
+lcov_found
DBUS_LIBS
DBUS_CFLAGS
+RT_LIBS
CAP_LIBS
HAVE_PYTHON_DEVEL_FALSE
HAVE_PYTHON_DEVEL_TRUE
SPHINX_BUILD
-PYTHON_LIBS
-PYTHON_CFLAGS
-PYTHON_CONFIG
+PYTHON_DEVEL_LIBS
+PYTHON_DEVEL_CFLAGS
PYTHON_BINARY
HAVE_PYTHON_FALSE
HAVE_PYTHON_TRUE
@@ -806,6 +814,8 @@ GTKDOC_CHECK
PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH
PKG_CONFIG
+KEXEC
+KMOD
KILL
SETCAP
QUOTACHECK
@@ -980,7 +990,10 @@ enable_gtk_doc
enable_gtk_doc_html
enable_gtk_doc_pdf
enable_introspection
+enable_address_sanitizer
with_python
+enable_python_devel
+enable_coverage
enable_kmod
enable_blkid
enable_ima
@@ -993,6 +1006,7 @@ enable_tcpwrap
enable_pam
enable_acl
enable_xattr
+enable_smack
enable_gcrypt
with_libgcrypt_prefix
enable_audit
@@ -1004,8 +1018,11 @@ enable_vconsole
enable_readahead
enable_bootchart
enable_quotacheck
+enable_tmpfiles
enable_randomseed
+enable_backlight
enable_logind
+enable_machined
enable_hostnamed
enable_timedated
enable_localed
@@ -1020,7 +1037,6 @@ with_telinit
enable_myhostname
with_firmware_path
enable_gudev
-enable_keymap
enable_manpages
with_sysvinit_path
with_sysvrcnd_path
@@ -1030,9 +1046,11 @@ with_dbussessionservicedir
with_dbussystemservicedir
with_dbusinterfacedir
with_bashcompletiondir
+with_zshcompletiondir
with_rootprefix
with_rootlibdir
with_pamlibdir
+with_pamconfdir
enable_split_usr
enable_tests
'
@@ -1052,6 +1070,8 @@ GTKDOC_DEPS_CFLAGS
GTKDOC_DEPS_LIBS
PYTHON
PYTHON_BINARY
+PYTHON_DEVEL_CFLAGS
+PYTHON_DEVEL_LIBS
DBUS_CFLAGS
DBUS_LIBS
KMOD_CFLAGS
@@ -1610,7 +1630,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures systemd 204 to adapt to many kinds of systems.
+\`configure' configures systemd 208 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1680,7 +1700,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of systemd 204:";;
+ short | recursive ) echo "Configuration of systemd 208:";;
esac
cat <<\_ACEOF
@@ -1706,6 +1726,10 @@ Optional Features:
--enable-gtk-doc-pdf build documentation in pdf format [[default=no]]
--enable-introspection=[no/auto/yes]
Enable introspection for this build
+ --enable-address-sanitizer
+ enable -fsanitize=address
+ --disable-python-devel Do not build python modules
+ --enable-coverage enable test coverage
--disable-kmod disable loadable modules support
--disable-blkid disable blkid support
--disable-ima Disable optional IMA support
@@ -1716,6 +1740,7 @@ Optional Features:
--disable-pam Disable optional PAM support
--disable-acl Disable optional ACL support
--disable-xattr Disable optional XATTR support
+ --disable-smack Disable optional SMACK support
--disable-gcrypt Disable optional GCRYPT support
--disable-audit Disable optional AUDIT support
--disable-libcryptsetup disable libcryptsetup tools
@@ -1726,8 +1751,11 @@ Optional Features:
--disable-readahead disable readahead tools
--disable-bootchart disable bootchart tool
--disable-quotacheck disable quotacheck tools
+ --disable-tmpfiles disable tmpfiles support
--disable-randomseed disable randomseed tools
+ --disable-backlight disable backlight tools
--disable-logind disable login daemon
+ --disable-machined disable machine daemon
--disable-hostnamed disable hostname daemon
--disable-timedated disable timedate daemon
--disable-localed disable locale daemon
@@ -1736,7 +1764,6 @@ Optional Features:
--disable-efi disable EFI support
--disable-myhostname disable nss-myhostname support
--disable-gudev disable Gobject libudev support [default=enabled]
- --disable-keymap disable keymap fixup support [default=enabled]
--disable-manpages disable manpages
--enable-split-usr Assume that /bin, /sbin aren\'t symlinks into /usr
--disable-tests disable tests
@@ -1783,10 +1810,13 @@ Optional Packages:
D-Bus interface directory
--with-bashcompletiondir=DIR
Bash completions directory
+ --with-zshcompletiondir=DIR
+ Zsh completions directory
--with-rootprefix=DIR rootfs directory prefix for config files and kernel
modules
--with-rootlibdir=DIR Root directory for libraries necessary for boot
--with-pamlibdir=DIR Directory for PAM modules
+ --with-pamconfdir=DIR Directory for PAM configuration
Some influential environment variables:
CC C compiler command
@@ -1809,6 +1839,10 @@ Some influential environment variables:
PYTHON the Python interpreter
PYTHON_BINARY
Python binary used to launch installed scripts
+ PYTHON_DEVEL_CFLAGS
+ C compiler flags for PYTHON_DEVEL, overriding pkg-config
+ PYTHON_DEVEL_LIBS
+ linker flags for PYTHON_DEVEL, overriding pkg-config
DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
DBUS_LIBS linker flags for DBUS, overriding pkg-config
KMOD_CFLAGS C compiler flags for KMOD, overriding pkg-config
@@ -1904,7 +1938,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-systemd configure 204
+systemd configure 208
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2373,7 +2407,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by systemd $as_me 204, which was
+It was created by systemd $as_me 208, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4755,7 +4789,7 @@ fi
# Define the identity of the package.
PACKAGE='systemd'
- VERSION='204'
+ VERSION='208'
cat >>confdefs.h <<_ACEOF
@@ -4796,91 +4830,100 @@ mkdir_p='$(MKDIR_P)'
AMTAR='$${TAR-tar}'
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5
-$as_echo_n "checking how to create a pax tar archive... " >&6; }
-# Loop over all known methods to create a tar archive until one works.
+# We'll loop over all known methods to create a tar archive until one works.
_am_tools='gnutar pax cpio none'
-_am_tools=${am_cv_prog_tar_pax-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of '-'.
-for _am_tool in $_am_tools
-do
- case $_am_tool in
- gnutar)
- for _am_tar in tar gnutar gtar;
- do
- { echo "$as_me:$LINENO: $_am_tar --version" >&5
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a pax tar archive" >&5
+$as_echo_n "checking how to create a pax tar archive... " >&6; }
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_pax-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ { echo "$as_me:$LINENO: $_am_tar --version" >&5
($_am_tar --version) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && break
- done
- am__tar="$_am_tar --format=posix -chf - "'"$$tardir"'
- am__tar_="$_am_tar --format=posix -chf - "'"$tardir"'
- am__untar="$_am_tar -xf -"
- ;;
- plaintar)
- # Must skip GNU tar: if it does not support --format= it doesn't create
- # ustar tarball either.
- (tar --version) >/dev/null 2>&1 && continue
- am__tar='tar chf - "$$tardir"'
- am__tar_='tar chf - "$tardir"'
- am__untar='tar xf -'
- ;;
- pax)
- am__tar='pax -L -x pax -w "$$tardir"'
- am__tar_='pax -L -x pax -w "$tardir"'
- am__untar='pax -r'
- ;;
- cpio)
- am__tar='find "$$tardir" -print | cpio -o -H pax -L'
- am__tar_='find "$tardir" -print | cpio -o -H pax -L'
- am__untar='cpio -i -H pax -d'
- ;;
- none)
- am__tar=false
- am__tar_=false
- am__untar=false
- ;;
- esac
+ done
+ am__tar="$_am_tar --format=posix -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=posix -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x pax -w "$$tardir"'
+ am__tar_='pax -L -x pax -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H pax -L'
+ am__tar_='find "$tardir" -print | cpio -o -H pax -L'
+ am__untar='cpio -i -H pax -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
- # If the value was cached, stop now. We just wanted to have am__tar
- # and am__untar set.
- test -n "${am_cv_prog_tar_pax}" && break
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_pax}" && break
- # tar/untar a dummy directory, and stop if the command works
- rm -rf conftest.dir
- mkdir conftest.dir
- echo GrepMe > conftest.dir/file
- { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
(tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
- rm -rf conftest.dir
- if test -s conftest.tar; then
- { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
($am__untar <conftest.tar) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
- fi
-done
-rm -rf conftest.dir
+ { echo "$as_me:$LINENO: cat conftest.dir/file" >&5
+ (cat conftest.dir/file) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
-if ${am_cv_prog_tar_pax+:} false; then :
+ if ${am_cv_prog_tar_pax+:} false; then :
$as_echo_n "(cached) " >&6
else
am_cv_prog_tar_pax=$_am_tool
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_pax" >&5
$as_echo "$am_cv_prog_tar_pax" >&6; }
+
depcc="$CC" am_compiler_list=
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
@@ -12250,6 +12293,13 @@ CC="$lt_save_CC"
+if test "x$enable_static" = "xyes"; then :
+ as_fn_error $? "--enable-static is not supported by systemd" "$LINENO" 5
+fi
+if test "x$enable_largefile" = "xno"; then :
+ as_fn_error $? "--disable-largefile is not supported by systemd" "$LINENO" 5
+fi
+
# i18n stuff for the PolicyKit policy files
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
@@ -14154,6 +14204,90 @@ fi
+# Extract the first word of "kmod", so it can be a program name with args.
+set dummy kmod; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_KMOD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $KMOD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_KMOD="$KMOD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_KMOD="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_KMOD" && ac_cv_path_KMOD="/usr/bin/kmod"
+ ;;
+esac
+fi
+KMOD=$ac_cv_path_KMOD
+if test -n "$KMOD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KMOD" >&5
+$as_echo "$KMOD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Extract the first word of "kexec", so it can be a program name with args.
+set dummy kexec; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_KEXEC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $KEXEC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_KEXEC="$KEXEC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_KEXEC="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_KEXEC" && ac_cv_path_KEXEC="/usr/sbin/kexec"
+ ;;
+esac
+fi
+KEXEC=$ac_cv_path_KEXEC
+if test -n "$KEXEC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KEXEC" >&5
+$as_echo "$KEXEC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
# gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
@@ -14496,31 +14630,11 @@ fi
# Put the nasty error message in config.log where it belongs
echo "$GTKDOC_DEPS_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0) were not met:
-
-$GTKDOC_DEPS_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS
-and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
+ :
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS
-and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
+ :
else
GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS
GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS
@@ -14555,6 +14669,10 @@ fi
enable_gtk_doc_pdf=no
fi
+ if test -z "$AM_DEFAULT_VERBOSITY"; then
+ AM_DEFAULT_VERBOSITY=1
+ fi
+
if test x$enable_gtk_doc = xyes; then
ENABLE_GTK_DOC_TRUE=
@@ -14598,7 +14716,6 @@ fi
-
if test "x$enable_gtk_doc" = "xyes" -a "x$XSLTPROC" = x; then :
as_fn_error $? "*** GTK doc requested but xsltproc not found" "$LINENO" 5
@@ -14982,6 +15099,54 @@ if test -z "$GPERF" ; then
as_fn_error $? "*** gperf not found" "$LINENO" 5
fi
+# ------------------------------------------------------------------------------
+address_sanitizer_cflags=
+address_sanitizer_cppflags=
+address_sanitizer_ldflags=
+# Check whether --enable-address-sanitizer was given.
+if test "${enable_address_sanitizer+set}" = set; then :
+ enableval=$enable_address_sanitizer;
+fi
+
+if test "x$enable_address_sanitizer" = "xyes"; then :
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports flag -fsanitize=address in envvar CFLAGS" >&5
+$as_echo_n "checking if $CC supports flag -fsanitize=address in envvar CFLAGS... " >&6; }
+if ${cc_cv_CFLAGS__fsanitize_address+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "cc_save_CFLAGS='${CFLAGS}'"
+ eval "CFLAGS='-Werror -fsanitize=address'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int a = 0; int main(void) { return a; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "cc_cv_CFLAGS__fsanitize_address='yes'"
+else
+ eval "cc_cv_CFLAGS__fsanitize_address='no'"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ eval "CFLAGS='$cc_save_CFLAGS'"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cc_cv_CFLAGS__fsanitize_address" >&5
+$as_echo "$cc_cv_CFLAGS__fsanitize_address" >&6; }
+
+ if eval test x$cc_cv_CFLAGS__fsanitize_address = xyes; then :
+ eval "with_as_cflags='${with_as_cflags} -fsanitize=address'"
+fi
+
+ if test -z "$with_as_cflags"; then :
+ as_fn_error $? "*** -fsanitize=address is not supported" "$LINENO" 5
+fi
+ address_sanitizer_cflags="$with_as_cflags -fno-omit-frame-pointer -DVALGRIND=1"
+ address_sanitizer_cppflags="-DVALGRIND=1"
+ address_sanitizer_ldflags="-Wc,-fsanitize=address"
+
+fi
+
for flag in \
-pipe \
@@ -15017,6 +15182,7 @@ fi
-ffast-math \
-fno-common \
-fdiagnostics-show-option \
+ -fdiagnostics-color \
-fno-strict-aliasing \
-fvisibility=hidden \
-ffunction-sections \
@@ -15030,18 +15196,19 @@ if { as_var=`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`; eval \${$as_var+:} fals
$as_echo_n "(cached) " >&6
else
eval "cc_save_CFLAGS='${CFLAGS}'"
- eval "CFLAGS='-Werror $flag'"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ eval "CFLAGS='-Werror $flag'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int a = 0; int main(void) { return a; }
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
eval "`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`='yes'"
else
eval "`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`='no'"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- eval "CFLAGS='$cc_save_CFLAGS'"
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ eval "CFLAGS='$cc_save_CFLAGS'"
fi
eval ac_res=\$`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -15053,13 +15220,12 @@ fi
done
-OUR_CFLAGS=$with_cflags
+OUR_CFLAGS="$with_cflags $address_sanitizer_cflags"
case $CFLAGS in #(
*-O[12345g\ ]*) :
-
for flag in \
-Wp,-D_FORTIFY_SOURCE=2; do
@@ -15069,18 +15235,19 @@ if { as_var=`$as_echo "cc_cv_CPPFLAGS_$flag" | $as_tr_sh`; eval \${$as_var+:} fa
$as_echo_n "(cached) " >&6
else
eval "cc_save_CPPFLAGS='${CPPFLAGS}'"
- eval "CPPFLAGS='-Werror $flag'"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ eval "CPPFLAGS='-Werror $flag'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int a = 0; int main(void) { return a; }
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
eval "`$as_echo "cc_cv_CPPFLAGS_$flag" | $as_tr_sh`='yes'"
else
eval "`$as_echo "cc_cv_CPPFLAGS_$flag" | $as_tr_sh`='no'"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- eval "CPPFLAGS='$cc_save_CPPFLAGS'"
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ eval "CPPFLAGS='$cc_save_CPPFLAGS'"
fi
eval ac_res=\$`$as_echo "cc_cv_CPPFLAGS_$flag" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -15093,12 +15260,10 @@ fi
done
;; #(
*) :
-
- python_extra_cflags=-Wp,-U_FORTIFY_SOURCE
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipping -D_FORTIFY_SOURCE, optimization not enabled" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipping -D_FORTIFY_SOURCE, optimization not enabled" >&5
$as_echo "skipping -D_FORTIFY_SOURCE, optimization not enabled" >&6; } ;;
esac
-OUR_CPPFLAGS=$with_cppflags
+OUR_CPPFLAGS="$with_cppflags $address_sanitizer_cppflags"
@@ -15115,18 +15280,19 @@ if { as_var=`$as_echo "cc_cv_LDFLAGS_$flag" | $as_tr_sh`; eval \${$as_var+:} fal
$as_echo_n "(cached) " >&6
else
eval "cc_save_LDFLAGS='${LDFLAGS}'"
- eval "LDFLAGS='-Werror $flag'"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ eval "LDFLAGS='-Werror $flag'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int a = 0; int main(void) { return a; }
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"; then :
eval "`$as_echo "cc_cv_LDFLAGS_$flag" | $as_tr_sh`='yes'"
else
eval "`$as_echo "cc_cv_LDFLAGS_$flag" | $as_tr_sh`='no'"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- eval "LDFLAGS='$cc_save_LDFLAGS'"
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ eval "LDFLAGS='$cc_save_LDFLAGS'"
fi
eval ac_res=\$`$as_echo "cc_cv_LDFLAGS_$flag" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
@@ -15138,14 +15304,12 @@ fi
done
-OUR_LDFLAGS=$with_ldflags
+OUR_LDFLAGS="$with_ldflags $address_sanitizer_ldflags"
# ------------------------------------------------------------------------------
# we use python to build the man page index, and for systemd-python
have_python=no
-have_python_devel=no
-
# Check whether --with-python was given.
if test "${with_python+set}" = set; then :
@@ -15384,56 +15548,233 @@ fi
fi
-if test "x$with_python" != "xno"; then :
+if test "x$have_python" != "xyes" -a "x$enable_python_devel" = "xyes"; then :
+ as_fn_error $? "*** python-devel support requires --with-python" "$LINENO" 5
+fi
- # Extract the first word of "python${PYTHON_VERSION}-config", so it can be a program name with args.
-set dummy python${PYTHON_VERSION}-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PYTHON_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
+have_python_devel=no
+# Check whether --enable-python_devel was given.
+if test "${enable_python_devel+set}" = set; then :
+ enableval=$enable_python_devel;
+fi
+
+if test "x$have_python" = "xyes" -a "x$enable_python_devel" != "xno"; then :
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYTHON_DEVEL" >&5
+$as_echo_n "checking for PYTHON_DEVEL... " >&6; }
+
+if test -n "$PYTHON_DEVEL_CFLAGS"; then
+ pkg_cv_PYTHON_DEVEL_CFLAGS="$PYTHON_DEVEL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python-\${PYTHON_VERSION}\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python-${PYTHON_VERSION}") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHON_DEVEL_CFLAGS=`$PKG_CONFIG --cflags "python-${PYTHON_VERSION}" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- case $PYTHON_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PYTHON_DEVEL_LIBS"; then
+ pkg_cv_PYTHON_DEVEL_LIBS="$PYTHON_DEVEL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python-\${PYTHON_VERSION}\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python-${PYTHON_VERSION}") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHON_DEVEL_LIBS=`$PKG_CONFIG --libs "python-${PYTHON_VERSION}" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
- ;;
-esac
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
fi
-PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG
-if test -n "$PYTHON_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CONFIG" >&5
-$as_echo "$PYTHON_CONFIG" >&6; }
+ if test $_pkg_short_errors_supported = yes; then
+ PYTHON_DEVEL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python-${PYTHON_VERSION}" 2>&1`
+ else
+ PYTHON_DEVEL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python-${PYTHON_VERSION}" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PYTHON_DEVEL_PKG_ERRORS" >&5
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYTHON_DEVEL" >&5
+$as_echo_n "checking for PYTHON_DEVEL... " >&6; }
+
+if test -n "$PYTHON_DEVEL_CFLAGS"; then
+ pkg_cv_PYTHON_DEVEL_CFLAGS="$PYTHON_DEVEL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHON_DEVEL_CFLAGS=`$PKG_CONFIG --cflags "python" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PYTHON_DEVEL_LIBS"; then
+ pkg_cv_PYTHON_DEVEL_LIBS="$PYTHON_DEVEL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHON_DEVEL_LIBS=`$PKG_CONFIG --libs "python" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ PYTHON_DEVEL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python" 2>&1`
+ else
+ PYTHON_DEVEL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PYTHON_DEVEL_PKG_ERRORS" >&5
+ have_python_devel=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_python_devel=no
+else
+ PYTHON_DEVEL_CFLAGS=$pkg_cv_PYTHON_DEVEL_CFLAGS
+ PYTHON_DEVEL_LIBS=$pkg_cv_PYTHON_DEVEL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_python_devel=yes
+fi
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
- if test -n "$PYTHON_CONFIG"; then :
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PYTHON_DEVEL" >&5
+$as_echo_n "checking for PYTHON_DEVEL... " >&6; }
+
+if test -n "$PYTHON_DEVEL_CFLAGS"; then
+ pkg_cv_PYTHON_DEVEL_CFLAGS="$PYTHON_DEVEL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHON_DEVEL_CFLAGS=`$PKG_CONFIG --cflags "python" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PYTHON_DEVEL_LIBS"; then
+ pkg_cv_PYTHON_DEVEL_LIBS="$PYTHON_DEVEL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"python\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "python") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PYTHON_DEVEL_LIBS=`$PKG_CONFIG --libs "python" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
- have_python_devel=yes
- PYTHON_CFLAGS="$($PYTHON_CONFIG --cflags) $python_extra_cflags"
- PYTHON_LIBS="$($PYTHON_CONFIG --ldflags)"
- for ac_prog in sphinx-build-${PYTHON_VERSION} sphinx-build
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ PYTHON_DEVEL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "python" 2>&1`
+ else
+ PYTHON_DEVEL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "python" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PYTHON_DEVEL_PKG_ERRORS" >&5
+
+ have_python_devel=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_python_devel=no
+else
+ PYTHON_DEVEL_CFLAGS=$pkg_cv_PYTHON_DEVEL_CFLAGS
+ PYTHON_DEVEL_LIBS=$pkg_cv_PYTHON_DEVEL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_python_devel=yes
+fi
+else
+ PYTHON_DEVEL_CFLAGS=$pkg_cv_PYTHON_DEVEL_CFLAGS
+ PYTHON_DEVEL_LIBS=$pkg_cv_PYTHON_DEVEL_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_python_devel=yes
+fi
+ if test "x$have_python_devel" = xno -a "x$enable_python_devel" = xyes; then :
+ as_fn_error $? "*** python-devel support requested but libraries not found" "$LINENO" 5
+fi
+ for ac_prog in sphinx-build-${PYTHON_VERSION} sphinx-build
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -15480,8 +15821,6 @@ done
fi
-
-fi
if test "$have_python_devel" = "yes"; then
HAVE_PYTHON_DEVEL_TRUE=
HAVE_PYTHON_DEVEL_FALSE='#'
@@ -15493,9 +15832,9 @@ fi
# ------------------------------------------------------------------------------
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mq_open" >&5
-$as_echo_n "checking for library containing mq_open... " >&6; }
-if ${ac_cv_search_mq_open+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5
+$as_echo_n "checking for library containing dlsym... " >&6; }
+if ${ac_cv_search_dlsym+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -15508,16 +15847,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char mq_open ();
+char dlsym ();
int
main ()
{
-return mq_open ();
+return dlsym ();
;
return 0;
}
_ACEOF
-for ac_lib in '' rt; do
+for ac_lib in '' dl; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -15525,35 +15864,63 @@ for ac_lib in '' rt; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_mq_open=$ac_res
+ ac_cv_search_dlsym=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if ${ac_cv_search_mq_open+:} false; then :
+ if ${ac_cv_search_dlsym+:} false; then :
break
fi
done
-if ${ac_cv_search_mq_open+:} false; then :
+if ${ac_cv_search_dlsym+:} false; then :
else
- ac_cv_search_mq_open=no
+ ac_cv_search_dlsym=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mq_open" >&5
-$as_echo "$ac_cv_search_mq_open" >&6; }
-ac_res=$ac_cv_search_mq_open
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5
+$as_echo "$ac_cv_search_dlsym" >&6; }
+ac_res=$ac_cv_search_dlsym
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
else
- as_fn_error $? "*** POSIX RT library not found" "$LINENO" 5
+ as_fn_error $? "*** Dynamic linking loader library not found" "$LINENO" 5
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5
-$as_echo_n "checking for library containing dlsym... " >&6; }
-if ${ac_cv_search_dlsym+:} false; then :
+for ac_header in sys/capability.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_capability_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_CAPABILITY_H 1
+_ACEOF
+
+else
+ as_fn_error $? "*** POSIX caps headers not found" "$LINENO" 5
+fi
+
+done
+
+for ac_header in linux/btrfs.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "linux/btrfs.h" "ac_cv_header_linux_btrfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_btrfs_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LINUX_BTRFS_H 1
+_ACEOF
+
+fi
+
+done
+
+
+# unconditionally pull-in librt with old glibc versions
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
@@ -15566,16 +15933,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char dlsym ();
+char clock_gettime ();
int
main ()
{
-return dlsym ();
+return clock_gettime ();
;
return 0;
}
_ACEOF
-for ac_lib in '' dl; do
+for ac_lib in '' rt; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -15583,30 +15950,28 @@ for ac_lib in '' dl; do
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_dlsym=$ac_res
+ ac_cv_search_clock_gettime=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if ${ac_cv_search_dlsym+:} false; then :
+ if ${ac_cv_search_clock_gettime+:} false; then :
break
fi
done
-if ${ac_cv_search_dlsym+:} false; then :
+if ${ac_cv_search_clock_gettime+:} false; then :
else
- ac_cv_search_dlsym=no
+ ac_cv_search_clock_gettime=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5
-$as_echo "$ac_cv_search_dlsym" >&6; }
-ac_res=$ac_cv_search_dlsym
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-else
- as_fn_error $? "*** Dynamic linking loader library not found" "$LINENO" 5
fi
@@ -15670,23 +16035,71 @@ else
as_fn_error $? "*** POSIX caps library not found" "$LINENO" 5
fi
-for ac_header in sys/capability.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_capability_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_CAPABILITY_H 1
+CAP_LIBS="$LIBS"
+
+
+LIBS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mq_open" >&5
+$as_echo_n "checking for library containing mq_open... " >&6; }
+if ${ac_cv_search_mq_open+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mq_open ();
+int
+main ()
+{
+return mq_open ();
+ ;
+ return 0;
+}
_ACEOF
+for ac_lib in '' rt; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_mq_open=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_mq_open+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_mq_open+:} false; then :
else
- as_fn_error $? "*** POSIX caps headers not found" "$LINENO" 5
+ ac_cv_search_mq_open=no
fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mq_open" >&5
+$as_echo "$ac_cv_search_mq_open" >&6; }
+ac_res=$ac_cv_search_mq_open
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-done
+else
+ as_fn_error $? "*** POSIX RT library not found" "$LINENO" 5
+fi
-CAP_LIBS="$LIBS"
-LIBS="$save_LIBS"
+RT_LIBS="$LIBS"
+LIBS="$save_LIBS"
for ac_func in fanotify_init fanotify_mark
do :
@@ -15851,6 +16264,111 @@ $as_echo "yes" >&6; }
fi
+
+# ------------------------------------------------------------------------------
+have_coverage=no
+# Check whether --enable-coverage was given.
+if test "${enable_coverage+set}" = set; then :
+ enableval=$enable_coverage;
+fi
+
+if test "x$enable_coverage" = "xyes" ; then
+ # Extract the first word of "lcov", so it can be a program name with args.
+set dummy lcov; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_lcov_found+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$lcov_found"; then
+ ac_cv_prog_lcov_found="$lcov_found" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_lcov_found="yes"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_lcov_found" && ac_cv_prog_lcov_found="no"
+fi
+fi
+lcov_found=$ac_cv_prog_lcov_found
+if test -n "$lcov_found"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lcov_found" >&5
+$as_echo "$lcov_found" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$lcov_found" = xno ; then
+ as_fn_error $? "*** lcov support requested but the program was not found" "$LINENO" 5
+ else
+ lcov_version_major="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 1`"
+ lcov_version_minor="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 2`"
+ if test "$lcov_version_major" -eq 1 -a "$lcov_version_minor" -lt 10; then
+ as_fn_error $? "*** lcov version is too old. 1.10 required" "$LINENO" 5
+ else
+ have_coverage=yes
+
+ for flag in \
+ -fprofile-arcs \
+ -ftest-coverage; do
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports flag $flag in envvar CFLAGS" >&5
+$as_echo_n "checking if $CC supports flag $flag in envvar CFLAGS... " >&6; }
+if { as_var=`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`; eval \${$as_var+:} false; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "cc_save_CFLAGS='${CFLAGS}'"
+ eval "CFLAGS='-Werror $flag'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int a = 0; int main(void) { return a; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`='yes'"
+else
+ eval "`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`='no'"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ eval "CFLAGS='$cc_save_CFLAGS'"
+fi
+eval ac_res=\$`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+ if eval test x$`$as_echo "cc_cv_CFLAGS_$flag" | $as_tr_sh` = xyes; then :
+ eval "with_coverage_cflags='${with_coverage_cflags} $flag'"
+fi
+
+ done
+
+ OUR_CFLAGS="$with_cflags $with_coverage_cflags"
+
+ fi
+ fi
+fi
+ if test "$have_coverage" = "yes"; then
+ ENABLE_COVERAGE_TRUE=
+ ENABLE_COVERAGE_FALSE='#'
+else
+ ENABLE_COVERAGE_TRUE='#'
+ ENABLE_COVERAGE_FALSE=
+fi
+
+
# ------------------------------------------------------------------------------
have_kmod=no
# Check whether --enable-kmod was given.
@@ -15859,6 +16377,17 @@ if test "${enable_kmod+set}" = set; then :
fi
if test "x$enable_kmod" != "xno"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libkmod \""; } >&5
+ ($PKG_CONFIG --exists --print-errors " libkmod ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ have_kmod=yes
+else
+ have_kmod=no
+fi
+ if test "x$have_kmod" = "xyes"; then
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for KMOD" >&5
@@ -15868,12 +16397,12 @@ if test -n "$KMOD_CFLAGS"; then
pkg_cv_KMOD_CFLAGS="$KMOD_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libkmod >= 5 \""; } >&5
- ($PKG_CONFIG --exists --print-errors " libkmod >= 5 ") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libkmod >= 14 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors " libkmod >= 14 ") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_KMOD_CFLAGS=`$PKG_CONFIG --cflags " libkmod >= 5 " 2>/dev/null`
+ pkg_cv_KMOD_CFLAGS=`$PKG_CONFIG --cflags " libkmod >= 14 " 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -15885,12 +16414,12 @@ if test -n "$KMOD_LIBS"; then
pkg_cv_KMOD_LIBS="$KMOD_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libkmod >= 5 \""; } >&5
- ($PKG_CONFIG --exists --print-errors " libkmod >= 5 ") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libkmod >= 14 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors " libkmod >= 14 ") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_KMOD_LIBS=`$PKG_CONFIG --libs " libkmod >= 5 " 2>/dev/null`
+ pkg_cv_KMOD_LIBS=`$PKG_CONFIG --libs " libkmod >= 14 " 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -15911,18 +16440,18 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- KMOD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " libkmod >= 5 " 2>&1`
+ KMOD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " libkmod >= 14 " 2>&1`
else
- KMOD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " libkmod >= 5 " 2>&1`
+ KMOD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " libkmod >= 14 " 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$KMOD_PKG_ERRORS" >&5
- have_kmod=no
+ as_fn_error $? "*** kmod version >= 14 not found" "$LINENO" 5
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_kmod=no
+ as_fn_error $? "*** kmod version >= 14 not found" "$LINENO" 5
else
KMOD_CFLAGS=$pkg_cv_KMOD_CFLAGS
KMOD_LIBS=$pkg_cv_KMOD_LIBS
@@ -15930,10 +16459,11 @@ else
$as_echo "yes" >&6; }
$as_echo "#define HAVE_KMOD 1" >>confdefs.h
- have_kmod=yes
+
fi
+ fi
if test "x$have_kmod" = xno -a "x$enable_kmod" = xyes; then
- as_fn_error $? "*** kmod support requested but libraries not found" "$LINENO" 5
+ as_fn_error $? "*** kmod support requested, but libraries not found" "$LINENO" 5
fi
fi
if test "$have_kmod" = "yes"; then
@@ -16695,6 +17225,37 @@ fi
# ------------------------------------------------------------------------------
+# Check whether --enable-smack was given.
+if test "${enable_smack+set}" = set; then :
+ enableval=$enable_smack; case "${enableval}" in
+ yes) have_smack=yes ;;
+ no) have_smack=no ;;
+ *) as_fn_error $? "bad value ${enableval} for --disable-smack" "$LINENO" 5 ;;
+ esac
+else
+ have_smack=auto
+fi
+
+
+if test "x${have_xattr}" = xno; then
+ if test "x${have_smack}" = xyes; then
+ as_fn_error $? "SMACK requires xattr support" "$LINENO" 5
+ else
+ have_smack=no
+ fi
+else
+ if test "x${have_smack}" = xauto; then
+ have_smack=yes
+ fi
+fi
+
+if test "x${have_smack}" = xyes ; then
+
+$as_echo "#define HAVE_SMACK 1" >>confdefs.h
+
+fi
+
+# ------------------------------------------------------------------------------
# Check whether --enable-gcrypt was given.
if test "${enable_gcrypt+set}" = set; then :
enableval=$enable_gcrypt; case "${enableval}" in
@@ -17056,12 +17617,12 @@ if test -n "$LIBCRYPTSETUP_CFLAGS"; then
pkg_cv_LIBCRYPTSETUP_CFLAGS="$LIBCRYPTSETUP_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libcryptsetup >= 1.4.2 \""; } >&5
- ($PKG_CONFIG --exists --print-errors " libcryptsetup >= 1.4.2 ") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libcryptsetup >= 1.6.0 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors " libcryptsetup >= 1.6.0 ") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBCRYPTSETUP_CFLAGS=`$PKG_CONFIG --cflags " libcryptsetup >= 1.4.2 " 2>/dev/null`
+ pkg_cv_LIBCRYPTSETUP_CFLAGS=`$PKG_CONFIG --cflags " libcryptsetup >= 1.6.0 " 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -17073,12 +17634,12 @@ if test -n "$LIBCRYPTSETUP_LIBS"; then
pkg_cv_LIBCRYPTSETUP_LIBS="$LIBCRYPTSETUP_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libcryptsetup >= 1.4.2 \""; } >&5
- ($PKG_CONFIG --exists --print-errors " libcryptsetup >= 1.4.2 ") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" libcryptsetup >= 1.6.0 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors " libcryptsetup >= 1.6.0 ") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_LIBCRYPTSETUP_LIBS=`$PKG_CONFIG --libs " libcryptsetup >= 1.4.2 " 2>/dev/null`
+ pkg_cv_LIBCRYPTSETUP_LIBS=`$PKG_CONFIG --libs " libcryptsetup >= 1.6.0 " 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -17099,9 +17660,9 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- LIBCRYPTSETUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " libcryptsetup >= 1.4.2 " 2>&1`
+ LIBCRYPTSETUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " libcryptsetup >= 1.6.0 " 2>&1`
else
- LIBCRYPTSETUP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " libcryptsetup >= 1.4.2 " 2>&1`
+ LIBCRYPTSETUP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " libcryptsetup >= 1.6.0 " 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$LIBCRYPTSETUP_PKG_ERRORS" >&5
@@ -17417,6 +17978,25 @@ fi
# ------------------------------------------------------------------------------
+have_tmpfiles=no
+# Check whether --enable-tmpfiles was given.
+if test "${enable_tmpfiles+set}" = set; then :
+ enableval=$enable_tmpfiles;
+fi
+
+if test "x$enable_tmpfiles" != "xno"; then
+ have_tmpfiles=yes
+fi
+ if test "$have_tmpfiles" = "yes"; then
+ ENABLE_TMPFILES_TRUE=
+ ENABLE_TMPFILES_FALSE='#'
+else
+ ENABLE_TMPFILES_TRUE='#'
+ ENABLE_TMPFILES_FALSE=
+fi
+
+
+# ------------------------------------------------------------------------------
have_randomseed=no
# Check whether --enable-randomseed was given.
if test "${enable_randomseed+set}" = set; then :
@@ -17436,6 +18016,25 @@ fi
# ------------------------------------------------------------------------------
+have_backlight=no
+# Check whether --enable-backlight was given.
+if test "${enable_backlight+set}" = set; then :
+ enableval=$enable_backlight;
+fi
+
+if test "x$enable_backlight" != "xno"; then
+ have_backlight=yes
+fi
+ if test "$have_backlight" = "yes"; then
+ ENABLE_BACKLIGHT_TRUE=
+ ENABLE_BACKLIGHT_FALSE='#'
+else
+ ENABLE_BACKLIGHT_TRUE='#'
+ ENABLE_BACKLIGHT_FALSE=
+fi
+
+
+# ------------------------------------------------------------------------------
have_logind=no
# Check whether --enable-logind was given.
if test "${enable_logind+set}" = set; then :
@@ -17460,6 +18059,30 @@ $as_echo "#define HAVE_LOGIND 1" >>confdefs.h
fi
# ------------------------------------------------------------------------------
+have_machined=no
+# Check whether --enable-machined was given.
+if test "${enable_machined+set}" = set; then :
+ enableval=$enable_machined;
+fi
+
+if test "x$enable_machined" != "xno"; then
+ have_machined=yes
+fi
+ if test "$have_machined" = "yes"; then
+ ENABLE_MACHINED_TRUE=
+ ENABLE_MACHINED_FALSE='#'
+else
+ ENABLE_MACHINED_TRUE='#'
+ ENABLE_MACHINED_FALSE=
+fi
+
+if test "$have_machined" = "yes"; then :
+
+$as_echo "#define HAVE_MACHINED 1" >>confdefs.h
+
+fi
+
+# ------------------------------------------------------------------------------
have_hostnamed=no
# Check whether --enable-hostnamed was given.
if test "${enable_hostnamed+set}" = set; then :
@@ -17650,7 +18273,7 @@ _ACEOF
if test "${with_telinit+set}" = set; then :
withval=$with_telinit; TELINIT="$withval"
else
- TELINIT="/lib/upstart/telinit"
+ TELINIT="/lib/sysvinit/telinit"
fi
@@ -17803,7 +18426,7 @@ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
- for ac_header in arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h
+ for ac_header in arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h sys/auxv.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -18261,81 +18884,6 @@ $as_echo "#define HAVE_GLIB 1" >>confdefs.h
fi
# ------------------------------------------------------------------------------
-# Check whether --enable-keymap was given.
-if test "${enable_keymap+set}" = set; then :
- enableval=$enable_keymap;
-else
- enable_keymap=yes
-fi
-
-if test "x$enable_keymap" = "xyes"; then :
-
- # Extract the first word of "gperf", so it can be a program name with args.
-set dummy gperf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GPERF+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $GPERF in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_GPERF="$GPERF" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GPERF="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-GPERF=$ac_cv_path_GPERF
-if test -n "$GPERF"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GPERF" >&5
-$as_echo "$GPERF" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test -z "$GPERF"; then
- as_fn_error $? "gperf is needed" "$LINENO" 5
- fi
-
- ac_fn_c_check_header_mongrel "$LINENO" "linux/input.h" "ac_cv_header_linux_input_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_input_h" = xyes; then :
- :
-else
- as_fn_error $? "kernel headers not found" "$LINENO" 5
-fi
-
-
- INCLUDE_PREFIX=$(echo '#include <linux/input.h>' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}')
-
-
-fi
- if test "x$enable_keymap" = "xyes"; then
- ENABLE_KEYMAP_TRUE=
- ENABLE_KEYMAP_FALSE='#'
-else
- ENABLE_KEYMAP_TRUE='#'
- ENABLE_KEYMAP_FALSE=
-fi
-
-
-# ------------------------------------------------------------------------------
have_manpages=no
# Check whether --enable-manpages was given.
if test "${enable_manpages+set}" = set; then :
@@ -18474,6 +19022,15 @@ fi
+# Check whether --with-zshcompletiondir was given.
+if test "${with_zshcompletiondir+set}" = set; then :
+ withval=$with_zshcompletiondir;
+else
+ with_zshcompletiondir=${datadir}/zsh/site-functions
+fi
+
+
+
# Check whether --with-rootprefix was given.
if test "${with_rootprefix+set}" = set; then :
withval=$with_rootprefix;
@@ -18500,6 +19057,15 @@ else
fi
+
+# Check whether --with-pamconfdir was given.
+if test "${with_pamconfdir+set}" = set; then :
+ withval=$with_pamconfdir;
+else
+ with_pamconfdir=${sysconfdir}/pam.d
+fi
+
+
# Check whether --enable-split-usr was given.
if test "${enable_split_usr+set}" = set; then :
enableval=$enable_split_usr;
@@ -18566,8 +19132,12 @@ dbusinterfacedir=$with_dbusinterfacedir
bashcompletiondir=$with_bashcompletiondir
+zshcompletiondir=$with_zshcompletiondir
+
pamlibdir=$with_pamlibdir
+pamconfdir=$with_pamconfdir
+
rootprefix=$with_rootprefix
rootlibdir=$with_rootlibdir
@@ -18745,6 +19315,10 @@ if test -z "${HAVE_PYTHON_DEVEL_TRUE}" && test -z "${HAVE_PYTHON_DEVEL_FALSE}";
as_fn_error $? "conditional \"HAVE_PYTHON_DEVEL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_COVERAGE_TRUE}" && test -z "${ENABLE_COVERAGE_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_COVERAGE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${HAVE_KMOD_TRUE}" && test -z "${HAVE_KMOD_FALSE}"; then
as_fn_error $? "conditional \"HAVE_KMOD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -18809,14 +19383,26 @@ if test -z "${ENABLE_QUOTACHECK_TRUE}" && test -z "${ENABLE_QUOTACHECK_FALSE}";
as_fn_error $? "conditional \"ENABLE_QUOTACHECK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_TMPFILES_TRUE}" && test -z "${ENABLE_TMPFILES_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_TMPFILES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_RANDOMSEED_TRUE}" && test -z "${ENABLE_RANDOMSEED_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_RANDOMSEED\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_BACKLIGHT_TRUE}" && test -z "${ENABLE_BACKLIGHT_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_BACKLIGHT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_LOGIND_TRUE}" && test -z "${ENABLE_LOGIND_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_LOGIND\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_MACHINED_TRUE}" && test -z "${ENABLE_MACHINED_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MACHINED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${ENABLE_HOSTNAMED_TRUE}" && test -z "${ENABLE_HOSTNAMED_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_HOSTNAMED\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -18853,10 +19439,6 @@ if test -z "${ENABLE_GUDEV_TRUE}" && test -z "${ENABLE_GUDEV_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_GUDEV\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${ENABLE_KEYMAP_TRUE}" && test -z "${ENABLE_KEYMAP_FALSE}"; then
- as_fn_error $? "conditional \"ENABLE_KEYMAP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${ENABLE_MANPAGES_TRUE}" && test -z "${ENABLE_MANPAGES_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_MANPAGES\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -19270,7 +19852,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by systemd $as_me 204, which was
+This file was extended by systemd $as_me 208, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -19337,7 +19919,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-systemd config.status 204
+systemd config.status 208
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -20400,7 +20982,7 @@ $as_echo X"$mf" |
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
- test -z "am__include" && continue
+ test -z "$am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
@@ -21138,6 +21720,7 @@ fi
AUDIT: ${have_audit}
IMA: ${have_ima}
SELinux: ${have_selinux}
+ SMACK: ${have_smack}
XZ: ${have_xz}
ACL: ${have_acl}
XATTR: ${have_xattr}
@@ -21150,8 +21733,11 @@ fi
readahead: ${have_readahead}
bootchart: ${have_bootchart}
quotacheck: ${have_quotacheck}
+ tmpfiles: ${have_tmpfiles}
randomseed: ${have_randomseed}
+ backlight: ${have_backlight}
logind: ${have_logind}
+ machined: ${have_machined}
hostnamed: ${have_hostnamed}
timedated: ${have_timedated}
localed: ${have_localed}
@@ -21163,11 +21749,11 @@ fi
nss-myhostname: ${have_myhostname}
gudev: ${enable_gudev}
gintrospection: ${enable_introspection}
- keymap: ${enable_keymap}
Python: ${have_python}
Python Headers: ${have_python_devel}
man pages: ${have_manpages}
gtk-doc: ${enable_gtk_doc}
+ test coverage: ${have_coverage}
Split /usr: ${enable_split_usr}
SysV compatibility: ${SYSTEM_SYSV_COMPAT}
@@ -21183,13 +21769,16 @@ fi
SysV rc?.d directories: ${SYSTEM_SYSVRCND_PATH}
Build Python: ${PYTHON}
Installation Python: ${PYTHON_BINARY}
+ sphinx binary: ${SPHINX_BUILD}
firmware path: ${FIRMWARE_PATH}
PAM modules dir: ${with_pamlibdir}
+ PAM configuration dir: ${with_pamconfdir}
D-Bus policy dir: ${with_dbuspolicydir}
D-Bus session dir: ${with_dbussessionservicedir}
D-Bus system dir: ${with_dbussystemservicedir}
D-Bus interfaces dir: ${with_dbusinterfacedir}
Bash completions dir: ${with_bashcompletiondir}
+ Zsh completions dir: ${with_zshcompletiondir}
Extra start script: ${RC_LOCAL_SCRIPT_PATH_START}
Extra stop script: ${RC_LOCAL_SCRIPT_PATH_STOP}
Debug shell: ${SUSHELL} @ ${DEBUGTTY}
@@ -21197,8 +21786,8 @@ fi
CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
- PYTHON_CFLAGS: ${PYTHON_CFLAGS}
- PYTHON_LIBS: ${PYTHON_LIBS}
+ PYTHON_CFLAGS: ${PYTHON_DEVEL_CFLAGS}
+ PYTHON_LIBS: ${PYTHON_DEVEL_LIBS}
" >&5
$as_echo "
$PACKAGE_NAME $VERSION
@@ -21209,6 +21798,7 @@ $as_echo "
AUDIT: ${have_audit}
IMA: ${have_ima}
SELinux: ${have_selinux}
+ SMACK: ${have_smack}
XZ: ${have_xz}
ACL: ${have_acl}
XATTR: ${have_xattr}
@@ -21221,8 +21811,11 @@ $as_echo "
readahead: ${have_readahead}
bootchart: ${have_bootchart}
quotacheck: ${have_quotacheck}
+ tmpfiles: ${have_tmpfiles}
randomseed: ${have_randomseed}
+ backlight: ${have_backlight}
logind: ${have_logind}
+ machined: ${have_machined}
hostnamed: ${have_hostnamed}
timedated: ${have_timedated}
localed: ${have_localed}
@@ -21234,11 +21827,11 @@ $as_echo "
nss-myhostname: ${have_myhostname}
gudev: ${enable_gudev}
gintrospection: ${enable_introspection}
- keymap: ${enable_keymap}
Python: ${have_python}
Python Headers: ${have_python_devel}
man pages: ${have_manpages}
gtk-doc: ${enable_gtk_doc}
+ test coverage: ${have_coverage}
Split /usr: ${enable_split_usr}
SysV compatibility: ${SYSTEM_SYSV_COMPAT}
@@ -21254,13 +21847,16 @@ $as_echo "
SysV rc?.d directories: ${SYSTEM_SYSVRCND_PATH}
Build Python: ${PYTHON}
Installation Python: ${PYTHON_BINARY}
+ sphinx binary: ${SPHINX_BUILD}
firmware path: ${FIRMWARE_PATH}
PAM modules dir: ${with_pamlibdir}
+ PAM configuration dir: ${with_pamconfdir}
D-Bus policy dir: ${with_dbuspolicydir}
D-Bus session dir: ${with_dbussessionservicedir}
D-Bus system dir: ${with_dbussystemservicedir}
D-Bus interfaces dir: ${with_dbusinterfacedir}
Bash completions dir: ${with_bashcompletiondir}
+ Zsh completions dir: ${with_zshcompletiondir}
Extra start script: ${RC_LOCAL_SCRIPT_PATH_START}
Extra stop script: ${RC_LOCAL_SCRIPT_PATH_STOP}
Debug shell: ${SUSHELL} @ ${DEBUGTTY}
@@ -21268,6 +21864,6 @@ $as_echo "
CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
- PYTHON_CFLAGS: ${PYTHON_CFLAGS}
- PYTHON_LIBS: ${PYTHON_LIBS}
+ PYTHON_CFLAGS: ${PYTHON_DEVEL_CFLAGS}
+ PYTHON_LIBS: ${PYTHON_DEVEL_LIBS}
" >&6; }
diff --git a/configure.ac b/configure.ac
index e1278e8504..4f26092e91 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
AC_PREREQ([2.64])
AC_INIT([systemd],
- [204],
+ [208],
[http://bugs.freedesktop.org/enter_bug.cgi?product=systemd],
[systemd],
[http://www.freedesktop.org/wiki/Software/systemd])
@@ -44,6 +44,9 @@ AS_IF([test "x$host_cpu" = "xmips" || test "x$host_cpu" = "xmipsel" ||
LT_PREREQ(2.2)
LT_INIT([disable-static])
+AS_IF([test "x$enable_static" = "xyes"], [AC_MSG_ERROR([--enable-static is not supported by systemd])])
+AS_IF([test "x$enable_largefile" = "xno"], [AC_MSG_ERROR([--disable-largefile is not supported by systemd])])
+
# i18n stuff for the PolicyKit policy files
IT_PROG_INTLTOOL([0.40.0])
@@ -71,10 +74,15 @@ AC_PATH_PROG([SETCAP], [setcap], [/usr/sbin/setcap])
AC_PATH_PROG([KILL], [kill], [/usr/bin/kill])
+AC_PATH_PROG([KMOD], [kmod], [/usr/bin/kmod])
+
+AC_PATH_PROG([KEXEC], [kexec], [/usr/sbin/kexec])
+
# gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
m4_ifdef([GTK_DOC_CHECK], [
-GTK_DOC_CHECK([1.18],[--flavour no-tmpl])
-], [AM_CONDITIONAL([ENABLE_GTK_DOC], [false])])
+GTK_DOC_CHECK([1.18],[--flavour no-tmpl])],
+ [AM_CONDITIONAL([ENABLE_GTK_DOC], [false])
+ enable_gtk_doc=no])
AS_IF([test "x$enable_gtk_doc" = "xyes" -a "x$XSLTPROC" = x], [
AC_MSG_ERROR([*** GTK doc requested but xsltproc not found])
@@ -93,6 +101,20 @@ if test -z "$GPERF" ; then
AC_MSG_ERROR([*** gperf not found])
fi
+# ------------------------------------------------------------------------------
+address_sanitizer_cflags=
+address_sanitizer_cppflags=
+address_sanitizer_ldflags=
+AC_ARG_ENABLE(address-sanitizer, AS_HELP_STRING([--enable-address-sanitizer], [enable -fsanitize=address]))
+AS_IF([test "x$enable_address_sanitizer" = "xyes"], [
+ CC_CHECK_FLAG_APPEND([with_as_cflags], [CFLAGS], [-fsanitize=address])
+ AS_IF([test -z "$with_as_cflags"],
+ [AC_MSG_ERROR([*** -fsanitize=address is not supported])])
+ address_sanitizer_cflags="$with_as_cflags -fno-omit-frame-pointer -DVALGRIND=1"
+ address_sanitizer_cppflags="-DVALGRIND=1"
+ address_sanitizer_ldflags="-Wc,-fsanitize=address"
+ ])
+
CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
-pipe \
-Wall \
@@ -127,20 +149,20 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
-ffast-math \
-fno-common \
-fdiagnostics-show-option \
+ -fdiagnostics-color \
-fno-strict-aliasing \
-fvisibility=hidden \
-ffunction-sections \
-fdata-sections \
-fstack-protector \
--param=ssp-buffer-size=4])
-AC_SUBST([OUR_CFLAGS], $with_cflags)
+AC_SUBST([OUR_CFLAGS], "$with_cflags $address_sanitizer_cflags")
-AS_CASE([$CFLAGS], [*-O[[12345g\ ]]*], [
- CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
- -Wp,-D_FORTIFY_SOURCE=2])], [
- python_extra_cflags=-Wp,-U_FORTIFY_SOURCE
- AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])])
-AC_SUBST([OUR_CPPFLAGS], $with_cppflags)
+AS_CASE([$CFLAGS], [*-O[[12345g\ ]]*],
+ [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\
+ -Wp,-D_FORTIFY_SOURCE=2])],
+ [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])])
+AC_SUBST([OUR_CPPFLAGS], "$with_cppflags $address_sanitizer_cppflags")
CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
-Wl,--as-needed \
@@ -148,13 +170,11 @@ CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
-Wl,--gc-sections \
-Wl,-z,relro \
-Wl,-z,now])
-AC_SUBST([OUR_LDFLAGS], $with_ldflags)
+AC_SUBST([OUR_LDFLAGS], "$with_ldflags $address_sanitizer_ldflags")
# ------------------------------------------------------------------------------
# we use python to build the man page index, and for systemd-python
have_python=no
-have_python_devel=no
-
AC_ARG_WITH([python],
[AS_HELP_STRING([--without-python], [Disable building the man page index and systemd-python (default: test)])])
@@ -169,32 +189,44 @@ AS_IF([test "x$PYTHON_BINARY" = "x"],
[PYTHON_BINARY=/usr/bin/python])])
AC_ARG_VAR(PYTHON_BINARY, [Python binary used to launch installed scripts])
-AS_IF([test "x$with_python" != "xno"], [
- AC_PATH_PROG(PYTHON_CONFIG, python${PYTHON_VERSION}-config)
- AS_IF([test -n "$PYTHON_CONFIG"], [
- have_python_devel=yes
- PYTHON_CFLAGS="$($PYTHON_CONFIG --cflags) $python_extra_cflags"
- PYTHON_LIBS="$($PYTHON_CONFIG --ldflags)"
- AC_SUBST(PYTHON_CFLAGS)
- AC_SUBST(PYTHON_LIBS)
- AC_PATH_PROGS(SPHINX_BUILD, sphinx-build-${PYTHON_VERSION} sphinx-build)
- ])
+AS_IF([test "x$have_python" != "xyes" -a "x$enable_python_devel" = "xyes"],
+ [AC_MSG_ERROR([*** python-devel support requires --with-python])])
+
+have_python_devel=no
+AC_ARG_ENABLE(python_devel, AS_HELP_STRING([--disable-python-devel], [Do not build python modules]))
+AS_IF([test "x$have_python" = "xyes" -a "x$enable_python_devel" != "xno"], [
+ PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}],
+ [have_python_devel=yes],
+ [PKG_CHECK_MODULES([PYTHON_DEVEL], [python],
+ [have_python_devel=yes],
+ [have_python_devel=no])])
+ AS_IF([test "x$have_python_devel" = xno -a "x$enable_python_devel" = xyes],
+ [AC_MSG_ERROR([*** python-devel support requested but libraries not found])])
+ AC_PATH_PROGS(SPHINX_BUILD, sphinx-build-${PYTHON_VERSION} sphinx-build)
])
AM_CONDITIONAL([HAVE_PYTHON_DEVEL], [test "$have_python_devel" = "yes"])
# ------------------------------------------------------------------------------
-AC_SEARCH_LIBS([mq_open], [rt], [], [AC_MSG_ERROR([*** POSIX RT library not found])])
AC_SEARCH_LIBS([dlsym], [dl], [], [AC_MSG_ERROR([*** Dynamic linking loader library not found])])
+AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])])
+AC_CHECK_HEADERS([linux/btrfs.h], [], [])
+
+# unconditionally pull-in librt with old glibc versions
+AC_SEARCH_LIBS([clock_gettime], [rt], [], [])
save_LIBS="$LIBS"
LIBS=
AC_SEARCH_LIBS([cap_init], [cap], [], [AC_MSG_ERROR([*** POSIX caps library not found])])
-AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])])
CAP_LIBS="$LIBS"
-LIBS="$save_LIBS"
AC_SUBST(CAP_LIBS)
+LIBS=
+AC_SEARCH_LIBS([mq_open], [rt], [], [AC_MSG_ERROR([*** POSIX RT library not found])])
+RT_LIBS="$LIBS"
+AC_SUBST(RT_LIBS)
+LIBS="$save_LIBS"
+
AC_CHECK_FUNCS([fanotify_init fanotify_mark])
AC_CHECK_FUNCS([__secure_getenv secure_getenv])
AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at], [], [], [[#include <sys/types.h>
@@ -207,14 +239,42 @@ m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-conf
PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.3.2])
+
+# ------------------------------------------------------------------------------
+have_coverage=no
+AC_ARG_ENABLE(coverage, AS_HELP_STRING([--enable-coverage], [enable test coverage]))
+if test "x$enable_coverage" = "xyes" ; then
+ AC_CHECK_PROG(lcov_found, [lcov], [yes], [no])
+ if test "x$lcov_found" = xno ; then
+ AC_MSG_ERROR([*** lcov support requested but the program was not found])
+ else
+ lcov_version_major="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 1`"
+ lcov_version_minor="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 2`"
+ if test "$lcov_version_major" -eq 1 -a "$lcov_version_minor" -lt 10; then
+ AC_MSG_ERROR([*** lcov version is too old. 1.10 required])
+ else
+ have_coverage=yes
+ CC_CHECK_FLAGS_APPEND([with_coverage_cflags], [CFLAGS], [\
+ -fprofile-arcs \
+ -ftest-coverage])
+ AC_SUBST([OUR_CFLAGS], "$with_cflags $with_coverage_cflags")
+ fi
+ fi
+fi
+AM_CONDITIONAL(ENABLE_COVERAGE, [test "$have_coverage" = "yes"])
+
# ------------------------------------------------------------------------------
have_kmod=no
AC_ARG_ENABLE(kmod, AS_HELP_STRING([--disable-kmod], [disable loadable modules support]))
if test "x$enable_kmod" != "xno"; then
- PKG_CHECK_MODULES(KMOD, [ libkmod >= 5 ],
- [AC_DEFINE(HAVE_KMOD, 1, [Define if kmod is available]) have_kmod=yes], have_kmod=no)
+ PKG_CHECK_EXISTS([ libkmod ], have_kmod=yes, have_kmod=no)
+ if test "x$have_kmod" = "xyes"; then
+ PKG_CHECK_MODULES(KMOD, [ libkmod >= 14 ],
+ [AC_DEFINE(HAVE_KMOD, 1, [Define if kmod is available])],
+ AC_MSG_ERROR([*** kmod version >= 14 not found]))
+ fi
if test "x$have_kmod" = xno -a "x$enable_kmod" = xyes; then
- AC_MSG_ERROR([*** kmod support requested but libraries not found])
+ AC_MSG_ERROR([*** kmod support requested, but libraries not found])
fi
fi
AM_CONDITIONAL(HAVE_KMOD, [test "$have_kmod" = "yes"])
@@ -444,6 +504,31 @@ AC_SUBST(XATTR_LIBS)
AM_CONDITIONAL([HAVE_XATTR], [test "x$have_xattr" != xno])
# ------------------------------------------------------------------------------
+AC_ARG_ENABLE([smack], AS_HELP_STRING([--disable-smack],[Disable optional SMACK support]),
+ [case "${enableval}" in
+ yes) have_smack=yes ;;
+ no) have_smack=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --disable-smack) ;;
+ esac],
+ [have_smack=auto])
+
+if test "x${have_xattr}" = xno; then
+ if test "x${have_smack}" = xyes; then
+ AC_MSG_ERROR(SMACK requires xattr support)
+ else
+ have_smack=no
+ fi
+else
+ if test "x${have_smack}" = xauto; then
+ have_smack=yes
+ fi
+fi
+
+if test "x${have_smack}" = xyes ; then
+ AC_DEFINE(HAVE_SMACK, 1, [Define if SMACK is available])
+fi
+
+# ------------------------------------------------------------------------------
AC_ARG_ENABLE([gcrypt],
AS_HELP_STRING([--disable-gcrypt],[Disable optional GCRYPT support]),
[case "${enableval}" in
@@ -517,7 +602,7 @@ AC_SUBST(AUDIT_LIBS)
have_libcryptsetup=no
AC_ARG_ENABLE(libcryptsetup, AS_HELP_STRING([--disable-libcryptsetup], [disable libcryptsetup tools]))
if test "x$enable_libcryptsetup" != "xno"; then
- PKG_CHECK_MODULES(LIBCRYPTSETUP, [ libcryptsetup >= 1.4.2 ],
+ PKG_CHECK_MODULES(LIBCRYPTSETUP, [ libcryptsetup >= 1.6.0 ],
[AC_DEFINE(HAVE_LIBCRYPTSETUP, 1, [Define if libcryptsetup is available]) have_libcryptsetup=yes], have_libcryptsetup=no)
if test "x$have_libcryptsetup" = xno -a "x$enable_libcryptsetup" = xyes; then
AC_MSG_ERROR([*** libcryptsetup support requested but libraries not found])
@@ -590,6 +675,14 @@ fi
AM_CONDITIONAL(ENABLE_QUOTACHECK, [test "$have_quotacheck" = "yes"])
# ------------------------------------------------------------------------------
+have_tmpfiles=no
+AC_ARG_ENABLE(tmpfiles, AS_HELP_STRING([--disable-tmpfiles], [disable tmpfiles support]))
+if test "x$enable_tmpfiles" != "xno"; then
+ have_tmpfiles=yes
+fi
+AM_CONDITIONAL(ENABLE_TMPFILES, [test "$have_tmpfiles" = "yes"])
+
+# ------------------------------------------------------------------------------
have_randomseed=no
AC_ARG_ENABLE(randomseed, AS_HELP_STRING([--disable-randomseed], [disable randomseed tools]))
if test "x$enable_randomseed" != "xno"; then
@@ -598,6 +691,14 @@ fi
AM_CONDITIONAL(ENABLE_RANDOMSEED, [test "$have_randomseed" = "yes"])
# ------------------------------------------------------------------------------
+have_backlight=no
+AC_ARG_ENABLE(backlight, AS_HELP_STRING([--disable-backlight], [disable backlight tools]))
+if test "x$enable_backlight" != "xno"; then
+ have_backlight=yes
+fi
+AM_CONDITIONAL(ENABLE_BACKLIGHT, [test "$have_backlight" = "yes"])
+
+# ------------------------------------------------------------------------------
have_logind=no
AC_ARG_ENABLE(logind, AS_HELP_STRING([--disable-logind], [disable login daemon]))
if test "x$enable_logind" != "xno"; then
@@ -607,6 +708,15 @@ AM_CONDITIONAL(ENABLE_LOGIND, [test "$have_logind" = "yes"])
AS_IF([test "$have_logind" = "yes"], [ AC_DEFINE(HAVE_LOGIND, [1], [Logind support available]) ])
# ------------------------------------------------------------------------------
+have_machined=no
+AC_ARG_ENABLE(machined, AS_HELP_STRING([--disable-machined], [disable machine daemon]))
+if test "x$enable_machined" != "xno"; then
+ have_machined=yes
+fi
+AM_CONDITIONAL(ENABLE_MACHINED, [test "$have_machined" = "yes"])
+AS_IF([test "$have_machined" = "yes"], [ AC_DEFINE(HAVE_MACHINED, [1], [Machined support available]) ])
+
+# ------------------------------------------------------------------------------
have_hostnamed=no
AC_ARG_ENABLE(hostnamed, AS_HELP_STRING([--disable-hostnamed], [disable hostname daemon]))
if test "x$enable_hostnamed" != "xno"; then
@@ -698,7 +808,7 @@ AC_ARG_WITH(telinit,
AS_HELP_STRING([--with-telinit=PATH],
[Path to telinit]),
[TELINIT="$withval"],
- [TELINIT="/lib/upstart/telinit"])
+ [TELINIT="/lib/sysvinit/telinit"])
AC_DEFINE_UNQUOTED(TELINIT, ["$TELINIT"], [Path to telinit])
@@ -711,7 +821,7 @@ have_myhostname=no
AC_ARG_ENABLE(myhostname, AS_HELP_STRING([--disable-myhostname], [disable nss-myhostname support]))
if test "x$enable_myhostname" != "xno"; then
AC_HEADER_STDC
- AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h])
+ AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h nss.h sys/ioctl.h sys/auxv.h])
AC_C_CONST
AC_TYPE_SIZE_T
@@ -753,21 +863,6 @@ AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"])
AS_IF([test "x$enable_gudev" = "xyes"], [ AC_DEFINE(HAVE_GLIB, 1, [Define if glib is available]) ])
# ------------------------------------------------------------------------------
-AC_ARG_ENABLE([keymap],
- AS_HELP_STRING([--disable-keymap], [disable keymap fixup support @<:@default=enabled@:>@]),
- [], [enable_keymap=yes])
-AS_IF([test "x$enable_keymap" = "xyes"], [
- AC_PATH_PROG([GPERF], [gperf])
- if test -z "$GPERF"; then
- AC_MSG_ERROR([gperf is needed])
- fi
-
- AC_CHECK_HEADER([linux/input.h], [:], AC_MSG_ERROR([kernel headers not found]))
- AC_SUBST([INCLUDE_PREFIX], [$(echo '#include <linux/input.h>' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}')])
-])
-AM_CONDITIONAL([ENABLE_KEYMAP], [test "x$enable_keymap" = "xyes"])
-
-# ------------------------------------------------------------------------------
have_manpages=no
AC_ARG_ENABLE(manpages, AS_HELP_STRING([--disable-manpages], [disable manpages]))
AS_IF([test "x$enable_manpages" != xno], [
@@ -848,6 +943,10 @@ AC_ARG_WITH([bashcompletiondir],
with_bashcompletiondir=${datadir}/bash-completion/completions
])])
+AC_ARG_WITH([zshcompletiondir],
+ AS_HELP_STRING([--with-zshcompletiondir=DIR], [Zsh completions directory]),
+ [], [with_zshcompletiondir=${datadir}/zsh/site-functions])
+
AC_ARG_WITH([rootprefix],
AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]),
[], [with_rootprefix=${ac_default_prefix}])
@@ -862,6 +961,11 @@ AC_ARG_WITH([pamlibdir],
[],
[with_pamlibdir=${with_rootlibdir}/security])
+AC_ARG_WITH([pamconfdir],
+ AS_HELP_STRING([--with-pamconfdir=DIR], [Directory for PAM configuration]),
+ [],
+ [with_pamconfdir=${sysconfdir}/pam.d])
+
AC_ARG_ENABLE([split-usr],
AS_HELP_STRING([--enable-split-usr], [Assume that /bin, /sbin aren\'t symlinks into /usr]),
[],
@@ -892,7 +996,9 @@ AC_SUBST([dbussessionservicedir], [$with_dbussessionservicedir])
AC_SUBST([dbussystemservicedir], [$with_dbussystemservicedir])
AC_SUBST([dbusinterfacedir], [$with_dbusinterfacedir])
AC_SUBST([bashcompletiondir], [$with_bashcompletiondir])
+AC_SUBST([zshcompletiondir], [$with_zshcompletiondir])
AC_SUBST([pamlibdir], [$with_pamlibdir])
+AC_SUBST([pamconfdir], [$with_pamconfdir])
AC_SUBST([rootprefix], [$with_rootprefix])
AC_SUBST([rootlibdir], [$with_rootlibdir])
@@ -914,6 +1020,7 @@ AC_MSG_RESULT([
AUDIT: ${have_audit}
IMA: ${have_ima}
SELinux: ${have_selinux}
+ SMACK: ${have_smack}
XZ: ${have_xz}
ACL: ${have_acl}
XATTR: ${have_xattr}
@@ -926,8 +1033,11 @@ AC_MSG_RESULT([
readahead: ${have_readahead}
bootchart: ${have_bootchart}
quotacheck: ${have_quotacheck}
+ tmpfiles: ${have_tmpfiles}
randomseed: ${have_randomseed}
+ backlight: ${have_backlight}
logind: ${have_logind}
+ machined: ${have_machined}
hostnamed: ${have_hostnamed}
timedated: ${have_timedated}
localed: ${have_localed}
@@ -939,11 +1049,11 @@ AC_MSG_RESULT([
nss-myhostname: ${have_myhostname}
gudev: ${enable_gudev}
gintrospection: ${enable_introspection}
- keymap: ${enable_keymap}
Python: ${have_python}
Python Headers: ${have_python_devel}
man pages: ${have_manpages}
gtk-doc: ${enable_gtk_doc}
+ test coverage: ${have_coverage}
Split /usr: ${enable_split_usr}
SysV compatibility: ${SYSTEM_SYSV_COMPAT}
@@ -959,13 +1069,16 @@ AC_MSG_RESULT([
SysV rc?.d directories: ${SYSTEM_SYSVRCND_PATH}
Build Python: ${PYTHON}
Installation Python: ${PYTHON_BINARY}
+ sphinx binary: ${SPHINX_BUILD}
firmware path: ${FIRMWARE_PATH}
PAM modules dir: ${with_pamlibdir}
+ PAM configuration dir: ${with_pamconfdir}
D-Bus policy dir: ${with_dbuspolicydir}
D-Bus session dir: ${with_dbussessionservicedir}
D-Bus system dir: ${with_dbussystemservicedir}
D-Bus interfaces dir: ${with_dbusinterfacedir}
Bash completions dir: ${with_bashcompletiondir}
+ Zsh completions dir: ${with_zshcompletiondir}
Extra start script: ${RC_LOCAL_SCRIPT_PATH_START}
Extra stop script: ${RC_LOCAL_SCRIPT_PATH_STOP}
Debug shell: ${SUSHELL} @ ${DEBUGTTY}
@@ -973,6 +1086,6 @@ AC_MSG_RESULT([
CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
- PYTHON_CFLAGS: ${PYTHON_CFLAGS}
- PYTHON_LIBS: ${PYTHON_LIBS}
+ PYTHON_CFLAGS: ${PYTHON_DEVEL_CFLAGS}
+ PYTHON_LIBS: ${PYTHON_DEVEL_LIBS}
])
diff --git a/docs/gtk-doc.make b/docs/gtk-doc.make
index 9841de4792..104c3993f3 100644
--- a/docs/gtk-doc.make
+++ b/docs/gtk-doc.make
@@ -74,31 +74,40 @@ $(REPORT_FILES): sgml-build.stamp
#### setup ####
+GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_$(V))
+GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0=@echo " DOC Preparing build";
+
setup-build.stamp:
- -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
- echo ' DOC Preparing build'; \
+ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
test -f $(abs_srcdir)/$$file && \
- cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
fi
- @touch setup-build.stamp
+ $(AM_V_at)touch setup-build.stamp
#### scan ####
+GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files";
+
+GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_$(V))
+GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects";
+
scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
- @echo ' DOC Scanning header files'
- @_source_dir='' ; \
+ $(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
- @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
- echo " DOC Introspecting gobjects"; \
+ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
scanobj_options=""; \
gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
@@ -113,32 +122,41 @@ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
test -f $$i || touch $$i ; \
done \
fi
- @touch scan-build.stamp
+ $(AM_V_at)touch scan-build.stamp
$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
@true
#### xml ####
+GTK_DOC_V_XML=$(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0=@echo " DOC Building XML";
+
sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
- @echo ' DOC Building XML'
- @_source_dir='' ; \
+ $(GTK_DOC_V_XML)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
- @touch sgml-build.stamp
+ $(AM_V_at)touch sgml-build.stamp
sgml.stamp: sgml-build.stamp
@true
#### html ####
+GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0=@echo " DOC Building HTML";
+
+GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references";
+
html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building HTML'
- @rm -rf html
- @mkdir html
- @mkhtml_options=""; \
+ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+ mkhtml_options=""; \
gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -159,16 +177,18 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
cp $(abs_builddir)/$$file $(abs_builddir)/html; \
fi; \
done;
- @echo ' DOC Fixing cross-references'
- @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
- @touch html-build.stamp
+ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ $(AM_V_at)touch html-build.stamp
#### pdf ####
+GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0=@echo " DOC Building PDF";
+
pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building PDF'
- @rm -f $(DOC_MODULE).pdf
- @mkpdf_options=""; \
+ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+ mkpdf_options=""; \
gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -185,7 +205,7 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
done; \
fi; \
gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
- @touch pdf-build.stamp
+ $(AM_V_at)touch pdf-build.stamp
##############
@@ -200,7 +220,7 @@ distclean-local:
rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
fi
-maintainer-clean-local: clean
+maintainer-clean-local:
@rm -rf xml html
install-data-local:
@@ -237,7 +257,7 @@ uninstall-local:
# Require gtk-doc when making dist
#
if ENABLE_GTK_DOC
-dist-check-gtkdoc:
+dist-check-gtkdoc: docs
else
dist-check-gtkdoc:
@echo "*** gtk-doc must be installed and enabled in order to make dist"
diff --git a/docs/gudev/Makefile.in b/docs/gudev/Makefile.in
index 9716bc09f4..8cb9ee1d92 100644
--- a/docs/gudev/Makefile.in
+++ b/docs/gudev/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,23 +20,51 @@
# Everything below here is generic #
####################################
VPATH = @srcdir@
-am__make_dryrun = \
- { \
- am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
- *) \
- for am__flg in $$MAKEFLAGS; do \
- case $$am__flg in \
- *=*|--*) ;; \
- *n*) am__dry=yes; break;; \
- esac; \
- done;; \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
esac; \
- test $$am__dry = yes; \
- }
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -143,7 +171,6 @@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
HTML_DIR = @HTML_DIR@
-INCLUDE_PREFIX = @INCLUDE_PREFIX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -167,7 +194,9 @@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
KBD_LOADKEYS = @KBD_LOADKEYS@
KBD_SETFONT = @KBD_SETFONT@
+KEXEC = @KEXEC@
KILL = @KILL@
+KMOD = @KMOD@
KMOD_CFLAGS = @KMOD_CFLAGS@
KMOD_LIBS = @KMOD_LIBS@
LD = @LD@
@@ -217,10 +246,9 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
PYTHON = @PYTHON@
PYTHON_BINARY = @PYTHON_BINARY@
-PYTHON_CFLAGS = @PYTHON_CFLAGS@
-PYTHON_CONFIG = @PYTHON_CONFIG@
+PYTHON_DEVEL_CFLAGS = @PYTHON_DEVEL_CFLAGS@
+PYTHON_DEVEL_LIBS = @PYTHON_DEVEL_LIBS@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-PYTHON_LIBS = @PYTHON_LIBS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
@@ -231,6 +259,7 @@ QUOTAON = @QUOTAON@
RANLIB = @RANLIB@
RC_LOCAL_SCRIPT_PATH_START = @RC_LOCAL_SCRIPT_PATH_START@
RC_LOCAL_SCRIPT_PATH_STOP = @RC_LOCAL_SCRIPT_PATH_STOP@
+RT_LIBS = @RT_LIBS@
SED = @SED@
SELINUX_CFLAGS = @SELINUX_CFLAGS@
SELINUX_LIBS = @SELINUX_LIBS@
@@ -291,6 +320,7 @@ infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+lcov_found = @lcov_found@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -298,6 +328,7 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
+pamconfdir = @pamconfdir@
pamlibdir = @pamlibdir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@
@@ -317,6 +348,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+zshcompletiondir = @zshcompletiondir@
# We require automake 1.10 at least.
AUTOMAKE_OPTIONS = 1.10 color-tests
@@ -451,6 +483,37 @@ CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+#### setup ####
+GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
+GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build";
+
+#### scan ####
+GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files";
+GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_$(V))
+GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects";
+
+#### xml ####
+GTK_DOC_V_XML = $(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0 = @echo " DOC Building XML";
+
+#### html ####
+GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0 = @echo " DOC Building HTML";
+GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references";
+
+#### pdf ####
+GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0 = @echo " DOC Building PDF";
all: all-am
.SUFFIXES:
@@ -667,32 +730,25 @@ docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
$(REPORT_FILES): sgml-build.stamp
-#### setup ####
-
setup-build.stamp:
- -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
- echo ' DOC Preparing build'; \
+ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
test -f $(abs_srcdir)/$$file && \
- cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
fi
- @touch setup-build.stamp
-
-#### scan ####
+ $(AM_V_at)touch setup-build.stamp
scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
- @echo ' DOC Scanning header files'
- @_source_dir='' ; \
+ $(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
- @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
- echo " DOC Introspecting gobjects"; \
+ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
scanobj_options=""; \
gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
@@ -707,32 +763,25 @@ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
test -f $$i || touch $$i ; \
done \
fi
- @touch scan-build.stamp
+ $(AM_V_at)touch scan-build.stamp
$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
@true
-#### xml ####
-
sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
- @echo ' DOC Building XML'
- @_source_dir='' ; \
+ $(GTK_DOC_V_XML)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
- @touch sgml-build.stamp
+ $(AM_V_at)touch sgml-build.stamp
sgml.stamp: sgml-build.stamp
@true
-#### html ####
-
html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building HTML'
- @rm -rf html
- @mkdir html
- @mkhtml_options=""; \
+ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+ mkhtml_options=""; \
gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -753,16 +802,12 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
cp $(abs_builddir)/$$file $(abs_builddir)/html; \
fi; \
done;
- @echo ' DOC Fixing cross-references'
- @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
- @touch html-build.stamp
-
-#### pdf ####
+ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ $(AM_V_at)touch html-build.stamp
pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building PDF'
- @rm -f $(DOC_MODULE).pdf
- @mkpdf_options=""; \
+ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+ mkpdf_options=""; \
gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -779,7 +824,7 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
done; \
fi; \
gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
- @touch pdf-build.stamp
+ $(AM_V_at)touch pdf-build.stamp
##############
@@ -794,7 +839,7 @@ distclean-local:
rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
fi
-maintainer-clean-local: clean
+maintainer-clean-local:
@rm -rf xml html
install-data-local:
@@ -830,7 +875,7 @@ uninstall-local:
#
# Require gtk-doc when making dist
#
-@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
@ENABLE_GTK_DOC_FALSE@ @false
diff --git a/docs/gudev/html/GUdevClient.html b/docs/gudev/html/GUdevClient.html
index d914d21927..ed718f55bf 100644
--- a/docs/gudev/html/GUdevClient.html
+++ b/docs/gudev/html/GUdevClient.html
@@ -8,7 +8,7 @@
<link rel="up" href="ref-API.html" title="API Reference">
<link rel="prev" href="ref-API.html" title="API Reference">
<link rel="next" href="GUdevDevice.html" title="GUdevDevice">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -462,6 +462,6 @@ of the thread that <em class="parameter"><code>client</code></em> was created in
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/GUdevDevice.html b/docs/gudev/html/GUdevDevice.html
index cc9f2ea863..7ed0663281 100644
--- a/docs/gudev/html/GUdevDevice.html
+++ b/docs/gudev/html/GUdevDevice.html
@@ -8,7 +8,7 @@
<link rel="up" href="ref-API.html" title="API Reference">
<link rel="prev" href="GUdevClient.html" title="GUdevClient">
<link rel="next" href="GUdevEnumerator.html" title="GUdevEnumerator">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -1072,6 +1072,6 @@ not taken into account).
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/GUdevEnumerator.html b/docs/gudev/html/GUdevEnumerator.html
index ee2bbf8d3c..cedc2f3e07 100644
--- a/docs/gudev/html/GUdevEnumerator.html
+++ b/docs/gudev/html/GUdevEnumerator.html
@@ -8,7 +8,7 @@
<link rel="up" href="ref-API.html" title="API Reference">
<link rel="prev" href="GUdevDevice.html" title="GUdevDevice">
<link rel="next" href="gudev-hierarchy.html" title="Object Hierarchy">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -488,6 +488,6 @@ The <a class="link" href="GUdevClient.html" title="GUdevClient"><span class="typ
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/annotation-glossary.html b/docs/gudev/html/annotation-glossary.html
index 2fa5275fa4..a6e07d6fc2 100644
--- a/docs/gudev/html/annotation-glossary.html
+++ b/docs/gudev/html/annotation-glossary.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GUdev Reference Manual">
<link rel="up" href="index.html" title="GUdev Reference Manual">
<link rel="prev" href="api-index-deprecated.html" title="Index of deprecated API">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -46,6 +46,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/api-index-deprecated.html b/docs/gudev/html/api-index-deprecated.html
index fda184dd2d..af591c870d 100644
--- a/docs/gudev/html/api-index-deprecated.html
+++ b/docs/gudev/html/api-index-deprecated.html
@@ -8,7 +8,7 @@
<link rel="up" href="index.html" title="GUdev Reference Manual">
<link rel="prev" href="ix02.html" title="Index of new symbols in 165">
<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -26,6 +26,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/api-index-full.html b/docs/gudev/html/api-index-full.html
index ff5bd53cfe..1d5d8174a3 100644
--- a/docs/gudev/html/api-index-full.html
+++ b/docs/gudev/html/api-index-full.html
@@ -8,7 +8,7 @@
<link rel="up" href="index.html" title="GUdev Reference Manual">
<link rel="prev" href="gudev-hierarchy.html" title="Object Hierarchy">
<link rel="next" href="ix02.html" title="Index of new symbols in 165">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -276,6 +276,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/gudev-hierarchy.html b/docs/gudev/html/gudev-hierarchy.html
index 5c4aa46cbb..70da601330 100644
--- a/docs/gudev/html/gudev-hierarchy.html
+++ b/docs/gudev/html/gudev-hierarchy.html
@@ -8,7 +8,7 @@
<link rel="up" href="index.html" title="GUdev Reference Manual">
<link rel="prev" href="GUdevEnumerator.html" title="GUdevEnumerator">
<link rel="next" href="api-index-full.html" title="API Index">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -33,6 +33,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/index.html b/docs/gudev/html/index.html
index 0bc7c9540f..2bd1687097 100644
--- a/docs/gudev/html/index.html
+++ b/docs/gudev/html/index.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="GUdev Reference Manual">
<link rel="next" href="ref-API.html" title="API Reference">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GUdev Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For version 204
+ For version 208
— the latest version of this
documentation can be found at
<a class="ulink" href="http://www.freedesktop.org/software/systemd/gudev/" target="_top">
@@ -48,6 +48,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/ix02.html b/docs/gudev/html/ix02.html
index 87b90df7ce..c2927605d9 100644
--- a/docs/gudev/html/ix02.html
+++ b/docs/gudev/html/ix02.html
@@ -8,7 +8,7 @@
<link rel="up" href="index.html" title="GUdev Reference Manual">
<link rel="prev" href="api-index-full.html" title="API Index">
<link rel="next" href="api-index-deprecated.html" title="Index of deprecated API">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -30,7 +30,7 @@
</table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
-<a name="idm259781560000"></a>Index of new symbols in 165</h1></div></div></div>
+<a name="id-1.5"></a>Index of new symbols in 165</h1></div></div></div>
<a name="idx"></a><a name="idxD"></a><h3 class="title">D</h3>
<dt>
<a class="link" href="GUdevDevice.html#g-udev-device-get-is-initialized" title="g_udev_device_get_is_initialized ()">g_udev_device_get_is_initialized</a>, function in <a class="link" href="GUdevDevice.html" title="GUdevDevice">GUdevDevice</a>
@@ -105,6 +105,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/html/ref-API.html b/docs/gudev/html/ref-API.html
index d8358c274e..37c90cb4e7 100644
--- a/docs/gudev/html/ref-API.html
+++ b/docs/gudev/html/ref-API.html
@@ -8,7 +8,7 @@
<link rel="up" href="index.html" title="GUdev Reference Manual">
<link rel="prev" href="index.html" title="GUdev Reference Manual">
<link rel="next" href="GUdevClient.html" title="GUdevClient">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -36,6 +36,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/gudev/version.xml b/docs/gudev/version.xml
index ad03f7c5a8..7d645f5893 100644
--- a/docs/gudev/version.xml
+++ b/docs/gudev/version.xml
@@ -1 +1 @@
-204
+208
diff --git a/docs/libudev/Makefile.in b/docs/libudev/Makefile.in
index 080ab762e5..e1037de93a 100644
--- a/docs/libudev/Makefile.in
+++ b/docs/libudev/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.13.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,23 +20,51 @@
# Everything below here is generic #
####################################
VPATH = @srcdir@
-am__make_dryrun = \
- { \
- am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
- *) \
- for am__flg in $$MAKEFLAGS; do \
- case $$am__flg in \
- *=*|--*) ;; \
- *n*) am__dry=yes; break;; \
- esac; \
- done;; \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
esac; \
- test $$am__dry = yes; \
- }
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -143,7 +171,6 @@ GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
HTML_DIR = @HTML_DIR@
-INCLUDE_PREFIX = @INCLUDE_PREFIX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -167,7 +194,9 @@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
KBD_LOADKEYS = @KBD_LOADKEYS@
KBD_SETFONT = @KBD_SETFONT@
+KEXEC = @KEXEC@
KILL = @KILL@
+KMOD = @KMOD@
KMOD_CFLAGS = @KMOD_CFLAGS@
KMOD_LIBS = @KMOD_LIBS@
LD = @LD@
@@ -217,10 +246,9 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
PYTHON = @PYTHON@
PYTHON_BINARY = @PYTHON_BINARY@
-PYTHON_CFLAGS = @PYTHON_CFLAGS@
-PYTHON_CONFIG = @PYTHON_CONFIG@
+PYTHON_DEVEL_CFLAGS = @PYTHON_DEVEL_CFLAGS@
+PYTHON_DEVEL_LIBS = @PYTHON_DEVEL_LIBS@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-PYTHON_LIBS = @PYTHON_LIBS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
@@ -231,6 +259,7 @@ QUOTAON = @QUOTAON@
RANLIB = @RANLIB@
RC_LOCAL_SCRIPT_PATH_START = @RC_LOCAL_SCRIPT_PATH_START@
RC_LOCAL_SCRIPT_PATH_STOP = @RC_LOCAL_SCRIPT_PATH_STOP@
+RT_LIBS = @RT_LIBS@
SED = @SED@
SELINUX_CFLAGS = @SELINUX_CFLAGS@
SELINUX_LIBS = @SELINUX_LIBS@
@@ -291,6 +320,7 @@ infodir = @infodir@
install_sh = @install_sh@
intltool__v_merge_options_ = @intltool__v_merge_options_@
intltool__v_merge_options_0 = @intltool__v_merge_options_0@
+lcov_found = @lcov_found@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
@@ -298,6 +328,7 @@ localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
+pamconfdir = @pamconfdir@
pamlibdir = @pamlibdir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@
@@ -317,6 +348,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+zshcompletiondir = @zshcompletiondir@
# We require automake 1.10 at least.
AUTOMAKE_OPTIONS = 1.10 color-tests
@@ -444,6 +476,37 @@ CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+#### setup ####
+GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
+GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build";
+
+#### scan ####
+GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files";
+GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_$(V))
+GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects";
+
+#### xml ####
+GTK_DOC_V_XML = $(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0 = @echo " DOC Building XML";
+
+#### html ####
+GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0 = @echo " DOC Building HTML";
+GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references";
+
+#### pdf ####
+GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0 = @echo " DOC Building PDF";
all: all-am
.SUFFIXES:
@@ -660,32 +723,25 @@ docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
$(REPORT_FILES): sgml-build.stamp
-#### setup ####
-
setup-build.stamp:
- -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
- echo ' DOC Preparing build'; \
+ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
test -f $(abs_srcdir)/$$file && \
- cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
fi
- @touch setup-build.stamp
-
-#### scan ####
+ $(AM_V_at)touch setup-build.stamp
scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
- @echo ' DOC Scanning header files'
- @_source_dir='' ; \
+ $(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
- @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
- echo " DOC Introspecting gobjects"; \
+ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
scanobj_options=""; \
gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
@@ -700,32 +756,25 @@ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
test -f $$i || touch $$i ; \
done \
fi
- @touch scan-build.stamp
+ $(AM_V_at)touch scan-build.stamp
$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
@true
-#### xml ####
-
sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
- @echo ' DOC Building XML'
- @_source_dir='' ; \
+ $(GTK_DOC_V_XML)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
- @touch sgml-build.stamp
+ $(AM_V_at)touch sgml-build.stamp
sgml.stamp: sgml-build.stamp
@true
-#### html ####
-
html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building HTML'
- @rm -rf html
- @mkdir html
- @mkhtml_options=""; \
+ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+ mkhtml_options=""; \
gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -746,16 +795,12 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
cp $(abs_builddir)/$$file $(abs_builddir)/html; \
fi; \
done;
- @echo ' DOC Fixing cross-references'
- @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
- @touch html-build.stamp
-
-#### pdf ####
+ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ $(AM_V_at)touch html-build.stamp
pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building PDF'
- @rm -f $(DOC_MODULE).pdf
- @mkpdf_options=""; \
+ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+ mkpdf_options=""; \
gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -772,7 +817,7 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
done; \
fi; \
gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
- @touch pdf-build.stamp
+ $(AM_V_at)touch pdf-build.stamp
##############
@@ -787,7 +832,7 @@ distclean-local:
rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
fi
-maintainer-clean-local: clean
+maintainer-clean-local:
@rm -rf xml html
install-data-local:
@@ -823,7 +868,7 @@ uninstall-local:
#
# Require gtk-doc when making dist
#
-@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
@ENABLE_GTK_DOC_FALSE@ @false
diff --git a/docs/libudev/html/api-index-full.html b/docs/libudev/html/api-index-full.html
index 7f332a26d4..9404bfdc39 100644
--- a/docs/libudev/html/api-index-full.html
+++ b/docs/libudev/html/api-index-full.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="libudev Reference Manual">
<link rel="up" href="index.html" title="libudev Reference Manual">
<link rel="prev" href="libudev-udev-util.html" title="udev_util">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -447,6 +447,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/ch01.html b/docs/libudev/html/ch01.html
index e9fc0f75c5..2bb4a0b48c 100644
--- a/docs/libudev/html/ch01.html
+++ b/docs/libudev/html/ch01.html
@@ -8,7 +8,7 @@
<link rel="up" href="index.html" title="libudev Reference Manual">
<link rel="prev" href="index.html" title="libudev Reference Manual">
<link rel="next" href="libudev-udev.html" title="udev">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
-<a name="idm259783011568"></a>API Reference</h1></div></div></div>
+<a name="id-1.2"></a>API Reference</h1></div></div></div>
<div class="toc"><dl class="toc">
<dt>
<span class="refentrytitle"><a href="libudev-udev.html">udev</a></span><span class="refpurpose"> — libudev context</span>
@@ -52,6 +52,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/index.html b/docs/libudev/html/index.html
index 4600a0c7bb..631080da05 100644
--- a/docs/libudev/html/index.html
+++ b/docs/libudev/html/index.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="libudev Reference Manual">
<link rel="next" href="ch01.html" title="API Reference">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libudev Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For version 204
+ For version 208
— the latest version of this
documentation can be found at
<a class="ulink" href="http://www.freedesktop.org/software/systemd/libudev/" target="_top">
@@ -59,6 +59,6 @@
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-device.html b/docs/libudev/html/libudev-udev-device.html
index ea790c0323..e2699e32f6 100644
--- a/docs/libudev/html/libudev-udev-device.html
+++ b/docs/libudev/html/libudev-udev-device.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev-list.html" title="udev_list">
<link rel="next" href="libudev-udev-monitor.html" title="udev_monitor">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -51,7 +51,7 @@ struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct
<em class="parameter"><code>const <span class="type">char</span> *subsystem</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *sysname</code></em>);
struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * <a class="link" href="libudev-udev-device.html#udev-device-new-from-device-id" title="udev_device_new_from_device_id ()">udev_device_new_from_device_id</a> (<em class="parameter"><code><span class="type">struct udev</span> *udev</code></em>,
- <em class="parameter"><code><span class="type">char</span> *id</code></em>);
+ <em class="parameter"><code>const <span class="type">char</span> *id</code></em>);
struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * <a class="link" href="libudev-udev-device.html#udev-device-new-from-environment" title="udev_device_new_from_environment ()">udev_device_new_from_environment</a> (<em class="parameter"><code><span class="type">struct udev</span> *udev</code></em>);
struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * <a class="link" href="libudev-udev-device.html#udev-device-get-parent" title="udev_device_get_parent ()">udev_device_get_parent</a> (<em class="parameter"><code><span class="type">struct udev_device</span> *udev_device</code></em>);
struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * <a class="link" href="libudev-udev-device.html#udev-device-get-parent-with-subsystem-devtype" title="udev_device_get_parent_with_subsystem_devtype ()">udev_device_get_parent_with_subsystem_devtype</a>
@@ -96,7 +96,7 @@ unsigned long long <span class="returnvalue">int</span> <a class="link" href="li
<p>
Representation of kernel sys devices. Devices are uniquely identified
by their syspath, every device has exactly one path in the kernel sys
-filesystem. Devices usually belong to a kernel subsystem, and and have
+filesystem. Devices usually belong to a kernel subsystem, and have
a unique name inside that subsystem.
</p>
</div>
@@ -303,7 +303,7 @@ release the resources of the udev device.
<div class="refsect2">
<a name="udev-device-new-from-device-id"></a><h3>udev_device_new_from_device_id ()</h3>
<pre class="programlisting">struct <a class="link" href="libudev-udev-device.html#udev-device" title="struct udev_device"><span class="returnvalue">udev_device</span></a> * udev_device_new_from_device_id (<em class="parameter"><code><span class="type">struct udev</span> *udev</code></em>,
- <em class="parameter"><code><span class="type">char</span> *id</code></em>);</pre>
+ <em class="parameter"><code>const <span class="type">char</span> *id</code></em>);</pre>
<p>
Create new udev device, and fill in information from the sys
device and the udev database entry. The device is looked-up
@@ -1028,6 +1028,6 @@ Check if a given device has a certain tag associated.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-enumerate.html b/docs/libudev/html/libudev-udev-enumerate.html
index 335f432c64..8bd8f38003 100644
--- a/docs/libudev/html/libudev-udev-enumerate.html
+++ b/docs/libudev/html/libudev-udev-enumerate.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev-monitor.html" title="udev_monitor">
<link rel="next" href="libudev-udev-queue.html" title="udev_queue">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -580,6 +580,6 @@ Get the first entry of the sorted list of device paths.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-hwdb.html b/docs/libudev/html/libudev-udev-hwdb.html
index 04abd9e008..921bf0e1e1 100644
--- a/docs/libudev/html/libudev-udev-hwdb.html
+++ b/docs/libudev/html/libudev-udev-hwdb.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev-queue.html" title="udev_queue">
<link rel="next" href="libudev-udev-util.html" title="udev_util">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -177,6 +177,6 @@ of a list of retrieved properties is returned.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-list.html b/docs/libudev/html/libudev-udev-list.html
index 9a8a62c41b..bd809aa02d 100644
--- a/docs/libudev/html/libudev-udev-list.html
+++ b/docs/libudev/html/libudev-udev-list.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev.html" title="udev">
<link rel="next" href="libudev-udev-device.html" title="udev_device">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -192,6 +192,6 @@ Helper to iterate over all entries of a list.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-monitor.html b/docs/libudev/html/libudev-udev-monitor.html
index d93e109df3..2f1b8ee233 100644
--- a/docs/libudev/html/libudev-udev-monitor.html
+++ b/docs/libudev/html/libudev-udev-monitor.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev-device.html" title="udev_device">
<link rel="next" href="libudev-udev-enumerate.html" title="udev_enumerate">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -434,6 +434,6 @@ Remove all filters from monitor.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-queue.html b/docs/libudev/html/libudev-udev-queue.html
index 0922f84a0c..cc74ecae42 100644
--- a/docs/libudev/html/libudev-udev-queue.html
+++ b/docs/libudev/html/libudev-udev-queue.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev-enumerate.html" title="udev_enumerate">
<link rel="next" href="libudev-udev-hwdb.html" title="udev_hwdb">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -361,6 +361,6 @@ Get the last known udev event sequence number.
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev-util.html b/docs/libudev/html/libudev-udev-util.html
index 9eebc39945..8a1669b064 100644
--- a/docs/libudev/html/libudev-udev-util.html
+++ b/docs/libudev/html/libudev-udev-util.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="libudev-udev-hwdb.html" title="udev_hwdb">
<link rel="next" href="api-index-full.html" title="Index">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -89,6 +89,6 @@ four times as long as the input string</td>
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/html/libudev-udev.html b/docs/libudev/html/libudev-udev.html
index 60670806f8..419ad1cee3 100644
--- a/docs/libudev/html/libudev-udev.html
+++ b/docs/libudev/html/libudev-udev.html
@@ -8,7 +8,7 @@
<link rel="up" href="ch01.html" title="API Reference">
<link rel="prev" href="ch01.html" title="API Reference">
<link rel="next" href="libudev-udev-list.html" title="udev_list">
-<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -271,6 +271,6 @@ Store custom <em class="parameter"><code>userdata</code></em> in the library con
</div>
<div class="footer">
<hr>
- Generated by GTK-Doc V1.18</div>
+ Generated by GTK-Doc V1.19</div>
</body>
</html> \ No newline at end of file
diff --git a/docs/libudev/version.xml b/docs/libudev/version.xml
index ad03f7c5a8..7d645f5893 100644
--- a/docs/libudev/version.xml
+++ b/docs/libudev/version.xml
@@ -1 +1 @@
-204
+208
diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
index 72795c6a6d..e913b28203 100644
--- a/hwdb/20-OUI.hwdb
+++ b/hwdb/20-OUI.hwdb
@@ -602,7 +602,7 @@ OUI:0050C20CF*
ID_OUI_FROM_DATABASE=PCSC
OUI:0050C20D0*
- ID_OUI_FROM_DATABASE=Telegrang AB
+ ID_OUI_FROM_DATABASE=Telefrang AB
OUI:0050C20D1*
ID_OUI_FROM_DATABASE=Renaissance Networking, Inc.
@@ -2468,7 +2468,7 @@ OUI:0050C2340*
ID_OUI_FROM_DATABASE=Virtu
OUI:0050C2341*
- ID_OUI_FROM_DATABASE=Novx Systems Canada Inc.
+ ID_OUI_FROM_DATABASE=Novx Systems
OUI:0050C2342*
ID_OUI_FROM_DATABASE=St. Michael Strategies
@@ -2519,7 +2519,7 @@ OUI:0050C2351*
ID_OUI_FROM_DATABASE=Finesystem Co., Ltd
OUI:0050C2352*
- ID_OUI_FROM_DATABASE=edixia
+ ID_OUI_FROM_DATABASE=LUCEO
OUI:0050C2353*
ID_OUI_FROM_DATABASE=Crossing Informationssysteme GmbH
@@ -3665,7 +3665,7 @@ OUI:0050C24CF*
ID_OUI_FROM_DATABASE=Ziehl-Abegg AG
OUI:0050C24D0*
- ID_OUI_FROM_DATABASE=Radford Control Systems
+ ID_OUI_FROM_DATABASE=RCS Energy Management Ltd
OUI:0050C24D1*
ID_OUI_FROM_DATABASE=SLICAN sp. z o.o.
@@ -4070,7 +4070,7 @@ OUI:0050C2556*
ID_OUI_FROM_DATABASE=Freiburger BlickZentrum
OUI:0050C2557*
- ID_OUI_FROM_DATABASE=TOYO RADIO SYSTEMS CO., LTD.
+ ID_OUI_FROM_DATABASE=Netcomsec Co Ltd
OUI:0050C2558*
ID_OUI_FROM_DATABASE=Bedo Elektronik GmbH
@@ -7295,7 +7295,7 @@ OUI:0050C298C*
ID_OUI_FROM_DATABASE=MGM-Devices Oy
OUI:0050C298D*
- ID_OUI_FROM_DATABASE=Mecos Traxler AG
+ ID_OUI_FROM_DATABASE=Mecos AG
OUI:0050C298E*
ID_OUI_FROM_DATABASE=Link Technologies, Inc
@@ -10565,7 +10565,7 @@ OUI:0050C2DDA*
ID_OUI_FROM_DATABASE=rbz robot design s.l.
OUI:0050C2DDB*
- ID_OUI_FROM_DATABASE=EDIXIA
+ ID_OUI_FROM_DATABASE=LUCEO
OUI:0050C2DDC*
ID_OUI_FROM_DATABASE=Vision & Control GmbH
@@ -12916,6 +12916,414 @@ OUI:40D8550EF*
OUI:40D8550F0*
ID_OUI_FROM_DATABASE=Redwood Systems
+OUI:40D8550F1*
+ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+
+OUI:40D8550F2*
+ ID_OUI_FROM_DATABASE=SigmaPhi Electronics
+
+OUI:40D8550F3*
+ ID_OUI_FROM_DATABASE=ECON Systems Inc.
+
+OUI:40D8550F4*
+ ID_OUI_FROM_DATABASE=MB Connect Line GmbH
+
+OUI:40D8550F5*
+ ID_OUI_FROM_DATABASE=CST Group
+
+OUI:40D8550F7*
+ ID_OUI_FROM_DATABASE=Comline Elektronik Elektrotechnik GmbH
+
+OUI:40D8550F8*
+ ID_OUI_FROM_DATABASE=Better Place
+
+OUI:40D8550F9*
+ ID_OUI_FROM_DATABASE=Invisua Lighting BV
+
+OUI:40D8550FA*
+ ID_OUI_FROM_DATABASE=Marmitek BV
+
+OUI:40D8550FB*
+ ID_OUI_FROM_DATABASE=InfoMac Sp. z o. o. Sp. k.
+
+OUI:40D8550FC*
+ ID_OUI_FROM_DATABASE=eumig industrie-tv GmbH
+
+OUI:40D8550FD*
+ ID_OUI_FROM_DATABASE=MONOGRAM technologies ltd
+
+OUI:40D8550FE*
+ ID_OUI_FROM_DATABASE=Cytech Technology Pte Ltd
+
+OUI:40D8550FF*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG.CO.,LTD.
+
+OUI:40D855100*
+ ID_OUI_FROM_DATABASE=TASK SISTEMAS DE COMPUTACAO S.A.
+
+OUI:40D855101*
+ ID_OUI_FROM_DATABASE=e.p.g. Elettronica Srl
+
+OUI:40D855102*
+ ID_OUI_FROM_DATABASE=Power Electronics
+
+OUI:40D855103*
+ ID_OUI_FROM_DATABASE=Peek Traffic Corporation
+
+OUI:40D855104*
+ ID_OUI_FROM_DATABASE=IMPLE SISTEMAS ELETRONICOS EMBARCADOS LTDA
+
+OUI:40D855105*
+ ID_OUI_FROM_DATABASE=Tieline Research Pty Ltd
+
+OUI:40D855106*
+ ID_OUI_FROM_DATABASE=Orbital A/S
+
+OUI:40D855107*
+ ID_OUI_FROM_DATABASE=Smith Meter, Inc
+
+OUI:40D855108*
+ ID_OUI_FROM_DATABASE=ALPHA DESIGN CO.,LTD.
+
+OUI:40D855109*
+ ID_OUI_FROM_DATABASE=Rosslare Enterprises Limited
+
+OUI:40D85510A*
+ ID_OUI_FROM_DATABASE=DAVIS DERBY LIMITED
+
+OUI:40D85510B*
+ ID_OUI_FROM_DATABASE=So-Cool Corporation.
+
+OUI:40D85510C*
+ ID_OUI_FROM_DATABASE=Contrans TI sp. z o.o.
+
+OUI:40D85510D*
+ ID_OUI_FROM_DATABASE=Rite-Tech Industrial CO., Ltd.
+
+OUI:40D85510E*
+ ID_OUI_FROM_DATABASE=HKS-Prozesstechnik GmbH
+
+OUI:40D85510F*
+ ID_OUI_FROM_DATABASE=CAVALRY STORAGE INC
+
+OUI:40D855110*
+ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
+
+OUI:40D855111*
+ ID_OUI_FROM_DATABASE=Grupo Epelsa S.L.
+
+OUI:40D855112*
+ ID_OUI_FROM_DATABASE=Halliburton - Sperry Drilling Service
+
+OUI:40D855113*
+ ID_OUI_FROM_DATABASE=Testbook Ltd
+
+OUI:40D855114*
+ ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS
+
+OUI:40D855115*
+ ID_OUI_FROM_DATABASE=MESA Electronic GmbH
+
+OUI:40D855116*
+ ID_OUI_FROM_DATABASE=Uniscan LLC
+
+OUI:40D855117*
+ ID_OUI_FROM_DATABASE=RCS Energy Management Limited
+
+OUI:40D855118*
+ ID_OUI_FROM_DATABASE=University of Nebraska -- Lincoln
+
+OUI:40D855119*
+ ID_OUI_FROM_DATABASE=OOO Group of Industrial Technologies
+
+OUI:40D85511A*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
+OUI:40D85511B*
+ ID_OUI_FROM_DATABASE=nanoTRONIC GmbH
+
+OUI:40D85511C*
+ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+
+OUI:40D85511D*
+ ID_OUI_FROM_DATABASE=ACD Elektronik GmBH
+
+OUI:40D85511E*
+ ID_OUI_FROM_DATABASE=CEMSI, Inc.
+
+OUI:40D85511F*
+ ID_OUI_FROM_DATABASE=KOMPAN Pawel Sokolowski
+
+OUI:40D855120*
+ ID_OUI_FROM_DATABASE=ObjectFab GmbH
+
+OUI:40D855121*
+ ID_OUI_FROM_DATABASE=shanghai Anjian Information technology co. , ltd.
+
+OUI:40D855122*
+ ID_OUI_FROM_DATABASE=ATX Networks Ltd.
+
+OUI:40D855123*
+ ID_OUI_FROM_DATABASE=ZAO NPC Kompjuternie Technologii
+
+OUI:40D855124*
+ ID_OUI_FROM_DATABASE=Debug s.r.l.
+
+OUI:40D855125*
+ ID_OUI_FROM_DATABASE=Scandyna A/S
+
+OUI:40D855126*
+ ID_OUI_FROM_DATABASE=TTI LTD
+
+OUI:40D855127*
+ ID_OUI_FROM_DATABASE=LIGHTSTAR
+
+OUI:40D855128*
+ ID_OUI_FROM_DATABASE=Akse srl
+
+OUI:40D855129*
+ ID_OUI_FROM_DATABASE=DSP DESIGN
+
+OUI:40D85512A*
+ ID_OUI_FROM_DATABASE=Jadpod Communication Company Limited
+
+OUI:40D85512B*
+ ID_OUI_FROM_DATABASE=Mango DSP, Inc.
+
+OUI:40D85512C*
+ ID_OUI_FROM_DATABASE=NSP Europe Ltd
+
+OUI:40D85512D*
+ ID_OUI_FROM_DATABASE=Biotage Sweden AB
+
+OUI:40D85512E*
+ ID_OUI_FROM_DATABASE=Canfield Scientific, Inc.
+
+OUI:40D855130*
+ ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH
+
+OUI:40D855131*
+ ID_OUI_FROM_DATABASE=EMAC, INC.
+
+OUI:40D855132*
+ ID_OUI_FROM_DATABASE=AeroVision Avionics, Inc
+
+OUI:40D855133*
+ ID_OUI_FROM_DATABASE=Tattile srl
+
+OUI:40D855134*
+ ID_OUI_FROM_DATABASE=digitech GmbH &amp; Co. KG
+
+OUI:40D855135*
+ ID_OUI_FROM_DATABASE=GLOBALCOM ENGINEERING SRL
+
+OUI:40D855136*
+ ID_OUI_FROM_DATABASE=Devriecom B.V.
+
+OUI:40D855137*
+ ID_OUI_FROM_DATABASE=GDE Polska
+
+OUI:40D855138*
+ ID_OUI_FROM_DATABASE=Calon Associates Limited
+
+OUI:40D855139*
+ ID_OUI_FROM_DATABASE=WOW System
+
+OUI:40D85513A*
+ ID_OUI_FROM_DATABASE=Supplier Ind. e Com de Eletroeletrônicos
+
+OUI:40D85513B*
+ ID_OUI_FROM_DATABASE=Davin Technologies Co.,Ltd
+
+OUI:40D85513C*
+ ID_OUI_FROM_DATABASE=shanghai anjian Information technology co. , ltd.
+
+OUI:40D85513D*
+ ID_OUI_FROM_DATABASE=Perm Scientific-Industrial Instrument Making Company JSC
+
+OUI:40D85513E*
+ ID_OUI_FROM_DATABASE=hanatech
+
+OUI:40D85513F*
+ ID_OUI_FROM_DATABASE=Zhejiang Wellsun Electric Meter Co.,Ltd
+
+OUI:40D855140*
+ ID_OUI_FROM_DATABASE=InnoTrans Communications, Inc
+
+OUI:40D855141*
+ ID_OUI_FROM_DATABASE=Key Systems, Inc.
+
+OUI:40D855142*
+ ID_OUI_FROM_DATABASE=Tetracore, Inc.
+
+OUI:40D855143*
+ ID_OUI_FROM_DATABASE=Tokyo Drawing Ltd.
+
+OUI:40D855144*
+ ID_OUI_FROM_DATABASE=Venco
+
+OUI:40D855145*
+ ID_OUI_FROM_DATABASE=Weber Marking Systems GmbH
+
+OUI:40D855146*
+ ID_OUI_FROM_DATABASE=Pleiger Elektronik GmbH and Co. KG
+
+OUI:40D855147*
+ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
+
+OUI:40D855148*
+ ID_OUI_FROM_DATABASE=SEIKO TIME SYSTEMS INC.
+
+OUI:40D855149*
+ ID_OUI_FROM_DATABASE=Engage Technologies
+
+OUI:40D85514A*
+ ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS
+
+OUI:40D85514C*
+ ID_OUI_FROM_DATABASE=PLT
+
+OUI:40D85514D*
+ ID_OUI_FROM_DATABASE=SOMFY SAS
+
+OUI:40D85514E*
+ ID_OUI_FROM_DATABASE=Marposs S.p.A
+
+OUI:40D85514F*
+ ID_OUI_FROM_DATABASE=TDS Software Solutions Pty Ltd
+
+OUI:40D855150*
+ ID_OUI_FROM_DATABASE=SHIKINO HIGH-TECH
+
+OUI:40D855151*
+ ID_OUI_FROM_DATABASE=Progress Rail Services, Inspection and Information Systems
+
+OUI:40D855152*
+ ID_OUI_FROM_DATABASE=Home Automation Europe
+
+OUI:40D855153*
+ ID_OUI_FROM_DATABASE=BlinkPipe Ltd
+
+OUI:40D855154*
+ ID_OUI_FROM_DATABASE=iart
+
+OUI:40D855155*
+ ID_OUI_FROM_DATABASE=Telefrang AB
+
+OUI:40D855156*
+ ID_OUI_FROM_DATABASE=Emphysys, Inc.
+
+OUI:40D855157*
+ ID_OUI_FROM_DATABASE=Hitachi Power Solutions Co., Ltd.
+
+OUI:40D855158*
+ ID_OUI_FROM_DATABASE=Exibea AB
+
+OUI:40D855159*
+ ID_OUI_FROM_DATABASE=PLATINUM GmbH
+
+OUI:40D85515A*
+ ID_OUI_FROM_DATABASE=DORLET S.A.U
+
+OUI:40D85515B*
+ ID_OUI_FROM_DATABASE=SQF Spezialelektronik GmbH
+
+OUI:40D85515C*
+ ID_OUI_FROM_DATABASE=Spectratech Inc.
+
+OUI:40D85515D*
+ ID_OUI_FROM_DATABASE=Actronic Technologies
+
+OUI:40D85515E*
+ ID_OUI_FROM_DATABASE=Prodco International Inc.
+
+OUI:40D85515F*
+ ID_OUI_FROM_DATABASE=CT COMPANY
+
+OUI:40D855160*
+ ID_OUI_FROM_DATABASE=Thermo Fisher Sceintific
+
+OUI:40D855161*
+ ID_OUI_FROM_DATABASE=Solidscape Inc
+
+OUI:40D855162*
+ ID_OUI_FROM_DATABASE=LUNA-NEXUS
+
+OUI:40D855163*
+ ID_OUI_FROM_DATABASE=KMtronic LTD
+
+OUI:40D855164*
+ ID_OUI_FROM_DATABASE=NFT Automatisierungssysteme GmbH
+
+OUI:40D855165*
+ ID_OUI_FROM_DATABASE=TECHBOARD SRL
+
+OUI:40D855166*
+ ID_OUI_FROM_DATABASE=Anhui Jiante Network Technology Co., Ltd.
+
+OUI:40D855167*
+ ID_OUI_FROM_DATABASE=Assembly Contracts Ltd
+
+OUI:40D855168*
+ ID_OUI_FROM_DATABASE=OPASCA Systems GmbH
+
+OUI:40D855169*
+ ID_OUI_FROM_DATABASE=Photop Koncent
+
+OUI:40D85516A*
+ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
+
+OUI:40D85516B*
+ ID_OUI_FROM_DATABASE=TECHWAY
+
+OUI:40D85516D*
+ ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS
+
+OUI:40D85516E*
+ ID_OUI_FROM_DATABASE=Secuinfo Co.Ltd
+
+OUI:40D85516F*
+ ID_OUI_FROM_DATABASE=BrightLeaf Power
+
+OUI:40D855170*
+ ID_OUI_FROM_DATABASE=ICS Eletronics
+
+OUI:40D855171*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
+OUI:40D855172*
+ ID_OUI_FROM_DATABASE=YAWATA ELECTRIC INDUSTRIAL CO.,LTD.
+
+OUI:40D855173*
+ ID_OUI_FROM_DATABASE=Contec Steuerungstechnik & Automation GmbH
+
+OUI:40D855174*
+ ID_OUI_FROM_DATABASE=EcoGuard AB
+
+OUI:40D855175*
+ ID_OUI_FROM_DATABASE=AHB Systeme GmbH
+
+OUI:40D855176*
+ ID_OUI_FROM_DATABASE=Schneider Electric Motion, Inc. USA
+
+OUI:40D855177*
+ ID_OUI_FROM_DATABASE=TRI Engineering co.,ltd.
+
+OUI:40D855178*
+ ID_OUI_FROM_DATABASE=REDER Domotic GmbH
+
+OUI:40D855179*
+ ID_OUI_FROM_DATABASE=Servo-Robot Inc.
+
+OUI:40D85517A*
+ ID_OUI_FROM_DATABASE=ARGUS-SPECTRUM
+
+OUI:40D85517B*
+ ID_OUI_FROM_DATABASE=LUCEO
+
+OUI:40D85517C*
+ ID_OUI_FROM_DATABASE=Critical Link
+
OUI:000000*
ID_OUI_FROM_DATABASE=XEROX CORPORATION
@@ -14492,7 +14900,7 @@ OUI:00020D*
ID_OUI_FROM_DATABASE=Micronpc.com
OUI:00020E*
- ID_OUI_FROM_DATABASE=ECI Telecom, Ltd., NSD-US
+ ID_OUI_FROM_DATABASE=ECI Telecom, Ltd
OUI:00020F*
ID_OUI_FROM_DATABASE=AATR
@@ -15266,7 +15674,7 @@ OUI:00030F*
ID_OUI_FROM_DATABASE=Digital China (Shanghai) Networks Ltd.
OUI:000310*
- ID_OUI_FROM_DATABASE=ITX E-Globaledge Corporation
+ ID_OUI_FROM_DATABASE=E-Globaledge Corporation
OUI:000311*
ID_OUI_FROM_DATABASE=Micro Technology Co., Ltd.
@@ -15659,7 +16067,7 @@ OUI:000392*
ID_OUI_FROM_DATABASE=Hyundai Teletek Co., Ltd.
OUI:000393*
- ID_OUI_FROM_DATABASE=Apple Computer, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:000394*
ID_OUI_FROM_DATABASE=Connect One
@@ -15890,7 +16298,7 @@ OUI:0003DF*
ID_OUI_FROM_DATABASE=Desana Systems
OUI:0003E0*
- ID_OUI_FROM_DATABASE=Motorola, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0003E1*
ID_OUI_FROM_DATABASE=Winmate Communication, Inc.
@@ -16286,7 +16694,7 @@ OUI:000463*
ID_OUI_FROM_DATABASE=Bosch Security Systems
OUI:000464*
- ID_OUI_FROM_DATABASE=Fantasma Networks, Inc.
+ ID_OUI_FROM_DATABASE=Pulse-Link Inc
OUI:000465*
ID_OUI_FROM_DATABASE=i.s.t isdn-support technik GmbH
@@ -16553,7 +16961,7 @@ OUI:0004BC*
ID_OUI_FROM_DATABASE=Giantec, Inc.
OUI:0004BD*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0004BE*
ID_OUI_FROM_DATABASE=OptXCon, Inc.
@@ -16601,7 +17009,7 @@ OUI:0004CC*
ID_OUI_FROM_DATABASE=Peek Traffic B.V.
OUI:0004CD*
- ID_OUI_FROM_DATABASE=Informedia Research Group
+ ID_OUI_FROM_DATABASE=Extenway Solutions Inc
OUI:0004CE*
ID_OUI_FROM_DATABASE=Patria Ailon
@@ -16760,7 +17168,7 @@ OUI:000501*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:000502*
- ID_OUI_FROM_DATABASE=APPLE COMPUTER
+ ID_OUI_FROM_DATABASE=Apple
OUI:000503*
ID_OUI_FROM_DATABASE=ICONAG
@@ -17663,7 +18071,7 @@ OUI:000630*
ID_OUI_FROM_DATABASE=Adtranz Sweden
OUI:000631*
- ID_OUI_FROM_DATABASE=Optical Solutions, Inc.
+ ID_OUI_FROM_DATABASE=Calix
OUI:000632*
ID_OUI_FROM_DATABASE=Mesco Engineering GmbH
@@ -19094,7 +19502,7 @@ OUI:00080D*
ID_OUI_FROM_DATABASE=Toshiba
OUI:00080E*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00080F*
ID_OUI_FROM_DATABASE=Proximion Fiber Optics AB
@@ -20621,7 +21029,7 @@ OUI:000A26*
ID_OUI_FROM_DATABASE=CEIA S.p.A.
OUI:000A27*
- ID_OUI_FROM_DATABASE=Apple Computer, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:000A28*
ID_OUI_FROM_DATABASE=Motorola
@@ -20783,7 +21191,7 @@ OUI:000A5C*
ID_OUI_FROM_DATABASE=Carel s.p.a.
OUI:000A5D*
- ID_OUI_FROM_DATABASE=PUC Founder (MSC) Berhad
+ ID_OUI_FROM_DATABASE=FingerTec Worldwide Sdn Bhd
OUI:000A5E*
ID_OUI_FROM_DATABASE=3COM Corporation
@@ -20951,7 +21359,7 @@ OUI:000A94*
ID_OUI_FROM_DATABASE=ShangHai cellink CO., LTD
OUI:000A95*
- ID_OUI_FROM_DATABASE=Apple Computer, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:000A96*
ID_OUI_FROM_DATABASE=MEWTEL TECHNOLOGY INC.
@@ -21290,7 +21698,7 @@ OUI:000B05*
ID_OUI_FROM_DATABASE=Pacific Broadband Networks
OUI:000B06*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:000B07*
ID_OUI_FROM_DATABASE=Voxpath Networks
@@ -22502,7 +22910,7 @@ OUI:000C9C*
ID_OUI_FROM_DATABASE=Chongho information & communications
OUI:000C9D*
- ID_OUI_FROM_DATABASE=AirWalk Communications, Inc.
+ ID_OUI_FROM_DATABASE=UbeeAirWalk, Inc.
OUI:000C9E*
ID_OUI_FROM_DATABASE=MemoryLink Corp.
@@ -22718,7 +23126,7 @@ OUI:000CE4*
ID_OUI_FROM_DATABASE=NeuroCom International, Inc.
OUI:000CE5*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:000CE6*
ID_OUI_FROM_DATABASE=Meru Networks Inc
@@ -22778,7 +23186,7 @@ OUI:000CF8*
ID_OUI_FROM_DATABASE=Nortel Networks
OUI:000CF9*
- ID_OUI_FROM_DATABASE=ITT Flygt AB
+ ID_OUI_FROM_DATABASE=Xylem Water Solutions
OUI:000CFA*
ID_OUI_FROM_DATABASE=Digital Systems Corp
@@ -23237,7 +23645,7 @@ OUI:000D92*
ID_OUI_FROM_DATABASE=Arima Communication Corporation
OUI:000D93*
- ID_OUI_FROM_DATABASE=Apple Computer
+ ID_OUI_FROM_DATABASE=Apple
OUI:000D94*
ID_OUI_FROM_DATABASE=AFAR Communications,Inc
@@ -23564,7 +23972,7 @@ OUI:000E02*
ID_OUI_FROM_DATABASE=Advantech AMT Inc.
OUI:000E03*
- ID_OUI_FROM_DATABASE=Emulex
+ ID_OUI_FROM_DATABASE=Emulex Corporation
OUI:000E04*
ID_OUI_FROM_DATABASE=CMA/Microdialysis AB
@@ -23687,7 +24095,7 @@ OUI:000E2E*
ID_OUI_FROM_DATABASE=Edimax Technology Co., Ltd.
OUI:000E2F*
- ID_OUI_FROM_DATABASE=Disetronic Medical Systems AG
+ ID_OUI_FROM_DATABASE=Roche Diagnostics GmbH
OUI:000E30*
ID_OUI_FROM_DATABASE=AERAS Networks, Inc.
@@ -23822,7 +24230,7 @@ OUI:000E5B*
ID_OUI_FROM_DATABASE=ParkerVision - Direct2Data
OUI:000E5C*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:000E5D*
ID_OUI_FROM_DATABASE=Triple Play Technologies A/S
@@ -23876,7 +24284,7 @@ OUI:000E6D*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
OUI:000E6E*
- ID_OUI_FROM_DATABASE=MICRELEC ELECTRONICS S.A
+ ID_OUI_FROM_DATABASE=MAT S.A. (Mircrelec Advanced Technology)
OUI:000E6F*
ID_OUI_FROM_DATABASE=IRIS Corporation Berhad
@@ -24458,7 +24866,7 @@ OUI:000F31*
ID_OUI_FROM_DATABASE=Allied Vision Technologies Canada Inc
OUI:000F32*
- ID_OUI_FROM_DATABASE=Lootom Optoelectronic Technology (Wuxi) Co Ltd
+ ID_OUI_FROM_DATABASE=Lootom Telcovideo Network Wuxi Co Ltd
OUI:000F33*
ID_OUI_FROM_DATABASE=DUALi Inc.
@@ -24785,7 +25193,7 @@ OUI:000F9E*
ID_OUI_FROM_DATABASE=Murrelektronik GmbH
OUI:000F9F*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:000FA0*
ID_OUI_FROM_DATABASE=CANON KOREA BUSINESS SOLUTIONS INC.
@@ -24794,7 +25202,7 @@ OUI:000FA1*
ID_OUI_FROM_DATABASE=Gigabit Systems Inc.
OUI:000FA2*
- ID_OUI_FROM_DATABASE=Digital Path Networks
+ ID_OUI_FROM_DATABASE=2xWireless
OUI:000FA3*
ID_OUI_FROM_DATABASE=Alpha Networks Inc.
@@ -25427,7 +25835,7 @@ OUI:001074*
ID_OUI_FROM_DATABASE=ATEN INTERNATIONAL CO., LTD.
OUI:001075*
- ID_OUI_FROM_DATABASE=Maxtor Corporation
+ ID_OUI_FROM_DATABASE=Segate Technology LLC
OUI:001076*
ID_OUI_FROM_DATABASE=EUREM GmbH
@@ -25795,6 +26203,9 @@ OUI:0010EE*
OUI:0010EF*
ID_OUI_FROM_DATABASE=DBTEL INCORPORATED
+OUI:0010F0*
+ ID_OUI_FROM_DATABASE=RITTAL-WERK RUDOLF LOH GmbH & Co.
+
OUI:0010F1*
ID_OUI_FROM_DATABASE=I-O CORPORATION
@@ -25817,13 +26228,13 @@ OUI:0010F7*
ID_OUI_FROM_DATABASE=IRIICHI TECHNOLOGIES Inc.
OUI:0010F8*
- ID_OUI_FROM_DATABASE=Niikke Techno System Co. Ltd
+ ID_OUI_FROM_DATABASE=TEXIO TECHNOLOGY CORPORATION
OUI:0010F9*
ID_OUI_FROM_DATABASE=UNIQUE SYSTEMS, INC.
OUI:0010FA*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:0010FB*
ID_OUI_FROM_DATABASE=ZIDA TECHNOLOGIES LIMITED
@@ -25919,7 +26330,7 @@ OUI:001119*
ID_OUI_FROM_DATABASE=Solteras, Inc.
OUI:00111A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00111B*
ID_OUI_FROM_DATABASE=Targa Systems Div L-3 Communications Canada
@@ -25949,7 +26360,7 @@ OUI:001123*
ID_OUI_FROM_DATABASE=Appointech, Inc.
OUI:001124*
- ID_OUI_FROM_DATABASE=Apple Computer
+ ID_OUI_FROM_DATABASE=Apple
OUI:001125*
ID_OUI_FROM_DATABASE=IBM Corp
@@ -26225,7 +26636,7 @@ OUI:00117F*
ID_OUI_FROM_DATABASE=Neotune Information Technology Corporation,.LTD
OUI:001180*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001181*
ID_OUI_FROM_DATABASE=InterEnergy Co.Ltd,
@@ -26363,7 +26774,7 @@ OUI:0011AD*
ID_OUI_FROM_DATABASE=Shanghai Ruijie Technology
OUI:0011AE*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0011AF*
ID_OUI_FROM_DATABASE=Medialink-i,Inc
@@ -26720,7 +27131,7 @@ OUI:001224*
ID_OUI_FROM_DATABASE=NexQL Corporation
OUI:001225*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001226*
ID_OUI_FROM_DATABASE=Japan Direx Corporation
@@ -26846,7 +27257,7 @@ OUI:00124E*
ID_OUI_FROM_DATABASE=XAC AUTOMATION CORP.
OUI:00124F*
- ID_OUI_FROM_DATABASE=Tyco Thermal Controls LLC.
+ ID_OUI_FROM_DATABASE=Pentair Thermal Management
OUI:001250*
ID_OUI_FROM_DATABASE=Tokyo Aircaft Instrument Co., Ltd.
@@ -27023,7 +27434,7 @@ OUI:001289*
ID_OUI_FROM_DATABASE=Advance Sterilization Products
OUI:00128A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00128B*
ID_OUI_FROM_DATABASE=Sensory Networks Inc
@@ -27212,7 +27623,7 @@ OUI:0012C8*
ID_OUI_FROM_DATABASE=Perfect tech
OUI:0012C9*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0012CA*
ID_OUI_FROM_DATABASE=Mechatronic Brick Aps
@@ -27716,7 +28127,7 @@ OUI:001370*
ID_OUI_FROM_DATABASE=Nokia Danmark A/S
OUI:001371*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001372*
ID_OUI_FROM_DATABASE=Dell ESG PCBA Test
@@ -28157,7 +28568,7 @@ OUI:001403*
ID_OUI_FROM_DATABASE=Renasis, LLC
OUI:001404*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001405*
ID_OUI_FROM_DATABASE=OpenIB, Inc.
@@ -28232,7 +28643,7 @@ OUI:00141C*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:00141D*
- ID_OUI_FROM_DATABASE=Lust Antriebstechnik GmbH
+ ID_OUI_FROM_DATABASE=LTi DRIVES GmbH
OUI:00141E*
ID_OUI_FROM_DATABASE=P.A. Semi, Inc.
@@ -28388,7 +28799,7 @@ OUI:001450*
ID_OUI_FROM_DATABASE=Heim Systems GmbH
OUI:001451*
- ID_OUI_FROM_DATABASE=Apple Computer Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:001452*
ID_OUI_FROM_DATABASE=CALCULEX,INC.
@@ -28607,7 +29018,7 @@ OUI:001499*
ID_OUI_FROM_DATABASE=Helicomm Inc
OUI:00149A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00149B*
ID_OUI_FROM_DATABASE=Nokota Communications, LLC
@@ -28841,7 +29252,7 @@ OUI:0014E7*
ID_OUI_FROM_DATABASE=Stolinx,. Inc
OUI:0014E8*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0014E9*
ID_OUI_FROM_DATABASE=Nortech International
@@ -29054,7 +29465,7 @@ OUI:00152E*
ID_OUI_FROM_DATABASE=PacketHop, Inc.
OUI:00152F*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001530*
ID_OUI_FROM_DATABASE=EMC Corporation
@@ -29375,7 +29786,7 @@ OUI:001599*
ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
OUI:00159A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00159B*
ID_OUI_FROM_DATABASE=Nortel
@@ -29417,7 +29828,7 @@ OUI:0015A7*
ID_OUI_FROM_DATABASE=Robatech AG
OUI:0015A8*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0015A9*
ID_OUI_FROM_DATABASE=KWANG WOO I&C CO.,LTD
@@ -29795,7 +30206,7 @@ OUI:001625*
ID_OUI_FROM_DATABASE=Impinj, Inc.
OUI:001626*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001627*
ID_OUI_FROM_DATABASE=embedded-logic DESIGN AND MORE GmbH
@@ -30032,7 +30443,7 @@ OUI:001674*
ID_OUI_FROM_DATABASE=EuroCB (Phils.), Inc.
OUI:001675*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001676*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -30221,7 +30632,7 @@ OUI:0016B3*
ID_OUI_FROM_DATABASE=Photonicbridges (China) Co., Ltd.
OUI:0016B5*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0016B6*
ID_OUI_FROM_DATABASE=Cisco-Linksys
@@ -30287,7 +30698,7 @@ OUI:0016CA*
ID_OUI_FROM_DATABASE=Nortel
OUI:0016CB*
- ID_OUI_FROM_DATABASE=Apple Computer
+ ID_OUI_FROM_DATABASE=Apple
OUI:0016CC*
ID_OUI_FROM_DATABASE=Xcute Mobile Corp.
@@ -30446,7 +30857,7 @@ OUI:0016FF*
ID_OUI_FROM_DATABASE=Wamin Optocomm Mfg Corp
OUI:001700*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001701*
ID_OUI_FROM_DATABASE=KDE, Inc.
@@ -30733,9 +31144,6 @@ OUI:00175F*
OUI:001760*
ID_OUI_FROM_DATABASE=Naito Densei Machida MFG.CO.,LTD
-OUI:001761*
- ID_OUI_FROM_DATABASE=ZKSoftware Inc.
-
OUI:001762*
ID_OUI_FROM_DATABASE=Solar Technology, Inc.
@@ -30839,7 +31247,7 @@ OUI:001783*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:001784*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001785*
ID_OUI_FROM_DATABASE=Sparr Electronics Ltd
@@ -31121,7 +31529,7 @@ OUI:0017E1*
ID_OUI_FROM_DATABASE=DACOS Technologies Co., Ltd.
OUI:0017E2*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0017E3*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -31157,7 +31565,7 @@ OUI:0017ED*
ID_OUI_FROM_DATABASE=WooJooIT Ltd.
OUI:0017EE*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0017EF*
ID_OUI_FROM_DATABASE=IBM Corp
@@ -31169,7 +31577,7 @@ OUI:0017F1*
ID_OUI_FROM_DATABASE=Renu Electronics Pvt Ltd
OUI:0017F2*
- ID_OUI_FROM_DATABASE=Apple Computer
+ ID_OUI_FROM_DATABASE=Apple
OUI:0017F3*
ID_OUI_FROM_DATABASE=Harris Corparation
@@ -31700,7 +32108,7 @@ OUI:0018A3*
ID_OUI_FROM_DATABASE=ZIPPY TECHNOLOGY CORP.
OUI:0018A4*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0018A5*
ID_OUI_FROM_DATABASE=ADigit Technologies Corp.
@@ -31784,7 +32192,7 @@ OUI:0018BF*
ID_OUI_FROM_DATABASE=Essence Technology Solution, Inc.
OUI:0018C0*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0018C1*
ID_OUI_FROM_DATABASE=Almitec Informática e Comércio
@@ -32108,7 +32516,7 @@ OUI:00192B*
ID_OUI_FROM_DATABASE=Aclara RF Systems Inc.
OUI:00192C*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00192D*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -32135,7 +32543,7 @@ OUI:001934*
ID_OUI_FROM_DATABASE=TRENDON TOUCH TECHNOLOGY CORP.
OUI:001935*
- ID_OUI_FROM_DATABASE=DÜRR DENTAL AG
+ ID_OUI_FROM_DATABASE=DUERR DENTAL AG
OUI:001936*
ID_OUI_FROM_DATABASE=STERLITE OPTICAL TECHNOLOGIES LIMITED
@@ -32258,7 +32666,7 @@ OUI:00195D*
ID_OUI_FROM_DATABASE=ShenZhen XinHuaTong Opto Electronics Co.,Ltd
OUI:00195E*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00195F*
ID_OUI_FROM_DATABASE=Valemount Networks Corporation
@@ -32474,7 +32882,7 @@ OUI:0019A5*
ID_OUI_FROM_DATABASE=RadarFind Corporation
OUI:0019A6*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0019A7*
ID_OUI_FROM_DATABASE=ITU-T
@@ -32552,7 +32960,7 @@ OUI:0019BF*
ID_OUI_FROM_DATABASE=Citiway technology Co.,ltd
OUI:0019C0*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0019C1*
ID_OUI_FROM_DATABASE=Alps Electric Co., Ltd
@@ -32657,7 +33065,7 @@ OUI:0019E2*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:0019E3*
- ID_OUI_FROM_DATABASE=Apple Computer Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:0019E4*
ID_OUI_FROM_DATABASE=2Wire, Inc
@@ -32825,7 +33233,7 @@ OUI:001A1A*
ID_OUI_FROM_DATABASE=Gentex Corporation/Electro-Acoustic Products
OUI:001A1B*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001A1C*
ID_OUI_FROM_DATABASE=GT&T Engineering Pte Ltd
@@ -33050,7 +33458,7 @@ OUI:001A65*
ID_OUI_FROM_DATABASE=Seluxit
OUI:001A66*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001A67*
ID_OUI_FROM_DATABASE=Infinite QL Sdn Bhd
@@ -33101,7 +33509,7 @@ OUI:001A76*
ID_OUI_FROM_DATABASE=SDT information Technology Co.,LTD.
OUI:001A77*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001A78*
ID_OUI_FROM_DATABASE=ubtos
@@ -33263,7 +33671,7 @@ OUI:001AAC*
ID_OUI_FROM_DATABASE=Corelatus AB
OUI:001AAD*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001AAE*
ID_OUI_FROM_DATABASE=Savant Systems LLC
@@ -33401,7 +33809,7 @@ OUI:001ADA*
ID_OUI_FROM_DATABASE=Biz-2-Me Inc.
OUI:001ADB*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001ADC*
ID_OUI_FROM_DATABASE=Nokia Danmark A/S
@@ -33410,7 +33818,7 @@ OUI:001ADD*
ID_OUI_FROM_DATABASE=PePWave Ltd
OUI:001ADE*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001ADF*
ID_OUI_FROM_DATABASE=Interactivetv Pty Limited
@@ -33758,7 +34166,7 @@ OUI:001B51*
ID_OUI_FROM_DATABASE=Vector Technology Corp.
OUI:001B52*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001B53*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -33809,7 +34217,7 @@ OUI:001B62*
ID_OUI_FROM_DATABASE=JHT Optoelectronics Co.,Ltd.
OUI:001B63*
- ID_OUI_FROM_DATABASE=Apple Computer Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:001B64*
ID_OUI_FROM_DATABASE=IsaacLandKorea Co., Ltd,
@@ -33821,7 +34229,7 @@ OUI:001B66*
ID_OUI_FROM_DATABASE=Sennheiser electronic GmbH & Co. KG
OUI:001B67*
- ID_OUI_FROM_DATABASE=Ubiquisys Ltd
+ ID_OUI_FROM_DATABASE=Cisco Systems Inc
OUI:001B68*
ID_OUI_FROM_DATABASE=Modnnet Co., Ltd
@@ -34175,7 +34583,7 @@ OUI:001BDC*
ID_OUI_FROM_DATABASE=Vencer Co., Ltd.
OUI:001BDD*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001BDE*
ID_OUI_FROM_DATABASE=Renkus-Heinz, Inc.
@@ -34331,10 +34739,10 @@ OUI:001C10*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
OUI:001C11*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001C12*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001C13*
ID_OUI_FROM_DATABASE=OPTSYS TECHNOLOGY CO., LTD.
@@ -34817,7 +35225,7 @@ OUI:001CB2*
ID_OUI_FROM_DATABASE=BPT SPA
OUI:001CB3*
- ID_OUI_FROM_DATABASE=APPLE, INC
+ ID_OUI_FROM_DATABASE=Apple
OUI:001CB4*
ID_OUI_FROM_DATABASE=Iridium Satellite LLC
@@ -34859,7 +35267,7 @@ OUI:001CC0*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:001CC1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001CC2*
ID_OUI_FROM_DATABASE=Part II Research, Inc.
@@ -35033,7 +35441,7 @@ OUI:001CFA*
ID_OUI_FROM_DATABASE=Alarm.com
OUI:001CFB*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001CFC*
ID_OUI_FROM_DATABASE=Suminet Communication Technologies (Shanghai) Co., Ltd.
@@ -35285,7 +35693,7 @@ OUI:001D4E*
ID_OUI_FROM_DATABASE=TCM Mobile LLC
OUI:001D4F*
- ID_OUI_FROM_DATABASE=Apple Computer Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:001D50*
ID_OUI_FROM_DATABASE=SPINETIX SA
@@ -35369,7 +35777,7 @@ OUI:001D6A*
ID_OUI_FROM_DATABASE=Alpha Networks Inc.
OUI:001D6B*
- ID_OUI_FROM_DATABASE=Motorola (formerly Netopia, Inc
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001D6C*
ID_OUI_FROM_DATABASE=ClariPhy Communications, Inc.
@@ -35618,7 +36026,7 @@ OUI:001DBD*
ID_OUI_FROM_DATABASE=Versamed Inc.
OUI:001DBE*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001DBF*
ID_OUI_FROM_DATABASE=Radiient Technologies, Inc.
@@ -36026,7 +36434,7 @@ OUI:001E45*
ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
OUI:001E46*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001E47*
ID_OUI_FROM_DATABASE=PT. Hariff Daya Tunggal Engineering
@@ -36062,7 +36470,7 @@ OUI:001E51*
ID_OUI_FROM_DATABASE=Converter Industry Srl
OUI:001E52*
- ID_OUI_FROM_DATABASE=Apple Computer Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:001E53*
ID_OUI_FROM_DATABASE=Further Tech Co., LTD
@@ -36086,7 +36494,7 @@ OUI:001E59*
ID_OUI_FROM_DATABASE=Silicon Turnkey Express, LLC
OUI:001E5A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001E5B*
ID_OUI_FROM_DATABASE=Unitron Company, Inc.
@@ -36155,7 +36563,7 @@ OUI:001E70*
ID_OUI_FROM_DATABASE=Cobham Defence Communications Ltd
OUI:001E71*
- ID_OUI_FROM_DATABASE=Igeacare Solutions Inc.
+ ID_OUI_FROM_DATABASE=MIrcom Group of Companies
OUI:001E72*
ID_OUI_FROM_DATABASE=PCS
@@ -36239,7 +36647,7 @@ OUI:001E8C*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
OUI:001E8D*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001E8E*
ID_OUI_FROM_DATABASE=Hunkeler AG
@@ -36398,7 +36806,7 @@ OUI:001EC1*
ID_OUI_FROM_DATABASE=3COM EUROPE LTD
OUI:001EC2*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:001EC3*
ID_OUI_FROM_DATABASE=Kozio, Inc.
@@ -36413,79 +36821,79 @@ OUI:001EC6*
ID_OUI_FROM_DATABASE=Obvius Holdings LLC
OUI:001EC7*
- ID_OUI_FROM_DATABASE=2Wire
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EC8*
- ID_OUI_FROM_DATABASE=Rapid Mobile (Pty) Ltd
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EC9*
- ID_OUI_FROM_DATABASE=Dell Inc
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ECA*
- ID_OUI_FROM_DATABASE=Nortel
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ECB*
- ID_OUI_FROM_DATABASE="RPC "Energoautomatika" Ltd
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ECC*
- ID_OUI_FROM_DATABASE=CDVI
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ECD*
- ID_OUI_FROM_DATABASE=KYLAND
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ECE*
- ID_OUI_FROM_DATABASE=BISA Technologies (Hong Kong) Limited
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ECF*
- ID_OUI_FROM_DATABASE=PHILIPS ELECTRONICS UK LTD
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED0*
- ID_OUI_FROM_DATABASE=Ingespace
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED1*
- ID_OUI_FROM_DATABASE=Keyprocessor B.V.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED2*
- ID_OUI_FROM_DATABASE=Ray Shine Video Technology Inc
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED3*
- ID_OUI_FROM_DATABASE=Dot Technology Int'l Co., Ltd.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED4*
- ID_OUI_FROM_DATABASE=Doble Engineering
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED5*
- ID_OUI_FROM_DATABASE=Tekon-Automatics
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED6*
- ID_OUI_FROM_DATABASE=Alentec & Orion AB
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED7*
- ID_OUI_FROM_DATABASE=H-Stream Wireless, Inc.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED8*
- ID_OUI_FROM_DATABASE=Digital United Inc.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001ED9*
- ID_OUI_FROM_DATABASE=Mitsubishi Precision Co.,LTd.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EDA*
- ID_OUI_FROM_DATABASE=Wesemann Elektrotechniek B.V.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EDB*
- ID_OUI_FROM_DATABASE=Giken Trastem Co., Ltd.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EDC*
- ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EDD*
- ID_OUI_FROM_DATABASE=WASKO S.A.
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EDE*
- ID_OUI_FROM_DATABASE=BYD COMPANY LIMITED
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EDF*
- ID_OUI_FROM_DATABASE=Master Industrialization Center Kista
+ ID_OUI_FROM_DATABASE=2Wire, Inc.
OUI:001EE0*
ID_OUI_FROM_DATABASE=Urmet Domus SpA
@@ -36857,7 +37265,7 @@ OUI:001F5A*
ID_OUI_FROM_DATABASE=Beckwith Electric Co.
OUI:001F5B*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:001F5C*
ID_OUI_FROM_DATABASE=Nokia Danmark A/S
@@ -36962,7 +37370,7 @@ OUI:001F7D*
ID_OUI_FROM_DATABASE=embedded wireless GmbH
OUI:001F7E*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001F7F*
ID_OUI_FROM_DATABASE=Phabrix Limited
@@ -37172,7 +37580,7 @@ OUI:001FC3*
ID_OUI_FROM_DATABASE=SmartSynch, Inc
OUI:001FC4*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001FC5*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
@@ -37313,7 +37721,7 @@ OUI:001FF2*
ID_OUI_FROM_DATABASE=VIA Technologies, Inc.
OUI:001FF3*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:001FF4*
ID_OUI_FROM_DATABASE=Power Monitors, Inc.
@@ -37544,7 +37952,7 @@ OUI:00203F*
ID_OUI_FROM_DATABASE=JUKI CORPORATION
OUI:002040*
- ID_OUI_FROM_DATABASE=Motorola Broadband Communications Sector
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002041*
ID_OUI_FROM_DATABASE=DATA NET
@@ -38207,7 +38615,7 @@ OUI:00211D*
ID_OUI_FROM_DATABASE=Dataline AB
OUI:00211E*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00211F*
ID_OUI_FROM_DATABASE=SHINSUNG DELTATECH CO.,LTD.
@@ -38279,7 +38687,7 @@ OUI:002135*
ID_OUI_FROM_DATABASE=ALCATEL-LUCENT
OUI:002136*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002137*
ID_OUI_FROM_DATABASE=Bay Controls, LLC
@@ -38318,7 +38726,7 @@ OUI:002142*
ID_OUI_FROM_DATABASE=Advanced Control Systems doo
OUI:002143*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002144*
ID_OUI_FROM_DATABASE=SS Telecoms
@@ -38501,7 +38909,7 @@ OUI:00217F*
ID_OUI_FROM_DATABASE=Intraco Technology Pte Ltd
OUI:002180*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002181*
ID_OUI_FROM_DATABASE=Si2 Microsystems Limited
@@ -38660,7 +39068,7 @@ OUI:0021B4*
ID_OUI_FROM_DATABASE=APRO MEDIA CO., LTD
OUI:0021B5*
- ID_OUI_FROM_DATABASE=Vyro Games Limited
+ ID_OUI_FROM_DATABASE=Galvanic Ltd
OUI:0021B6*
ID_OUI_FROM_DATABASE=Triacta Power Technologies Inc.
@@ -38816,7 +39224,7 @@ OUI:0021E8*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
OUI:0021E9*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:0021EA*
ID_OUI_FROM_DATABASE=Bystronic Laser AG
@@ -38933,7 +39341,7 @@ OUI:00220F*
ID_OUI_FROM_DATABASE=MoCA (Multimedia over Coax Alliance)
OUI:002210*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002211*
ID_OUI_FROM_DATABASE=Rohati Systems
@@ -39077,7 +39485,7 @@ OUI:002240*
ID_OUI_FROM_DATABASE=Universal Telecom S/A
OUI:002241*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:002242*
ID_OUI_FROM_DATABASE=Alacron Inc.
@@ -39422,7 +39830,7 @@ OUI:0022B3*
ID_OUI_FROM_DATABASE=Sei S.p.A.
OUI:0022B4*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0022B5*
ID_OUI_FROM_DATABASE=NOVITA
@@ -39680,7 +40088,7 @@ OUI:00230A*
ID_OUI_FROM_DATABASE=ARBURG GmbH & Co KG
OUI:00230B*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00230C*
ID_OUI_FROM_DATABASE=CLOVER ELECTRONICS CO.,LTD.
@@ -39701,7 +40109,7 @@ OUI:002311*
ID_OUI_FROM_DATABASE=Gloscom Co., Ltd.
OUI:002312*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:002313*
ID_OUI_FROM_DATABASE=Qool Technologies Ltd.
@@ -39797,7 +40205,7 @@ OUI:002331*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
OUI:002332*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:002333*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -39968,7 +40376,7 @@ OUI:00236B*
ID_OUI_FROM_DATABASE=Xembedded, Inc.
OUI:00236C*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:00236D*
ID_OUI_FROM_DATABASE=ResMed Ltd
@@ -39992,10 +40400,10 @@ OUI:002373*
ID_OUI_FROM_DATABASE=GridIron Systems, Inc.
OUI:002374*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002375*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002376*
ID_OUI_FROM_DATABASE=HTC Corporation
@@ -40088,7 +40496,7 @@ OUI:002394*
ID_OUI_FROM_DATABASE=Samjeon
OUI:002395*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002396*
ID_OUI_FROM_DATABASE=ANDES TECHNOLOGY CORPORATION
@@ -40127,10 +40535,10 @@ OUI:0023A1*
ID_OUI_FROM_DATABASE=Trend Electronics Ltd
OUI:0023A2*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0023A3*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0023A4*
ID_OUI_FROM_DATABASE=New Concepts Development Corp.
@@ -40166,7 +40574,7 @@ OUI:0023AE*
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:0023AF*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0023B0*
ID_OUI_FROM_DATABASE=COMXION Technology Inc.
@@ -40310,7 +40718,7 @@ OUI:0023DE*
ID_OUI_FROM_DATABASE=Ansync Inc.
OUI:0023DF*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:0023E0*
ID_OUI_FROM_DATABASE=INO Therapeutics LLC
@@ -40352,10 +40760,10 @@ OUI:0023EC*
ID_OUI_FROM_DATABASE=Algorithmix GmbH
OUI:0023ED*
- ID_OUI_FROM_DATABASE=Motorola CHS
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0023EE*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0023EF*
ID_OUI_FROM_DATABASE=Zuend Systemtechnik AG
@@ -40562,7 +40970,7 @@ OUI:002435*
ID_OUI_FROM_DATABASE=WIDE CORPORATION
OUI:002436*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:002437*
ID_OUI_FROM_DATABASE=Motorola - BSG
@@ -40835,13 +41243,13 @@ OUI:002492*
ID_OUI_FROM_DATABASE=Motorola, Broadband Solutions Group
OUI:002493*
- ID_OUI_FROM_DATABASE=Motorola, Inc
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002494*
ID_OUI_FROM_DATABASE=Shenzhen Baoxin Tech CO., Ltd.
OUI:002495*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002496*
ID_OUI_FROM_DATABASE=Ginzinger electronic systems
@@ -40874,10 +41282,10 @@ OUI:00249F*
ID_OUI_FROM_DATABASE=RIM Testing Services
OUI:0024A0*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0024A1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0024A2*
ID_OUI_FROM_DATABASE=Hong Kong Middleware Technology Limited
@@ -40973,7 +41381,7 @@ OUI:0024C0*
ID_OUI_FROM_DATABASE=NTI COMODO INC
OUI:0024C1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0024C2*
ID_OUI_FROM_DATABASE=Asumo Co.,Ltd.
@@ -41159,7 +41567,7 @@ OUI:0024FF*
ID_OUI_FROM_DATABASE=QLogic Corporation
OUI:002500*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:002501*
ID_OUI_FROM_DATABASE=JSC "Supertel"
@@ -41378,7 +41786,7 @@ OUI:00254A*
ID_OUI_FROM_DATABASE=RingCube Technologies, Inc.
OUI:00254B*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:00254C*
ID_OUI_FROM_DATABASE=Videon Central, Inc.
@@ -41714,7 +42122,7 @@ OUI:0025BB*
ID_OUI_FROM_DATABASE=INNERINT Co., Ltd.
OUI:0025BC*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:0025BD*
ID_OUI_FROM_DATABASE=Italdata Ingegneria dell'Idea S.p.A.
@@ -41870,10 +42278,10 @@ OUI:0025F0*
ID_OUI_FROM_DATABASE=Suga Electronics Limited
OUI:0025F1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0025F2*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0025F3*
ID_OUI_FROM_DATABASE=Nordwestdeutsche Zählerrevision
@@ -41936,7 +42344,7 @@ OUI:002607*
ID_OUI_FROM_DATABASE=Enabling Technology Pty Ltd
OUI:002608*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:002609*
ID_OUI_FROM_DATABASE=Phyllis Co., Ltd.
@@ -42074,7 +42482,7 @@ OUI:002635*
ID_OUI_FROM_DATABASE=Bluetechnix GmbH
OUI:002636*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002637*
ID_OUI_FROM_DATABASE=Samsung Electro-Mechanics
@@ -42107,10 +42515,10 @@ OUI:002640*
ID_OUI_FROM_DATABASE=Baustem Broadband Technologies, Ltd.
OUI:002641*
- ID_OUI_FROM_DATABASE=Motorola, Inc
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002642*
- ID_OUI_FROM_DATABASE=Motorola, Inc
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:002643*
ID_OUI_FROM_DATABASE=Alps Electric Co., Ltd
@@ -42131,7 +42539,7 @@ OUI:002648*
ID_OUI_FROM_DATABASE=Emitech Corp.
OUI:00264A*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:00264C*
ID_OUI_FROM_DATABASE=Shanghai DigiVision Technology Co., Ltd.
@@ -42431,7 +42839,7 @@ OUI:0026AF*
ID_OUI_FROM_DATABASE=Duelco A/S
OUI:0026B0*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:0026B1*
ID_OUI_FROM_DATABASE=Navis Auto Motive Systems, Inc.
@@ -42461,10 +42869,10 @@ OUI:0026B9*
ID_OUI_FROM_DATABASE=Dell Inc
OUI:0026BA*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0026BB*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:0026BC*
ID_OUI_FROM_DATABASE=General Jack Technology Ltd.
@@ -43091,7 +43499,7 @@ OUI:003064*
ID_OUI_FROM_DATABASE=ADLINK TECHNOLOGY, INC.
OUI:003065*
- ID_OUI_FROM_DATABASE=APPLE COMPUTER, INC.
+ ID_OUI_FROM_DATABASE=Apple
OUI:003066*
ID_OUI_FROM_DATABASE=RFM
@@ -43601,7 +44009,7 @@ OUI:003D41*
ID_OUI_FROM_DATABASE=Hatteland Computer AS
OUI:003EE1*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:004000*
ID_OUI_FROM_DATABASE=PCI COMPONENTES DA AMZONIA LTD
@@ -44114,7 +44522,7 @@ OUI:0040A9*
ID_OUI_FROM_DATABASE=DATACOM INC.
OUI:0040AA*
- ID_OUI_FROM_DATABASE=VALMET AUTOMATION INC.
+ ID_OUI_FROM_DATABASE=Metso Automation
OUI:0040AB*
ID_OUI_FROM_DATABASE=ROLAND DG CORPORATION
@@ -45020,10 +45428,10 @@ OUI:0050E2*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:0050E3*
- ID_OUI_FROM_DATABASE=Motorola, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:0050E4*
- ID_OUI_FROM_DATABASE=APPLE COMPUTER, INC.
+ ID_OUI_FROM_DATABASE=Apple
OUI:0050E6*
ID_OUI_FROM_DATABASE=HAKUSAN CORPORATION
@@ -45904,12 +46312,21 @@ OUI:0070B0*
OUI:0070B3*
ID_OUI_FROM_DATABASE=DATA RECALL LTD.
+OUI:00738D*
+ ID_OUI_FROM_DATABASE=Tinno Mobile Technology Corp
+
+OUI:0073E0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:0075E1*
ID_OUI_FROM_DATABASE=Ampt, LLC
OUI:00789E*
ID_OUI_FROM_DATABASE=SAGEMCOM
+OUI:007DFA*
+ ID_OUI_FROM_DATABASE=Volkswagen Group of America
+
OUI:007F28*
ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
@@ -46214,7 +46631,7 @@ OUI:008063*
ID_OUI_FROM_DATABASE=Hirschmann Automation and Control GmbH
OUI:008064*
- ID_OUI_FROM_DATABASE=Tattile SRL
+ ID_OUI_FROM_DATABASE=WYSE TECHNOLOGY LLC
OUI:008065*
ID_OUI_FROM_DATABASE=CYBERGRAPHIC SYSTEMS PTY LTD.
@@ -47069,7 +47486,7 @@ OUI:009079*
ID_OUI_FROM_DATABASE=ClearOne, Inc.
OUI:00907A*
- ID_OUI_FROM_DATABASE=Polycom, Inc.
+ ID_OUI_FROM_DATABASE=Spectralink, Inc
OUI:00907B*
ID_OUI_FROM_DATABASE=E-TECH, INC.
@@ -47171,7 +47588,7 @@ OUI:00909B*
ID_OUI_FROM_DATABASE=MARKEM-IMAJE
OUI:00909C*
- ID_OUI_FROM_DATABASE=Motorola, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00909D*
ID_OUI_FROM_DATABASE=NovaTech Process Solutions, LLC
@@ -47453,7 +47870,7 @@ OUI:0090F9*
ID_OUI_FROM_DATABASE=LEITCH
OUI:0090FA*
- ID_OUI_FROM_DATABASE=EMULEX Corp
+ ID_OUI_FROM_DATABASE=Emulex Corporation
OUI:0090FB*
ID_OUI_FROM_DATABASE=PORTWELL, INC.
@@ -47684,7 +48101,7 @@ OUI:00A03F*
ID_OUI_FROM_DATABASE=COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C
OUI:00A040*
- ID_OUI_FROM_DATABASE=APPLE COMPUTER
+ ID_OUI_FROM_DATABASE=Apple
OUI:00A041*
ID_OUI_FROM_DATABASE=INFICON
@@ -48259,6 +48676,9 @@ OUI:00A1DE*
OUI:00A2DA*
ID_OUI_FROM_DATABASE=INAT GmbH
+OUI:00A2FF*
+ ID_OUI_FROM_DATABASE=abatec group AG
+
OUI:00AA00*
ID_OUI_FROM_DATABASE=INTEL CORPORATION
@@ -49199,7 +49619,7 @@ OUI:00C5DB*
ID_OUI_FROM_DATABASE=Datatech Sistemas Digitales Avanzados SL
OUI:00C610*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:00CBBD*
ID_OUI_FROM_DATABASE=Cambridge Broadband Networks Ltd.
@@ -49619,7 +50039,7 @@ OUI:00D087*
ID_OUI_FROM_DATABASE=MICROFIRST INC.
OUI:00D088*
- ID_OUI_FROM_DATABASE=Motorola, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00D089*
ID_OUI_FROM_DATABASE=DYNACOLOR, INC.
@@ -50372,7 +50792,7 @@ OUI:00E06B*
ID_OUI_FROM_DATABASE=W&G SPECIAL PRODUCTS
OUI:00E06C*
- ID_OUI_FROM_DATABASE=AEP Systems International Ltd
+ ID_OUI_FROM_DATABASE=Ultra Electronics Limited (AEP Networks)
OUI:00E06D*
ID_OUI_FROM_DATABASE=COMPUWARE CORPORATION
@@ -50381,7 +50801,7 @@ OUI:00E06E*
ID_OUI_FROM_DATABASE=FAR SYSTEMS S.p.A.
OUI:00E06F*
- ID_OUI_FROM_DATABASE=Motorola, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:00E070*
ID_OUI_FROM_DATABASE=DH TECHNOLOGY
@@ -50663,7 +51083,7 @@ OUI:00E0CC*
ID_OUI_FROM_DATABASE=HERO SYSTEMS, LTD.
OUI:00E0CD*
- ID_OUI_FROM_DATABASE=SENSIS CORPORATION
+ ID_OUI_FROM_DATABASE=SAAB SENSIS CORPORATION
OUI:00E0CE*
ID_OUI_FROM_DATABASE=ARN
@@ -50818,6 +51238,9 @@ OUI:00E0FF*
OUI:00E175*
ID_OUI_FROM_DATABASE=AK-Systems Ltd
+OUI:00E3B2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:00E666*
ID_OUI_FROM_DATABASE=ARIMA Communications Corp.
@@ -50837,7 +51260,7 @@ OUI:00F403*
ID_OUI_FROM_DATABASE=Orbis Systems Oy
OUI:00F4B9*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:00F860*
ID_OUI_FROM_DATABASE=PT. Panggung Electric Citrabuana
@@ -50900,7 +51323,7 @@ OUI:040AE0*
ID_OUI_FROM_DATABASE=XMIT AG COMPUTER NETWORKS
OUI:040CCE*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:040EC2*
ID_OUI_FROM_DATABASE=ViewSonic Mobile China Limited
@@ -50914,6 +51337,12 @@ OUI:04180F*
OUI:0418D6*
ID_OUI_FROM_DATABASE=Ubiquiti Networks
+OUI:041A04*
+ ID_OUI_FROM_DATABASE=WaveIP
+
+OUI:041B94*
+ ID_OUI_FROM_DATABASE=Host Mobility AB
+
OUI:041BBA*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -50921,7 +51350,7 @@ OUI:041D10*
ID_OUI_FROM_DATABASE=Dream Ware Inc.
OUI:041E64*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:04209A*
ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
@@ -50947,6 +51376,12 @@ OUI:0432F4*
OUI:043604*
ID_OUI_FROM_DATABASE=Gyeyoung I&T
+OUI:043D98*
+ ID_OUI_FROM_DATABASE=ChongQing QingJia Electronics CO.,LTD
+
+OUI:0444A1*
+ ID_OUI_FROM_DATABASE=TELECON GALICIA,S.A.
+
OUI:044665*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
@@ -50959,11 +51394,14 @@ OUI:044BFF*
OUI:044CEF*
ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
+OUI:044F8B*
+ ID_OUI_FROM_DATABASE=Adapteva, Inc.
+
OUI:044FAA*
ID_OUI_FROM_DATABASE=Ruckus Wireless
OUI:045453*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:0455CA*
ID_OUI_FROM_DATABASE=BriView (Xiamen) Corp.
@@ -51013,6 +51451,9 @@ OUI:047D7B*
OUI:0481AE*
ID_OUI_FROM_DATABASE=Clack Corporation
+OUI:04848A*
+ ID_OUI_FROM_DATABASE=7INOVA TECHNOLOGY LIMITED
+
OUI:04888C*
ID_OUI_FROM_DATABASE=Eifelwerk Butler Systeme GmbH
@@ -51079,18 +51520,27 @@ OUI:04C5A4*
OUI:04C880*
ID_OUI_FROM_DATABASE=Samtec Inc
+OUI:04CB1D*
+ ID_OUI_FROM_DATABASE=Traka plc
+
OUI:04CE14*
ID_OUI_FROM_DATABASE=Wilocity LTD.
OUI:04CF25*
ID_OUI_FROM_DATABASE=MANYCOLORS, INC.
+OUI:04D437*
+ ID_OUI_FROM_DATABASE=ZNV
+
OUI:04D783*
ID_OUI_FROM_DATABASE=Y&H E&C Co.,LTD.
OUI:04DAD2*
ID_OUI_FROM_DATABASE=Cisco
+OUI:04DB56*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:04DD4C*
ID_OUI_FROM_DATABASE=Velocytech
@@ -51167,7 +51617,7 @@ OUI:080006*
ID_OUI_FROM_DATABASE=SIEMENS AG
OUI:080007*
- ID_OUI_FROM_DATABASE=APPLE COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Apple
OUI:080008*
ID_OUI_FROM_DATABASE=BOLT BERANEK AND NEWMAN INC.
@@ -51530,7 +51980,7 @@ OUI:080080*
ID_OUI_FROM_DATABASE=AES DATA INC.
OUI:080081*
- ID_OUI_FROM_DATABASE=,ASTECH INC.
+ ID_OUI_FROM_DATABASE=ASTECH INC.
OUI:080082*
ID_OUI_FROM_DATABASE=VERITAS SOFTWARE
@@ -51643,6 +52093,9 @@ OUI:082AD0*
OUI:082E5F*
ID_OUI_FROM_DATABASE=Hewlett Packard
+OUI:083571*
+ ID_OUI_FROM_DATABASE=CASwell INC.
+
OUI:08373D*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -51661,6 +52114,9 @@ OUI:083E0C*
OUI:083E8E*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+OUI:084027*
+ ID_OUI_FROM_DATABASE=Gridstore Inc.
+
OUI:08482C*
ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
@@ -51673,6 +52129,9 @@ OUI:084EBF*
OUI:08512E*
ID_OUI_FROM_DATABASE=Orion Diagnostica Oy
+OUI:085240*
+ ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
+
OUI:085B0E*
ID_OUI_FROM_DATABASE=Fortinet, Inc.
@@ -51730,9 +52189,18 @@ OUI:08863B*
OUI:088DC8*
ID_OUI_FROM_DATABASE=Ryowa Electronics Co.,Ltd
+OUI:088E4F*
+ ID_OUI_FROM_DATABASE=SF Software Solutions
+
OUI:088F2C*
ID_OUI_FROM_DATABASE=Hills Sound Vision & Lighting
+OUI:0896D7*
+ ID_OUI_FROM_DATABASE=AVM GmbH
+
+OUI:089758*
+ ID_OUI_FROM_DATABASE=Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary
+
OUI:089E01*
ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
@@ -51763,9 +52231,15 @@ OUI:08B7EC*
OUI:08BBCC*
ID_OUI_FROM_DATABASE=AK-NORD EDV VERTRIEBSGES. mbH
+OUI:08BD43*
+ ID_OUI_FROM_DATABASE=NETGEAR INC.,
+
OUI:08BE09*
ID_OUI_FROM_DATABASE=Astrol Electronic AG
+OUI:08CA45*
+ ID_OUI_FROM_DATABASE=Toyou Feiji Electronics Co., Ltd.
+
OUI:08CC68*
ID_OUI_FROM_DATABASE=Cisco
@@ -51802,6 +52276,9 @@ OUI:08EBED*
OUI:08EDB9*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:08EF3B*
+ ID_OUI_FROM_DATABASE=MCS Logic Inc.
+
OUI:08F1B7*
ID_OUI_FROM_DATABASE=Towerstream Corpration
@@ -51862,6 +52339,9 @@ OUI:0C2AE7*
OUI:0C2D89*
ID_OUI_FROM_DATABASE=QiiQ Communications Inc.
+OUI:0C3021*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:0C37DC*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
@@ -51874,9 +52354,15 @@ OUI:0C3C65*
OUI:0C469D*
ID_OUI_FROM_DATABASE=MS Sedco
+OUI:0C473D*
+ ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+
OUI:0C4C39*
ID_OUI_FROM_DATABASE=Mitrastar Technology
+OUI:0C4DE9*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:0C51F7*
ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX
@@ -51892,6 +52378,9 @@ OUI:0C57EB*
OUI:0C5A19*
ID_OUI_FROM_DATABASE=Axtion Sdn Bhd
+OUI:0C5CD8*
+ ID_OUI_FROM_DATABASE=DOLI Elektronik GmbH
+
OUI:0C6076*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -51908,13 +52397,13 @@ OUI:0C722C*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
OUI:0C74C2*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:0C7523*
ID_OUI_FROM_DATABASE=BEIJING GEHUA CATV NETWORK CO.,LTD
OUI:0C771A*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:0C7D7C*
ID_OUI_FROM_DATABASE=Kexiang Information Technology Co, Ltd.
@@ -51940,6 +52429,9 @@ OUI:0C84DC*
OUI:0C8525*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:0C8910*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+
OUI:0C8BFD*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -51952,12 +52444,18 @@ OUI:0C8D98*
OUI:0C924E*
ID_OUI_FROM_DATABASE=Rice Lake Weighing Systems
+OUI:0C9301*
+ ID_OUI_FROM_DATABASE=PT. Prasimax Inovasi Teknologi
+
OUI:0C93FB*
ID_OUI_FROM_DATABASE=BNS Solutions
OUI:0C96BF*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+OUI:0C9B13*
+ ID_OUI_FROM_DATABASE=Shanghai Magic Mobile Telecommunication Co.Ltd.
+
OUI:0C9D56*
ID_OUI_FROM_DATABASE=Consort Controls Ltd
@@ -51976,12 +52474,18 @@ OUI:0CA402*
OUI:0CA42A*
ID_OUI_FROM_DATABASE=OB Telecom Electronic Technology Co., Ltd
+OUI:0CA694*
+ ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
+
OUI:0CAF5A*
ID_OUI_FROM_DATABASE=GENUS POWER INFRASTRUCTURES LIMITED
OUI:0CB4EF*
ID_OUI_FROM_DATABASE=Digience Co.,Ltd.
+OUI:0CBD51*
+ ID_OUI_FROM_DATABASE=TCT Mobile Limited
+
OUI:0CBF15*
ID_OUI_FROM_DATABASE=Genetec
@@ -52009,6 +52513,9 @@ OUI:0CC81F*
OUI:0CC9C6*
ID_OUI_FROM_DATABASE=Samwin Hong Kong Limited
+OUI:0CCB8D*
+ ID_OUI_FROM_DATABASE=ASCO Numatics GmbH
+
OUI:0CCDD3*
ID_OUI_FROM_DATABASE=EASTRIVER TECHNOLOGY CO., LTD.
@@ -52150,6 +52657,9 @@ OUI:101DC0*
OUI:101F74*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+OUI:102279*
+ ID_OUI_FROM_DATABASE=ZeroDesktop, Inc.
+
OUI:102831*
ID_OUI_FROM_DATABASE=Morion Inc.
@@ -52159,14 +52669,20 @@ OUI:102D96*
OUI:102EAF*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:103378*
+ ID_OUI_FROM_DATABASE=FLECTRON Co., LTD
+
OUI:103711*
ID_OUI_FROM_DATABASE=Simlink AS
+OUI:103B59*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:103DEA*
ID_OUI_FROM_DATABASE=HFC Technology (Beijing) Ltd. Co.
OUI:1040F3*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:104369*
ID_OUI_FROM_DATABASE=Soundmax Electronic Limited
@@ -52214,7 +52730,7 @@ OUI:1064E2*
ID_OUI_FROM_DATABASE=ADFweb.com s.r.l.
OUI:1065A3*
- ID_OUI_FROM_DATABASE=Panamax Inc.
+ ID_OUI_FROM_DATABASE=Core Brands LLC
OUI:1065CF*
ID_OUI_FROM_DATABASE=IQSIM
@@ -52249,6 +52765,9 @@ OUI:1078D2*
OUI:107A86*
ID_OUI_FROM_DATABASE=U&U ENGINEERING INC.
+OUI:107BEF*
+ ID_OUI_FROM_DATABASE=ZyXEL Communications Corp
+
OUI:1083D2*
ID_OUI_FROM_DATABASE=Microseven Systems, LLC
@@ -52259,13 +52778,13 @@ OUI:108CCF*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:1093E9*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:109AB9*
ID_OUI_FROM_DATABASE=Tosibox Oy
OUI:109ADD*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:109FA9*
ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
@@ -52273,12 +52792,18 @@ OUI:109FA9*
OUI:10A13B*
ID_OUI_FROM_DATABASE=FUJIKURA RUBBER LTD.
+OUI:10A5D0*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co.,Ltd.
+
OUI:10A743*
ID_OUI_FROM_DATABASE=SK Mtek Limited
OUI:10A932*
ID_OUI_FROM_DATABASE=Beijing Cyber Cloud Technology Co. ,Ltd.
+OUI:10B26B*
+ ID_OUI_FROM_DATABASE=base Co.,Ltd.
+
OUI:10B7F6*
ID_OUI_FROM_DATABASE=Plastoform Industries Ltd.
@@ -52375,8 +52900,11 @@ OUI:1407E0*
OUI:140C76*
ID_OUI_FROM_DATABASE=FREEBOX SAS
+OUI:140D4F*
+ ID_OUI_FROM_DATABASE=Flextronics International
+
OUI:14109F*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:141330*
ID_OUI_FROM_DATABASE=Anakreon UK LLP
@@ -52396,6 +52924,9 @@ OUI:141BF0*
OUI:1423D7*
ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
+OUI:142BD2*
+ ID_OUI_FROM_DATABASE=Armtel Ltd.
+
OUI:142D8B*
ID_OUI_FROM_DATABASE=Incipio Technologies, Inc
@@ -52429,6 +52960,9 @@ OUI:1441E2*
OUI:144319*
ID_OUI_FROM_DATABASE=Creative&Link Technology Limited
+OUI:1446E4*
+ ID_OUI_FROM_DATABASE=AVISTEL
+
OUI:144978*
ID_OUI_FROM_DATABASE=Digital Control Incorporated
@@ -52442,10 +52976,13 @@ OUI:145412*
ID_OUI_FROM_DATABASE=Entis Co., Ltd.
OUI:145A05*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:145BD1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:146080*
+ ID_OUI_FROM_DATABASE=zte corporation
OUI:146308*
ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD.
@@ -52478,7 +53015,7 @@ OUI:148A70*
ID_OUI_FROM_DATABASE=ADS GmbH
OUI:148FC6*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:149090*
ID_OUI_FROM_DATABASE=KongTop industrial(shen zhen)CO.,LTD
@@ -52501,6 +53038,9 @@ OUI:14A9E3*
OUI:14ABF0*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:14B126*
+ ID_OUI_FROM_DATABASE=Industrial Software Co
+
OUI:14B1C8*
ID_OUI_FROM_DATABASE=InfiniWing, Inc.
@@ -52510,6 +53050,9 @@ OUI:14B73D*
OUI:14C21D*
ID_OUI_FROM_DATABASE=Sabtech Industries
+OUI:14CC20*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+
OUI:14CF8D*
ID_OUI_FROM_DATABASE=OHSUNG ELECTRONICS CO., LTD.
@@ -52543,6 +53086,9 @@ OUI:14E6E4*
OUI:14EB33*
ID_OUI_FROM_DATABASE=BSMediasoft Co., Ltd.
+OUI:14EDA5*
+ ID_OUI_FROM_DATABASE=Wächter GmbH Sicherheitssysteme
+
OUI:14EE9D*
ID_OUI_FROM_DATABASE=AirNav Systems LLC
@@ -52579,12 +53125,18 @@ OUI:180675*
OUI:180B52*
ID_OUI_FROM_DATABASE=Nanotron Technologies GmbH
+OUI:180C14*
+ ID_OUI_FROM_DATABASE=iSonea Limited
+
OUI:180C77*
ID_OUI_FROM_DATABASE=Westinghouse Electric Company, LLC
OUI:180CAC*
ID_OUI_FROM_DATABASE=CANON INC.
+OUI:18104E*
+ ID_OUI_FROM_DATABASE=CEDINT-UPM
+
OUI:181420*
ID_OUI_FROM_DATABASE=TEB SAS
@@ -52600,11 +53152,17 @@ OUI:181725*
OUI:18193F*
ID_OUI_FROM_DATABASE=Tamtron Oy
+OUI:181BEB*
+ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
+
OUI:181EB0*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:182012*
+ ID_OUI_FROM_DATABASE=Aztech Associates Inc.
+
OUI:182032*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:182666*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -52628,7 +53186,7 @@ OUI:18339D*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:183451*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:1836FC*
ID_OUI_FROM_DATABASE=Elecsys International Corporation
@@ -52651,6 +53209,9 @@ OUI:183F47*
OUI:18422F*
ID_OUI_FROM_DATABASE=Alcatel Lucent
+OUI:184462*
+ ID_OUI_FROM_DATABASE=Riava Networks, Inc.
+
OUI:184617*
ID_OUI_FROM_DATABASE=Samsung Electronics
@@ -52675,6 +53236,12 @@ OUI:185933*
OUI:185AE8*
ID_OUI_FROM_DATABASE=Zenotech.Co.,Ltd
+OUI:18622C*
+ ID_OUI_FROM_DATABASE=SAGEMCOM SAS
+
+OUI:186472*
+ ID_OUI_FROM_DATABASE=Aruba Networks
+
OUI:1866E3*
ID_OUI_FROM_DATABASE=Veros Systems, Inc.
@@ -52696,6 +53263,9 @@ OUI:187A93*
OUI:187C81*
ID_OUI_FROM_DATABASE=Valeo Vision Systems
+OUI:187ED5*
+ ID_OUI_FROM_DATABASE=shenzhen kaism technology Co. Ltd
+
OUI:1880CE*
ID_OUI_FROM_DATABASE=Barberry Solutions Ltd
@@ -52729,12 +53299,21 @@ OUI:1897FF*
OUI:189A67*
ID_OUI_FROM_DATABASE=CSE-Servelec Limited
+OUI:189C5D*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:189EFC*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:18A905*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+OUI:18A99B*
+ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+
+OUI:18AA45*
+ ID_OUI_FROM_DATABASE=Fon Technology
+
OUI:18ABF5*
ID_OUI_FROM_DATABASE=Ultra Electronics - Electrics
@@ -52744,6 +53323,12 @@ OUI:18AD4D*
OUI:18AEBB*
ID_OUI_FROM_DATABASE=Siemens Convergence Creators GmbH&Co.KG
+OUI:18AF61*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
+OUI:18AF8F*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:18AF9F*
ID_OUI_FROM_DATABASE=DIGITRONIC Automationsanlagen GmbH
@@ -52768,6 +53353,9 @@ OUI:18C086*
OUI:18C451*
ID_OUI_FROM_DATABASE=Tucson Embedded Systems
+OUI:18C8E7*
+ ID_OUI_FROM_DATABASE=Shenzhen Hualistone Technology Co.,Ltd
+
OUI:18D071*
ID_OUI_FROM_DATABASE=DASAN SMC, Inc.
@@ -52790,7 +53378,7 @@ OUI:18E2C2*
ID_OUI_FROM_DATABASE=Samsung Electronics
OUI:18E7F4*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:18E80F*
ID_OUI_FROM_DATABASE=Viking Electronics Inc.
@@ -52838,7 +53426,7 @@ OUI:1C129D*
ID_OUI_FROM_DATABASE=IEEE PES PSRC/SUB
OUI:1C1448*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:1C17D3*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -52873,6 +53461,9 @@ OUI:1C3DE7*
OUI:1C3E84*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:1C4158*
+ ID_OUI_FROM_DATABASE=Gemalto M2M GmbH
+
OUI:1C43EC*
ID_OUI_FROM_DATABASE=JAPAN CIRCUIT CO.,LTD
@@ -52885,6 +53476,9 @@ OUI:1C48F9*
OUI:1C4AF7*
ID_OUI_FROM_DATABASE=AMON INC
+OUI:1C4BB9*
+ ID_OUI_FROM_DATABASE=SMG ENTERPRISE, LLC
+
OUI:1C4BD6*
ID_OUI_FROM_DATABASE=AzureWave
@@ -52912,6 +53506,9 @@ OUI:1C5FFF*
OUI:1C62B8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:1C63B7*
+ ID_OUI_FROM_DATABASE=OpenProducts 237 AB
+
OUI:1C659D*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -52936,6 +53533,12 @@ OUI:1C7508*
OUI:1C76CA*
ID_OUI_FROM_DATABASE=Terasic Technologies Inc.
+OUI:1C7839*
+ ID_OUI_FROM_DATABASE=Shenzhen Tencent Computer System Co., Ltd.
+
+OUI:1C7B21*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
OUI:1C7C11*
ID_OUI_FROM_DATABASE=EID
@@ -52954,6 +53557,9 @@ OUI:1C83B0*
OUI:1C8464*
ID_OUI_FROM_DATABASE=FORMOSA WIRELESS COMMUNICATION CORP.
+OUI:1C86AD*
+ ID_OUI_FROM_DATABASE=MCT CO., LTD.
+
OUI:1C8E8E*
ID_OUI_FROM_DATABASE=DB Communication & Systems Co., ltd.
@@ -52975,11 +53581,20 @@ OUI:1C959F*
OUI:1C973D*
ID_OUI_FROM_DATABASE=PRICOM Design
+OUI:1C994C*
+ ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+
+OUI:1CA770*
+ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LT
+
OUI:1CAA07*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:1CABA7*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:1CAF05*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:1CAFF7*
ID_OUI_FROM_DATABASE=D-LINK INTERNATIONAL PTE LIMITED
@@ -53005,6 +53620,9 @@ OUI:1CBD0E*
OUI:1CBDB9*
ID_OUI_FROM_DATABASE=D-LINK INTERNATIONAL PTE LIMITED
+OUI:1CC11A*
+ ID_OUI_FROM_DATABASE=Wavetronix
+
OUI:1CC1DE*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
@@ -53062,6 +53680,9 @@ OUI:2005E8*
OUI:200A5E*
ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing co.,LTD
+OUI:200BC7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:20107A*
ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
@@ -53074,6 +53695,9 @@ OUI:2013E0*
OUI:2016D8*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+OUI:20180E*
+ ID_OUI_FROM_DATABASE=Shenzhen Sunchip Technology Co., Ltd
+
OUI:201A06*
ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
@@ -53131,6 +53755,9 @@ OUI:204E7F*
OUI:205476*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+OUI:205721*
+ ID_OUI_FROM_DATABASE=Salix Technology CO., Ltd.
+
OUI:2059A0*
ID_OUI_FROM_DATABASE=Paragon Technologies Inc.
@@ -53218,6 +53845,9 @@ OUI:20BFDB*
OUI:20C1AF*
ID_OUI_FROM_DATABASE=i Wit Digital Co., Limited
+OUI:20C60D*
+ ID_OUI_FROM_DATABASE=Shanghai annijie Information technology Co.,LTD
+
OUI:20C6EB*
ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
@@ -53225,11 +53855,23 @@ OUI:20C8B3*
ID_OUI_FROM_DATABASE=SHENZHEN BUL-TECH CO.,LTD.
OUI:20C9D0*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:20CD39*
+ ID_OUI_FROM_DATABASE=Texas Instruments, Inc
+
+OUI:20CEC4*
+ ID_OUI_FROM_DATABASE=Peraso Technologies
OUI:20CF30*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+OUI:20D21F*
+ ID_OUI_FROM_DATABASE=Wincal Technology Corp.
+
+OUI:20D390*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:20D5AB*
ID_OUI_FROM_DATABASE=Korea Infocom Co.,Ltd.
@@ -53255,7 +53897,10 @@ OUI:20E52A*
ID_OUI_FROM_DATABASE=NETGEAR INC.,
OUI:20E564*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:20E791*
+ ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc
OUI:20EEC6*
ID_OUI_FROM_DATABASE=Elefirst Science & Tech Co ., ltd
@@ -53344,6 +53989,9 @@ OUI:245FDF*
OUI:246278*
ID_OUI_FROM_DATABASE=sysmocom - systems for mobile communications GmbH
+OUI:2464EF*
+ ID_OUI_FROM_DATABASE=CYG SUNRI CO.,LTD.
+
OUI:246511*
ID_OUI_FROM_DATABASE=AVM GmbH
@@ -53362,6 +54010,9 @@ OUI:24767D*
OUI:247703*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:248000*
+ ID_OUI_FROM_DATABASE=Westcontrol AS
+
OUI:2481AA*
ID_OUI_FROM_DATABASE=KSH International Co., Ltd.
@@ -53374,6 +54025,9 @@ OUI:2486F4*
OUI:248707*
ID_OUI_FROM_DATABASE=SEnergy Corporation
+OUI:2493CA*
+ ID_OUI_FROM_DATABASE=Voxtronic Technology Computer-Systeme GmbH
+
OUI:249442*
ID_OUI_FROM_DATABASE=OPEN ROAD SOLUTIONS , INC.
@@ -53386,11 +54040,14 @@ OUI:24A42C*
OUI:24A43C*
ID_OUI_FROM_DATABASE=Ubiquiti Networks, INC
+OUI:24A495*
+ ID_OUI_FROM_DATABASE=Thales Canada Inc.
+
OUI:24A937*
ID_OUI_FROM_DATABASE=PURE Storage
OUI:24AB81*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:24AF4A*
ID_OUI_FROM_DATABASE=Alcatel-Lucent-IPD
@@ -53428,6 +54085,12 @@ OUI:24BE05*
OUI:24C0B3*
ID_OUI_FROM_DATABASE=RSF
+OUI:24C696*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:24C848*
+ ID_OUI_FROM_DATABASE=mywerk system GmbH
+
OUI:24C86E*
ID_OUI_FROM_DATABASE=Chaney Instrument Co.
@@ -53461,6 +54124,9 @@ OUI:24DBAD*
OUI:24DEC6*
ID_OUI_FROM_DATABASE=Aruba Networks
+OUI:24E271*
+ ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd
+
OUI:24E6BA*
ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky
@@ -53473,6 +54139,9 @@ OUI:24EB65*
OUI:24EC99*
ID_OUI_FROM_DATABASE=Askey Computer Corp
+OUI:24ECD6*
+ ID_OUI_FROM_DATABASE=CSG Science & Technology Co.,Ltd.Hefei
+
OUI:24EE3A*
ID_OUI_FROM_DATABASE=Chengdu Yingji Electronic Hi-tech Co Ltd
@@ -53482,6 +54151,9 @@ OUI:24F0FF*
OUI:24F2DD*
ID_OUI_FROM_DATABASE=Radiant Zemax LLC
+OUI:24F5AA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
+
OUI:24FD52*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -53494,6 +54166,9 @@ OUI:28061E*
OUI:28068D*
ID_OUI_FROM_DATABASE=ITL, LLC
+OUI:280B5C*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:280CB8*
ID_OUI_FROM_DATABASE=Mikrosay Yazilim ve Elektronik A.S.
@@ -53521,6 +54196,9 @@ OUI:2818FD*
OUI:2826A6*
ID_OUI_FROM_DATABASE=PBR electronics GmbH
+OUI:28285D*
+ ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+
OUI:2829D9*
ID_OUI_FROM_DATABASE=GlobalBeiMing technology (Beijing)Co. Ltd
@@ -53534,7 +54212,7 @@ OUI:283410*
ID_OUI_FROM_DATABASE=Enigma Diagnostics Limited
OUI:283737*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:2838CF*
ID_OUI_FROM_DATABASE=Gen2wave
@@ -53551,18 +54229,30 @@ OUI:28401A*
OUI:284121*
ID_OUI_FROM_DATABASE=OptiSense Network, LLC
+OUI:284430*
+ ID_OUI_FROM_DATABASE=GenesisTechnical Systems (UK) Ltd
+
+OUI:2847AA*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:284846*
ID_OUI_FROM_DATABASE=GridCentric Inc.
OUI:284C53*
ID_OUI_FROM_DATABASE=Intune Networks
+OUI:284D92*
+ ID_OUI_FROM_DATABASE=Luminator
+
OUI:284FCE*
ID_OUI_FROM_DATABASE=Liaoning Wontel Science and Technology Development Co.,Ltd.
OUI:285132*
ID_OUI_FROM_DATABASE=Shenzhen Prayfly Technology Co.,Ltd
+OUI:285767*
+ ID_OUI_FROM_DATABASE=Echostar Technologies Corp
+
OUI:285FDB*
ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
@@ -53573,10 +54263,13 @@ OUI:286094*
ID_OUI_FROM_DATABASE=CAPELEC
OUI:286AB8*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:286ABA*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:286D97*
+ ID_OUI_FROM_DATABASE=SAMJIN Co., Ltd.
OUI:286ED4*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -53599,6 +54292,9 @@ OUI:28852D*
OUI:288915*
ID_OUI_FROM_DATABASE=CashGuard Sverige AB
+OUI:288A1C*
+ ID_OUI_FROM_DATABASE=Juniper networks
+
OUI:2891D0*
ID_OUI_FROM_DATABASE=Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH
@@ -53611,6 +54307,9 @@ OUI:2893FE*
OUI:28940F*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:2894AF*
+ ID_OUI_FROM_DATABASE=Samhwa Telecom
+
OUI:28987B*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -53626,6 +54325,12 @@ OUI:28A186*
OUI:28A192*
ID_OUI_FROM_DATABASE=GERP Solution
+OUI:28A1EB*
+ ID_OUI_FROM_DATABASE=ETEK TECHNOLOGY (SHENZHEN) CO.,LTD
+
+OUI:28A241*
+ ID_OUI_FROM_DATABASE=exlar corp
+
OUI:28A574*
ID_OUI_FROM_DATABASE=Miller Electric Mfg. Co.
@@ -53644,12 +54349,18 @@ OUI:28B3AB*
OUI:28BA18*
ID_OUI_FROM_DATABASE=NextNav, LLC
+OUI:28BAB5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:28BE9B*
ID_OUI_FROM_DATABASE=Technicolor USA Inc.
OUI:28C0DA*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:28C671*
+ ID_OUI_FROM_DATABASE=Yota Devices OY
+
OUI:28C68E*
ID_OUI_FROM_DATABASE=NETGEAR INC.,
@@ -53678,7 +54389,7 @@ OUI:28CD9C*
ID_OUI_FROM_DATABASE=Shenzhen Dynamax Software Development Co.,Ltd.
OUI:28CFDA*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:28CFE9*
ID_OUI_FROM_DATABASE=Apple
@@ -53692,6 +54403,9 @@ OUI:28D244*
OUI:28D576*
ID_OUI_FROM_DATABASE=Premier Wireless, Inc.
+OUI:28D93E*
+ ID_OUI_FROM_DATABASE=Telecor Inc.
+
OUI:28D997*
ID_OUI_FROM_DATABASE=Yuduan Mobile Co., Ltd.
@@ -53699,6 +54413,9 @@ OUI:28DB81*
ID_OUI_FROM_DATABASE=Shanghai Guao Electronic Technology Co., Ltd
OUI:28E02C*
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:28E14C*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:28E297*
@@ -53711,7 +54428,7 @@ OUI:28E794*
ID_OUI_FROM_DATABASE=Microtime Computer Inc.
OUI:28E7CF*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:28ED58*
ID_OUI_FROM_DATABASE=JAG Jakob AG
@@ -53731,6 +54448,9 @@ OUI:28F606*
OUI:28FBD3*
ID_OUI_FROM_DATABASE=Ragentek Technology Group
+OUI:28FC51*
+ ID_OUI_FROM_DATABASE=The Electric Controller and Manufacturing Co., LLC
+
OUI:2C002C*
ID_OUI_FROM_DATABASE=UNOWHY
@@ -53746,6 +54466,9 @@ OUI:2C0623*
OUI:2C10C1*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+OUI:2C18AE*
+ ID_OUI_FROM_DATABASE=Trend Electronics Co., Ltd.
+
OUI:2C1984*
ID_OUI_FROM_DATABASE=IDN Telecom, Inc.
@@ -53785,6 +54508,9 @@ OUI:2C36A0*
OUI:2C36F8*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:2C3731*
+ ID_OUI_FROM_DATABASE=ShenZhen Yifang Digital Technology Co.,LTD
+
OUI:2C3996*
ID_OUI_FROM_DATABASE=SAGEMCOM
@@ -53815,12 +54541,21 @@ OUI:2C44FD*
OUI:2C542D*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:2C553C*
+ ID_OUI_FROM_DATABASE=Gainspeed, Inc.
+
OUI:2C59E5*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:2C5AA3*
ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
+OUI:2C5D93*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
+OUI:2C5FF3*
+ ID_OUI_FROM_DATABASE=Pertronic Industries
+
OUI:2C625A*
ID_OUI_FROM_DATABASE=Finest Security Systems Co., Ltd
@@ -53836,6 +54571,9 @@ OUI:2C69BA*
OUI:2C6BF5*
ID_OUI_FROM_DATABASE=Juniper networks
+OUI:2C7155*
+ ID_OUI_FROM_DATABASE=HiveMotion
+
OUI:2C72C3*
ID_OUI_FROM_DATABASE=Soundmatters
@@ -53848,6 +54586,9 @@ OUI:2C768A*
OUI:2C7B5A*
ID_OUI_FROM_DATABASE=Milper Ltd
+OUI:2C7B84*
+ ID_OUI_FROM_DATABASE=OOO Petr Telegin
+
OUI:2C7ECF*
ID_OUI_FROM_DATABASE=Onzo Ltd
@@ -53873,7 +54614,7 @@ OUI:2C9717*
ID_OUI_FROM_DATABASE=I.C.Y. B.V.
OUI:2C9E5F*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:2C9EFC*
ID_OUI_FROM_DATABASE=CANON INC.
@@ -53911,12 +54652,18 @@ OUI:2CBE97*
OUI:2CC260*
ID_OUI_FROM_DATABASE=Ravello Systems
+OUI:2CCC15*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:2CCD27*
ID_OUI_FROM_DATABASE=Precor Inc
OUI:2CCD43*
ID_OUI_FROM_DATABASE=Summit Technology Group
+OUI:2CCD69*
+ ID_OUI_FROM_DATABASE=Aqavi.com
+
OUI:2CD05A*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -53938,6 +54685,9 @@ OUI:2CE2A8*
OUI:2CE412*
ID_OUI_FROM_DATABASE=SAGEMCOM SAS
+OUI:2CE6CC*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
OUI:2CE871*
ID_OUI_FROM_DATABASE=Alert Metalguard ApS
@@ -53962,6 +54712,9 @@ OUI:300B9C*
OUI:300ED5*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+OUI:3010E4*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:30142D*
ID_OUI_FROM_DATABASE=Piciorgros GmbH
@@ -53980,6 +54733,9 @@ OUI:3017C8*
OUI:3018CF*
ID_OUI_FROM_DATABASE=DEOS control systems GmbH
+OUI:301966*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:301A28*
ID_OUI_FROM_DATABASE=Mako Networks Ltd
@@ -54010,6 +54766,9 @@ OUI:303955*
OUI:3039F2*
ID_OUI_FROM_DATABASE=ADB Broadband Italia
+OUI:303A64*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:303D08*
ID_OUI_FROM_DATABASE=GLINTT TES S.A.
@@ -54034,6 +54793,9 @@ OUI:304C7E*
OUI:304EC3*
ID_OUI_FROM_DATABASE=Tianjin Techua Technology Co., Ltd.
+OUI:3051F8*
+ ID_OUI_FROM_DATABASE=BYK-Gardner GmbH
+
OUI:30525A*
ID_OUI_FROM_DATABASE=NST Co., LTD
@@ -54046,6 +54808,12 @@ OUI:3057AC*
OUI:305D38*
ID_OUI_FROM_DATABASE=Beissbarth
+OUI:306023*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:306112*
+ ID_OUI_FROM_DATABASE=PAV GmbH
+
OUI:306118*
ID_OUI_FROM_DATABASE=Paradom Inc.
@@ -54067,6 +54835,9 @@ OUI:306E5C*
OUI:3071B2*
ID_OUI_FROM_DATABASE=Hangzhou Prevail Optoelectronic Equipment Co.,LTD.
+OUI:30766F*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
OUI:30786B*
ID_OUI_FROM_DATABASE=TIANJIN Golden Pentagon Electronics Co., Ltd.
@@ -54097,6 +54868,9 @@ OUI:3090AB*
OUI:3092F6*
ID_OUI_FROM_DATABASE=SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
+OUI:309BAD*
+ ID_OUI_FROM_DATABASE=BBK Electronics Corp., Ltd.,
+
OUI:30AABD*
ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology Co.,Ltd
@@ -54124,6 +54898,9 @@ OUI:30D357*
OUI:30D46A*
ID_OUI_FROM_DATABASE=Autosales Incorporated
+OUI:30D6C9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:30DE86*
ID_OUI_FROM_DATABASE=Cedac Software S.r.l.
@@ -54163,8 +54940,11 @@ OUI:3407FB*
OUI:340804*
ID_OUI_FROM_DATABASE=D-Link Corporation
+OUI:3413E8*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:34159E*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:341A4C*
ID_OUI_FROM_DATABASE=SHENZHEN WEIBU ELECTRONICS CO.,LTD.
@@ -54175,6 +54955,9 @@ OUI:341B22*
OUI:342109*
ID_OUI_FROM_DATABASE=Jensen Scandinavia AS
+OUI:342387*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
OUI:3423BA*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
@@ -54187,6 +54970,9 @@ OUI:3429EA*
OUI:342F6E*
ID_OUI_FROM_DATABASE=Anywire corporation
+OUI:343111*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:3440B5*
ID_OUI_FROM_DATABASE=IBM
@@ -54196,15 +54982,24 @@ OUI:344B3D*
OUI:344B50*
ID_OUI_FROM_DATABASE=ZTE Corporation
+OUI:344F3F*
+ ID_OUI_FROM_DATABASE=IO-Power Technology Co., Ltd.
+
OUI:344F69*
ID_OUI_FROM_DATABASE=EKINOPS SAS
OUI:3451C9*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:345B11*
ID_OUI_FROM_DATABASE=EVI HEAT AB
+OUI:345C40*
+ ID_OUI_FROM_DATABASE=Cargt Holdings LLC
+
+OUI:346178*
+ ID_OUI_FROM_DATABASE=The Boeing Company
+
OUI:34684A*
ID_OUI_FROM_DATABASE=Teraworks Co., Ltd.
@@ -54244,6 +55039,12 @@ OUI:348446*
OUI:34862A*
ID_OUI_FROM_DATABASE=Heinz Lackmann GmbH & Co KG
+OUI:34885D*
+ ID_OUI_FROM_DATABASE=Logitech Far East
+
+OUI:348AAE*
+ ID_OUI_FROM_DATABASE=SAGEMCOM SAS
+
OUI:3495DB*
ID_OUI_FROM_DATABASE=Logitec Corporation
@@ -54265,9 +55066,15 @@ OUI:349D90*
OUI:34A183*
ID_OUI_FROM_DATABASE=AWare, Inc
+OUI:34A3BF*
+ ID_OUI_FROM_DATABASE=Terewave. Inc.
+
OUI:34A55D*
ID_OUI_FROM_DATABASE=TECHNOSOFT INTERNATIONAL SRL
+OUI:34A5E1*
+ ID_OUI_FROM_DATABASE=Sensorist ApS
+
OUI:34A68C*
ID_OUI_FROM_DATABASE=Shine Profit Development Limited
@@ -54283,6 +55090,9 @@ OUI:34A843*
OUI:34A84E*
ID_OUI_FROM_DATABASE=Cisco
+OUI:34AA8B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:34AA99*
ID_OUI_FROM_DATABASE=Alcatel-Lucent
@@ -54322,6 +55132,9 @@ OUI:34BDF9*
OUI:34BDFA*
ID_OUI_FROM_DATABASE=Cisco SPVTG
+OUI:34BE00*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:34BF90*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
@@ -54361,6 +55174,9 @@ OUI:34D2C4*
OUI:34D7B4*
ID_OUI_FROM_DATABASE=Tributary Systems, Inc.
+OUI:34DBFD*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:34DF2A*
ID_OUI_FROM_DATABASE=Fujikon Industrial Co.,Limited
@@ -54403,6 +55219,9 @@ OUI:380A0A*
OUI:380A94*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:380B40*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:380DD4*
ID_OUI_FROM_DATABASE=Primax Electronics LTD.
@@ -54445,6 +55264,9 @@ OUI:383F10*
OUI:384233*
ID_OUI_FROM_DATABASE=Wildeboer Bauteile GmbH
+OUI:3842A6*
+ ID_OUI_FROM_DATABASE=Ingenieurbuero Stahlkopf
+
OUI:384369*
ID_OUI_FROM_DATABASE=Patrol Products Consortium LLC
@@ -54466,9 +55288,15 @@ OUI:38521A*
OUI:38580C*
ID_OUI_FROM_DATABASE=Panaccess Systems GmbH
+OUI:3859F8*
+ ID_OUI_FROM_DATABASE=MindMade sp. z o.o.
+
OUI:3859F9*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:385AA8*
+ ID_OUI_FROM_DATABASE=Beijing Zhongdun Security Technology Development Co.
+
OUI:385FC3*
ID_OUI_FROM_DATABASE=Yu Jeong System, Co.Ltd
@@ -54485,7 +55313,7 @@ OUI:386793*
ID_OUI_FROM_DATABASE=Asia Optical Co., Inc.
OUI:386BBB*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:386E21*
ID_OUI_FROM_DATABASE=Wasion Group Ltd.
@@ -54496,6 +55324,9 @@ OUI:3872C0*
OUI:388345*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+OUI:3889DC*
+ ID_OUI_FROM_DATABASE=Opticon Sensors Europe B.V.
+
OUI:388AB7*
ID_OUI_FROM_DATABASE=ITC Networks
@@ -54511,6 +55342,9 @@ OUI:389592*
OUI:389F83*
ID_OUI_FROM_DATABASE=OTN Systems N.V.
+OUI:38A53C*
+ ID_OUI_FROM_DATABASE=Veenstra Instruments
+
OUI:38A5B6*
ID_OUI_FROM_DATABASE=SHENZHEN MEGMEET ELECTRICAL CO.,LTD
@@ -54532,12 +55366,18 @@ OUI:38B12D*
OUI:38B5BD*
ID_OUI_FROM_DATABASE=E.G.O. Elektro-Ger
+OUI:38B74D*
+ ID_OUI_FROM_DATABASE=Fijowave Limited
+
OUI:38BB23*
ID_OUI_FROM_DATABASE=OzVision America LLC
OUI:38BC1A*
ID_OUI_FROM_DATABASE=Meizu technology co.,ltd
+OUI:38BF2F*
+ ID_OUI_FROM_DATABASE=Espec Corp.
+
OUI:38BF33*
ID_OUI_FROM_DATABASE=NEC CASIO Mobile Communications
@@ -54550,9 +55390,15 @@ OUI:38C7BA*
OUI:38C85C*
ID_OUI_FROM_DATABASE=Cisco SPVTG
+OUI:38CA97*
+ ID_OUI_FROM_DATABASE=Contour Design LLC
+
OUI:38D135*
ID_OUI_FROM_DATABASE=EasyIO Corporation Sdn. Bhd.
+OUI:38DBBB*
+ ID_OUI_FROM_DATABASE=Sunbow Telecom Co., Ltd.
+
OUI:38DE60*
ID_OUI_FROM_DATABASE=Mohlenhoff GmbH
@@ -54574,6 +55420,9 @@ OUI:38E98C*
OUI:38EAA7*
ID_OUI_FROM_DATABASE=Hewlett Packard
+OUI:38EC11*
+ ID_OUI_FROM_DATABASE=Novatek Microelectronics Corp.
+
OUI:38ECE4*
ID_OUI_FROM_DATABASE=Samsung Electronics
@@ -54599,7 +55448,7 @@ OUI:3C05AB*
ID_OUI_FROM_DATABASE=Product Creation Studio
OUI:3C0754*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:3C0771*
ID_OUI_FROM_DATABASE=Sony Corporation
@@ -54613,15 +55462,27 @@ OUI:3C096D*
OUI:3C0FC1*
ID_OUI_FROM_DATABASE=KBC Networks
+OUI:3C1040*
+ ID_OUI_FROM_DATABASE=daesung network
+
OUI:3C106F*
ID_OUI_FROM_DATABASE=ALBAHITH TECHNOLOGIES
+OUI:3C15EA*
+ ID_OUI_FROM_DATABASE=TESCOM CO., LTD.
+
+OUI:3C18A0*
+ ID_OUI_FROM_DATABASE=Luxshare Precision Industry Co.,Ltd.
+
OUI:3C1915*
ID_OUI_FROM_DATABASE=GFI Chrono Time
OUI:3C197D*
ID_OUI_FROM_DATABASE=Ericsson AB
+OUI:3C1A57*
+ ID_OUI_FROM_DATABASE=Cardiopulmonary Corp
+
OUI:3C1A79*
ID_OUI_FROM_DATABASE=Huayuan Technology CO.,LTD
@@ -54640,6 +55501,9 @@ OUI:3C2DB7*
OUI:3C2F3A*
ID_OUI_FROM_DATABASE=SFORZATO Corp.
+OUI:3C300C*
+ ID_OUI_FROM_DATABASE=Dewar Electronics Pty Ltd
+
OUI:3C363D*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -54652,8 +55516,11 @@ OUI:3C39C3*
OUI:3C3A73*
ID_OUI_FROM_DATABASE=Avaya, Inc
+OUI:3C404F*
+ ID_OUI_FROM_DATABASE=Guangdong Pisen Electronics Co. Ltd.
+
OUI:3C438E*
- ID_OUI_FROM_DATABASE=Motorola Mobility, LLC.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:3C4A92*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
@@ -54676,6 +55543,9 @@ OUI:3C5A37*
OUI:3C5F01*
ID_OUI_FROM_DATABASE=Synerchip Co., Ltd.
+OUI:3C6104*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:3C6200*
ID_OUI_FROM_DATABASE=Samsung electronics CO., LTD
@@ -54688,6 +55558,9 @@ OUI:3C672C*
OUI:3C6A7D*
ID_OUI_FROM_DATABASE=Niigata Power Systems Co., Ltd.
+OUI:3C6E63*
+ ID_OUI_FROM_DATABASE=Mitron OY
+
OUI:3C6F45*
ID_OUI_FROM_DATABASE=Fiberpro Inc.
@@ -54701,7 +55574,10 @@ OUI:3C7437*
ID_OUI_FROM_DATABASE=RIM
OUI:3C754A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:3C77E6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:3C7DB1*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -54784,11 +55660,14 @@ OUI:3CC243*
OUI:3CC99E*
ID_OUI_FROM_DATABASE=Huiyang Technology Co., Ltd
+OUI:3CCA87*
+ ID_OUI_FROM_DATABASE=Iders Incorporated
+
OUI:3CCE73*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:3CD0F8*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:3CD16E*
ID_OUI_FROM_DATABASE=Telepower Communication Co., Ltd
@@ -54829,6 +55708,9 @@ OUI:3CF52C*
OUI:3CF72A*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:3CF748*
+ ID_OUI_FROM_DATABASE=Shenzhen Linsn Technology Development Co.,Ltd
+
OUI:3CFB96*
ID_OUI_FROM_DATABASE=Emcraft Systems LLC
@@ -54887,7 +55769,7 @@ OUI:402CF4*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
OUI:403004*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:40336C*
ID_OUI_FROM_DATABASE=Godrej & Boyce Mfg. co. ltd
@@ -54896,7 +55778,7 @@ OUI:4037AD*
ID_OUI_FROM_DATABASE=Macro Image Technology, Inc.
OUI:403CFC*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:404022*
ID_OUI_FROM_DATABASE=ZIV
@@ -54953,17 +55835,26 @@ OUI:406AAB*
ID_OUI_FROM_DATABASE=RIM
OUI:406C8F*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:406F2A*
ID_OUI_FROM_DATABASE=Research In Motion
+OUI:407009*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:40704A*
ID_OUI_FROM_DATABASE=Power Idea Technology Limited
OUI:407074*
ID_OUI_FROM_DATABASE=Life Technology (China) Co., Ltd
+OUI:407496*
+ ID_OUI_FROM_DATABASE=aFUN TECHNOLOGY INC.
+
+OUI:407A80*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:407B1B*
ID_OUI_FROM_DATABASE=Mettle Networks Inc.
@@ -55007,7 +55898,7 @@ OUI:40A6A4*
ID_OUI_FROM_DATABASE=PassivSystems Ltd
OUI:40A6D9*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:40AC8D*
ID_OUI_FROM_DATABASE=Data Management, Inc.
@@ -55028,7 +55919,7 @@ OUI:40B4F0*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:40B7F3*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:40BA61*
ID_OUI_FROM_DATABASE=Arima Communications Corp.
@@ -55061,7 +55952,7 @@ OUI:40CD3A*
ID_OUI_FROM_DATABASE=Z3 Technology
OUI:40D32D*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:40D40E*
ID_OUI_FROM_DATABASE=Biodata Ltd
@@ -55100,7 +55991,7 @@ OUI:40F52E*
ID_OUI_FROM_DATABASE=Leica Microsystems (Schweiz) AG
OUI:40FC89*
- ID_OUI_FROM_DATABASE=Motorola Mobility, LLC.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:4403A7*
ID_OUI_FROM_DATABASE=Cisco
@@ -55127,11 +56018,17 @@ OUI:4425BB*
ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation
OUI:442A60*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:442AFF*
+ ID_OUI_FROM_DATABASE=E3 Technology, Inc.
OUI:442B03*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:443192*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:44322A*
ID_OUI_FROM_DATABASE=Avaya, Inc
@@ -55159,6 +56056,9 @@ OUI:443839*
OUI:4439C4*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co.,Ltd
+OUI:443C9C*
+ ID_OUI_FROM_DATABASE=Pintsch Tiefenbach GmbH
+
OUI:443D21*
ID_OUI_FROM_DATABASE=Nuvolt
@@ -55169,7 +56069,7 @@ OUI:444A65*
ID_OUI_FROM_DATABASE=Silverflare Ltd.
OUI:444C0C*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:444E1A*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -55207,6 +56107,9 @@ OUI:446132*
OUI:44619C*
ID_OUI_FROM_DATABASE=FONsystem co. ltd.
+OUI:446755*
+ ID_OUI_FROM_DATABASE=Orbit Irrigation
+
OUI:4468AB*
ID_OUI_FROM_DATABASE=JUIN COMPANY, LIMITED
@@ -55216,6 +56119,12 @@ OUI:446C24*
OUI:446D57*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+OUI:44700B*
+ ID_OUI_FROM_DATABASE=IFFU
+
+OUI:447BC4*
+ ID_OUI_FROM_DATABASE=DualShine Technology(SZ)Co.,Ltd
+
OUI:447C7F*
ID_OUI_FROM_DATABASE=Innolight Technology Corporation
@@ -55234,6 +56143,9 @@ OUI:448500*
OUI:4487FC*
ID_OUI_FROM_DATABASE=ELITEGROUP COMPUTER SYSTEM CO., LTD.
+OUI:448A5B*
+ ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD.
+
OUI:448C52*
ID_OUI_FROM_DATABASE=KTIS CO., Ltd
@@ -55310,7 +56222,7 @@ OUI:44D832*
ID_OUI_FROM_DATABASE=Azurewave Technologies, Inc.
OUI:44D884*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:44DC91*
ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC.
@@ -55333,6 +56245,9 @@ OUI:44E8A5*
OUI:44ED57*
ID_OUI_FROM_DATABASE=Longicorn, inc.
+OUI:44EE30*
+ ID_OUI_FROM_DATABASE=Budelmann Elektronik GmbH
+
OUI:44F459*
ID_OUI_FROM_DATABASE=Samsung Electronics
@@ -55381,6 +56296,9 @@ OUI:4844F7*
OUI:4846F1*
ID_OUI_FROM_DATABASE=Uros Oy
+OUI:4846FB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:485261*
ID_OUI_FROM_DATABASE=SOREEL
@@ -55394,7 +56312,7 @@ OUI:485D60*
ID_OUI_FROM_DATABASE=Azurewave Technologies, Inc.
OUI:4860BC*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:4861A3*
ID_OUI_FROM_DATABASE=Concern "Axion" JSC
@@ -55402,6 +56320,9 @@ OUI:4861A3*
OUI:486B91*
ID_OUI_FROM_DATABASE=Fleetwood Group Inc.
+OUI:486E73*
+ ID_OUI_FROM_DATABASE=Pica8, Inc.
+
OUI:486FD2*
ID_OUI_FROM_DATABASE=StorSimple Inc
@@ -55426,6 +56347,9 @@ OUI:489D24*
OUI:48A22D*
ID_OUI_FROM_DATABASE=Shenzhen Huaxuchang Telecom Technology Co.,Ltd
+OUI:48A2B7*
+ ID_OUI_FROM_DATABASE=Kodofon JSC
+
OUI:48A6D2*
ID_OUI_FROM_DATABASE=GJsun Optical Science and Tech Co.,Ltd.
@@ -55456,6 +56380,9 @@ OUI:48C8B6*
OUI:48CB6E*
ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
+OUI:48D224*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
OUI:48D54C*
ID_OUI_FROM_DATABASE=Jeda Networks
@@ -55534,6 +56461,9 @@ OUI:4C0FC7*
OUI:4C1480*
ID_OUI_FROM_DATABASE=NOREGON SYSTEMS, INC
+OUI:4C14A3*
+ ID_OUI_FROM_DATABASE=TCL Technoly Electronics (Huizhou) Co., Ltd.
+
OUI:4C17EB*
ID_OUI_FROM_DATABASE=SAGEMCOM
@@ -55546,6 +56476,9 @@ OUI:4C1A95*
OUI:4C1FCC*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:4C21D0*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
OUI:4C2258*
ID_OUI_FROM_DATABASE=cozybit, Inc.
@@ -55573,6 +56506,9 @@ OUI:4C3910*
OUI:4C3B74*
ID_OUI_FROM_DATABASE=VOGTEC(H.K.) Co., Ltd
+OUI:4C3C16*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:4C4B68*
ID_OUI_FROM_DATABASE=Mobile Device, Inc.
@@ -55597,6 +56533,9 @@ OUI:4C55CC*
OUI:4C5DCD*
ID_OUI_FROM_DATABASE=Oy Finnish Electric Vehicle Technologies Ltd
+OUI:4C5E0C*
+ ID_OUI_FROM_DATABASE=Routerboard.com
+
OUI:4C5FD2*
ID_OUI_FROM_DATABASE=Alcatel-Lucent
@@ -55682,11 +56621,14 @@ OUI:4CB16C*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:4CB199*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:4CB4EA*
ID_OUI_FROM_DATABASE=HRD (S) PTE., LTD.
+OUI:4CB81C*
+ ID_OUI_FROM_DATABASE=SAM Electronics GmbH
+
OUI:4CB9C8*
ID_OUI_FROM_DATABASE=CONET CO., LTD.
@@ -55708,12 +56650,18 @@ OUI:4CC94F*
OUI:4CCA53*
ID_OUI_FROM_DATABASE=Skyera, Inc.
+OUI:4CCBF5*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:4CCC34*
ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
OUI:4CD637*
ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd
+OUI:4CDF3D*
+ ID_OUI_FROM_DATABASE=TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
+
OUI:4CE676*
ID_OUI_FROM_DATABASE=Buffalo Inc.
@@ -55723,6 +56671,9 @@ OUI:4CEB42*
OUI:4CEDDE*
ID_OUI_FROM_DATABASE=Askey Computer Corp
+OUI:4CF02E*
+ ID_OUI_FROM_DATABASE=Vifa Denmark A/S
+
OUI:4CF737*
ID_OUI_FROM_DATABASE=SamJi Electronics Co., Ltd
@@ -55747,6 +56698,12 @@ OUI:500E6D*
OUI:5011EB*
ID_OUI_FROM_DATABASE=SilverNet Ltd
+OUI:5017FF*
+ ID_OUI_FROM_DATABASE=Cisco
+
+OUI:50206B*
+ ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions
+
OUI:502267*
ID_OUI_FROM_DATABASE=PixeLINK
@@ -55756,6 +56713,9 @@ OUI:50252B*
OUI:502690*
ID_OUI_FROM_DATABASE=Fujitsu Limited
+OUI:5027C7*
+ ID_OUI_FROM_DATABASE=TECHNART Co.,Ltd
+
OUI:502A7E*
ID_OUI_FROM_DATABASE=Smart electronic GmbH
@@ -55771,6 +56731,9 @@ OUI:502DA2*
OUI:502DF4*
ID_OUI_FROM_DATABASE=Phytec Messtechnik GmbH
+OUI:502E5C*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
OUI:502ECE*
ID_OUI_FROM_DATABASE=Asahi Electronics Co.,Ltd
@@ -55780,6 +56743,9 @@ OUI:503275*
OUI:503955*
ID_OUI_FROM_DATABASE=Cisco SPVTG
+OUI:503CC4*
+ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+
OUI:503DE5*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -55831,6 +56797,9 @@ OUI:5070E5*
OUI:50724D*
ID_OUI_FROM_DATABASE=BEG Brueck Electronic GmbH
+OUI:507691*
+ ID_OUI_FROM_DATABASE=Tekpea, Inc.
+
OUI:5076A6*
ID_OUI_FROM_DATABASE=Ecil Informatica Ind. Com. Ltda
@@ -55894,15 +56863,27 @@ OUI:50AF73*
OUI:50B7C3*
ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
+OUI:50B888*
+ ID_OUI_FROM_DATABASE=wi2be Tecnologia S/A
+
OUI:50B8A2*
ID_OUI_FROM_DATABASE=ImTech Technologies LLC,
+OUI:50C006*
+ ID_OUI_FROM_DATABASE=Carmanah Signs
+
+OUI:50C271*
+ ID_OUI_FROM_DATABASE=SECURETECH INC
+
OUI:50C58D*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:50C971*
ID_OUI_FROM_DATABASE=GN Netcom A/S
+OUI:50C9A0*
+ ID_OUI_FROM_DATABASE=SKIPPER Electronics AS
+
OUI:50CCF8*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
@@ -55918,15 +56899,21 @@ OUI:50D274*
OUI:50D6D7*
ID_OUI_FROM_DATABASE=Takahata Precision
+OUI:50E0C7*
+ ID_OUI_FROM_DATABASE=TurControlSystme AG
+
OUI:50E549*
ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
OUI:50EAD6*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:50EB1A*
ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+OUI:50ED78*
+ ID_OUI_FROM_DATABASE=Changzhou Yongse Infotech Co.,Ltd
+
OUI:50ED94*
ID_OUI_FROM_DATABASE=Egatel SL
@@ -55945,6 +56932,9 @@ OUI:50FAAB*
OUI:50FC30*
ID_OUI_FROM_DATABASE=Treehouse Labs
+OUI:50FC9F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:5403F5*
ID_OUI_FROM_DATABASE=EBN Technology Corp.
@@ -55954,6 +56944,9 @@ OUI:540496*
OUI:5404A6*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+OUI:540536*
+ ID_OUI_FROM_DATABASE=Vivago Oy
+
OUI:54055F*
ID_OUI_FROM_DATABASE=Alcatel Lucent
@@ -55963,6 +56956,9 @@ OUI:54112F*
OUI:54115F*
ID_OUI_FROM_DATABASE=Atamo Pty Ltd
+OUI:541B5D*
+ ID_OUI_FROM_DATABASE=Techno-Innov
+
OUI:541DFB*
ID_OUI_FROM_DATABASE=Freestyle Energy Ltd
@@ -55975,6 +56971,9 @@ OUI:542018*
OUI:542160*
ID_OUI_FROM_DATABASE=Resolution Products
+OUI:5422F8*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:542696*
ID_OUI_FROM_DATABASE=Apple
@@ -55984,6 +56983,9 @@ OUI:542A9C*
OUI:542CEA*
ID_OUI_FROM_DATABASE=PROTECTRON
+OUI:542F89*
+ ID_OUI_FROM_DATABASE=Euclid Laboratories, Inc.
+
OUI:543131*
ID_OUI_FROM_DATABASE=Raster Vision Ltd
@@ -55999,6 +57001,9 @@ OUI:543D37*
OUI:544249*
ID_OUI_FROM_DATABASE=Sony Corporation
+OUI:544408*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:54466B*
ID_OUI_FROM_DATABASE=Shenzhen CZTIC Electronic Technology Co., Ltd
@@ -56059,6 +57064,9 @@ OUI:548998*
OUI:5492BE*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:549359*
+ ID_OUI_FROM_DATABASE=SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+
OUI:549478*
ID_OUI_FROM_DATABASE=Silvershore Technology Partners
@@ -56077,6 +57085,9 @@ OUI:54A04F*
OUI:54A51B*
ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
+OUI:54A54B*
+ ID_OUI_FROM_DATABASE=NSC Communications Siberia Ltd
+
OUI:54A619*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
@@ -56086,6 +57097,9 @@ OUI:54A9D4*
OUI:54B620*
ID_OUI_FROM_DATABASE=SUHDOL E&C Co.Ltd.
+OUI:54BEF7*
+ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+
OUI:54CDA7*
ID_OUI_FROM_DATABASE=Fujian Shenzhou Electronic Co.,Ltd
@@ -56104,18 +57118,30 @@ OUI:54DF63*
OUI:54E032*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:54E3B0*
+ ID_OUI_FROM_DATABASE=JVL Industri Elektronik
+
+OUI:54E43A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:54E63F*
ID_OUI_FROM_DATABASE=ShenZhen LingKeWeiEr Technology Co., Ltd.
OUI:54E6FC*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+OUI:54EAA8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:54F5B6*
ID_OUI_FROM_DATABASE=ORIENTAL PACIFIC INTERNATIONAL LIMITED
OUI:54F666*
ID_OUI_FROM_DATABASE=Berthold Technologies GmbH and Co.KG
+OUI:54FB58*
+ ID_OUI_FROM_DATABASE=WISEWARE, Lda
+
OUI:54FDBF*
ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH
@@ -56144,7 +57170,7 @@ OUI:581D91*
ID_OUI_FROM_DATABASE=Advanced Mobile Telecom co.,ltd.
OUI:581FAA*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:581FEF*
ID_OUI_FROM_DATABASE=Tuttnaer LTD
@@ -56167,6 +57193,9 @@ OUI:583CC6*
OUI:5842E4*
ID_OUI_FROM_DATABASE=Sigma International General Medical Apparatus, LLC.
+OUI:58468F*
+ ID_OUI_FROM_DATABASE=Koncar Electronics and Informatics
+
OUI:5846E1*
ID_OUI_FROM_DATABASE=Baxter Healthcare
@@ -56189,14 +57218,17 @@ OUI:5850E6*
ID_OUI_FROM_DATABASE=Best Buy Corporation
OUI:5855CA*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:5856E8*
- ID_OUI_FROM_DATABASE=Motorola Mobility Inc
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:58570D*
ID_OUI_FROM_DATABASE=Danfoss Solar Inverters
+OUI:58639A*
+ ID_OUI_FROM_DATABASE=TPL SYSTEMES
+
OUI:5865E6*
ID_OUI_FROM_DATABASE=INFOMARK CO., LTD.
@@ -56269,15 +57301,21 @@ OUI:589835*
OUI:58986F*
ID_OUI_FROM_DATABASE=Revolution Display
+OUI:58A2B5*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
OUI:58A76F*
ID_OUI_FROM_DATABASE=iD corporation
OUI:58B035*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:58B0D4*
ID_OUI_FROM_DATABASE=ZuniData Systems Inc.
+OUI:58B961*
+ ID_OUI_FROM_DATABASE=SOLEM Electronique
+
OUI:58B9E1*
ID_OUI_FROM_DATABASE=Crystalfontz America, Inc.
@@ -56287,6 +57325,9 @@ OUI:58BC27*
OUI:58BDA3*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+OUI:58BDF9*
+ ID_OUI_FROM_DATABASE=Sigrand
+
OUI:58BFEA*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -56350,6 +57391,9 @@ OUI:58F98E*
OUI:58FD20*
ID_OUI_FROM_DATABASE=Bravida Sakerhet AB
+OUI:5C026A*
+ ID_OUI_FROM_DATABASE=Applied Vision Corporation
+
OUI:5C076F*
ID_OUI_FROM_DATABASE=Thought Creator
@@ -56362,6 +57406,9 @@ OUI:5C0CBB*
OUI:5C0E8B*
ID_OUI_FROM_DATABASE=Motorola
+OUI:5C1193*
+ ID_OUI_FROM_DATABASE=Seal One AG
+
OUI:5C1437*
ID_OUI_FROM_DATABASE=Thyssenkrupp Aufzugswerke GmbH
@@ -56392,6 +57439,9 @@ OUI:5C2479*
OUI:5C260A*
ID_OUI_FROM_DATABASE=Dell Inc.
+OUI:5C3327*
+ ID_OUI_FROM_DATABASE=Spazio Italia srl
+
OUI:5C335C*
ID_OUI_FROM_DATABASE=Swissphone Telecom AG
@@ -56404,6 +57454,9 @@ OUI:5C353B*
OUI:5C35DA*
ID_OUI_FROM_DATABASE=There Corporation Oy
+OUI:5C36B8*
+ ID_OUI_FROM_DATABASE=TCL King Electrical Appliances (Huizhou) Ltd.
+
OUI:5C38E0*
ID_OUI_FROM_DATABASE=Shanghai Super Electronics Technology Co.,LTD
@@ -56438,7 +57491,7 @@ OUI:5C57C8*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:5C5948*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:5C5EAB*
ID_OUI_FROM_DATABASE=Juniper Networks
@@ -56480,7 +57533,7 @@ OUI:5C89D4*
ID_OUI_FROM_DATABASE=Beijing Banner Electric Co.,Ltd
OUI:5C95AE*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:5C969D*
ID_OUI_FROM_DATABASE=Apple
@@ -56530,12 +57583,18 @@ OUI:5CD41B*
OUI:5CD4AB*
ID_OUI_FROM_DATABASE=Zektor
+OUI:5CD61F*
+ ID_OUI_FROM_DATABASE=Qardio, Inc
+
OUI:5CD998*
ID_OUI_FROM_DATABASE=D-Link Corporation
OUI:5CDAD4*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+OUI:5CDD70*
+ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+
OUI:5CE0CA*
ID_OUI_FROM_DATABASE=FeiTian United (Beijing) System Technology Co., Ltd.
@@ -56575,15 +57634,24 @@ OUI:5CF6DC*
OUI:5CF8A1*
ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+OUI:5CF938*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
OUI:5CF9DD*
ID_OUI_FROM_DATABASE=Dell Inc
OUI:5CFF35*
ID_OUI_FROM_DATABASE=Wistron Corporation
+OUI:5CFFFF*
+ ID_OUI_FROM_DATABASE=Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd
+
OUI:6002B4*
ID_OUI_FROM_DATABASE=Wistron NeWeb Corp.
+OUI:600347*
+ ID_OUI_FROM_DATABASE=Billion Electric Co. Ltd.
+
OUI:600F77*
ID_OUI_FROM_DATABASE=SilverPlus, Inc
@@ -56611,6 +57679,9 @@ OUI:601E02*
OUI:6021C0*
ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+OUI:6024C1*
+ ID_OUI_FROM_DATABASE=Jiangsu Zhongxun Electronic Technology Co., Ltd
+
OUI:602A54*
ID_OUI_FROM_DATABASE=CardioTek B.V.
@@ -56621,7 +57692,7 @@ OUI:6032F0*
ID_OUI_FROM_DATABASE=Mplus technology
OUI:60334B*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:603553*
ID_OUI_FROM_DATABASE=Buwon Technology
@@ -56659,15 +57730,24 @@ OUI:6052D0*
OUI:605464*
ID_OUI_FROM_DATABASE=Eyedro Green Solutions Inc.
+OUI:605718*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:60601F*
ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD
OUI:6063FD*
ID_OUI_FROM_DATABASE=Transcend Communication Beijing Co.,Ltd.
+OUI:6064A1*
+ ID_OUI_FROM_DATABASE=RADiflow Ltd.
+
OUI:606720*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:606944*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
OUI:60699B*
ID_OUI_FROM_DATABASE=isepos GmbH
@@ -56728,6 +57808,9 @@ OUI:60A10A*
OUI:60A44C*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+OUI:60A9B0*
+ ID_OUI_FROM_DATABASE=Merchandising Technologies, Inc
+
OUI:60B185*
ID_OUI_FROM_DATABASE=ATH system
@@ -56752,11 +57835,14 @@ OUI:60BC4C*
OUI:60BD91*
ID_OUI_FROM_DATABASE=Move Innovation
+OUI:60BEB5*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
+
OUI:60C397*
- ID_OUI_FROM_DATABASE=2 Wire Inc
+ ID_OUI_FROM_DATABASE=2Wire Inc
OUI:60C547*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:60C5A8*
ID_OUI_FROM_DATABASE=Beijing LT Honway Technology Co.,Ltd
@@ -56788,6 +57874,9 @@ OUI:60D819*
OUI:60DA23*
ID_OUI_FROM_DATABASE=Estech Co.,Ltd
+OUI:60DB2A*
+ ID_OUI_FROM_DATABASE=HNS
+
OUI:60DE44*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -56822,10 +57911,10 @@ OUI:60F673*
ID_OUI_FROM_DATABASE=TERUMO CORPORATION
OUI:60FACD*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:60FB42*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:60FE1E*
ID_OUI_FROM_DATABASE=China Palms Telecom.Ltd
@@ -56833,12 +57922,21 @@ OUI:60FE1E*
OUI:60FEC5*
ID_OUI_FROM_DATABASE=Apple
+OUI:60FEF9*
+ ID_OUI_FROM_DATABASE=Thomas & Betts
+
OUI:6400F1*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:6405BE*
+ ID_OUI_FROM_DATABASE=NEW LIGHT LED
+
OUI:64094C*
ID_OUI_FROM_DATABASE=Beijing Superbee Wireless Technology Co.,Ltd
+OUI:640B4A*
+ ID_OUI_FROM_DATABASE=Digital Telecom Technology Limited
+
OUI:640E36*
ID_OUI_FROM_DATABASE=TAZTAG
@@ -56867,7 +57965,10 @@ OUI:641E81*
ID_OUI_FROM_DATABASE=Dowslake Microsystems
OUI:64200C*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:642184*
+ ID_OUI_FROM_DATABASE=Nippon Denki Kagaku Co.,LTD
OUI:642216*
ID_OUI_FROM_DATABASE=Shandong Taixin Electronic co.,Ltd
@@ -56890,6 +57991,12 @@ OUI:64317E*
OUI:643409*
ID_OUI_FROM_DATABASE=BITwave Pte Ltd
+OUI:643F5F*
+ ID_OUI_FROM_DATABASE=Exablaze
+
+OUI:644214*
+ ID_OUI_FROM_DATABASE=Swisscom Energy Solutions AG
+
OUI:644346*
ID_OUI_FROM_DATABASE=GuangDong Quick Network Computer CO.,LTD
@@ -56909,7 +58016,7 @@ OUI:64517E*
ID_OUI_FROM_DATABASE=LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
OUI:645299*
- ID_OUI_FROM_DATABASE=Chamberlain
+ ID_OUI_FROM_DATABASE=The Chamberlain Group, Inc
OUI:64535D*
ID_OUI_FROM_DATABASE=Frauscher Sensortechnik
@@ -56923,6 +58030,9 @@ OUI:645563*
OUI:64557F*
ID_OUI_FROM_DATABASE=NSFOCUS Information Technology Co., Ltd.
+OUI:645601*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+
OUI:645A04*
ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd.
@@ -56956,6 +58066,9 @@ OUI:6469BC*
OUI:646E6C*
ID_OUI_FROM_DATABASE=Radio Datacom LLC
+OUI:646EEA*
+ ID_OUI_FROM_DATABASE=Iskratel d.o.o.
+
OUI:647002*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
@@ -57056,7 +58169,10 @@ OUI:64B64A*
ID_OUI_FROM_DATABASE=ViVOtech, Inc.
OUI:64B9E8*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:64BABD*
+ ID_OUI_FROM_DATABASE=SDJ Technologies, Inc.
OUI:64BC11*
ID_OUI_FROM_DATABASE=CombiQ AB
@@ -57082,6 +58198,9 @@ OUI:64D1A3*
OUI:64D241*
ID_OUI_FROM_DATABASE=Keith & Koep GmbH
+OUI:64D4BD*
+ ID_OUI_FROM_DATABASE=ALPS ELECTRIC CO.,LTD.
+
OUI:64D4DA*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -57110,7 +58229,7 @@ OUI:64E599*
ID_OUI_FROM_DATABASE=EFM Networks
OUI:64E682*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:64E84F*
ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd
@@ -57118,8 +58237,11 @@ OUI:64E84F*
OUI:64E8E6*
ID_OUI_FROM_DATABASE=global moisture management system
+OUI:64E950*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:64ED57*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:64ED62*
ID_OUI_FROM_DATABASE=WOORI SYSTEMS Co., Ltd
@@ -57143,7 +58265,10 @@ OUI:6805CA*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:680927*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:680AD7*
+ ID_OUI_FROM_DATABASE=Yancheng Kecheng Optoelectronic Technology Co., Ltd
OUI:68122D*
ID_OUI_FROM_DATABASE=Special Instrument Development Co., Ltd.
@@ -57160,12 +58285,18 @@ OUI:681605*
OUI:681729*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:68193F*
+ ID_OUI_FROM_DATABASE=Digital Airways
+
OUI:681AB2*
ID_OUI_FROM_DATABASE=zte corporation
OUI:681CA2*
ID_OUI_FROM_DATABASE=Rosewill Inc.
+OUI:681D64*
+ ID_OUI_FROM_DATABASE=Sunwave Communications Co., Ltd
+
OUI:681E8B*
ID_OUI_FROM_DATABASE=InfoSight Corporation
@@ -57175,6 +58306,9 @@ OUI:681FD8*
OUI:68234B*
ID_OUI_FROM_DATABASE=Nihon Dengyo Kousaku
+OUI:682DDC*
+ ID_OUI_FROM_DATABASE=Wuhan Changjiang Electro-Communication Equipment CO.,LTD
+
OUI:683B1E*
ID_OUI_FROM_DATABASE=Countwise LTD
@@ -57203,7 +58337,7 @@ OUI:68597F*
ID_OUI_FROM_DATABASE=Alcatel Lucent
OUI:685B35*
- ID_OUI_FROM_DATABASE=Apple inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:685B36*
ID_OUI_FROM_DATABASE=POWERTECH INDUSTRIAL CO., LTD.
@@ -57217,6 +58351,9 @@ OUI:685E6B*
OUI:686359*
ID_OUI_FROM_DATABASE=Advanced Digital Broadcast SA
+OUI:68692E*
+ ID_OUI_FROM_DATABASE=Zycoo Co.,Ltd
+
OUI:6869F2*
ID_OUI_FROM_DATABASE=ComAp s.r.o.
@@ -57226,6 +58363,9 @@ OUI:686E23*
OUI:687251*
ID_OUI_FROM_DATABASE=Ubiquiti Networks
+OUI:68764F*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
OUI:68784C*
ID_OUI_FROM_DATABASE=Nortel Networks
@@ -57259,6 +58399,9 @@ OUI:6886E7*
OUI:68876B*
ID_OUI_FROM_DATABASE=INQ Mobile Limited
+OUI:688AB5*
+ ID_OUI_FROM_DATABASE=EDP Servicos
+
OUI:689234*
ID_OUI_FROM_DATABASE=Ruckus Wireless
@@ -57266,7 +58409,7 @@ OUI:689423*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:68967B*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:68974B*
ID_OUI_FROM_DATABASE=Shenzhen Costar Electronics Co. Ltd.
@@ -57290,7 +58433,7 @@ OUI:68A40E*
ID_OUI_FROM_DATABASE=BSH Bosch and Siemens Home Appliances GmbH
OUI:68A86D*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:68AAD2*
ID_OUI_FROM_DATABASE=DATECS LTD.,
@@ -57379,6 +58522,9 @@ OUI:68F895*
OUI:68FB95*
ID_OUI_FROM_DATABASE=Generalplus Technology Inc.
+OUI:68FCB3*
+ ID_OUI_FROM_DATABASE=Next Level Security Systems, Inc.
+
OUI:6C0460*
ID_OUI_FROM_DATABASE=RBH Access Technologies Inc.
@@ -57388,6 +58534,9 @@ OUI:6C0E0D*
OUI:6C0F6A*
ID_OUI_FROM_DATABASE=JDC Tech Co., Ltd.
+OUI:6C15F9*
+ ID_OUI_FROM_DATABASE=Nautronix Limited
+
OUI:6C1811*
ID_OUI_FROM_DATABASE=Decatur Electronics
@@ -57425,7 +58574,7 @@ OUI:6C3BE5*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:6C3E6D*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:6C3E9C*
ID_OUI_FROM_DATABASE=KE Knestel Elektronik GmbH
@@ -57436,6 +58585,9 @@ OUI:6C40C6*
OUI:6C416A*
ID_OUI_FROM_DATABASE=Cisco
+OUI:6C4B7F*
+ ID_OUI_FROM_DATABASE=Vossloh-Schwabe Deutschland GmbH
+
OUI:6C504D*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -57445,6 +58597,9 @@ OUI:6C5779*
OUI:6C5A34*
ID_OUI_FROM_DATABASE=Shenzhen Haitianxiong Electronic Co., Ltd.
+OUI:6C5AB5*
+ ID_OUI_FROM_DATABASE=TCL Technoly Electronics (Huizhou) Co., Ltd.
+
OUI:6C5CDE*
ID_OUI_FROM_DATABASE=SunReports, Inc.
@@ -57475,6 +58630,9 @@ OUI:6C81FE*
OUI:6C8336*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:6C8366*
+ ID_OUI_FROM_DATABASE=Nanjing SAC Power Grid Automation Co., Ltd.
+
OUI:6C8686*
ID_OUI_FROM_DATABASE=Technonia
@@ -57490,9 +58648,15 @@ OUI:6C8CDB*
OUI:6C8D65*
ID_OUI_FROM_DATABASE=Wireless Glue Networks, Inc.
+OUI:6C90B1*
+ ID_OUI_FROM_DATABASE=SanLogic Inc
+
OUI:6C92BF*
ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd.
+OUI:6C98EB*
+ ID_OUI_FROM_DATABASE=Xyne GmbH
+
OUI:6C9AC9*
ID_OUI_FROM_DATABASE=Valentine Research, Inc.
@@ -57529,12 +58693,18 @@ OUI:6CAD3F*
OUI:6CADEF*
ID_OUI_FROM_DATABASE=KZ Broadband Technologies, Ltd.
+OUI:6CADF8*
+ ID_OUI_FROM_DATABASE=Azurewave Technologies, Inc.
+
OUI:6CAE8B*
ID_OUI_FROM_DATABASE=IBM Corporation
OUI:6CB311*
ID_OUI_FROM_DATABASE=Shenzhen Lianrui Electronics Co.,Ltd
+OUI:6CB350*
+ ID_OUI_FROM_DATABASE=Anhui comhigher tech co.,ltd
+
OUI:6CB7F4*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -57542,10 +58712,10 @@ OUI:6CBEE9*
ID_OUI_FROM_DATABASE=Alcatel-Lucent-IPD
OUI:6CC1D2*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:6CC26B*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:6CD032*
ID_OUI_FROM_DATABASE=LG Electronics
@@ -57553,6 +58723,9 @@ OUI:6CD032*
OUI:6CD146*
ID_OUI_FROM_DATABASE=Smartek d.o.o.
+OUI:6CD1B0*
+ ID_OUI_FROM_DATABASE=WING SING ELECTRONICS HONG KONG LIMITED
+
OUI:6CD68A*
ID_OUI_FROM_DATABASE=LG Electronics Inc
@@ -57586,6 +58759,9 @@ OUI:6CF373*
OUI:6CF37F*
ID_OUI_FROM_DATABASE=Aruba Networks
+OUI:6CF97C*
+ ID_OUI_FROM_DATABASE=Nanoptix Inc.
+
OUI:6CFA58*
ID_OUI_FROM_DATABASE=Avaya, Inc
@@ -57616,12 +58792,18 @@ OUI:701124*
OUI:701404*
ID_OUI_FROM_DATABASE=Limited Liability Company
+OUI:70188B*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
OUI:701A04*
ID_OUI_FROM_DATABASE=Liteon Tech Corp.
OUI:701AED*
ID_OUI_FROM_DATABASE=ADVAS CO., LTD.
+OUI:701D7F*
+ ID_OUI_FROM_DATABASE=Comtech Technology Co., Ltd.
+
OUI:702393*
ID_OUI_FROM_DATABASE=fos4X GmbH
@@ -57643,6 +58825,9 @@ OUI:702F97*
OUI:703018*
ID_OUI_FROM_DATABASE=Avaya, Inc
+OUI:70305E*
+ ID_OUI_FROM_DATABASE=Nanjing Zhongke Menglian Information Technology Co.,LTD
+
OUI:703187*
ID_OUI_FROM_DATABASE=ACX GmbH
@@ -57676,9 +58861,15 @@ OUI:704AAE*
OUI:704AE4*
ID_OUI_FROM_DATABASE=Rinstrum Pty Ltd
+OUI:704CED*
+ ID_OUI_FROM_DATABASE=TMRG, Inc.
+
OUI:7052C5*
ID_OUI_FROM_DATABASE=Avaya, Inc.
+OUI:70533F*
+ ID_OUI_FROM_DATABASE=Alfa Instrumentos Eletronicos Ltda.
+
OUI:7054D2*
ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
@@ -57686,11 +58877,17 @@ OUI:7054F5*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:705681*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:705812*
ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
+OUI:705957*
+ ID_OUI_FROM_DATABASE=Medallion Instrumentation Systems
+
+OUI:705986*
+ ID_OUI_FROM_DATABASE=OOO TTV
+
OUI:705AB6*
ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
@@ -57700,6 +58897,12 @@ OUI:705CAD*
OUI:705EAA*
ID_OUI_FROM_DATABASE=Action Target, Inc.
+OUI:7060DE*
+ ID_OUI_FROM_DATABASE=LaVision GmbH
+
+OUI:706173*
+ ID_OUI_FROM_DATABASE=Calantec GmbH
+
OUI:706417*
ID_OUI_FROM_DATABASE=ORBIS TECNOLOGIA ELECTRICA S.A.
@@ -57719,7 +58922,10 @@ OUI:7072CF*
ID_OUI_FROM_DATABASE=EdgeCore Networks
OUI:7073CB*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:707630*
+ ID_OUI_FROM_DATABASE=Pace plc.
OUI:7076DD*
ID_OUI_FROM_DATABASE=Oxyguard International A/S
@@ -57731,7 +58937,7 @@ OUI:707BE8*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:707E43*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:707EDE*
ID_OUI_FROM_DATABASE=NASTEC LTD.
@@ -57745,9 +58951,15 @@ OUI:70820E*
OUI:70828E*
ID_OUI_FROM_DATABASE=OleumTech Corporation
+OUI:7085C6*
+ ID_OUI_FROM_DATABASE=Pace plc.
+
OUI:708B78*
ID_OUI_FROM_DATABASE=citygrow technology co., ltd
+OUI:708D09*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:7093F8*
ID_OUI_FROM_DATABASE=Space Monkey, Inc.
@@ -57760,6 +58972,12 @@ OUI:709A0B*
OUI:709BA5*
ID_OUI_FROM_DATABASE=Shenzhen Y&D Electronics Co.,LTD.
+OUI:709BFC*
+ ID_OUI_FROM_DATABASE=Bryton Inc.
+
+OUI:709E29*
+ ID_OUI_FROM_DATABASE=Sony Computer Entertainment Inc.
+
OUI:709E86*
ID_OUI_FROM_DATABASE=X6D Limited
@@ -57772,6 +58990,9 @@ OUI:70A41C*
OUI:70A66A*
ID_OUI_FROM_DATABASE=Prox Dynamics AS
+OUI:70A8E3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:70AAB2*
ID_OUI_FROM_DATABASE=Research In Motion
@@ -57800,7 +59021,7 @@ OUI:70CA9B*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:70CD60*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:70D4F2*
ID_OUI_FROM_DATABASE=RIM
@@ -57821,7 +59042,7 @@ OUI:70DDA1*
ID_OUI_FROM_DATABASE=Tellabs
OUI:70DEE2*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:70E027*
ID_OUI_FROM_DATABASE=HONGYU COMMUNICATION TECHNOLOGY LIMITED
@@ -57832,12 +59053,18 @@ OUI:70E139*
OUI:70E24C*
ID_OUI_FROM_DATABASE=SAE IT-systems GmbH & Co. KG
+OUI:70E284*
+ ID_OUI_FROM_DATABASE=Wistron InfoComm(Zhongshan) Corporation
+
OUI:70E843*
ID_OUI_FROM_DATABASE=Beijing C&W Optical Communication Technology Co.,Ltd.
OUI:70EE50*
ID_OUI_FROM_DATABASE=Netatmo
+OUI:70F176*
+ ID_OUI_FROM_DATABASE=Data Modul AG
+
OUI:70F1A1*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -57850,9 +59077,15 @@ OUI:70F395*
OUI:70F927*
ID_OUI_FROM_DATABASE=Samsung Electronics
+OUI:70FF76*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:740ABC*
ID_OUI_FROM_DATABASE=JSJS Designs (Europe) Limited
+OUI:740EDB*
+ ID_OUI_FROM_DATABASE=Optowiz Co., Ltd
+
OUI:741489*
ID_OUI_FROM_DATABASE=SRT Wireless
@@ -57874,6 +59107,9 @@ OUI:7427EA*
OUI:742B0F*
ID_OUI_FROM_DATABASE=Infinidat Ltd.
+OUI:742B62*
+ ID_OUI_FROM_DATABASE=Fujitsu Limited
+
OUI:742D0A*
ID_OUI_FROM_DATABASE=Norfolk Elektronik AG
@@ -57911,7 +59147,7 @@ OUI:745327*
ID_OUI_FROM_DATABASE=COMMSEN CO., LIMITED
OUI:745612*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:745798*
ID_OUI_FROM_DATABASE=TRUMPF Laser GmbH + Co. KG
@@ -57931,6 +59167,9 @@ OUI:7463DF*
OUI:7465D1*
ID_OUI_FROM_DATABASE=Atlinks
+OUI:746630*
+ ID_OUI_FROM_DATABASE=T:mi Ytti
+
OUI:746A89*
ID_OUI_FROM_DATABASE=Rezolt Corporation
@@ -57988,6 +59227,9 @@ OUI:749DDC*
OUI:74A4A7*
ID_OUI_FROM_DATABASE=QRS Music Technologies, Inc.
+OUI:74A4B5*
+ ID_OUI_FROM_DATABASE=Powerleader Science and Technology Co. Ltd.
+
OUI:74A722*
ID_OUI_FROM_DATABASE=LG Electronics
@@ -58027,6 +59269,9 @@ OUI:74D02B*
OUI:74D0DC*
ID_OUI_FROM_DATABASE=ERICSSON AB
+OUI:74D435*
+ ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+
OUI:74D675*
ID_OUI_FROM_DATABASE=WYMA Tecnologia
@@ -58040,10 +59285,10 @@ OUI:74E06E*
ID_OUI_FROM_DATABASE=Ergophone GmbH
OUI:74E1B6*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:74E2F5*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:74E424*
ID_OUI_FROM_DATABASE=APISTE CORPORATION
@@ -58058,7 +59303,7 @@ OUI:74E543*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
OUI:74E7C6*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:74EA3A*
ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd.
@@ -58076,7 +59321,7 @@ OUI:74F102*
ID_OUI_FROM_DATABASE=Beijing HCHCOM Technology Co., Ltd
OUI:74F612*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:74F726*
ID_OUI_FROM_DATABASE=Neuron Robotics
@@ -58150,6 +59395,9 @@ OUI:78324F*
OUI:783CE3*
ID_OUI_FROM_DATABASE=Kai-EE
+OUI:783D5B*
+ ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A.
+
OUI:783F15*
ID_OUI_FROM_DATABASE=EasySYNC Ltd.
@@ -58168,6 +59416,9 @@ OUI:7846C4*
OUI:78471D*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:78491D*
+ ID_OUI_FROM_DATABASE=The Will-Burt Company
+
OUI:784B08*
ID_OUI_FROM_DATABASE=f.robotics acquisitions ltd
@@ -58195,6 +59446,9 @@ OUI:78593E*
OUI:78595E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:785968*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.,Ltd.
+
OUI:785C72*
ID_OUI_FROM_DATABASE=Hioso Technology Co., Ltd.
@@ -58246,6 +59500,9 @@ OUI:78998F*
OUI:789ED0*
ID_OUI_FROM_DATABASE=Samsung Electronics
+OUI:789F4C*
+ ID_OUI_FROM_DATABASE=HOERBIGER Elektronik GmbH
+
OUI:789F87*
ID_OUI_FROM_DATABASE=Siemens AG I IA PP PRM
@@ -58262,7 +59519,7 @@ OUI:78A2A0*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
OUI:78A3E4*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:78A5DD*
ID_OUI_FROM_DATABASE=Shenzhen Smarteye Digital Electronics Co., Ltd
@@ -58285,9 +59542,15 @@ OUI:78ABBB*
OUI:78ACC0*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+OUI:78AE0C*
+ ID_OUI_FROM_DATABASE=Far South Networks
+
OUI:78B3CE*
ID_OUI_FROM_DATABASE=Elo touch solutions
+OUI:78B5D2*
+ ID_OUI_FROM_DATABASE=Ever Treasure Industrial Limited
+
OUI:78B6C1*
ID_OUI_FROM_DATABASE=AOBO Telecom Co.,Ltd
@@ -58319,7 +59582,13 @@ OUI:78CA04*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:78CA39*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:78CA5E*
+ ID_OUI_FROM_DATABASE=ELNO
+
+OUI:78CB33*
+ ID_OUI_FROM_DATABASE=DHC Software Co.,Ltd
OUI:78CD8E*
ID_OUI_FROM_DATABASE=SMC Networks Inc
@@ -58342,6 +59611,12 @@ OUI:78D5B5*
OUI:78D6F0*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
+OUI:78D99F*
+ ID_OUI_FROM_DATABASE=NuCom HK Ltd.
+
+OUI:78DA6E*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:78DAB3*
ID_OUI_FROM_DATABASE=GBO Technology
@@ -58363,6 +59638,9 @@ OUI:78E400*
OUI:78E7D1*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+OUI:78E8B6*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:78EC22*
ID_OUI_FROM_DATABASE=Shanghai Qihui Telecom Technology Co., LTD
@@ -58384,6 +59662,9 @@ OUI:78F7D0*
OUI:78FE3D*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:78FE41*
+ ID_OUI_FROM_DATABASE=Socus networks
+
OUI:78FF57*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -58405,8 +59686,11 @@ OUI:7C0507*
OUI:7C051E*
ID_OUI_FROM_DATABASE=RAFAEL LTD.
+OUI:7C0623*
+ ID_OUI_FROM_DATABASE=Ultra Electronics, CIS
+
OUI:7C08D9*
- ID_OUI_FROM_DATABASE=Shanghai Engineering Research Center for Broadband Technologies and Applications
+ ID_OUI_FROM_DATABASE=Shanghai B-Star Technology Co
OUI:7C092B*
ID_OUI_FROM_DATABASE=Bekey A/S
@@ -58415,7 +59699,7 @@ OUI:7C0A50*
ID_OUI_FROM_DATABASE=J-MEX Inc.
OUI:7C11BE*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:7C1476*
ID_OUI_FROM_DATABASE=Damall Technologies SAS
@@ -58423,12 +59707,18 @@ OUI:7C1476*
OUI:7C160D*
ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG
+OUI:7C1AFC*
+ ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd
+
OUI:7C1E52*
ID_OUI_FROM_DATABASE=Microsoft
OUI:7C1EB3*
ID_OUI_FROM_DATABASE=2N TELEKOMUNIKACE a.s.
+OUI:7C2048*
+ ID_OUI_FROM_DATABASE=KoamTac
+
OUI:7C2064*
ID_OUI_FROM_DATABASE=Alcatel Lucent IPD
@@ -58459,6 +59749,9 @@ OUI:7C3E9D*
OUI:7C438F*
ID_OUI_FROM_DATABASE=E-Band Communications Corp.
+OUI:7C49B9*
+ ID_OUI_FROM_DATABASE=Plexus Manufacturing Sdn Bhd
+
OUI:7C4A82*
ID_OUI_FROM_DATABASE=Portsmith LLC
@@ -58486,6 +59779,15 @@ OUI:7C6097*
OUI:7C6193*
ID_OUI_FROM_DATABASE=HTC Corporation
+OUI:7C669D*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+OUI:7C69F6*
+ ID_OUI_FROM_DATABASE=Cisco
+
+OUI:7C6AB3*
+ ID_OUI_FROM_DATABASE=IBC TECHNOLOGIES INC.
+
OUI:7C6ADB*
ID_OUI_FROM_DATABASE=SafeTone Technology Co.,Ltd
@@ -58502,11 +59804,17 @@ OUI:7C6C8F*
ID_OUI_FROM_DATABASE=AMS NEVE LTD
OUI:7C6D62*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:7C6F06*
ID_OUI_FROM_DATABASE=Caterpillar Trimble Control Technologies
+OUI:7C6FF8*
+ ID_OUI_FROM_DATABASE=ShenZhen ACTO Digital Video Technology Co.,Ltd.
+
+OUI:7C72E4*
+ ID_OUI_FROM_DATABASE=Unikey Technologies
+
OUI:7C7673*
ID_OUI_FROM_DATABASE=ENMAS GmbH
@@ -58522,12 +59830,21 @@ OUI:7C7D41*
OUI:7C822D*
ID_OUI_FROM_DATABASE=Nortec
+OUI:7C8306*
+ ID_OUI_FROM_DATABASE=Glen Dimplex Nordic as
+
OUI:7C8EE4*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:7C94B2*
ID_OUI_FROM_DATABASE=Philips Healthcare PCCI
+OUI:7C95F3*
+ ID_OUI_FROM_DATABASE=Cisco
+
+OUI:7C9763*
+ ID_OUI_FROM_DATABASE=Openmatics s.r.o.
+
OUI:7C9A9B*
ID_OUI_FROM_DATABASE=VSE valencia smart energy
@@ -58558,17 +59875,29 @@ OUI:7CB232*
OUI:7CB542*
ID_OUI_FROM_DATABASE=ACES Technology
+OUI:7CB733*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+
+OUI:7CB77B*
+ ID_OUI_FROM_DATABASE=Paradigm Electronics Inc
+
OUI:7CBB6F*
ID_OUI_FROM_DATABASE=Cosco Electronics Co., Ltd.
+OUI:7CBD06*
+ ID_OUI_FROM_DATABASE=AE REFUsol
+
+OUI:7CBF88*
+ ID_OUI_FROM_DATABASE=Mobilicom LTD
+
OUI:7CBFB1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:7CC3A1*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:7CC537*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:7CC8AB*
ID_OUI_FROM_DATABASE=Acro Associates, Inc.
@@ -58582,11 +59911,14 @@ OUI:7CC8D7*
OUI:7CCB0D*
ID_OUI_FROM_DATABASE=Antaira Technologies, LLC
+OUI:7CCD3C*
+ ID_OUI_FROM_DATABASE=Guangzhou Juzing Technology Co., Ltd
+
OUI:7CCFCF*
ID_OUI_FROM_DATABASE=Shanghai SEARI Intelligent System Co., Ltd
OUI:7CD1C3*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:7CD762*
ID_OUI_FROM_DATABASE=Freestyle Technology Pty Ltd
@@ -58612,6 +59944,9 @@ OUI:7CDD90*
OUI:7CE044*
ID_OUI_FROM_DATABASE=NEON Inc
+OUI:7CE56B*
+ ID_OUI_FROM_DATABASE=ESEN Optoelectronics Technology Co.,Ltd.
+
OUI:7CE9D3*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -58628,7 +59963,7 @@ OUI:7CEF8A*
ID_OUI_FROM_DATABASE=Inhon International Ltd.
OUI:7CF05F*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:7CF098*
ID_OUI_FROM_DATABASE=Bee Beans Technologies, Inc.
@@ -58651,6 +59986,9 @@ OUI:80000B*
OUI:800010*
ID_OUI_FROM_DATABASE=ATT BELL LABORATORIES
+OUI:8005DF*
+ ID_OUI_FROM_DATABASE=Montage Technology Group Limited
+
OUI:8007A2*
ID_OUI_FROM_DATABASE=Esson Technology Inc.
@@ -58717,8 +60055,11 @@ OUI:80427C*
OUI:804731*
ID_OUI_FROM_DATABASE=Packet Design, Inc.
+OUI:8048A5*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOM CO.,LTD
+
OUI:804971*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:804B20*
ID_OUI_FROM_DATABASE=Ventilation Control
@@ -58729,6 +60070,12 @@ OUI:804F58*
OUI:80501B*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:8056F2*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:805719*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:8058C5*
ID_OUI_FROM_DATABASE=NovaTec Kommunikationstechnik GmbH
@@ -58756,6 +60103,9 @@ OUI:80711F*
OUI:807693*
ID_OUI_FROM_DATABASE=Newag SA
+OUI:8079AE*
+ ID_OUI_FROM_DATABASE=ShanDong Tecsunrise Co.,Ltd
+
OUI:807A7F*
ID_OUI_FROM_DATABASE=ABB Genway Xiamen Electrical Equipment CO., LTD
@@ -58799,7 +60149,7 @@ OUI:80946C*
ID_OUI_FROM_DATABASE=TOKYO RADAR CORPORATION
OUI:8096B1*
- ID_OUI_FROM_DATABASE=Motorola Mobility, LLC.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:80971B*
ID_OUI_FROM_DATABASE=Altenergy Power System,Inc.
@@ -58813,6 +60163,9 @@ OUI:80A1D7*
OUI:80AAA4*
ID_OUI_FROM_DATABASE=USAG
+OUI:80B219*
+ ID_OUI_FROM_DATABASE=ELEKTRON TECHNOLOGY UK LIMITED
+
OUI:80B289*
ID_OUI_FROM_DATABASE=Forworld Electronics Ltd.
@@ -58867,6 +60220,9 @@ OUI:80DB31*
OUI:80EE73*
ID_OUI_FROM_DATABASE=Shuttle Inc.
+OUI:80F25E*
+ ID_OUI_FROM_DATABASE=Kyynel
+
OUI:80F593*
ID_OUI_FROM_DATABASE=IRCO Sistemas de Telecomunicación S.A.
@@ -58888,12 +60244,18 @@ OUI:8400D2*
OUI:840B2D*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD
+OUI:840F45*
+ ID_OUI_FROM_DATABASE=Shanghai GMT Digital Technologies Co., Ltd
+
OUI:841715*
ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd.
OUI:841888*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:841B38*
+ ID_OUI_FROM_DATABASE=Shenzhen Excelsecu Data Technology Co.,Ltd
+
OUI:841B5E*
ID_OUI_FROM_DATABASE=NETGEAR
@@ -58906,9 +60268,15 @@ OUI:842141*
OUI:84248D*
ID_OUI_FROM_DATABASE=Motorola Solutions Inc
+OUI:84253F*
+ ID_OUI_FROM_DATABASE=Silex Technology, Inc
+
OUI:8425DB*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:84262B*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent
+
OUI:8427CE*
ID_OUI_FROM_DATABASE=Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints
@@ -58916,7 +60284,7 @@ OUI:842914*
ID_OUI_FROM_DATABASE=EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG
OUI:842999*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:842B2B*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -58957,12 +60325,21 @@ OUI:844915*
OUI:844BF5*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:844F03*
+ ID_OUI_FROM_DATABASE=Ablelink Electronics Ltd
+
OUI:845181*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:84569C*
+ ID_OUI_FROM_DATABASE=Coho Data, Inc.,
+
OUI:845787*
ID_OUI_FROM_DATABASE=DVR C&C Co., Ltd.
+OUI:845C93*
+ ID_OUI_FROM_DATABASE=Chabrier Services
+
OUI:845DD7*
ID_OUI_FROM_DATABASE=Shenzhen Netcom Electronics Co.,Ltd
@@ -58981,6 +60358,9 @@ OUI:846EB1*
OUI:84742A*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:847616*
+ ID_OUI_FROM_DATABASE=Addat S.r.o.
+
OUI:8478AC*
ID_OUI_FROM_DATABASE=Cisco
@@ -58997,7 +60377,7 @@ OUI:848371*
ID_OUI_FROM_DATABASE=Avaya, Inc
OUI:848506*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:848D84*
ID_OUI_FROM_DATABASE=Rajant Corporation
@@ -59023,6 +60403,9 @@ OUI:849DC5*
OUI:84A6C8*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:84A783*
+ ID_OUI_FROM_DATABASE=Alcatel Lucent
+
OUI:84A8E4*
ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
@@ -59101,6 +60484,9 @@ OUI:880905*
OUI:881036*
ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted
+OUI:88124E*
+ ID_OUI_FROM_DATABASE=Qualcomm Atheros
+
OUI:88142B*
ID_OUI_FROM_DATABASE=Protonic Holland
@@ -59140,12 +60526,24 @@ OUI:88329B*
OUI:883314*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:88354C*
+ ID_OUI_FROM_DATABASE=Transics
+
+OUI:883612*
+ ID_OUI_FROM_DATABASE=SRC Computers, LLC
+
OUI:8841C1*
ID_OUI_FROM_DATABASE=ORBISAT DA AMAZONIA IND E AEROL SA
+OUI:8841FC*
+ ID_OUI_FROM_DATABASE=AirTies Wireless Netowrks
+
OUI:8843E1*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:8844F6*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:88462A*
ID_OUI_FROM_DATABASE=Telechips Inc.
@@ -59164,6 +60562,12 @@ OUI:885395*
OUI:8853D4*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+OUI:88576D*
+ ID_OUI_FROM_DATABASE=XTA Electronics Ltd
+
+OUI:885A92*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:885C4F*
ID_OUI_FROM_DATABASE=Alcatel Lucent
@@ -59182,6 +60586,12 @@ OUI:887398*
OUI:887556*
ID_OUI_FROM_DATABASE=Cisco
+OUI:88789C*
+ ID_OUI_FROM_DATABASE=Game Technologies SA
+
+OUI:888603*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:8886A0*
ID_OUI_FROM_DATABASE=Simton Technologies, Ltd.
@@ -59200,6 +60610,9 @@ OUI:888B5D*
OUI:888C19*
ID_OUI_FROM_DATABASE=Brady Corp Asia Pacific Ltd
+OUI:889166*
+ ID_OUI_FROM_DATABASE=Viewcooper Corp.
+
OUI:8891DD*
ID_OUI_FROM_DATABASE=Racktivity
@@ -59252,7 +60665,7 @@ OUI:88C36E*
ID_OUI_FROM_DATABASE=Beijing Ereneben lnformation Technology Limited
OUI:88C663*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:88CB87*
ID_OUI_FROM_DATABASE=Apple
@@ -59296,12 +60709,24 @@ OUI:88F490*
OUI:88FD15*
ID_OUI_FROM_DATABASE=LINEEYE CO., LTD
+OUI:88FED6*
+ ID_OUI_FROM_DATABASE=ShangHai WangYong Software Co., Ltd.
+
+OUI:8C006D*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:8C04FF*
ID_OUI_FROM_DATABASE=Technicolor USA Inc.
OUI:8C078C*
ID_OUI_FROM_DATABASE=FLOW DATA INC
+OUI:8C088B*
+ ID_OUI_FROM_DATABASE=Remote Solution
+
+OUI:8C09F4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:8C0C90*
ID_OUI_FROM_DATABASE=Ruckus Wireless
@@ -59327,7 +60752,10 @@ OUI:8C278A*
ID_OUI_FROM_DATABASE=Vocollect Inc
OUI:8C2DAA*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:8C2F39*
+ ID_OUI_FROM_DATABASE=IBA Dosimetry GmbH
OUI:8C3330*
ID_OUI_FROM_DATABASE=EmFirst Co., Ltd.
@@ -59344,6 +60772,9 @@ OUI:8C4435*
OUI:8C4AEE*
ID_OUI_FROM_DATABASE=GIGA TMS INC
+OUI:8C4B59*
+ ID_OUI_FROM_DATABASE=3D Imaging & Simulations Corp
+
OUI:8C4CDC*
ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC.
@@ -59366,7 +60797,7 @@ OUI:8C57FD*
ID_OUI_FROM_DATABASE=LVX Western
OUI:8C5877*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:8C598B*
ID_OUI_FROM_DATABASE=C Technologies AB
@@ -59414,7 +60845,7 @@ OUI:8C7716*
ID_OUI_FROM_DATABASE=LONGCHEER TELECOMMUNICATION LIMITED
OUI:8C7B9D*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:8C7CB5*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -59455,9 +60886,15 @@ OUI:8CA982*
OUI:8CAE4C*
ID_OUI_FROM_DATABASE=Plugable Technologies
+OUI:8CAE89*
+ ID_OUI_FROM_DATABASE=Y-cam Solutions Ltd
+
OUI:8CB64F*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:8CB7F7*
+ ID_OUI_FROM_DATABASE=Shenzhen UniStrong Science & Technology Co., Ltd
+
OUI:8CB82C*
ID_OUI_FROM_DATABASE=IPitomy Communications
@@ -59479,6 +60916,9 @@ OUI:8CC7D0*
OUI:8CC8CD*
ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
+OUI:8CCDA2*
+ ID_OUI_FROM_DATABASE=ACTP, Inc.
+
OUI:8CCDE8*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
@@ -59519,7 +60959,7 @@ OUI:8CF9C9*
ID_OUI_FROM_DATABASE=MESADA Technology Co.,Ltd.
OUI:8CFABA*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:8CFDF0*
ID_OUI_FROM_DATABASE=QUALCOMM Incorporated
@@ -59530,6 +60970,9 @@ OUI:90004E*
OUI:90013B*
ID_OUI_FROM_DATABASE=SAGEMCOM
+OUI:90028A*
+ ID_OUI_FROM_DATABASE=Shenzhen Shidean Legrand Electronic Products Co.,Ltd
+
OUI:9002A9*
ID_OUI_FROM_DATABASE=ZHEJIANG DAHUA TECHNOLOGY CO.,LTD
@@ -59560,6 +61003,9 @@ OUI:9018AE*
OUI:901900*
ID_OUI_FROM_DATABASE=SCS SA
+OUI:901ACA*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:901B0E*
ID_OUI_FROM_DATABASE=Fujitsu Technology Solutions GmbH
@@ -59569,11 +61015,14 @@ OUI:901D27*
OUI:901EDD*
ID_OUI_FROM_DATABASE=GREAT COMPUTER CORPORATION
+OUI:902083*
+ ID_OUI_FROM_DATABASE=General Engine Management Systems Ltd.
+
OUI:902155*
ID_OUI_FROM_DATABASE=HTC Corporation
OUI:9027E4*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:902B34*
ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
@@ -59587,6 +61036,9 @@ OUI:90342B*
OUI:9034FC*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:90356E*
+ ID_OUI_FROM_DATABASE=Vodafone Omnitel N.V.
+
OUI:9038DF*
ID_OUI_FROM_DATABASE=Changzhou Tiannengbo System Co. Ltd.
@@ -59602,12 +61054,18 @@ OUI:903D5A*
OUI:903D6B*
ID_OUI_FROM_DATABASE=Zicon Technology Corp.
+OUI:903EAB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:9046B7*
ID_OUI_FROM_DATABASE=Vadaro Pte Ltd
OUI:904716*
ID_OUI_FROM_DATABASE=RORZE CORPORATION
+OUI:9049FA*
+ ID_OUI_FROM_DATABASE=Intel Corporation
+
OUI:904CE5*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -59641,6 +61099,9 @@ OUI:905F8D*
OUI:90610C*
ID_OUI_FROM_DATABASE=Fida International (S) Pte Ltd
+OUI:906717*
+ ID_OUI_FROM_DATABASE=Alphion India Private Limited
+
OUI:9067B5*
ID_OUI_FROM_DATABASE=Alcatel-Lucent
@@ -59656,6 +61117,18 @@ OUI:906EBB*
OUI:907025*
ID_OUI_FROM_DATABASE=Garea Microsys Co.,Ltd.
+OUI:907240*
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:907990*
+ ID_OUI_FROM_DATABASE=Benchmark Electronics Romania SRL
+
+OUI:907A0A*
+ ID_OUI_FROM_DATABASE=Gebr. Bode GmbH & Co KG
+
+OUI:907A28*
+ ID_OUI_FROM_DATABASE=Beijing Morncloud Information And Technology Co. Ltd.
+
OUI:907AF1*
ID_OUI_FROM_DATABASE=SNUPI Technologies
@@ -59666,14 +61139,20 @@ OUI:908260*
ID_OUI_FROM_DATABASE=IEEE 1904.1 Working Group
OUI:90840D*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:9088A2*
ID_OUI_FROM_DATABASE=IONICS TECHNOLOGY ME LTDA
+OUI:908C44*
+ ID_OUI_FROM_DATABASE=H.K ZONGMU TECHNOLOGY CO., LTD.
+
OUI:908D1D*
ID_OUI_FROM_DATABASE=GH Technologies
+OUI:908F93*
+ ID_OUI_FROM_DATABASE=MakerBot Industries
+
OUI:908FCF*
ID_OUI_FROM_DATABASE=UNO System Co., Ltd
@@ -59689,9 +61168,15 @@ OUI:9092B4*
OUI:9094E4*
ID_OUI_FROM_DATABASE=D-Link International
+OUI:909916*
+ ID_OUI_FROM_DATABASE=ELVEES NeoTek OJSC
+
OUI:909DE0*
ID_OUI_FROM_DATABASE=Newland Design + Assoc. Inc.
+OUI:909F43*
+ ID_OUI_FROM_DATABASE=Accutron Instruments Inc.
+
OUI:90A2DA*
ID_OUI_FROM_DATABASE=GHEO SA
@@ -59711,7 +61196,10 @@ OUI:90B11C*
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:90B134*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:90B21F*
+ ID_OUI_FROM_DATABASE=Apple
OUI:90B8D0*
ID_OUI_FROM_DATABASE=Joyent, Inc.
@@ -59767,6 +61255,9 @@ OUI:90EA60*
OUI:90F278*
ID_OUI_FROM_DATABASE=Radius Gateway
+OUI:90F3B7*
+ ID_OUI_FROM_DATABASE=Kirisun Communications Co., Ltd.
+
OUI:90F4C1*
ID_OUI_FROM_DATABASE=Rand McNally
@@ -59791,12 +61282,21 @@ OUI:940070*
OUI:940149*
ID_OUI_FROM_DATABASE=AutoHotBox
+OUI:9401C2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:940B2D*
ID_OUI_FROM_DATABASE=NetView Technologies(Shenzhen) Co., Ltd
+OUI:940BD5*
+ ID_OUI_FROM_DATABASE=Himax Technologies, Inc
+
OUI:940C6D*
ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd.
+OUI:94103E*
+ ID_OUI_FROM_DATABASE=Belkin International Inc.
+
OUI:9411DA*
ID_OUI_FROM_DATABASE=ITF Fröschl GmbH
@@ -59827,6 +61327,9 @@ OUI:94319B*
OUI:9433DD*
ID_OUI_FROM_DATABASE=Taco Electronic Solutions, Inc.
+OUI:94350A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:9436E0*
ID_OUI_FROM_DATABASE=Sichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd
@@ -59836,6 +61339,9 @@ OUI:9439E5*
OUI:943AF0*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:943BB1*
+ ID_OUI_FROM_DATABASE=KAONMEDIA
+
OUI:9440A2*
ID_OUI_FROM_DATABASE=Anywave Communication Technologies, Inc.
@@ -59875,12 +61381,21 @@ OUI:9471AC*
OUI:94756E*
ID_OUI_FROM_DATABASE=QinetiQ North America
+OUI:947C3E*
+ ID_OUI_FROM_DATABASE=Polewall Norge AS
+
OUI:9481A4*
ID_OUI_FROM_DATABASE=Azuray Technologies
OUI:94857A*
ID_OUI_FROM_DATABASE=Evantage Industries Corp
+OUI:9486D4*
+ ID_OUI_FROM_DATABASE=Surveillance Pro Corporation
+
+OUI:94877C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:948854*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -59923,9 +61438,24 @@ OUI:94AE61*
OUI:94B8C5*
ID_OUI_FROM_DATABASE=RuggedCom Inc.
+OUI:94B9B4*
+ ID_OUI_FROM_DATABASE=Aptos Technology
+
OUI:94BA31*
ID_OUI_FROM_DATABASE=Visiontec da Amazônia Ltda.
+OUI:94BA56*
+ ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd.
+
+OUI:94BF1E*
+ ID_OUI_FROM_DATABASE=eflow Inc. / Smart Device Planning and Development Division
+
+OUI:94C150*
+ ID_OUI_FROM_DATABASE=2Wire Inc
+
+OUI:94C3E4*
+ ID_OUI_FROM_DATABASE=SCA Schucker Gmbh & Co KG
+
OUI:94C4E9*
ID_OUI_FROM_DATABASE=PowerLayer Microsystems HongKong Limited
@@ -59942,7 +61472,7 @@ OUI:94CA0F*
ID_OUI_FROM_DATABASE=Honeywell Analytics
OUI:94CCB9*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:94CDAC*
ID_OUI_FROM_DATABASE=Creowave Oy
@@ -59977,6 +61507,9 @@ OUI:94DE0E*
OUI:94DE80*
ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+OUI:94DF4E*
+ ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
+
OUI:94DF58*
ID_OUI_FROM_DATABASE=IJ Electron CO.,Ltd.
@@ -59992,6 +61525,12 @@ OUI:94E711*
OUI:94E848*
ID_OUI_FROM_DATABASE=FYLDE MICRO LTD
+OUI:94E98C*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent
+
+OUI:94EB2C*
+ ID_OUI_FROM_DATABASE=Google Inc.
+
OUI:94EBCD*
ID_OUI_FROM_DATABASE=Research In Motion Limited
@@ -60020,7 +61559,7 @@ OUI:9803A0*
ID_OUI_FROM_DATABASE=ABB n.v. Power Quality Products
OUI:9803D8*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:980C82*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
@@ -60070,6 +61609,9 @@ OUI:983F9F*
OUI:984246*
ID_OUI_FROM_DATABASE=SOL INDUSTRY PTE., LTD
+OUI:9843DA*
+ ID_OUI_FROM_DATABASE=INTERTECH
+
OUI:98473C*
ID_OUI_FROM_DATABASE=SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD
@@ -60077,7 +61619,7 @@ OUI:984A47*
ID_OUI_FROM_DATABASE=CHG Hospital Beds
OUI:984B4A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, LLC.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:984BE1*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
@@ -60109,6 +61651,9 @@ OUI:985945*
OUI:985C93*
ID_OUI_FROM_DATABASE=SBG Systems SAS
+OUI:985D46*
+ ID_OUI_FROM_DATABASE=PeopleNet Communication
+
OUI:985E1B*
ID_OUI_FROM_DATABASE=ConversDigital Co., Ltd.
@@ -60118,12 +61663,18 @@ OUI:986022*
OUI:9866EA*
ID_OUI_FROM_DATABASE=Industrial Control Communications, Inc.
+OUI:986CF5*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:986DC8*
ID_OUI_FROM_DATABASE=TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION
OUI:9873C4*
ID_OUI_FROM_DATABASE=Sage Electronic Engineering LLC
+OUI:9876B6*
+ ID_OUI_FROM_DATABASE=Adafruit
+
OUI:988217*
ID_OUI_FROM_DATABASE=Disruptive Ltd
@@ -60142,6 +61693,9 @@ OUI:988BAD*
OUI:988E34*
ID_OUI_FROM_DATABASE=ZHEJIANG BOXSAM ELECTRONIC CO.,LTD
+OUI:988E4A*
+ ID_OUI_FROM_DATABASE=NOXUS(BEIJING) TECHNOLOGY CO.,LTD
+
OUI:988EDD*
ID_OUI_FROM_DATABASE=TE Connectivity Limerick
@@ -60175,11 +61729,17 @@ OUI:98BC99*
OUI:98C845*
ID_OUI_FROM_DATABASE=PacketAccess
+OUI:98CDB4*
+ ID_OUI_FROM_DATABASE=Virident Systems, Inc.
+
+OUI:98D331*
+ ID_OUI_FROM_DATABASE=Shenzhen Bolutek Technology Co.,Ltd.
+
OUI:98D686*
ID_OUI_FROM_DATABASE=Chyi Lee industry Co., ltd.
OUI:98D6BB*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:98D6F7*
ID_OUI_FROM_DATABASE=LG Electronics
@@ -60202,9 +61762,15 @@ OUI:98EC65*
OUI:98F537*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:98F8C1*
+ ID_OUI_FROM_DATABASE=IDT Technology Limited
+
OUI:98F8DB*
ID_OUI_FROM_DATABASE=Marini Impianti Industriali s.r.l.
+OUI:98FB12*
+ ID_OUI_FROM_DATABASE=Grand Electronics (HK) Ltd
+
OUI:98FC11*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
@@ -60212,7 +61778,10 @@ OUI:98FE03*
ID_OUI_FROM_DATABASE=Ericsson - North America
OUI:98FE94*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:98FFD0*
+ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
OUI:9C0111*
ID_OUI_FROM_DATABASE=Shenzhen Newabel Electronic Co., Ltd.
@@ -60220,6 +61789,9 @@ OUI:9C0111*
OUI:9C0298*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:9C039E*
+ ID_OUI_FROM_DATABASE=Beijing Winchannel Software Technology Co., Ltd
+
OUI:9C0473*
ID_OUI_FROM_DATABASE=Tecmobile (International) Ltd.
@@ -60245,11 +61817,17 @@ OUI:9C1FDD*
ID_OUI_FROM_DATABASE=Accupix Inc.
OUI:9C207B*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:9C216A*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
OUI:9C220E*
ID_OUI_FROM_DATABASE=TASCAN Service GmbH
+OUI:9C2840*
+ ID_OUI_FROM_DATABASE=Discovery Technology,LTD..
+
OUI:9C28BF*
ID_OUI_FROM_DATABASE=Continental Automotive Czech Republic s.r.o.
@@ -60268,6 +61846,9 @@ OUI:9C3AAF*
OUI:9C417C*
ID_OUI_FROM_DATABASE=Hame Technology Co., Limited
+OUI:9C443D*
+ ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD
+
OUI:9C4563*
ID_OUI_FROM_DATABASE=DIMEP Sistemas
@@ -60346,6 +61927,9 @@ OUI:9C7BD2*
OUI:9C807D*
ID_OUI_FROM_DATABASE=SYSCABLE Korea Inc.
+OUI:9C8888*
+ ID_OUI_FROM_DATABASE=Simac Techniek NV
+
OUI:9C8BF1*
ID_OUI_FROM_DATABASE=The Warehouse Limited
@@ -60373,6 +61957,9 @@ OUI:9C9811*
OUI:9C9C1D*
ID_OUI_FROM_DATABASE=Starkey Labs Inc.
+OUI:9CA10A*
+ ID_OUI_FROM_DATABASE=SCLE SFE
+
OUI:9CA134*
ID_OUI_FROM_DATABASE=Nike, Inc.
@@ -60382,6 +61969,9 @@ OUI:9CA3BA*
OUI:9CA577*
ID_OUI_FROM_DATABASE=Osorno Enterprises Inc.
+OUI:9CA9E4*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:9CADEF*
ID_OUI_FROM_DATABASE=Obihai Technology, Inc.
@@ -60394,12 +61984,18 @@ OUI:9CB008*
OUI:9CB206*
ID_OUI_FROM_DATABASE=PROCENTEC
+OUI:9CB654*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:9CB70D*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
OUI:9CB793*
ID_OUI_FROM_DATABASE=Creatcomm Technology Inc.
+OUI:9CBB98*
+ ID_OUI_FROM_DATABASE=Shen Zhen RND Electronic Co.,LTD
+
OUI:9CC077*
ID_OUI_FROM_DATABASE=PrintCounts, LLC
@@ -60424,6 +62020,9 @@ OUI:9CD24B*
OUI:9CD36D*
ID_OUI_FROM_DATABASE=NETGEAR INC.,
+OUI:9CD643*
+ ID_OUI_FROM_DATABASE=D-Link International
+
OUI:9CDF03*
ID_OUI_FROM_DATABASE=Harman/Becker Automotive Systems GmbH
@@ -60439,6 +62038,9 @@ OUI:9CE635*
OUI:9CE6E7*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:9CE7BD*
+ ID_OUI_FROM_DATABASE=Winduskorea co., Ltd
+
OUI:9CEBE8*
ID_OUI_FROM_DATABASE=BizLink (Kunshan) Co.,Ltd
@@ -60448,6 +62050,9 @@ OUI:9CF61A*
OUI:9CF67D*
ID_OUI_FROM_DATABASE=Ricardo Prague, s.r.o.
+OUI:9CF8DB*
+ ID_OUI_FROM_DATABASE=shenzhen eyunmei technology co,.ltd
+
OUI:9CF938*
ID_OUI_FROM_DATABASE=AREVA NP GmbH
@@ -60472,11 +62077,17 @@ OUI:A00BBA*
OUI:A00CA1*
ID_OUI_FROM_DATABASE=SKTB SKiT
+OUI:A01290*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
OUI:A0133B*
ID_OUI_FROM_DATABASE=Copyright © HiTi Digital, Inc.
+OUI:A0143D*
+ ID_OUI_FROM_DATABASE=PARROT SA
+
OUI:A0165C*
- ID_OUI_FROM_DATABASE=TangoTec Ltd.
+ ID_OUI_FROM_DATABASE=Triteka LTD
OUI:A01859*
ID_OUI_FROM_DATABASE=Shenzhen Yidashi Electronics Co Ltd
@@ -60511,6 +62122,9 @@ OUI:A036FA*
OUI:A03A75*
ID_OUI_FROM_DATABASE=PSS Belgium N.V.
+OUI:A03B1B*
+ ID_OUI_FROM_DATABASE=Inspire Tech
+
OUI:A04025*
ID_OUI_FROM_DATABASE=Actioncable, Inc.
@@ -60523,6 +62137,9 @@ OUI:A041A7*
OUI:A0423F*
ID_OUI_FROM_DATABASE=Tyan Computer Corp
+OUI:A0481C*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:A04CC1*
ID_OUI_FROM_DATABASE=Helixtech Corp.
@@ -60553,6 +62170,9 @@ OUI:A05DE7*
OUI:A05E6B*
ID_OUI_FROM_DATABASE=MELPER Co., Ltd.
+OUI:A067BE*
+ ID_OUI_FROM_DATABASE=Sicon s.r.l.
+
OUI:A06986*
ID_OUI_FROM_DATABASE=Wellav Technologies Ltd
@@ -60628,9 +62248,15 @@ OUI:A09BBD*
OUI:A0A130*
ID_OUI_FROM_DATABASE=DLI Taiwan Branch office
+OUI:A0A23C*
+ ID_OUI_FROM_DATABASE=GPMS
+
OUI:A0A763*
ID_OUI_FROM_DATABASE=Polytron Vertrieb GmbH
+OUI:A0A8CD*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:A0AAFD*
ID_OUI_FROM_DATABASE=EraThink Technologies Corp.
@@ -60652,15 +62278,27 @@ OUI:A0B9ED*
OUI:A0BAB8*
ID_OUI_FROM_DATABASE=Pixon Imaging
+OUI:A0BF50*
+ ID_OUI_FROM_DATABASE=S.C. ADD-PRODUCTION S.R.L.
+
OUI:A0BFA5*
ID_OUI_FROM_DATABASE=CORESYS
OUI:A0C3DE*
ID_OUI_FROM_DATABASE=Triton Electronic Systems Ltd.
+OUI:A0C6EC*
+ ID_OUI_FROM_DATABASE=ShenZhen ANYK Technology Co.,LTD
+
+OUI:A0CEC8*
+ ID_OUI_FROM_DATABASE=CE LINK LIMITED
+
OUI:A0CF5B*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:A0D3C1*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:A0DC04*
ID_OUI_FROM_DATABASE=Becker-Antriebe GmbH
@@ -60685,6 +62323,9 @@ OUI:A0E295*
OUI:A0E534*
ID_OUI_FROM_DATABASE=Stratec Biomedical AG
+OUI:A0E5E9*
+ ID_OUI_FROM_DATABASE=enimai Inc
+
OUI:A0E9DB*
ID_OUI_FROM_DATABASE=Ningbo FreeWings Technologies Co.,Ltd
@@ -60721,6 +62362,12 @@ OUI:A0FE91*
OUI:A40130*
ID_OUI_FROM_DATABASE=ABIsystems Co., LTD
+OUI:A4059E*
+ ID_OUI_FROM_DATABASE=STA Infinity LLP
+
+OUI:A409CB*
+ ID_OUI_FROM_DATABASE=Alfred Kaercher GmbH &amp; Co KG
+
OUI:A40BED*
ID_OUI_FROM_DATABASE=Carry Technology Co.,Ltd
@@ -60748,9 +62395,15 @@ OUI:A41F72*
OUI:A4218A*
ID_OUI_FROM_DATABASE=Nortel Networks
+OUI:A42305*
+ ID_OUI_FROM_DATABASE=Open Networking Laboratory
+
OUI:A424B3*
ID_OUI_FROM_DATABASE=FlatFrog Laboratories AB
+OUI:A42940*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
OUI:A429B7*
ID_OUI_FROM_DATABASE=bluesky
@@ -60803,16 +62456,19 @@ OUI:A45D36*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:A46706*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:A46E79*
ID_OUI_FROM_DATABASE=DFT System Co.Ltd
+OUI:A47760*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:A479E4*
ID_OUI_FROM_DATABASE=KLINFO Corp
OUI:A47AA4*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:A47ACF*
ID_OUI_FROM_DATABASE=VIBICOM COMMUNICATIONS INC.
@@ -60826,6 +62482,9 @@ OUI:A47C1F*
OUI:A4856B*
ID_OUI_FROM_DATABASE=Q Electronics Ltd
+OUI:A4895B*
+ ID_OUI_FROM_DATABASE=ARK INFOSOLUTIONS PVT LTD
+
OUI:A49005*
ID_OUI_FROM_DATABASE=CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
@@ -60847,6 +62506,9 @@ OUI:A49B13*
OUI:A49EDB*
ID_OUI_FROM_DATABASE=AutoCrib, Inc.
+OUI:A49F89*
+ ID_OUI_FROM_DATABASE=Shanghai Rui Rui Communication Technology Co.Ltd.
+
OUI:A4A24A*
ID_OUI_FROM_DATABASE=Cisco SPVTG
@@ -60866,7 +62528,7 @@ OUI:A4B121*
ID_OUI_FROM_DATABASE=Arantia 2010 S.L.
OUI:A4B197*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:A4B1E9*
ID_OUI_FROM_DATABASE=Technicolor
@@ -60892,12 +62554,21 @@ OUI:A4BADB*
OUI:A4BE61*
ID_OUI_FROM_DATABASE=EutroVision System, Inc.
+OUI:A4C0C7*
+ ID_OUI_FROM_DATABASE=ShenZhen Hitom Communication Technology Co..LTD
+
OUI:A4C0E1*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
OUI:A4C2AB*
ID_OUI_FROM_DATABASE=Hangzhou LEAD-IT Information & Technology Co.,Ltd
+OUI:A4C361*
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:A4C7DE*
+ ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
+
OUI:A4D094*
ID_OUI_FROM_DATABASE=Erwin Peters Systemtechnik GmbH
@@ -60908,7 +62579,7 @@ OUI:A4D1D1*
ID_OUI_FROM_DATABASE=ECOtality North America
OUI:A4D1D2*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:A4D3B5*
ID_OUI_FROM_DATABASE=GLITEL Stropkov, s.r.o.
@@ -60922,6 +62593,9 @@ OUI:A4DA3F*
OUI:A4DB2E*
ID_OUI_FROM_DATABASE=Kingspan Environmental Ltd
+OUI:A4DB30*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
OUI:A4DE50*
ID_OUI_FROM_DATABASE=Total Walther GmbH
@@ -60934,6 +62608,9 @@ OUI:A4E32E*
OUI:A4E391*
ID_OUI_FROM_DATABASE=DENY FONTAINE
+OUI:A4E4B8*
+ ID_OUI_FROM_DATABASE=BlackBerry Limited
+
OUI:A4E731*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -60943,11 +62620,14 @@ OUI:A4E7E4*
OUI:A4E991*
ID_OUI_FROM_DATABASE=SISTEMAS AUDIOVISUALES ITELSIS S.L.
+OUI:A4E9A3*
+ ID_OUI_FROM_DATABASE=Honest Technology Co., Ltd
+
OUI:A4EBD3*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:A4ED4E*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:A4EE57*
ID_OUI_FROM_DATABASE=SEIKO EPSON CORPORATION
@@ -60958,6 +62638,9 @@ OUI:A4EF52*
OUI:A4F3C1*
ID_OUI_FROM_DATABASE=Open Source Robotics Foundation, Inc.
+OUI:A4F522*
+ ID_OUI_FROM_DATABASE=CHOFU SEISAKUSHO CO.,LTD
+
OUI:A4F7D0*
ID_OUI_FROM_DATABASE=LAN Accessories Co., Ltd.
@@ -60989,7 +62672,7 @@ OUI:A81FAF*
ID_OUI_FROM_DATABASE=KRYPTON POLSKA
OUI:A82066*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:A826D9*
ID_OUI_FROM_DATABASE=HTC Corporation
@@ -61054,6 +62737,9 @@ OUI:A870A5*
OUI:A875D6*
ID_OUI_FROM_DATABASE=FreeTek International Co., Ltd.
+OUI:A875E2*
+ ID_OUI_FROM_DATABASE=Aventura Technologies, Inc.
+
OUI:A8776F*
ID_OUI_FROM_DATABASE=Zonoff
@@ -61063,15 +62749,24 @@ OUI:A87B39*
OUI:A87E33*
ID_OUI_FROM_DATABASE=Nokia Danmark A/S
+OUI:A886DD*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:A88792*
ID_OUI_FROM_DATABASE=Broadband Antenna Tracking Systems
OUI:A887ED*
ID_OUI_FROM_DATABASE=ARC Wireless LLC
+OUI:A88808*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:A88CEE*
ID_OUI_FROM_DATABASE=MicroMade Galka i Drozdz sp.j.
+OUI:A88D7B*
+ ID_OUI_FROM_DATABASE=SunDroid Global limited.
+
OUI:A8922C*
ID_OUI_FROM_DATABASE=LG Electronics
@@ -61105,6 +62800,9 @@ OUI:A8B0AE*
OUI:A8B1D4*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:A8BBCF*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:A8BD1A*
ID_OUI_FROM_DATABASE=Honey Bee (Hong Kong) Limited
@@ -61114,6 +62812,9 @@ OUI:A8C222*
OUI:A8CB95*
ID_OUI_FROM_DATABASE=EAST BEST CO., LTD.
+OUI:A8CCC5*
+ ID_OUI_FROM_DATABASE=Saab AB (publ)
+
OUI:A8CE90*
ID_OUI_FROM_DATABASE=CVC
@@ -61207,6 +62908,9 @@ OUI:AC199F*
OUI:AC20AA*
ID_OUI_FROM_DATABASE=DMATEK Co., Ltd.
+OUI:AC220B*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
OUI:AC2FA8*
ID_OUI_FROM_DATABASE=Humannix Co.,Ltd.
@@ -61255,6 +62959,9 @@ OUI:AC4E91*
OUI:AC4FFC*
ID_OUI_FROM_DATABASE=SVS-VISTEK GmbH
+OUI:AC5036*
+ ID_OUI_FROM_DATABASE=Pi-Coral Inc
+
OUI:AC5135*
ID_OUI_FROM_DATABASE=MPI TECH
@@ -61303,6 +63010,9 @@ OUI:AC7A42*
OUI:AC7BA1*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:AC7F3E*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:AC80D6*
ID_OUI_FROM_DATABASE=Hexatronic AB
@@ -61318,6 +63028,9 @@ OUI:AC8317*
OUI:AC83F0*
ID_OUI_FROM_DATABASE=ImmediaTV Corporation
+OUI:AC853D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:AC8674*
ID_OUI_FROM_DATABASE=Open Mesh, Inc.
@@ -61381,6 +63094,9 @@ OUI:ACC935*
OUI:ACCA54*
ID_OUI_FROM_DATABASE=Telldus Technologies AB
+OUI:ACCA8E*
+ ID_OUI_FROM_DATABASE=ODA Technologies
+
OUI:ACCABA*
ID_OUI_FROM_DATABASE=Midokura Co., Ltd.
@@ -61402,6 +63118,9 @@ OUI:ACD180*
OUI:ACD364*
ID_OUI_FROM_DATABASE=ABB SPA, ABB SACE DIV.
+OUI:ACD657*
+ ID_OUI_FROM_DATABASE=Shaanxi Guolian Digital TV Technology Co., Ltd.
+
OUI:ACD9D6*
ID_OUI_FROM_DATABASE=tci GmbH
@@ -61414,6 +63133,9 @@ OUI:ACE215*
OUI:ACE348*
ID_OUI_FROM_DATABASE=MadgeTech, Inc
+OUI:ACE42E*
+ ID_OUI_FROM_DATABASE=SK hynix
+
OUI:ACE64B*
ID_OUI_FROM_DATABASE=Shenzhen Baojia Battery Technology Co., Ltd.
@@ -61450,6 +63172,9 @@ OUI:ACF7F3*
OUI:ACF97E*
ID_OUI_FROM_DATABASE=ELESYS INC.
+OUI:B00594*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
OUI:B01203*
ID_OUI_FROM_DATABASE=Dynamics Hong Kong Limited
@@ -61480,6 +63205,9 @@ OUI:B03850*
OUI:B0435D*
ID_OUI_FROM_DATABASE=NuLEDs, Inc.
+OUI:B04545*
+ ID_OUI_FROM_DATABASE=YACOUB Automation GmbH
+
OUI:B046FC*
ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
@@ -61508,7 +63236,7 @@ OUI:B06563*
ID_OUI_FROM_DATABASE=Shanghai Railway Communication Factory
OUI:B065BD*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:B06CBF*
ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH
@@ -61520,7 +63248,10 @@ OUI:B075D5*
ID_OUI_FROM_DATABASE=ZTE Corporation
OUI:B077AC*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:B07908*
+ ID_OUI_FROM_DATABASE=Cummings Engineering
OUI:B0793C*
ID_OUI_FROM_DATABASE=Revolv Inc
@@ -61564,6 +63295,9 @@ OUI:B09AE2*
OUI:B09BD4*
ID_OUI_FROM_DATABASE=GNH Software India Private Limited
+OUI:B09FBA*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:B0A10A*
ID_OUI_FROM_DATABASE=Pivotal Systems Corporation
@@ -61618,6 +63352,9 @@ OUI:B0C8AD*
OUI:B0C95B*
ID_OUI_FROM_DATABASE=Beijing Symtech CO.,LTD
+OUI:B0CE18*
+ ID_OUI_FROM_DATABASE=Zhejiang shenghui lighting co.,Ltd
+
OUI:B0CF4D*
ID_OUI_FROM_DATABASE=MI-Zone Technology Ireland
@@ -61627,6 +63364,9 @@ OUI:B0D09C*
OUI:B0D2F5*
ID_OUI_FROM_DATABASE=Vello Systems, Inc.
+OUI:B0DF3A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:B0E39D*
ID_OUI_FROM_DATABASE=CAT SYSTEM CO.,LTD.
@@ -61696,6 +63436,9 @@ OUI:B4211D*
OUI:B4218A*
ID_OUI_FROM_DATABASE=Dog Hunter LLC
+OUI:B424E7*
+ ID_OUI_FROM_DATABASE=Codetek Technology Co.,Ltd
+
OUI:B428F1*
ID_OUI_FROM_DATABASE=E-Prime Co., Ltd.
@@ -61726,6 +63469,9 @@ OUI:B439D6*
OUI:B43DB2*
ID_OUI_FROM_DATABASE=Degreane Horizon
+OUI:B43E3B*
+ ID_OUI_FROM_DATABASE=Viableware, Inc
+
OUI:B4417A*
ID_OUI_FROM_DATABASE=ShenZhen Gongjin Electronics Co.,Ltd
@@ -61741,6 +63487,9 @@ OUI:B45253*
OUI:B4527D*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+OUI:B4527E*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
OUI:B45570*
ID_OUI_FROM_DATABASE=Borea
@@ -61759,18 +63508,27 @@ OUI:B46238*
OUI:B46293*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:B462AD*
+ ID_OUI_FROM_DATABASE=raytest GmbH
+
OUI:B467E9*
ID_OUI_FROM_DATABASE=Qingdao GoerTek Technology Co., Ltd.
OUI:B4749F*
ID_OUI_FROM_DATABASE=askey computer corp
+OUI:B4750E*
+ ID_OUI_FROM_DATABASE=Belkin International Inc.
+
OUI:B47F5E*
ID_OUI_FROM_DATABASE=Foresight Manufacture (S) Pte Ltd
OUI:B48255*
ID_OUI_FROM_DATABASE=Research Products Corporation
+OUI:B4827B*
+ ID_OUI_FROM_DATABASE=AKG Acoustics GmbH
+
OUI:B482C5*
ID_OUI_FROM_DATABASE=Relay2, Inc.
@@ -61804,6 +63562,9 @@ OUI:B4A4E3*
OUI:B4A5A9*
ID_OUI_FROM_DATABASE=MODI GmbH
+OUI:B4A82B*
+ ID_OUI_FROM_DATABASE=Histar
+
OUI:B4A95A*
ID_OUI_FROM_DATABASE=Avaya, Inc
@@ -61840,6 +63601,9 @@ OUI:B4C799*
OUI:B4C810*
ID_OUI_FROM_DATABASE=UMPI Elettronica
+OUI:B4CCE9*
+ ID_OUI_FROM_DATABASE=PROSYST
+
OUI:B4CFDB*
ID_OUI_FROM_DATABASE=Shenzhen Jiuzhou Electric Co.,LTD
@@ -61901,10 +63665,10 @@ OUI:B81413*
ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
OUI:B81619*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:B817C2*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:B81999*
ID_OUI_FROM_DATABASE=Nesys
@@ -61918,6 +63682,9 @@ OUI:B82410*
OUI:B8241A*
ID_OUI_FROM_DATABASE=SWEDA INFORMATICA LTDA
+OUI:B8266C*
+ ID_OUI_FROM_DATABASE=ANOV France
+
OUI:B826D4*
ID_OUI_FROM_DATABASE=Furukawa Industrial S.A. Produtos Elétricos
@@ -61957,6 +63724,9 @@ OUI:B83E59*
OUI:B8415F*
ID_OUI_FROM_DATABASE=ASP AG
+OUI:B847C6*
+ ID_OUI_FROM_DATABASE=SanJet Technology Corp.
+
OUI:B85510*
ID_OUI_FROM_DATABASE=Zioncom Electronics (Shenzhen) Ltd.
@@ -61969,6 +63739,9 @@ OUI:B85AF7*
OUI:B85AFE*
ID_OUI_FROM_DATABASE=Handaer Communication Technology (Beijing) Co., Ltd
+OUI:B85E7B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:B86091*
ID_OUI_FROM_DATABASE=Onnet Technologies and Innovations LLC
@@ -62014,6 +63787,9 @@ OUI:B8797E*
OUI:B8871E*
ID_OUI_FROM_DATABASE=Good Mind Industries Co., Ltd.
+OUI:B887A8*
+ ID_OUI_FROM_DATABASE=Step Ahead Innovations Inc.
+
OUI:B888E3*
ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
@@ -62024,7 +63800,7 @@ OUI:B88A60*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:B88D12*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:B88E3A*
ID_OUI_FROM_DATABASE=Infinite Technologies JLT
@@ -62095,6 +63871,9 @@ OUI:B8BB6D*
OUI:B8BEBF*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:B8C1A2*
+ ID_OUI_FROM_DATABASE=Dragon Path Technologies Co., Limited
+
OUI:B8C46F*
ID_OUI_FROM_DATABASE=PRIMMCON INDUSTRIES INC
@@ -62105,7 +63884,7 @@ OUI:B8C716*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
OUI:B8C75D*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:B8C855*
ID_OUI_FROM_DATABASE=Shanghai GBCOM Communication Technology Co.,Ltd.
@@ -62134,6 +63913,12 @@ OUI:B8DAF1*
OUI:B8DAF7*
ID_OUI_FROM_DATABASE=Advanced Photonics, Inc.
+OUI:B8DC87*
+ ID_OUI_FROM_DATABASE=IAI Corporation
+
+OUI:B8DF6B*
+ ID_OUI_FROM_DATABASE=SpotCam Co., Ltd.
+
OUI:B8E589*
ID_OUI_FROM_DATABASE=Payter BV
@@ -62143,6 +63928,9 @@ OUI:B8E625*
OUI:B8E779*
ID_OUI_FROM_DATABASE=9Solutions Oy
+OUI:B8E856*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:B8E937*
ID_OUI_FROM_DATABASE=Sonos, Inc.
@@ -62156,11 +63944,14 @@ OUI:B8F5E7*
ID_OUI_FROM_DATABASE=WayTools, LLC
OUI:B8F6B1*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:B8F732*
ID_OUI_FROM_DATABASE=Aryaka Networks Inc
+OUI:B8F828*
+ ID_OUI_FROM_DATABASE=Changshu Gaoshida Optoelectronic Technology Co. Ltd.
+
OUI:B8F934*
ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
@@ -62168,7 +63959,7 @@ OUI:B8FD32*
ID_OUI_FROM_DATABASE=Zhejiang ROICX Microelectronics
OUI:B8FF61*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:B8FF6F*
ID_OUI_FROM_DATABASE=Shanghai Typrotech Technology Co.Ltd
@@ -62215,9 +64006,18 @@ OUI:BC2846*
OUI:BC28D6*
ID_OUI_FROM_DATABASE=Rowley Associates Limited
+OUI:BC2B6B*
+ ID_OUI_FROM_DATABASE=Beijing Haier IC Design Co.,Ltd
+
+OUI:BC2BD7*
+ ID_OUI_FROM_DATABASE=Revogi Innovation Co., Ltd.
+
OUI:BC2C55*
ID_OUI_FROM_DATABASE=Bear Flag Design, Inc.
+OUI:BC2D98*
+ ID_OUI_FROM_DATABASE=ThinGlobal LLC
+
OUI:BC305B*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -62236,9 +64036,15 @@ OUI:BC3BAF*
OUI:BC3E13*
ID_OUI_FROM_DATABASE=Accordance Systems Inc.
+OUI:BC4100*
+ ID_OUI_FROM_DATABASE=Codaco Electronic s.r.o.
+
OUI:BC4377*
ID_OUI_FROM_DATABASE=Hang Zhou Huite Technology Co.,ltd.
+OUI:BC4486*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:BC4760*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -62252,7 +64058,7 @@ OUI:BC51FE*
ID_OUI_FROM_DATABASE=Swann Communications Pty Ltd
OUI:BC52B7*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:BC5FF4*
ID_OUI_FROM_DATABASE=ASRock Incorporation
@@ -62261,7 +64067,7 @@ OUI:BC629F*
ID_OUI_FROM_DATABASE=Telenet Systems P. Ltd.
OUI:BC6778*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:BC6784*
ID_OUI_FROM_DATABASE=Environics Oy
@@ -62314,12 +64120,24 @@ OUI:BC851F*
OUI:BC8556*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:BC8893*
+ ID_OUI_FROM_DATABASE=VILLBAU Ltd.
+
OUI:BC8B55*
ID_OUI_FROM_DATABASE=NPP ELIKS America Inc. DBA T&M Atlantic
+OUI:BC8CCD*
+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
+
OUI:BC926B*
ID_OUI_FROM_DATABASE=Apple
+OUI:BC9680*
+ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
+
+OUI:BC9889*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
OUI:BC99BC*
ID_OUI_FROM_DATABASE=FonSee Technology Inc.
@@ -62392,6 +64210,9 @@ OUI:BCEA2B*
OUI:BCF2AF*
ID_OUI_FROM_DATABASE=devolo AG
+OUI:BCF5AC*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
OUI:BCF685*
ID_OUI_FROM_DATABASE=D-Link International
@@ -62422,6 +64243,9 @@ OUI:C01E9B*
OUI:C02506*
ID_OUI_FROM_DATABASE=AVM GmbH
+OUI:C0255C*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:C027B9*
ID_OUI_FROM_DATABASE=Beijing National Railway Research & Design Institute of Signal & Communication Co., Ltd.
@@ -62440,6 +64264,9 @@ OUI:C02C7A*
OUI:C034B4*
ID_OUI_FROM_DATABASE=Gigastone Corporation
+OUI:C03580*
+ ID_OUI_FROM_DATABASE=A&R TECH
+
OUI:C035BD*
ID_OUI_FROM_DATABASE=Velocytech Aps
@@ -62458,6 +64285,9 @@ OUI:C03F0E*
OUI:C03F2A*
ID_OUI_FROM_DATABASE=Biscotti, Inc.
+OUI:C03FD5*
+ ID_OUI_FROM_DATABASE=Elitegroup Computer Systems Co., LTD
+
OUI:C041F6*
ID_OUI_FROM_DATABASE=LG Electronics Inc
@@ -62476,6 +64306,9 @@ OUI:C04A00*
OUI:C04DF7*
ID_OUI_FROM_DATABASE=SERELEC
+OUI:C057BC*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
OUI:C058A7*
ID_OUI_FROM_DATABASE=Pico Systems Co., Ltd.
@@ -62488,15 +64321,24 @@ OUI:C05E79*
OUI:C0626B*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:C06394*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:C06599*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:C067AF*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:C06C0F*
ID_OUI_FROM_DATABASE=Dobbs Stanford
OUI:C06C6D*
ID_OUI_FROM_DATABASE=MagneMotion, Inc.
+OUI:C07BBC*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:C07E40*
ID_OUI_FROM_DATABASE=SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD
@@ -62507,7 +64349,7 @@ OUI:C0830A*
ID_OUI_FROM_DATABASE=2Wire
OUI:C0847A*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:C0885B*
ID_OUI_FROM_DATABASE=SnD Tech Co., Ltd.
@@ -62518,17 +64360,26 @@ OUI:C08ADE*
OUI:C08B6F*
ID_OUI_FROM_DATABASE=S I Sistemas Inteligentes Eletrônicos Ltda
+OUI:C08C60*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:C09132*
ID_OUI_FROM_DATABASE=Patriot Memory
OUI:C09134*
ID_OUI_FROM_DATABASE=ProCurve Networking by HP
+OUI:C098E5*
+ ID_OUI_FROM_DATABASE=University of Michigan
+
OUI:C09C92*
ID_OUI_FROM_DATABASE=COBY
OUI:C09F42*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
+
+OUI:C0A0BB*
+ ID_OUI_FROM_DATABASE=D-Link International
OUI:C0A0C7*
ID_OUI_FROM_DATABASE=FAIRFIELD INDUSTRIES
@@ -62545,6 +64396,9 @@ OUI:C0A26D*
OUI:C0A364*
ID_OUI_FROM_DATABASE=3D Systems Massachusetts
+OUI:C0A39E*
+ ID_OUI_FROM_DATABASE=EarthCam, Inc.
+
OUI:C0AA68*
ID_OUI_FROM_DATABASE=OSASI Technos Inc.
@@ -62575,6 +64429,9 @@ OUI:C0C3B6*
OUI:C0C520*
ID_OUI_FROM_DATABASE=Ruckus Wireless
+OUI:C0C687*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
OUI:C0C946*
ID_OUI_FROM_DATABASE=MITSUYA LABORATORIES INC.
@@ -62608,6 +64465,9 @@ OUI:C0EAE4*
OUI:C0F8DA*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:C0F991*
+ ID_OUI_FROM_DATABASE=GME Standard Communications P/L
+
OUI:C40142*
ID_OUI_FROM_DATABASE=MaxMedia Technology Limited
@@ -62617,6 +64477,12 @@ OUI:C4017C*
OUI:C401B1*
ID_OUI_FROM_DATABASE=SeekTech INC
+OUI:C40415*
+ ID_OUI_FROM_DATABASE=NETGEAR INC.,
+
+OUI:C40938*
+ ID_OUI_FROM_DATABASE=Fujian Star-net Communication Co., Ltd
+
OUI:C40ACB*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -62641,6 +64507,9 @@ OUI:C419EC*
OUI:C41ECE*
ID_OUI_FROM_DATABASE=HMI Sources Ltd.
+OUI:C421C8*
+ ID_OUI_FROM_DATABASE=KYOCERA Corporation
+
OUI:C4237A*
ID_OUI_FROM_DATABASE=WhizNets Inc.
@@ -62650,8 +64519,11 @@ OUI:C4242E*
OUI:C42628*
ID_OUI_FROM_DATABASE=Airo Wireless
+OUI:C42795*
+ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+
OUI:C42C03*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:C436DA*
ID_OUI_FROM_DATABASE=Rusteletech Ltd.
@@ -62677,6 +64549,9 @@ OUI:C4438F*
OUI:C44567*
ID_OUI_FROM_DATABASE=SAMBON PRECISON and ELECTRONICS
+OUI:C445EC*
+ ID_OUI_FROM_DATABASE=Shanghai Yali Electron Co.,LTD
+
OUI:C44619*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -62708,7 +64583,7 @@ OUI:C458C2*
ID_OUI_FROM_DATABASE=Shenzhen TATFOOK Technology Co., Ltd.
OUI:C45976*
- ID_OUI_FROM_DATABASE=Fugoo
+ ID_OUI_FROM_DATABASE=Fugoo Coorporation
OUI:C45DD8*
ID_OUI_FROM_DATABASE=HDMI Forum
@@ -62716,6 +64591,9 @@ OUI:C45DD8*
OUI:C46044*
ID_OUI_FROM_DATABASE=Everex Electronics Limited
+OUI:C462EA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:C46354*
ID_OUI_FROM_DATABASE=U-Raku, Inc.
@@ -62731,6 +64609,9 @@ OUI:C46AB7*
OUI:C46DF1*
ID_OUI_FROM_DATABASE=DataGravity
+OUI:C46E1F*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+
OUI:C47130*
ID_OUI_FROM_DATABASE=Fon Technology S.L.
@@ -62773,6 +64654,9 @@ OUI:C49300*
OUI:C49313*
ID_OUI_FROM_DATABASE=100fio networks technology llc
+OUI:C49380*
+ ID_OUI_FROM_DATABASE=Speedytel technology
+
OUI:C495A2*
ID_OUI_FROM_DATABASE=SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD
@@ -62806,6 +64690,9 @@ OUI:C4CD45*
OUI:C4D489*
ID_OUI_FROM_DATABASE=JiangSu Joyque Information Industry Co.,Ltd
+OUI:C4D655*
+ ID_OUI_FROM_DATABASE=Tercel technology co.,ltd
+
OUI:C4D987*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -62821,6 +64708,9 @@ OUI:C4E17C*
OUI:C4E7BE*
ID_OUI_FROM_DATABASE=SCSpro Co.,Ltd
+OUI:C4E92F*
+ ID_OUI_FROM_DATABASE=AB Sciex
+
OUI:C4EBE3*
ID_OUI_FROM_DATABASE=RRCN SAS
@@ -62860,6 +64750,9 @@ OUI:C80E77*
OUI:C80E95*
ID_OUI_FROM_DATABASE=OmniLync Inc.
+OUI:C81479*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:C819F7*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -62879,7 +64772,7 @@ OUI:C8292A*
ID_OUI_FROM_DATABASE=Barun Electronics
OUI:C82A14*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:C82E94*
ID_OUI_FROM_DATABASE=Halfa Enterprise Co., Ltd.
@@ -62888,7 +64781,7 @@ OUI:C83232*
ID_OUI_FROM_DATABASE=Hunting Innova
OUI:C8334B*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:C835B8*
ID_OUI_FROM_DATABASE=Ericsson, EAB/RWI/K
@@ -62923,6 +64816,9 @@ OUI:C84C75*
OUI:C85645*
ID_OUI_FROM_DATABASE=Intermas France
+OUI:C85663*
+ ID_OUI_FROM_DATABASE=Sunflex Europe GmbH
+
OUI:C86000*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -63014,7 +64910,7 @@ OUI:C8A729*
ID_OUI_FROM_DATABASE=SYStronics Co., Ltd.
OUI:C8AA21*
- ID_OUI_FROM_DATABASE=Motorola Mobility, LLC.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:C8AE9C*
ID_OUI_FROM_DATABASE=Shanghai TYD Elecronic Technology Co. Ltd
@@ -63025,11 +64921,14 @@ OUI:C8AF40*
OUI:C8B373*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+OUI:C8B5B7*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:C8BBD3*
ID_OUI_FROM_DATABASE=Embrane
OUI:C8BCC8*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:C8BE19*
ID_OUI_FROM_DATABASE=D-Link International
@@ -63088,12 +64987,18 @@ OUI:C8E1A7*
OUI:C8EE08*
ID_OUI_FROM_DATABASE=TANGTOP TECHNOLOGY CO.,LTD
+OUI:C8EE75*
+ ID_OUI_FROM_DATABASE=Pishion International Co. Ltd
+
OUI:C8EEA6*
ID_OUI_FROM_DATABASE=Shenzhen SHX Technology Co., Ltd
OUI:C8EF2E*
ID_OUI_FROM_DATABASE=Beijing Gefei Tech. Co., Ltd
+OUI:C8F36B*
+ ID_OUI_FROM_DATABASE=Yamato Scale Co.,Ltd.
+
OUI:C8F386*
ID_OUI_FROM_DATABASE=Shenzhen Xiaoniao Technology Co.,Ltd
@@ -63130,8 +65035,11 @@ OUI:CC04B4*
OUI:CC051B*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:CC07AB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:CC08E0*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:CC09C8*
ID_OUI_FROM_DATABASE=IMAQLIQ LTD
@@ -63160,15 +65068,24 @@ OUI:CC2218*
OUI:CC262D*
ID_OUI_FROM_DATABASE=Verifi, LLC
+OUI:CC2A80*
+ ID_OUI_FROM_DATABASE=Micro-Biz intelligence solutions Co.,Ltd
+
OUI:CC2D8C*
ID_OUI_FROM_DATABASE=LG ELECTRONICS INC
OUI:CC33BB*
ID_OUI_FROM_DATABASE=SAGEMCOM SAS
+OUI:CC3429*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
OUI:CC34D7*
ID_OUI_FROM_DATABASE=GEWISS S.P.A.
+OUI:CC3540*
+ ID_OUI_FROM_DATABASE=Technicolor USA Inc.
+
OUI:CC3A61*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
@@ -63181,6 +65098,12 @@ OUI:CC3E5F*
OUI:CC43E3*
ID_OUI_FROM_DATABASE=Trump s.a.
+OUI:CC4703*
+ ID_OUI_FROM_DATABASE=Intercon Systems Co., Ltd.
+
+OUI:CC4AE1*
+ ID_OUI_FROM_DATABASE=Fourtec -Fourier Technologies
+
OUI:CC4BFB*
ID_OUI_FROM_DATABASE=Hellberg Safety AB
@@ -63235,6 +65158,12 @@ OUI:CC6DA0*
OUI:CC6DEF*
ID_OUI_FROM_DATABASE=TJK Tietolaite Oy
+OUI:CC720F*
+ ID_OUI_FROM_DATABASE=Viscount Systems Inc.
+
+OUI:CC7498*
+ ID_OUI_FROM_DATABASE=Filmetrics Inc.
+
OUI:CC7669*
ID_OUI_FROM_DATABASE=SEETECH
@@ -63244,8 +65173,11 @@ OUI:CC785F*
OUI:CC7A30*
ID_OUI_FROM_DATABASE=CMAX Wireless Co., Ltd.
+OUI:CC7B35*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:CC7D37*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:CC7EE7*
ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
@@ -63355,6 +65287,9 @@ OUI:CCEF48*
OUI:CCF3A5*
ID_OUI_FROM_DATABASE=Chi Mei Communication Systems, Inc
+OUI:CCF407*
+ ID_OUI_FROM_DATABASE=EUKREA ELECTROMATIQUE SARL
+
OUI:CCF67A*
ID_OUI_FROM_DATABASE=Ayecka Communication Systems LTD
@@ -63370,6 +65305,9 @@ OUI:CCF954*
OUI:CCF9E8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:CCFB65*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+
OUI:CCFC6D*
ID_OUI_FROM_DATABASE=RIZ TRANSMITTERS
@@ -63400,12 +65338,18 @@ OUI:D01AA7*
OUI:D01CBB*
ID_OUI_FROM_DATABASE=Beijing Ctimes Digital Technology Co., Ltd.
+OUI:D022BE*
+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
+
OUI:D023DB*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:D02788*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+OUI:D02C45*
+ ID_OUI_FROM_DATABASE=littleBits Electronics, Inc.
+
OUI:D02DB3*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
@@ -63415,6 +65359,9 @@ OUI:D03110*
OUI:D03761*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:D03972*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:D046DC*
ID_OUI_FROM_DATABASE=Southwest Research Institute
@@ -63463,6 +65410,9 @@ OUI:D067E5*
OUI:D0699E*
ID_OUI_FROM_DATABASE=LUMINEX Lighting Control Equipment
+OUI:D0737F*
+ ID_OUI_FROM_DATABASE=Mini-Circuits
+
OUI:D0738E*
ID_OUI_FROM_DATABASE=DONG OH PRECISION CO., LTD.
@@ -63481,6 +65431,9 @@ OUI:D07E28*
OUI:D08999*
ID_OUI_FROM_DATABASE=APCON, Inc.
+OUI:D08A55*
+ ID_OUI_FROM_DATABASE=Skullcandy
+
OUI:D08B7E*
ID_OUI_FROM_DATABASE=Passif Semiconductor
@@ -63493,9 +65446,15 @@ OUI:D08CFF*
OUI:D093F8*
ID_OUI_FROM_DATABASE=Stonestreet One LLC
+OUI:D095C7*
+ ID_OUI_FROM_DATABASE=Pantech Co., Ltd.
+
OUI:D09B05*
ID_OUI_FROM_DATABASE=Emtronix
+OUI:D09D0A*
+ ID_OUI_FROM_DATABASE=LINKCOM
+
OUI:D0A311*
ID_OUI_FROM_DATABASE=Neuberger Gebäudeautomation GmbH
@@ -63511,6 +65470,9 @@ OUI:D0B33F*
OUI:D0B498*
ID_OUI_FROM_DATABASE=Robert Bosch LLC Automotive Electronics
+OUI:D0B523*
+ ID_OUI_FROM_DATABASE=Bestcare Cloucal Corp.
+
OUI:D0B53D*
ID_OUI_FROM_DATABASE=SEPRO ROBOTIQUE
@@ -63526,6 +65488,9 @@ OUI:D0C1B1*
OUI:D0C282*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:D0C42F*
+ ID_OUI_FROM_DATABASE=Tamagawa Seiki Co.,Ltd.
+
OUI:D0C789*
ID_OUI_FROM_DATABASE=Cisco
@@ -63595,6 +65560,9 @@ OUI:D0F27F*
OUI:D0F73B*
ID_OUI_FROM_DATABASE=Helmut Mauell GmbH
+OUI:D0FF50*
+ ID_OUI_FROM_DATABASE=Texas Instruments, Inc
+
OUI:D4000D*
ID_OUI_FROM_DATABASE=Phoenix Broadband Technologies, LLC.
@@ -63682,6 +65650,9 @@ OUI:D44B5E*
OUI:D44C24*
ID_OUI_FROM_DATABASE=Vuppalamritha Magnetic Components LTD
+OUI:D44C9C*
+ ID_OUI_FROM_DATABASE=Shenzhen YOOBAO Technology Co.Ltd
+
OUI:D44CA7*
ID_OUI_FROM_DATABASE=Informtekhnika & Communication, LLC
@@ -63718,9 +65689,15 @@ OUI:D466A8*
OUI:D467E7*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+OUI:D46867*
+ ID_OUI_FROM_DATABASE=Neoventus Design Group
+
OUI:D46A91*
ID_OUI_FROM_DATABASE=Snap AV
+OUI:D46AA8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:D46CBF*
ID_OUI_FROM_DATABASE=Goodrich ISR
@@ -63776,7 +65753,7 @@ OUI:D496DF*
ID_OUI_FROM_DATABASE=SUNGJIN C&T CO.,LTD
OUI:D49A20*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:D49C28*
ID_OUI_FROM_DATABASE=JayBird Gear LLC
@@ -63805,6 +65782,9 @@ OUI:D4AAFF*
OUI:D4AC4E*
ID_OUI_FROM_DATABASE=BODi rS, LLC
+OUI:D4AD2D*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
OUI:D4AE52*
ID_OUI_FROM_DATABASE=Dell Inc
@@ -63856,6 +65836,9 @@ OUI:D4D748*
OUI:D4D898*
ID_OUI_FROM_DATABASE=Korea CNO Tech Co., Ltd
+OUI:D4D919*
+ ID_OUI_FROM_DATABASE=GoPro
+
OUI:D4DF57*
ID_OUI_FROM_DATABASE=Alpinion Medical Systems
@@ -63931,6 +65914,9 @@ OUI:D824BD*
OUI:D826B9*
ID_OUI_FROM_DATABASE=Guangdong Coagent Electronics S &T Co., Ltd.
+OUI:D8270C*
+ ID_OUI_FROM_DATABASE=MaxTronic International Co., Ltd.
+
OUI:D828C9*
ID_OUI_FROM_DATABASE=General Electric Consumer and Industrial
@@ -63943,11 +65929,14 @@ OUI:D82986*
OUI:D82A7E*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:D82D9B*
+ ID_OUI_FROM_DATABASE=Shenzhen G.Credit Communication Technology Co., Ltd
+
OUI:D82DE1*
ID_OUI_FROM_DATABASE=Tricascade Inc.
OUI:D83062*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:D831CF*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -63961,9 +65950,15 @@ OUI:D842AC*
OUI:D84606*
ID_OUI_FROM_DATABASE=Silicon Valley Global Marketing
+OUI:D8490B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:D84B2A*
ID_OUI_FROM_DATABASE=Cognitas Technologies, Inc.
+OUI:D850E6*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
OUI:D8543A*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -63985,6 +65980,9 @@ OUI:D866C6*
OUI:D867D9*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:D86960*
+ ID_OUI_FROM_DATABASE=Steinsvik
+
OUI:D86BF7*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
@@ -64009,12 +66007,18 @@ OUI:D87988*
OUI:D88A3B*
ID_OUI_FROM_DATABASE=UNIT-EM
+OUI:D890E8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:D8952F*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:D89685*
ID_OUI_FROM_DATABASE=GoPro
+OUI:D89695*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:D8973B*
ID_OUI_FROM_DATABASE=Emerson Network Power Embedded Power
@@ -64028,10 +66032,10 @@ OUI:D89DB9*
ID_OUI_FROM_DATABASE=eMegatech International Corp.
OUI:D89E3F*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:D8A25E*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:D8AE90*
ID_OUI_FROM_DATABASE=Itibia Technologies
@@ -64138,6 +66142,9 @@ OUI:DC0265*
OUI:DC028E*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:DC0575*
+ ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION
+
OUI:DC05ED*
ID_OUI_FROM_DATABASE=Nabtesco Corporation
@@ -64156,6 +66163,9 @@ OUI:DC16A2*
OUI:DC175A*
ID_OUI_FROM_DATABASE=Hitachi High-Technologies Corporation
+OUI:DC1792*
+ ID_OUI_FROM_DATABASE=Captivate Network
+
OUI:DC1D9F*
ID_OUI_FROM_DATABASE=U & B tech
@@ -64172,7 +66182,7 @@ OUI:DC2A14*
ID_OUI_FROM_DATABASE=Shanghai Longjing Technology Co.
OUI:DC2B61*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:DC2B66*
ID_OUI_FROM_DATABASE=InfoBLOCK S.A. de C.V.
@@ -64207,8 +66217,11 @@ OUI:DC3C84*
OUI:DC3E51*
ID_OUI_FROM_DATABASE=Solberg & Andersen AS
+OUI:DC3EF8*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:DC4517*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:DC49C9*
ID_OUI_FROM_DATABASE=CASCO SIGNAL LTD
@@ -64219,9 +66232,15 @@ OUI:DC4EDE*
OUI:DC5726*
ID_OUI_FROM_DATABASE=Power-One
+OUI:DC5E36*
+ ID_OUI_FROM_DATABASE=Paterson Technology
+
OUI:DC647C*
ID_OUI_FROM_DATABASE=C.R.S. iiMotion GmbH
+OUI:DC6F00*
+ ID_OUI_FROM_DATABASE=Livescribe, Inc.
+
OUI:DC6F08*
ID_OUI_FROM_DATABASE=Bay Storage Technology
@@ -64237,6 +66256,9 @@ OUI:DC825B*
OUI:DC85DE*
ID_OUI_FROM_DATABASE=Azurewave Technologies., inc.
+OUI:DC86D8*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
OUI:DC9B1E*
ID_OUI_FROM_DATABASE=Intercom, Inc.
@@ -64249,6 +66271,9 @@ OUI:DC9FA4*
OUI:DC9FDB*
ID_OUI_FROM_DATABASE=Ubiquiti Networks, Inc.
+OUI:DCA5F4*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:DCA6BD*
ID_OUI_FROM_DATABASE=Beijing Lanbo Technology Co., Ltd.
@@ -64264,6 +66289,12 @@ OUI:DCA971*
OUI:DCA989*
ID_OUI_FROM_DATABASE=MACANDC
+OUI:DCAD9E*
+ ID_OUI_FROM_DATABASE=GreenPriz
+
+OUI:DCAE04*
+ ID_OUI_FROM_DATABASE=CELOXICA Ltd
+
OUI:DCB058*
ID_OUI_FROM_DATABASE=Burkert Werke GmbH
@@ -64279,12 +66310,18 @@ OUI:DCC0DB*
OUI:DCC101*
ID_OUI_FROM_DATABASE=SOLiD Technologies, Inc.
+OUI:DCC422*
+ ID_OUI_FROM_DATABASE=Systembase Limited
+
OUI:DCCBA8*
ID_OUI_FROM_DATABASE=Explora Technologies Inc
OUI:DCCE41*
ID_OUI_FROM_DATABASE=FE GLOBAL HONG KONG LIMITED
+OUI:DCCEBC*
+ ID_OUI_FROM_DATABASE=Shenzhen JSR Technology Co.,Ltd.
+
OUI:DCCF94*
ID_OUI_FROM_DATABASE=Beijing Rongcheng Hutong Technology Co., Ltd.
@@ -64315,12 +66352,18 @@ OUI:DCE71C*
OUI:DCF05D*
ID_OUI_FROM_DATABASE=Letta Teknoloji
+OUI:DCF755*
+ ID_OUI_FROM_DATABASE=SITRONIK
+
OUI:DCF858*
ID_OUI_FROM_DATABASE=Lorent Networks, Inc.
OUI:DCFAD5*
ID_OUI_FROM_DATABASE=STRONG Ges.m.b.H.
+OUI:DCFB02*
+ ID_OUI_FROM_DATABASE=Buffalo Inc.
+
OUI:E005C5*
ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd.
@@ -64387,6 +66430,9 @@ OUI:E039D7*
OUI:E03C5B*
ID_OUI_FROM_DATABASE=SHENZHEN JIAXINJIE ELECTRON CO.,LTD
+OUI:E03E4A*
+ ID_OUI_FROM_DATABASE=Cavanagh Group International
+
OUI:E03E7D*
ID_OUI_FROM_DATABASE=data-complex GmbH
@@ -64396,6 +66442,9 @@ OUI:E0469A*
OUI:E05597*
ID_OUI_FROM_DATABASE=Emergent Vision Technologies Inc.
+OUI:E056F4*
+ ID_OUI_FROM_DATABASE=AxesNetwork Solutions inc.
+
OUI:E0589E*
ID_OUI_FROM_DATABASE=Laerdal Medical
@@ -64459,12 +66508,18 @@ OUI:E09467*
OUI:E09579*
ID_OUI_FROM_DATABASE=ORTHOsoft inc, d/b/a Zimmer CAS
+OUI:E097F2*
+ ID_OUI_FROM_DATABASE=Atomax Inc.
+
OUI:E09D31*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:E09DB8*
ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC.
+OUI:E0A198*
+ ID_OUI_FROM_DATABASE=NOJA Power Switchgear Pty Ltd
+
OUI:E0A1D7*
ID_OUI_FROM_DATABASE=SFR
@@ -64483,9 +66538,18 @@ OUI:E0ABFE*
OUI:E0AE5E*
ID_OUI_FROM_DATABASE=ALPS Co,. Ltd.
+OUI:E0AEB2*
+ ID_OUI_FROM_DATABASE=Bender GmbH &amp; Co.KG
+
OUI:E0AEED*
ID_OUI_FROM_DATABASE=LOENK
+OUI:E0AF4B*
+ ID_OUI_FROM_DATABASE=Pluribus Networks, Inc.
+
+OUI:E0B2F1*
+ ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
+
OUI:E0B7B1*
ID_OUI_FROM_DATABASE=Pace plc
@@ -64493,7 +66557,7 @@ OUI:E0B9A5*
ID_OUI_FROM_DATABASE=Azurewave
OUI:E0B9BA*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:E0BC43*
ID_OUI_FROM_DATABASE=C2 Microsystems, Inc.
@@ -64517,7 +66581,7 @@ OUI:E0C922*
ID_OUI_FROM_DATABASE=Jireh Energy Tech., Ltd.
OUI:E0C97A*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:E0CA4D*
ID_OUI_FROM_DATABASE=Shenzhen Unistar Communication Co.,LTD
@@ -64537,6 +66601,9 @@ OUI:E0CF2D*
OUI:E0D10A*
ID_OUI_FROM_DATABASE=Katoudenkikougyousyo co ltd
+OUI:E0D1E6*
+ ID_OUI_FROM_DATABASE=Aliph dba Jawbone
+
OUI:E0D7BA*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -64552,6 +66619,9 @@ OUI:E0DB55*
OUI:E0DCA0*
ID_OUI_FROM_DATABASE=Siemens Electrical Apparatus Ltd., Suzhou Chengdu Branch
+OUI:E0E631*
+ ID_OUI_FROM_DATABASE=SNB TECHNOLOGIES LIMITED
+
OUI:E0E751*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
@@ -64577,17 +66647,20 @@ OUI:E0F379*
ID_OUI_FROM_DATABASE=Vaddio
OUI:E0F5C6*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:E0F5CA*
ID_OUI_FROM_DATABASE=CHENG UEI PRECISION INDUSTRY CO.,LTD.
OUI:E0F847*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:E0F9BE*
ID_OUI_FROM_DATABASE=Cloudena Corp.
+OUI:E0FAEC*
+ ID_OUI_FROM_DATABASE=Platan sp. z o.o. sp. k.
+
OUI:E4115B*
ID_OUI_FROM_DATABASE=Hewlett Packard
@@ -64615,6 +66688,9 @@ OUI:E42AD3*
OUI:E42C56*
ID_OUI_FROM_DATABASE=Lilee Systems, Ltd.
+OUI:E42D02*
+ ID_OUI_FROM_DATABASE=TCT Mobile Limited
+
OUI:E42F26*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
@@ -64639,6 +66715,9 @@ OUI:E438F2*
OUI:E43FA2*
ID_OUI_FROM_DATABASE=Wuxi DSP Technologies Inc.
+OUI:E440E2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:E441E6*
ID_OUI_FROM_DATABASE=Ottec Technology GmbH
@@ -64667,7 +66746,7 @@ OUI:E457A8*
ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc.
OUI:E46449*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:E467BA*
ID_OUI_FROM_DATABASE=Danish Interpretation Systems A/S
@@ -64684,6 +66763,9 @@ OUI:E47185*
OUI:E4751E*
ID_OUI_FROM_DATABASE=Getinge Sterilization AB
+OUI:E47723*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:E4776B*
ID_OUI_FROM_DATABASE=AARTESYS AG
@@ -64700,7 +66782,7 @@ OUI:E481B3*
ID_OUI_FROM_DATABASE=Shenzhen ACT Industrial Co.,Ltd.
OUI:E48399*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:E48AD5*
ID_OUI_FROM_DATABASE=RF WINDOW CO., LTD.
@@ -64714,12 +66796,18 @@ OUI:E49069*
OUI:E492E7*
ID_OUI_FROM_DATABASE=Gridlink Tech. Co.,Ltd.
+OUI:E492FB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:E496AE*
ID_OUI_FROM_DATABASE=ALTOGRAPHICS Inc.
OUI:E497F0*
ID_OUI_FROM_DATABASE=Shanghai VLC Technologies Ltd. Co.
+OUI:E498D6*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
OUI:E4A5EF*
ID_OUI_FROM_DATABASE=TRON LINK ELECTRONICS CO., LTD.
@@ -64741,14 +66829,20 @@ OUI:E4B021*
OUI:E4C146*
ID_OUI_FROM_DATABASE=Objetivos y Servicios de Valor A
+OUI:E4C63D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:E4C6E6*
ID_OUI_FROM_DATABASE=Mophie, LLC
+OUI:E4C722*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:E4C806*
ID_OUI_FROM_DATABASE=Ceiec Electric Technology Inc.
OUI:E4CE8F*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:E4D3F1*
ID_OUI_FROM_DATABASE=Cisco
@@ -64793,7 +66887,7 @@ OUI:E8039A*
ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
OUI:E8040B*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:E80462*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -64805,7 +66899,7 @@ OUI:E8056D*
ID_OUI_FROM_DATABASE=Nortel Networks
OUI:E80688*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:E80B13*
ID_OUI_FROM_DATABASE=Akib Systems Taiwan, INC
@@ -64870,9 +66964,15 @@ OUI:E8481F*
OUI:E84E06*
ID_OUI_FROM_DATABASE=EDUP INTERNATIONAL (HK) CO., LTD
+OUI:E84E84*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:E84ECE*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+OUI:E8516E*
+ ID_OUI_FROM_DATABASE=TSMART Inc.
+
OUI:E8519D*
ID_OUI_FROM_DATABASE=Yeonhab Precision Co.,LTD
@@ -64894,11 +66994,14 @@ OUI:E85BF0*
OUI:E85E53*
ID_OUI_FROM_DATABASE=Infratec Datentechnik GmbH
+OUI:E8611F*
+ ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd
+
OUI:E86CDA*
ID_OUI_FROM_DATABASE=Supercomputers and Neurocomputers Research Center
OUI:E86D52*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:E86D54*
ID_OUI_FROM_DATABASE=Digit Mobile Inc
@@ -64975,6 +67078,12 @@ OUI:E8B748*
OUI:E8BA70*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:E8BB3D*
+ ID_OUI_FROM_DATABASE=Sino Prime-Tech Limited
+
+OUI:E8BBA8*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD.
+
OUI:E8BE81*
ID_OUI_FROM_DATABASE=SAGEMCOM
@@ -65002,6 +67111,9 @@ OUI:E8D0FA*
OUI:E8D483*
ID_OUI_FROM_DATABASE=ULTIMATE Europe Transportation Equipment GmbH
+OUI:E8D4E0*
+ ID_OUI_FROM_DATABASE=Beijing BenyWave Technology Co., Ltd.
+
OUI:E8DA96*
ID_OUI_FROM_DATABASE=Zhuhai Tianrui Electrical Power Tech. Co., Ltd.
@@ -65029,15 +67141,27 @@ OUI:E8E5D6*
OUI:E8E732*
ID_OUI_FROM_DATABASE=Alcatel-Lucent
+OUI:E8E770*
+ ID_OUI_FROM_DATABASE=Warp9 Tech Design, Inc.
+
OUI:E8E776*
ID_OUI_FROM_DATABASE=Shenzhen Kootion Technology Co., Ltd
OUI:E8E875*
ID_OUI_FROM_DATABASE=iS5 Communications Inc.
+OUI:E8EADA*
+ ID_OUI_FROM_DATABASE=Denkovi Assembly Electroncs LTD
+
+OUI:E8EDF3*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:E8F1B0*
ID_OUI_FROM_DATABASE=SAGEMCOM SAS
+OUI:E8F226*
+ ID_OUI_FROM_DATABASE=MILLSON CUSTOM SOLUTIONS INC.
+
OUI:E8F928*
ID_OUI_FROM_DATABASE=RFTECH SRL
@@ -65056,12 +67180,21 @@ OUI:EC172F*
OUI:EC1A59*
ID_OUI_FROM_DATABASE=Belkin International Inc.
+OUI:EC219F*
+ ID_OUI_FROM_DATABASE=VidaBox LLC
+
+OUI:EC2257*
+ ID_OUI_FROM_DATABASE=JiangSu NanJing University Electronic Information Technology Co.,Ltd
+
OUI:EC233D*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
OUI:EC2368*
ID_OUI_FROM_DATABASE=IntelliVoice Co.,Ltd.
+OUI:EC2AF0*
+ ID_OUI_FROM_DATABASE=Ypsomed AG
+
OUI:EC2C49*
ID_OUI_FROM_DATABASE=University of Tokyo
@@ -65069,11 +67202,14 @@ OUI:EC3091*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
OUI:EC3586*
- ID_OUI_FROM_DATABASE=Apple`
+ ID_OUI_FROM_DATABASE=Apple
OUI:EC3BF0*
ID_OUI_FROM_DATABASE=NovelSat
+OUI:EC3E09*
+ ID_OUI_FROM_DATABASE=PERFORMANCE DESIGNED PRODUCTS, LLC
+
OUI:EC3F05*
ID_OUI_FROM_DATABASE=Institute 706, The Second Academy China Aerospace Science & Industry Corp
@@ -65125,6 +67261,9 @@ OUI:EC66D1*
OUI:EC6C9F*
ID_OUI_FROM_DATABASE=Chengdu Volans Technology CO.,LTD
+OUI:EC71DB*
+ ID_OUI_FROM_DATABASE=Shenzhen Baichuan Digital Technology Co., Ltd.
+
OUI:EC7C74*
ID_OUI_FROM_DATABASE=Justone Technologies Co., Ltd.
@@ -65135,7 +67274,7 @@ OUI:EC836C*
ID_OUI_FROM_DATABASE=RM Tech Co., Ltd.
OUI:EC852F*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:EC888F*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
@@ -65218,6 +67357,9 @@ OUI:ECDE3D*
OUI:ECE09B*
ID_OUI_FROM_DATABASE=Samsung electronics CO., LTD
+OUI:ECE1A9*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:ECE555*
ID_OUI_FROM_DATABASE=Hirschmann Automation
@@ -65242,6 +67384,9 @@ OUI:ECF00E*
OUI:ECF236*
ID_OUI_FROM_DATABASE=NEOMONTANA ELECTRONICS
+OUI:ECF35B*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
OUI:ECFAAA*
ID_OUI_FROM_DATABASE=The IMS Company
@@ -65305,6 +67450,9 @@ OUI:F02A61*
OUI:F02FD8*
ID_OUI_FROM_DATABASE=Bi2-Vision
+OUI:F037A1*
+ ID_OUI_FROM_DATABASE=Huike Electronics (SHENZHEN) CO., LTD.
+
OUI:F03A55*
ID_OUI_FROM_DATABASE=Omega Elektronik AS
@@ -65353,6 +67501,9 @@ OUI:F06853*
OUI:F06BCA*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:F0728C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:F073AE*
ID_OUI_FROM_DATABASE=PEAK-System Technik
@@ -65374,12 +67525,21 @@ OUI:F07F0C*
OUI:F081AF*
ID_OUI_FROM_DATABASE=IRZ AUTOMATION TECHNOLOGIES LTD
+OUI:F0842F*
+ ID_OUI_FROM_DATABASE=ADB Broadband Italia
+
OUI:F084C9*
ID_OUI_FROM_DATABASE=zte corporation
OUI:F08BFE*
ID_OUI_FROM_DATABASE=COSTEL.,CO.LTD
+OUI:F08EDB*
+ ID_OUI_FROM_DATABASE=VeloCloud Networks
+
+OUI:F0921C*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:F0933A*
ID_OUI_FROM_DATABASE=NxtConect
@@ -65405,7 +67565,7 @@ OUI:F0AE51*
ID_OUI_FROM_DATABASE=Xi3 Corp
OUI:F0B479*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:F0B6EB*
ID_OUI_FROM_DATABASE=Poslab Technology Co., Ltd.
@@ -65419,6 +67579,9 @@ OUI:F0BDF1*
OUI:F0BF97*
ID_OUI_FROM_DATABASE=Sony Corporation
+OUI:F0C1F1*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:F0C24C*
ID_OUI_FROM_DATABASE=Zhejiang FeiYue Digital Technology Co., Ltd
@@ -65429,7 +67592,7 @@ OUI:F0C88C*
ID_OUI_FROM_DATABASE=LeddarTech Inc.
OUI:F0CBA1*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:F0D14F*
ID_OUI_FROM_DATABASE=LINEAR LLC
@@ -65437,6 +67600,9 @@ OUI:F0D14F*
OUI:F0D1A9*
ID_OUI_FROM_DATABASE=Apple
+OUI:F0D3A7*
+ ID_OUI_FROM_DATABASE=CobaltRay Co., Ltd
+
OUI:F0D3E7*
ID_OUI_FROM_DATABASE=Sensometrix SA
@@ -65450,7 +67616,7 @@ OUI:F0DB30*
ID_OUI_FROM_DATABASE=Yottabyte
OUI:F0DCE2*
- ID_OUI_FROM_DATABASE=Apple Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:F0DE71*
ID_OUI_FROM_DATABASE=Shanghai EDO Technologies Co.,Ltd.
@@ -65467,6 +67633,9 @@ OUI:F0E5C3*
OUI:F0E77E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:F0EBD0*
+ ID_OUI_FROM_DATABASE=Shanghai Feixun Communication Co.,Ltd.
+
OUI:F0EC39*
ID_OUI_FROM_DATABASE=Essec
@@ -65482,6 +67651,9 @@ OUI:F0F002*
OUI:F0F260*
ID_OUI_FROM_DATABASE=Mobitec AB
+OUI:F0F5AE*
+ ID_OUI_FROM_DATABASE=Adaptrum Inc.
+
OUI:F0F644*
ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd.
@@ -65530,6 +67702,12 @@ OUI:F41F0B*
OUI:F41FC2*
ID_OUI_FROM_DATABASE=Cisco
+OUI:F42012*
+ ID_OUI_FROM_DATABASE=Cuciniale GmbH
+
+OUI:F42896*
+ ID_OUI_FROM_DATABASE=SPECTO PAINEIS ELETRONICOS LTDA
+
OUI:F436E1*
ID_OUI_FROM_DATABASE=Abilis Systems SARL
@@ -65584,6 +67762,9 @@ OUI:F455E0*
OUI:F45842*
ID_OUI_FROM_DATABASE=Boxx TV Ltd
+OUI:F45F69*
+ ID_OUI_FROM_DATABASE=Matsufu Electronics distribution Company
+
OUI:F45FD4*
ID_OUI_FROM_DATABASE=Cisco SPVTG
@@ -65596,6 +67777,9 @@ OUI:F4600D*
OUI:F46349*
ID_OUI_FROM_DATABASE=Diffon Corporation
+OUI:F46ABC*
+ ID_OUI_FROM_DATABASE=Adonit Corp. Ltd.
+
OUI:F46D04*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -65608,6 +67792,9 @@ OUI:F473CA*
OUI:F47626*
ID_OUI_FROM_DATABASE=Viltechmeda UAB
+OUI:F47A4E*
+ ID_OUI_FROM_DATABASE=Woojeon&Handan
+
OUI:F47ACC*
ID_OUI_FROM_DATABASE=SolidFire, Inc.
@@ -65641,6 +67828,9 @@ OUI:F499AC*
OUI:F49F54*
ID_OUI_FROM_DATABASE=Samsung Electronics
+OUI:F4A294*
+ ID_OUI_FROM_DATABASE=EAGLE WORLD DEVELOPMENT CO., LIMITED
+
OUI:F4A52A*
ID_OUI_FROM_DATABASE=Hawa Technologies Inc
@@ -65662,6 +67852,9 @@ OUI:F4B72A*
OUI:F4B7E2*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:F4BD7C*
+ ID_OUI_FROM_DATABASE=Chengdu jinshi communication Co., LTD
+
OUI:F4C6D7*
ID_OUI_FROM_DATABASE=blackned GmbH
@@ -65674,6 +67867,9 @@ OUI:F4C795*
OUI:F4CAE5*
ID_OUI_FROM_DATABASE=FREEBOX SA
+OUI:F4CD90*
+ ID_OUI_FROM_DATABASE=Vispiron Rotec GmbH
+
OUI:F4CE46*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
@@ -65720,7 +67916,7 @@ OUI:F8051C*
ID_OUI_FROM_DATABASE=DRS Imaging and Targeting Solutions
OUI:F80BBE*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:F80BD0*
ID_OUI_FROM_DATABASE=Datang Telecom communication terminal (Tianjin) Co., Ltd.
@@ -65740,18 +67936,30 @@ OUI:F80F84*
OUI:F81037*
ID_OUI_FROM_DATABASE=Atopia Systems, LP
+OUI:F81547*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
+OUI:F81654*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:F81A67*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+OUI:F81CE5*
+ ID_OUI_FROM_DATABASE=Telefonbau Behnke GmbH
+
OUI:F81D93*
ID_OUI_FROM_DATABASE=Longdhua(Beijing) Controls Technology Co.,Ltd
OUI:F81EDF*
- ID_OUI_FROM_DATABASE=Apple, Inc
+ ID_OUI_FROM_DATABASE=Apple
OUI:F82285*
ID_OUI_FROM_DATABASE=Cypress Technology CO., LTD.
+OUI:F82793*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
OUI:F82BC8*
ID_OUI_FROM_DATABASE=Jiangsu Switter Co., Ltd
@@ -65779,12 +67987,18 @@ OUI:F83553*
OUI:F835DD*
ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
+OUI:F83D4E*
+ ID_OUI_FROM_DATABASE=Softlink Automation System Co., Ltd
+
OUI:F83DFF*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
OUI:F842FB*
ID_OUI_FROM_DATABASE=Yasuda Joho Co.,ltd.
+OUI:F845AD*
+ ID_OUI_FROM_DATABASE=Konka Group Co., Ltd.
+
OUI:F8462D*
ID_OUI_FROM_DATABASE=SYNTEC Incorporation
@@ -65794,6 +68008,15 @@ OUI:F8472D*
OUI:F84897*
ID_OUI_FROM_DATABASE=Hitachi, Ltd.
+OUI:F84A7F*
+ ID_OUI_FROM_DATABASE=Innometriks Inc
+
+OUI:F84ABF*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:F84F57*
+ ID_OUI_FROM_DATABASE=Cisco
+
OUI:F85063*
ID_OUI_FROM_DATABASE=Verathon
@@ -65803,9 +68026,21 @@ OUI:F8516D*
OUI:F852DF*
ID_OUI_FROM_DATABASE=VNL Europe AB
+OUI:F854AF*
+ ID_OUI_FROM_DATABASE=ECI Telecom Ltd.
+
+OUI:F8572E*
+ ID_OUI_FROM_DATABASE=Core Brands, LLC
+
+OUI:F85BC9*
+ ID_OUI_FROM_DATABASE=M-Cube Spa
+
OUI:F85F2A*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:F862AA*
+ ID_OUI_FROM_DATABASE=xn systems
+
OUI:F866F2*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -65828,7 +68063,7 @@ OUI:F87B62*
ID_OUI_FROM_DATABASE=FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch
OUI:F87B7A*
- ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:F87B8C*
ID_OUI_FROM_DATABASE=Amped Wireless
@@ -65854,6 +68089,9 @@ OUI:F8912A*
OUI:F893F3*
ID_OUI_FROM_DATABASE=VOLANS
+OUI:F89550*
+ ID_OUI_FROM_DATABASE=Proton Products Chengdu Ltd
+
OUI:F897CF*
ID_OUI_FROM_DATABASE=DAESHIN-INFORMATION TECHNOLOGY CO., LTD.
@@ -65863,9 +68101,18 @@ OUI:F89955*
OUI:F89D0D*
ID_OUI_FROM_DATABASE=Control Technology Inc.
+OUI:F89FB8*
+ ID_OUI_FROM_DATABASE=YAZAKI Energy System Corporation
+
OUI:F8A03D*
ID_OUI_FROM_DATABASE=Dinstar Technologies Co., Ltd.
+OUI:F8A45F*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd
+
+OUI:F8A963*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+
OUI:F8A9DE*
ID_OUI_FROM_DATABASE=PUISSANCE PLUS
@@ -65875,9 +68122,15 @@ OUI:F8AA8A*
OUI:F8AC6D*
ID_OUI_FROM_DATABASE=Deltenna Ltd
+OUI:F8B156*
+ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+
OUI:F8B599*
ID_OUI_FROM_DATABASE=Guangzhou CHNAVS Digital Technology Co.,Ltd
+OUI:F8BC12*
+ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+
OUI:F8C001*
ID_OUI_FROM_DATABASE=Juniper Networks
@@ -65923,6 +68176,9 @@ OUI:F8DB4C*
OUI:F8DB7F*
ID_OUI_FROM_DATABASE=HTC Corporation
+OUI:F8DB88*
+ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
+
OUI:F8DC7A*
ID_OUI_FROM_DATABASE=Variscite LTD
@@ -65948,7 +68204,10 @@ OUI:F8F014*
ID_OUI_FROM_DATABASE=RackWare Inc.
OUI:F8F082*
- ID_OUI_FROM_DATABASE=NAG LLC
+ ID_OUI_FROM_DATABASE=Orion Networks International, Inc
+
+OUI:F8F1B6*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
OUI:F8F25A*
ID_OUI_FROM_DATABASE=G-Lab GmbH
@@ -65968,9 +68227,15 @@ OUI:F8FE5C*
OUI:F8FEA8*
ID_OUI_FROM_DATABASE=Technico Japan Corporation
+OUI:F8FF5F*
+ ID_OUI_FROM_DATABASE=Shenzhen Communication Technology Co.,Ltd
+
OUI:FC0012*
ID_OUI_FROM_DATABASE=Toshiba Samsung Storage Technolgoy Korea Corporation
+OUI:FC019E*
+ ID_OUI_FROM_DATABASE=VIEVU
+
OUI:FC01CD*
ID_OUI_FROM_DATABASE=FUNDACION TEKNIKER
@@ -65995,9 +68260,18 @@ OUI:FC1186*
OUI:FC1794*
ID_OUI_FROM_DATABASE=InterCreative Co., Ltd
+OUI:FC19D0*
+ ID_OUI_FROM_DATABASE=Cloud Vision Networks Technology Co.,Ltd.
+
+OUI:FC1BFF*
+ ID_OUI_FROM_DATABASE=V-ZUG AG
+
OUI:FC1D59*
ID_OUI_FROM_DATABASE=I Smart Cities HK Ltd
+OUI:FC1E16*
+ ID_OUI_FROM_DATABASE=IPEVO corp
+
OUI:FC1F19*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD.
@@ -66008,7 +68282,7 @@ OUI:FC229C*
ID_OUI_FROM_DATABASE=Han Kyung I Net Co.,Ltd.
OUI:FC253F*
- ID_OUI_FROM_DATABASE=Apple, Inc.
+ ID_OUI_FROM_DATABASE=Apple
OUI:FC2A54*
ID_OUI_FROM_DATABASE=Connected Data, Inc.
@@ -66025,6 +68299,9 @@ OUI:FC3598*
OUI:FC35E6*
ID_OUI_FROM_DATABASE=Visteon corp
+OUI:FC3FAB*
+ ID_OUI_FROM_DATABASE=Henan Lanxin Technology Co., Ltd
+
OUI:FC4463*
ID_OUI_FROM_DATABASE=Universal Audio
@@ -66124,6 +68401,9 @@ OUI:FCAD0F*
OUI:FCAF6A*
ID_OUI_FROM_DATABASE=Conemtech AB
+OUI:FCB0C4*
+ ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd
+
OUI:FCC23D*
ID_OUI_FROM_DATABASE=Atmel Corporation
@@ -66148,6 +68428,9 @@ OUI:FCD4F6*
OUI:FCD6BD*
ID_OUI_FROM_DATABASE=Robert Bosch GmbH
+OUI:FCD817*
+ ID_OUI_FROM_DATABASE=Beijing Hesun Technologies Co.Ltd.
+
OUI:FCDB96*
ID_OUI_FROM_DATABASE=ENERVALLEY CO., LTD
@@ -66157,6 +68440,9 @@ OUI:FCDD55*
OUI:FCE192*
ID_OUI_FROM_DATABASE=Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
+OUI:FCE1D9*
+ ID_OUI_FROM_DATABASE=Stable Imaging Solutions LLC
+
OUI:FCE23F*
ID_OUI_FROM_DATABASE=CLAY PAKY SPA
@@ -66183,3 +68469,6 @@ OUI:FCFAF7*
OUI:FCFBFB*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+OUI:FCFE77*
+ ID_OUI_FROM_DATABASE=Hitachi Reftechno, Inc.
diff --git a/hwdb/20-acpi-vendor.hwdb b/hwdb/20-acpi-vendor.hwdb
index 09fc3bddc1..9b3b0094d5 100644
--- a/hwdb/20-acpi-vendor.hwdb
+++ b/hwdb/20-acpi-vendor.hwdb
@@ -4546,9 +4546,6 @@ acpi:PNG*:
acpi:PNL*:
ID_VENDOR_FROM_DATABASE=Panelview, Inc.
-acpi:PNP*:
- ID_VENDOR_FROM_DATABASE=Microsoft
-
acpi:PNR*:
ID_VENDOR_FROM_DATABASE=Planar Systems, Inc.
diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
index a8dcc31776..fdb534d7e8 100644
--- a/hwdb/20-pci-vendor-model.hwdb
+++ b/hwdb/20-pci-vendor-model.hwdb
@@ -926,12 +926,45 @@ pci:v00001000d0000005C*
pci:v00001000d0000005D*
ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3108 [Invader]
+pci:v00001000d0000005Dsv00001028sd00001F41*
+ ID_MODEL_FROM_DATABASE=PERC H830 Adapter
+
+pci:v00001000d0000005Dsv00001028sd00001F42*
+ ID_MODEL_FROM_DATABASE=PERC H730P Adapter
+
+pci:v00001000d0000005Dsv00001028sd00001F43*
+ ID_MODEL_FROM_DATABASE=PERC H730 Adapter
+
+pci:v00001000d0000005Dsv00001028sd00001F47*
+ ID_MODEL_FROM_DATABASE=PERC H730P Mini
+
+pci:v00001000d0000005Dsv00001028sd00001F48*
+ ID_MODEL_FROM_DATABASE=PERC H730P Mini (for blades)
+
+pci:v00001000d0000005Dsv00001028sd00001F49*
+ ID_MODEL_FROM_DATABASE=PERC H730 Mini
+
+pci:v00001000d0000005Dsv00001028sd00001F4A*
+ ID_MODEL_FROM_DATABASE=PERC H730 Mini (for blades)
+
pci:v00001000d0000005E*
ID_MODEL_FROM_DATABASE=SAS1066 PCI-X Fusion-MPT SAS
pci:v00001000d0000005F*
ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury]
+pci:v00001000d0000005Fsv00001028sd00001F44*
+ ID_MODEL_FROM_DATABASE=PERC H330 Adapter
+
+pci:v00001000d0000005Fsv00001028sd00001F4B*
+ ID_MODEL_FROM_DATABASE=PERC H330 Mini
+
+pci:v00001000d0000005Fsv00001028sd00001F4C*
+ ID_MODEL_FROM_DATABASE=PERC H330 Mini (for blades)
+
+pci:v00001000d0000005Fsv00001028sd00001F4D*
+ ID_MODEL_FROM_DATABASE=PERC H330 Embedded (for monolithic)
+
pci:v00001000d00000060*
ID_MODEL_FROM_DATABASE=MegaRAID SAS 1078
@@ -1307,6 +1340,12 @@ pci:v00001000d00000096*
pci:v00001000d00000097*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3
+pci:v00001000d00000097sv00001028sd00001F45*
+ ID_MODEL_FROM_DATABASE=12GB/s HBA internal
+
+pci:v00001000d00000097sv00001028sd00001F46*
+ ID_MODEL_FROM_DATABASE=12GB/s HBA external
+
pci:v00001000d00000407*
ID_MODEL_FROM_DATABASE=MegaRAID
@@ -1604,11 +1643,53 @@ pci:v00001002d00001306*
pci:v00001002d00001307*
ID_MODEL_FROM_DATABASE=Kaveri
+pci:v00001002d00001309*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000130A*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000130B*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000130C*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000130D*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000130E*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000130F*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d00001310*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d00001311*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d00001313*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
pci:v00001002d00001314*
- ID_MODEL_FROM_DATABASE=Wrestler HDMI Audio [Radeon HD 6250/6310]
+ ID_MODEL_FROM_DATABASE=Wrestler HDMI Audio
pci:v00001002d00001314sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
+
+pci:v00001002d00001315*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d00001316*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000131B*
+ ID_MODEL_FROM_DATABASE=Kaveri
+
+pci:v00001002d0000131C*
+ ID_MODEL_FROM_DATABASE=Kaveri
pci:v00001002d00001714*
ID_MODEL_FROM_DATABASE=BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
@@ -1677,19 +1758,19 @@ pci:v00001002d00004150sv00001002sd00004722*
ID_MODEL_FROM_DATABASE=All-in-Wonder 2006 AGP Edition
pci:v00001002d00004150sv00001458sd00004024*
- ID_MODEL_FROM_DATABASE=Giga-Byte GV-R96128D (Primary)
+ ID_MODEL_FROM_DATABASE=GV-R96128D
pci:v00001002d00004150sv0000148Csd00002064*
- ID_MODEL_FROM_DATABASE=PowerColor R96A-C3N
+ ID_MODEL_FROM_DATABASE=R96A-C3N
pci:v00001002d00004150sv0000148Csd00002066*
- ID_MODEL_FROM_DATABASE=PowerColor R96A-C3N
+ ID_MODEL_FROM_DATABASE=R96A-C3N
pci:v00001002d00004150sv0000174Bsd00007C19*
- ID_MODEL_FROM_DATABASE=Sapphire Atlantis Radeon 9600 Pro
+ ID_MODEL_FROM_DATABASE=Atlantis Radeon 9600 Pro
pci:v00001002d00004150sv0000174Bsd00007C29*
- ID_MODEL_FROM_DATABASE=GC-R9600PRO [Sapphire] (Primary)
+ ID_MODEL_FROM_DATABASE=GC-R9600PRO
pci:v00001002d00004150sv000017EEsd00002002*
ID_MODEL_FROM_DATABASE=Radeon 9600 256Mb Primary
@@ -1722,7 +1803,7 @@ pci:v00001002d00004152sv00001462sd00009510*
ID_MODEL_FROM_DATABASE=RX9600XT (MS-8951)
pci:v00001002d00004152sv0000174Bsd00007C29*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon 9600XT
+ ID_MODEL_FROM_DATABASE=Radeon 9600XT
pci:v00001002d00004152sv00001787sd00004002*
ID_MODEL_FROM_DATABASE=Radeon 9600 XT
@@ -1746,7 +1827,7 @@ pci:v00001002d00004157*
ID_MODEL_FROM_DATABASE=RV350 GL [FireGL T2]
pci:v00001002d00004158*
- ID_MODEL_FROM_DATABASE=68800AX [Mach32]
+ ID_MODEL_FROM_DATABASE=68800AX [Graphics Ultra Pro PCI]
pci:v00001002d00004164*
ID_MODEL_FROM_DATABASE=R300 [Radeon 9500 PRO] (Secondary)
@@ -1770,13 +1851,13 @@ pci:v00001002d00004170sv00001002sd00004723*
ID_MODEL_FROM_DATABASE=All-in-Wonder 2006 AGP Edition (Secondary)
pci:v00001002d00004170sv00001458sd00004025*
- ID_MODEL_FROM_DATABASE=Giga-Byte GV-R96128D (Secondary)
+ ID_MODEL_FROM_DATABASE=GV-R96128D (Secondary)
pci:v00001002d00004170sv0000148Csd00002067*
- ID_MODEL_FROM_DATABASE=PowerColor R96A-C3N (Secondary)
+ ID_MODEL_FROM_DATABASE=R96A-C3N (Secondary)
pci:v00001002d00004170sv0000174Bsd00007C28*
- ID_MODEL_FROM_DATABASE=GC-R9600PRO [Sapphire] (Secondary)
+ ID_MODEL_FROM_DATABASE=GC-R9600PRO (Secondary)
pci:v00001002d00004170sv000017EEsd00002003*
ID_MODEL_FROM_DATABASE=Radeon 9600 256Mb (Secondary)
@@ -1806,7 +1887,7 @@ pci:v00001002d00004172sv00001043sd0000C01B*
ID_MODEL_FROM_DATABASE=A9600XT/TD (Secondary)
pci:v00001002d00004172sv0000174Bsd00007C28*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon 9600XT (Secondary)
+ ID_MODEL_FROM_DATABASE=Radeon 9600XT (Secondary)
pci:v00001002d00004172sv00001787sd00004003*
ID_MODEL_FROM_DATABASE=Radeon 9600 XT (Secondary)
@@ -1823,6 +1904,9 @@ pci:v00001002d00004242*
pci:v00001002d00004242sv00001002sd000002AA*
ID_MODEL_FROM_DATABASE=Radeon 8500 AIW DV Edition
+pci:v00001002d00004243*
+ ID_MODEL_FROM_DATABASE=R200 PCI Bridge [All-in-Wonder Radeon 8500DV]
+
pci:v00001002d00004336*
ID_MODEL_FROM_DATABASE=RS100 [Radeon IGP 320M]
@@ -1908,7 +1992,7 @@ pci:v00001002d00004370sv00001462sd00000131*
ID_MODEL_FROM_DATABASE=MS-1013 Notebook
pci:v00001002d00004371*
- ID_MODEL_FROM_DATABASE=IXP SB400 PCI-PCI Bridge
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 PCI-PCI Bridge
pci:v00001002d00004371sv0000103Csd0000308B*
ID_MODEL_FROM_DATABASE=MX6125
@@ -1917,7 +2001,7 @@ pci:v00001002d00004371sv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
pci:v00001002d00004372*
- ID_MODEL_FROM_DATABASE=IXP SB400 SMBus Controller
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 SMBus Controller
pci:v00001002d00004372sv00001025sd00000080*
ID_MODEL_FROM_DATABASE=Aspire 5024WLMMi
@@ -1935,7 +2019,7 @@ pci:v00001002d00004372sv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
pci:v00001002d00004373*
- ID_MODEL_FROM_DATABASE=IXP SB400 USB2 Host Controller
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 USB2 Host Controller
pci:v00001002d00004373sv00001025sd00000080*
ID_MODEL_FROM_DATABASE=Aspire 5024WLMMi
@@ -1950,7 +2034,7 @@ pci:v00001002d00004373sv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
pci:v00001002d00004374*
- ID_MODEL_FROM_DATABASE=IXP SB400 USB Host Controller
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 USB Host Controller
pci:v00001002d00004374sv0000103Csd00002A20*
ID_MODEL_FROM_DATABASE=Pavilion t3030.de Desktop PC
@@ -1962,7 +2046,7 @@ pci:v00001002d00004374sv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
pci:v00001002d00004375*
- ID_MODEL_FROM_DATABASE=IXP SB400 USB Host Controller
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 USB Host Controller
pci:v00001002d00004375sv00001025sd00000080*
ID_MODEL_FROM_DATABASE=Aspire 5024WLMMi
@@ -1977,7 +2061,7 @@ pci:v00001002d00004375sv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
pci:v00001002d00004376*
- ID_MODEL_FROM_DATABASE=IXP SB400 IDE Controller
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 IDE Controller
pci:v00001002d00004376sv00001025sd00000080*
ID_MODEL_FROM_DATABASE=Aspire 5024WLMMi
@@ -1995,7 +2079,7 @@ pci:v00001002d00004376sv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
pci:v00001002d00004377*
- ID_MODEL_FROM_DATABASE=IXP SB400 PCI-ISA Bridge
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 PCI-ISA Bridge
pci:v00001002d00004377sv00001025sd00000080*
ID_MODEL_FROM_DATABASE=Aspire 5024WLMi
@@ -2022,7 +2106,7 @@ pci:v00001002d00004378sv00001462sd00000131*
ID_MODEL_FROM_DATABASE=MS-1013 Notebook
pci:v00001002d00004379*
- ID_MODEL_FROM_DATABASE=IXP SB400 Serial ATA Controller
+ ID_MODEL_FROM_DATABASE=IXP SB4x0 Serial ATA Controller
pci:v00001002d00004379sv00001462sd00007141*
ID_MODEL_FROM_DATABASE=Aspire L250
@@ -2076,7 +2160,7 @@ pci:v00001002d00004380sv000017F2sd00005999*
ID_MODEL_FROM_DATABASE=KI690-AM2 Motherboard
pci:v00001002d00004381*
- ID_MODEL_FROM_DATABASE=SB400 SATA Controller (RAID 5 mode)
+ ID_MODEL_FROM_DATABASE=SB600 SATA Controller (RAID 5 mode)
pci:v00001002d00004382*
ID_MODEL_FROM_DATABASE=SB600 AC97 Audio
@@ -2148,7 +2232,7 @@ pci:v00001002d00004385sv000015D9sd0000A811*
ID_MODEL_FROM_DATABASE=H8DGU
pci:v00001002d00004385sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d00004385sv000017F2sd00005000*
ID_MODEL_FROM_DATABASE=KI690-AM2 Motherboard
@@ -2307,7 +2391,7 @@ pci:v00001002d00004391sv00001043sd00008443*
ID_MODEL_FROM_DATABASE=M5A88-V EVO
pci:v00001002d00004391sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d00004392*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [Non-RAID5 mode]
@@ -2340,7 +2424,7 @@ pci:v00001002d00004396sv000015D9sd0000A811*
ID_MODEL_FROM_DATABASE=H8DGU
pci:v00001002d00004396sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d00004397*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
@@ -2361,7 +2445,7 @@ pci:v00001002d00004397sv000015D9sd0000A811*
ID_MODEL_FROM_DATABASE=H8DGU
pci:v00001002d00004397sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d00004398*
ID_MODEL_FROM_DATABASE=SB7x0 USB OHCI1 Controller
@@ -2388,7 +2472,7 @@ pci:v00001002d00004399sv00001043sd00008443*
ID_MODEL_FROM_DATABASE=M5A88-V EVO
pci:v00001002d00004399sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d0000439C*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller
@@ -2415,7 +2499,7 @@ pci:v00001002d0000439Dsv00001043sd00008443*
ID_MODEL_FROM_DATABASE=M5A88-V EVO
pci:v00001002d0000439Dsv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d000043A0*
ID_MODEL_FROM_DATABASE=SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0)
@@ -2628,7 +2712,7 @@ pci:v00001002d00004754*
ID_MODEL_FROM_DATABASE=3D Rage II/II+ PCI [Mach64 GT]
pci:v00001002d00004755*
- ID_MODEL_FROM_DATABASE=3D Rage II+ PCI [Mach64 GTB]
+ ID_MODEL_FROM_DATABASE=Mach64 GTB [3D Rage II+ DVD]
pci:v00001002d00004756*
ID_MODEL_FROM_DATABASE=3D Rage IIC PCI [Mach64 GT IIC]
@@ -2691,7 +2775,7 @@ pci:v00001002d00004966sv00001681sd00000040*
ID_MODEL_FROM_DATABASE=RV250 If [3D prophet 9000]
pci:v00001002d00004966sv0000174Bsd00007176*
- ID_MODEL_FROM_DATABASE=RV250 If [Sapphire Radeon 9000 Pro]
+ ID_MODEL_FROM_DATABASE=Radeon 9000 Pro
pci:v00001002d00004966sv0000174Bsd00007192*
ID_MODEL_FROM_DATABASE=RV250 If [Radeon 9000 "Atlantis"]
@@ -3171,7 +3255,7 @@ pci:v00001002d0000514Csv00001681sd00000010*
ID_MODEL_FROM_DATABASE=Radeon 8500 [3D Prophet 8500 128Mb]
pci:v00001002d0000514Csv0000174Bsd00007149*
- ID_MODEL_FROM_DATABASE=Radeon R200 QL [Sapphire Radeon 8500 LE]
+ ID_MODEL_FROM_DATABASE=Radeon 8500 LE
pci:v00001002d0000514Csv00001787sd00000F08*
ID_MODEL_FROM_DATABASE=Radeon R200 QL [PowerMagic Radeon 8500]
@@ -3207,7 +3291,7 @@ pci:v00001002d00005157sv0000174Bsd00007146*
ID_MODEL_FROM_DATABASE=RV200 QW [Radeon 7500 LE]
pci:v00001002d00005157sv0000174Bsd00007147*
- ID_MODEL_FROM_DATABASE=RV200 QW [Sapphire Radeon 7500LE]
+ ID_MODEL_FROM_DATABASE=Radeon 7500 LE
pci:v00001002d00005157sv0000174Bsd00007161*
ID_MODEL_FROM_DATABASE=Radeon RV200 QW [Radeon 7500 LE]
@@ -3276,10 +3360,10 @@ pci:v00001002d00005159sv0000174Bsd00000280*
ID_MODEL_FROM_DATABASE=Radeon RV100 QY [Radeon 7000/VE]
pci:v00001002d00005159sv0000174Bsd00007112*
- ID_MODEL_FROM_DATABASE=RV100 QY [Sapphire Radeon VE 7000]
+ ID_MODEL_FROM_DATABASE=Radeon VE 7000
pci:v00001002d00005159sv0000174Bsd00007C28*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon VE 7000 DDR
+ ID_MODEL_FROM_DATABASE=Radeon VE 7000 DDR
pci:v00001002d00005159sv00001787sd00000202*
ID_MODEL_FROM_DATABASE=RV100 QY [Excalibur Radeon 7000]
@@ -3579,16 +3663,16 @@ pci:v00001002d00005941*
ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200] (Secondary)
pci:v00001002d00005941sv00001458sd00004019*
- ID_MODEL_FROM_DATABASE=Gigabyte Radeon 9200
+ ID_MODEL_FROM_DATABASE=Radeon 9200
pci:v00001002d00005941sv0000174Bsd00007C12*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon 9200
+ ID_MODEL_FROM_DATABASE=Radeon 9200
pci:v00001002d00005941sv000017AFsd0000200D*
ID_MODEL_FROM_DATABASE=Excalibur Radeon 9200
pci:v00001002d00005941sv000018BCsd00000050*
- ID_MODEL_FROM_DATABASE=GeXcube GC-R9200-C3 (Secondary)
+ ID_MODEL_FROM_DATABASE=GC-R9200-C3 (Secondary)
pci:v00001002d00005944*
ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE PCI]
@@ -3669,10 +3753,10 @@ pci:v00001002d00005961sv000012ABsd00005961*
ID_MODEL_FROM_DATABASE=YUAN SMARTVGA Radeon 9200
pci:v00001002d00005961sv00001458sd00004018*
- ID_MODEL_FROM_DATABASE=Gigabyte Radeon 9200
+ ID_MODEL_FROM_DATABASE=Radeon 9200
pci:v00001002d00005961sv0000174Bsd00007C13*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon 9200
+ ID_MODEL_FROM_DATABASE=Radeon 9200
pci:v00001002d00005961sv000017AFsd0000200C*
ID_MODEL_FROM_DATABASE=Excalibur Radeon 9200
@@ -3681,7 +3765,7 @@ pci:v00001002d00005961sv000018BCsd00000050*
ID_MODEL_FROM_DATABASE=Radeon 9200 Game Buster
pci:v00001002d00005961sv000018BCsd00000051*
- ID_MODEL_FROM_DATABASE=GeXcube GC-R9200-C3
+ ID_MODEL_FROM_DATABASE=GC-R9200-C3
pci:v00001002d00005961sv000018BCsd00000053*
ID_MODEL_FROM_DATABASE=Radeon 9200 Game Buster VIVO
@@ -3696,7 +3780,7 @@ pci:v00001002d00005964sv00001002sd00005964*
ID_MODEL_FROM_DATABASE=Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz
pci:v00001002d00005964sv00001043sd0000C006*
- ID_MODEL_FROM_DATABASE=ASUS Radeon 9200 SE / TD / 128M
+ ID_MODEL_FROM_DATABASE=Radeon 9200 SE / TD / 128M
pci:v00001002d00005964sv00001458sd00004018*
ID_MODEL_FROM_DATABASE=Radeon 9200 SE
@@ -3711,7 +3795,7 @@ pci:v00001002d00005964sv0000148Csd00002073*
ID_MODEL_FROM_DATABASE=CN-AG92E
pci:v00001002d00005964sv0000174Bsd00007C13*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon 9200 SE
+ ID_MODEL_FROM_DATABASE=Radeon 9200 SE
pci:v00001002d00005964sv00001787sd00005964*
ID_MODEL_FROM_DATABASE=Excalibur 9200SE VIVO 128M
@@ -3741,7 +3825,7 @@ pci:v00001002d00005975*
ID_MODEL_FROM_DATABASE=RS482M [Mobility Radeon Xpress 200]
pci:v00001002d00005978*
- ID_MODEL_FROM_DATABASE=RD790 PCI to PCI bridge (external gfx0 port A)
+ ID_MODEL_FROM_DATABASE=RX780/RD790 PCI to PCI bridge (external gfx0 port A)
pci:v00001002d00005978sv00001849sd00005957*
ID_MODEL_FROM_DATABASE=A770CrossFire Motherboard
@@ -3753,13 +3837,13 @@ pci:v00001002d0000597A*
ID_MODEL_FROM_DATABASE=RD790 PCI to PCI bridge (PCI express gpp port A)
pci:v00001002d0000597B*
- ID_MODEL_FROM_DATABASE=RD790 PCI to PCI bridge (PCI express gpp port B)
+ ID_MODEL_FROM_DATABASE=RX780/RD790 PCI to PCI bridge (PCI express gpp port B)
pci:v00001002d0000597C*
ID_MODEL_FROM_DATABASE=RD790 PCI to PCI bridge (PCI express gpp port C)
pci:v00001002d0000597D*
- ID_MODEL_FROM_DATABASE=RD790 PCI to PCI bridge (PCI express gpp port D)
+ ID_MODEL_FROM_DATABASE=RX780/RD790 PCI to PCI bridge (PCI express gpp port D)
pci:v00001002d0000597E*
ID_MODEL_FROM_DATABASE=RD790 PCI to PCI bridge (PCI express gpp port E)
@@ -3845,26 +3929,29 @@ pci:v00001002d00005A20*
pci:v00001002d00005A23*
ID_MODEL_FROM_DATABASE=RD990 I/O Memory Management Unit (IOMMU)
+pci:v00001002d00005A31*
+ ID_MODEL_FROM_DATABASE=RC410 Host Bridge
+
pci:v00001002d00005A33*
- ID_MODEL_FROM_DATABASE=Radeon Xpress 200 Host Bridge
+ ID_MODEL_FROM_DATABASE=RS400 Host Bridge
pci:v00001002d00005A34*
- ID_MODEL_FROM_DATABASE=RS480 PCI-X Root Port
+ ID_MODEL_FROM_DATABASE=RS4xx PCI Express Port [ext gfx]
pci:v00001002d00005A36*
- ID_MODEL_FROM_DATABASE=RS480 PCI Bridge
+ ID_MODEL_FROM_DATABASE=RC4xx/RS4xx PCI Express Port 1
pci:v00001002d00005A37*
- ID_MODEL_FROM_DATABASE=RS480 PCI Bridge
+ ID_MODEL_FROM_DATABASE=RC4xx/RS4xx PCI Express Port 2
pci:v00001002d00005A38*
- ID_MODEL_FROM_DATABASE=RS480 PCI Bridge
+ ID_MODEL_FROM_DATABASE=RC4xx/RS4xx PCI Express Port 3
pci:v00001002d00005A39*
- ID_MODEL_FROM_DATABASE=RS480 PCI Bridge
+ ID_MODEL_FROM_DATABASE=RC4xx/RS4xx PCI Express Port 4
pci:v00001002d00005A3F*
- ID_MODEL_FROM_DATABASE=RS480 PCI Bridge
+ ID_MODEL_FROM_DATABASE=RC4xx/RS4xx PCI Bridge [int gfx]
pci:v00001002d00005A3Fsv00001462sd00007217*
ID_MODEL_FROM_DATABASE=Aspire L250
@@ -3927,7 +4014,7 @@ pci:v00001002d00005B70sv00001462sd00000403*
ID_MODEL_FROM_DATABASE=Radeon X300 SE 128MB DDR
pci:v00001002d00005B70sv0000174Bsd00000501*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon X300 SE
+ ID_MODEL_FROM_DATABASE=Radeon X300 SE
pci:v00001002d00005B70sv0000196Dsd00001087*
ID_MODEL_FROM_DATABASE=Radeon X300 SE HyperMemory
@@ -3969,7 +4056,7 @@ pci:v00001002d00005D44sv0000147Bsd00006190*
ID_MODEL_FROM_DATABASE=R9200SE-DT (Secondary)
pci:v00001002d00005D44sv0000174Bsd00007C12*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon 9200 SE (Secondary)
+ ID_MODEL_FROM_DATABASE=Radeon 9200 SE (Secondary)
pci:v00001002d00005D44sv00001787sd00005965*
ID_MODEL_FROM_DATABASE=Excalibur 9200SE VIVO 128M (Secondary)
@@ -4013,9 +4100,6 @@ pci:v00001002d00005D52*
pci:v00001002d00005D52sv00001002sd00000B12*
ID_MODEL_FROM_DATABASE=PowerColor X850XT PCIe (Primary)
-pci:v00001002d00005D52sv00001002sd00000B13*
- ID_MODEL_FROM_DATABASE=PowerColor X850XT PCIe (Secondary)
-
pci:v00001002d00005D57*
ID_MODEL_FROM_DATABASE=R423 [Radeon X800 XT]
@@ -4028,6 +4112,9 @@ pci:v00001002d00005D6F*
pci:v00001002d00005D72*
ID_MODEL_FROM_DATABASE=R480 [Radeon X850 XT] (Secondary)
+pci:v00001002d00005D72sv00001002sd00000B13*
+ ID_MODEL_FROM_DATABASE=PowerColor X850XT PCIe (Secondary)
+
pci:v00001002d00005D77*
ID_MODEL_FROM_DATABASE=R423 [Radeon X800 XT] (Secondary)
@@ -4050,7 +4137,7 @@ pci:v00001002d00005E4D*
ID_MODEL_FROM_DATABASE=RV410 [Radeon X700]
pci:v00001002d00005E4Dsv0000148Csd00002116*
- ID_MODEL_FROM_DATABASE=PowerColor Bravo X700
+ ID_MODEL_FROM_DATABASE=Bravo X700
pci:v00001002d00005E4F*
ID_MODEL_FROM_DATABASE=RV410 [Radeon X700]
@@ -4065,7 +4152,7 @@ pci:v00001002d00005E6D*
ID_MODEL_FROM_DATABASE=RV410 [Radeon X700] (Secondary)
pci:v00001002d00005E6Dsv0000148Csd00002117*
- ID_MODEL_FROM_DATABASE=PowerColor Bravo X700
+ ID_MODEL_FROM_DATABASE=Bravo X700 (Secondary)
pci:v00001002d00005F57*
ID_MODEL_FROM_DATABASE=R423 [Radeon X800 XT]
@@ -4092,7 +4179,7 @@ pci:v00001002d00006610*
ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8600 Series]
pci:v00001002d00006611*
- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8500 Series]
+ ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570]
pci:v00001002d00006613*
ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8500 Series]
@@ -4110,7 +4197,7 @@ pci:v00001002d00006631*
ID_MODEL_FROM_DATABASE=Oland
pci:v00001002d00006640*
- ID_MODEL_FROM_DATABASE=Saturn XT
+ ID_MODEL_FROM_DATABASE=Saturn [Radeon HD 8950]
pci:v00001002d00006641*
ID_MODEL_FROM_DATABASE=Saturn PRO
@@ -4125,7 +4212,7 @@ pci:v00001002d00006651*
ID_MODEL_FROM_DATABASE=Bonaire
pci:v00001002d00006658*
- ID_MODEL_FROM_DATABASE=Bonaire
+ ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X]
pci:v00001002d0000665C*
ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770]
@@ -4148,17 +4235,26 @@ pci:v00001002d0000665Csv0000174Bsd0000E253*
pci:v00001002d0000665Csv00001787sd00002329*
ID_MODEL_FROM_DATABASE=Radeon HD 7790 TurboDuo
+pci:v00001002d0000665D*
+ ID_MODEL_FROM_DATABASE=Bonaire
+
pci:v00001002d00006660*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8600M Series]
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A]
pci:v00001002d00006663*
ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8500M Series]
+pci:v00001002d00006664*
+ ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series]
+
+pci:v00001002d00006665*
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M200 Series]
+
pci:v00001002d00006667*
- ID_MODEL_FROM_DATABASE=Sun
+ ID_MODEL_FROM_DATABASE=Jet ULT [Radeon R5 M200 Series]
pci:v00001002d0000666F*
- ID_MODEL_FROM_DATABASE=Sun LE
+ ID_MODEL_FROM_DATABASE=Sun [Radeon HD 8500M]
pci:v00001002d00006670*
ID_MODEL_FROM_DATABASE=Hainan
@@ -4250,21 +4346,474 @@ pci:v00001002d0000673Esv0000148Csd00007720*
pci:v00001002d00006740*
ID_MODEL_FROM_DATABASE=Whistler [Radeon HD 6730M/6770M/7690M XT]
+pci:v00001002d00006740sv00001019sd0000238C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv00001019sd0000238E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv00001019sd00002391*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv00001019sd00002392*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
pci:v00001002d00006740sv00001028sd000004A3*
ID_MODEL_FROM_DATABASE=Precision M4600
+pci:v00001002d00006740sv00001028sd0000053E*
+ ID_MODEL_FROM_DATABASE=FirePro M5950
+
+pci:v00001002d00006740sv0000103Csd00001630*
+ ID_MODEL_FROM_DATABASE=FirePro M5950
+
+pci:v00001002d00006740sv0000103Csd00001631*
+ ID_MODEL_FROM_DATABASE=FirePro M5950
+
+pci:v00001002d00006740sv0000103Csd0000164B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000103Csd0000164E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000103Csd00001657*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd00001658*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd0000165A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd0000165B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd00001688*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd00001689*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd0000168A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd0000185E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7690M XT
+
+pci:v00001002d00006740sv0000103Csd00003388*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd00003389*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd00003582*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6770M
+
+pci:v00001002d00006740sv0000103Csd0000366C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv00001043sd00001D02*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv00001043sd00001D12*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000104Dsd00009084*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000104Dsd00009085*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000144Dsd0000B074*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000144Dsd0000B077*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000144Dsd0000B084*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv0000144Dsd0000B088*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
+pci:v00001002d00006740sv000017AAsd00003982*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6730M
+
pci:v00001002d00006741*
- ID_MODEL_FROM_DATABASE=Whistler [Radeon HD 6600M/6700M/7600M Series]
+ ID_MODEL_FROM_DATABASE=Whistler [Radeon HD 6630M/6650M/6750M/7670M/7690M]
+
+pci:v00001002d00006741sv00001019sd0000238E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001019sd0000238F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000379*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000037B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000037E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000382*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000384*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000385*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000386*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000387*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000388*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000442*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000451*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000489*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000048B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000048C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000050A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000050B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000050C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000050E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000050F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000513*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000514*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000515*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000516*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000051E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000051F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000520*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000521*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000052A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000555*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000556*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000055D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000055E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000056D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000059A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000059B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000059E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd0000059F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000600*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000605*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000606*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001025sd00000619*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001028sd000004C1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv00001028sd000004C5*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv00001028sd000004CD*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv00001028sd000004D7*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv00001028sd000004D9*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv00001028sd0000052D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000103Csd00001617*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv0000103Csd00001646*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd00001647*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv0000103Csd0000164B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv0000103Csd0000164E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv0000103Csd00001688*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd00001689*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd0000168A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd00001860*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7690M
+
+pci:v00001002d00006741sv0000103Csd00003385*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000103Csd00003560*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd0000358D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd00003590*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd00003593*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000103Csd0000366C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001043sd00001CD2*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001043sd00002121*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001043sd00002122*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001043sd00002123*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001043sd00002125*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006741sv00001043sd00002127*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006741sv0000104Dsd0000907B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000104Dsd00009080*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000104Dsd00009081*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
pci:v00001002d00006741sv0000106Bsd000000E2*
ID_MODEL_FROM_DATABASE=MacBookPro8,2 [Core i7, 15", Late 2011]
+pci:v00001002d00006741sv00001179sd0000FD63*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv00001179sd0000FD65*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000144Dsd0000C093*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv0000144Dsd0000C0AC*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv0000144Dsd0000C0B3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6750M
+
+pci:v00001002d00006741sv0000144Dsd0000C539*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000144Dsd0000C609*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv0000152Dsd00000914*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv000017AAsd000021E1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6630M
+
+pci:v00001002d00006741sv000017AAsd00003970*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv000017AAsd00003976*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
+pci:v00001002d00006741sv00001854sd00000907*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650M
+
pci:v00001002d00006742*
ID_MODEL_FROM_DATABASE=Whistler LE [Radeon HD 6610M/7610M]
+pci:v00001002d00006742sv00001002sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv00001019sd00002393*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6610M
+
pci:v00001002d00006742sv00001043sd00001D82*
ID_MODEL_FROM_DATABASE=K53SK Laptop Radeon HD 7610M
+pci:v00001002d00006742sv00001179sd0000FB22*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB23*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB27*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB2A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB2C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB30*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB31*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB32*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB38*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB39*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB3A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB3B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB40*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB41*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB47*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB48*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB49*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB51*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB52*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB53*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB56*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB81*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB82*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FB83*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FC56*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FCD4*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001179sd0000FCEE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7610M
+
+pci:v00001002d00006742sv00001458sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv00001462sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv0000148Csd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv00001682sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv0000174Bsd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv00001787sd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
+pci:v00001002d00006742sv000017AFsd00006570*
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570]
+
pci:v00001002d00006742sv00008086sd00002111*
ID_MODEL_FROM_DATABASE=Radeon HD 6625M
@@ -4278,38 +4827,155 @@ pci:v00001002d0000674A*
ID_MODEL_FROM_DATABASE=Turks GL [FirePro V3900]
pci:v00001002d00006750*
- ID_MODEL_FROM_DATABASE=Onega [Radeon HD 6650A / 7650A]
+ ID_MODEL_FROM_DATABASE=Onega [Radeon HD 6650A/7650A]
+
+pci:v00001002d00006750sv00001462sd00002670*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6670A
+
+pci:v00001002d00006750sv000017AAsd00003079*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650A
+
+pci:v00001002d00006750sv000017AAsd0000307A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650A
+
+pci:v00001002d00006750sv000017AAsd00003087*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650A
+
+pci:v00001002d00006750sv000017AAsd00003618*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650A
+
+pci:v00001002d00006750sv000017AAsd00003623*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650A
+
+pci:v00001002d00006750sv000017AAsd00003627*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6650A
pci:v00001002d00006751*
- ID_MODEL_FROM_DATABASE=Turks XT [Radeon HD 7670A]
+ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 7650A/7670A]
+
+pci:v00001002d00006751sv00001028sd00000548*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650A
+
+pci:v00001002d00006751sv00001462sd00002671*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670A
+
+pci:v00001002d00006751sv00001462sd00002672*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670A
+
+pci:v00001002d00006751sv00001462sd00002680*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650A
+
+pci:v00001002d00006751sv00001462sd00002681*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650A
+
+pci:v00001002d00006751sv000017AAsd00003087*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650A
pci:v00001002d00006758*
- ID_MODEL_FROM_DATABASE=Turks XT [Radeon HD 6670]
+ ID_MODEL_FROM_DATABASE=Turks XT [Radeon HD 6670/7670]
+
+pci:v00001002d00006758sv00001028sd00000B0E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6670
+
+pci:v00001002d00006758sv0000103Csd00006882*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6670
+
+pci:v00001002d00006758sv00001462sd0000250A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670
+
+pci:v00001002d00006758sv0000148Csd00007670*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670
+
+pci:v00001002d00006758sv00001545sd00007670*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670
+
+pci:v00001002d00006758sv00001682sd00003300*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670
+
+pci:v00001002d00006758sv0000174Bsd00007670*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670
+
+pci:v00001002d00006758sv0000174Bsd0000E181*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6670
pci:v00001002d00006759*
- ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570]
+ ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570]
+
+pci:v00001002d00006759sv0000103Csd00003130*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001462sd00002500*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001462sd00002509*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
pci:v00001002d00006759sv0000148Csd00007570*
ID_MODEL_FROM_DATABASE=Radeon HD 7570
+pci:v00001002d00006759sv00001642sd00003A67*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001682sd00003280*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
pci:v00001002d00006759sv0000174Bsd00007570*
ID_MODEL_FROM_DATABASE=Radeon HD 7570
+pci:v00001002d00006759sv0000174Bsd0000E142*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv0000174Bsd0000E181*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001B0Asd0000908F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001B0Asd00009090*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001B0Asd00009091*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001B0Asd00009092*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001B0Asd0000909E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570
+
+pci:v00001002d00006759sv00001B0Asd000090B5*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
+pci:v00001002d00006759sv00001B0Asd000090B6*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
pci:v00001002d0000675D*
ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 7570]
pci:v00001002d0000675F*
- ID_MODEL_FROM_DATABASE=Turks LE [Radeon HD 5570/6510/7510]
+ ID_MODEL_FROM_DATABASE=Turks LE [Radeon HD 5570/6510/7510/8510]
pci:v00001002d0000675Fsv0000148Csd00006510*
ID_MODEL_FROM_DATABASE=Radeon HD 6510
+pci:v00001002d0000675Fsv0000148Csd00006530*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6530
+
+pci:v00001002d0000675Fsv0000148Csd00007510*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7510
+
+pci:v00001002d0000675Fsv00001545sd00007570*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
pci:v00001002d0000675Fsv0000174Bsd00006510*
ID_MODEL_FROM_DATABASE=Radeon HD 6510
pci:v00001002d0000675Fsv0000174Bsd00007510*
ID_MODEL_FROM_DATABASE=Radeon HD 7510
+pci:v00001002d0000675Fsv0000174Bsd00008510*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8510
+
pci:v00001002d0000675Fsv00001787sd00002012*
ID_MODEL_FROM_DATABASE=Radeon HD 5570 2GB GDDR3
@@ -4319,11 +4985,497 @@ pci:v00001002d0000675Fsv00001787sd00002314*
pci:v00001002d00006760*
ID_MODEL_FROM_DATABASE=Seymour [Radeon HD 6400M/7400M Series]
+pci:v00001002d00006760sv00001002sd00000124*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001002sd00000134*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001019sd0000238B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001019sd0000238E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001019sd00002390*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001019sd00009985*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd000004C1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd000004C3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd000004CA*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd000004CB*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
pci:v00001002d00006760sv00001028sd000004CC*
ID_MODEL_FROM_DATABASE=Vostro 3350
+pci:v00001002d00006760sv00001028sd000004D1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd000004D3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd000004D7*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd00000502*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd00000503*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd00000506*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd00000507*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd00000514*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001028sd0000051C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv00001028sd0000051D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv0000103Csd0000161A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000161B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000161E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000161F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001622*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv0000103Csd00001623*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv0000103Csd0000164A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000164D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001651*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001656*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00001658*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00001659*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000165B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000165D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000165F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001661*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001663*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001665*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001667*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001669*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000166B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000166C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000166E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001670*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001672*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000167A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000167B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000167D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000167F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000168C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000168F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001694*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001696*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00001698*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000169A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000169C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00001855*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv0000103Csd00001859*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv0000103Csd0000185C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv0000103Csd0000185D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv0000103Csd0000185F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv0000103Csd00001863*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv0000103Csd0000355C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000355F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00003563*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00003565*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00003567*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00003569*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00003581*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00003584*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd0000358C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000358F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00003592*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd00003596*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000103Csd0000366B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000103Csd00003671*
+ ID_MODEL_FROM_DATABASE=FirePro M3900
+
+pci:v00001002d00006760sv0000103Csd00003673*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd0000100A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd0000100C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd0000101B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd0000101C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd0000102A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv00001043sd0000102C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd0000104B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd0000105D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd0000106B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd0000106D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd0000107D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd00001CB2*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd00001D22*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd00001D32*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd00002001*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd00002002*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd00002107*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd00002108*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd00002109*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
pci:v00001002d00006760sv00001043sd000084A0*
- ID_MODEL_FROM_DATABASE=Seymour XT [Radeon HD 6470M]
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd000084E9*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001043sd00008515*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd00008517*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001043sd0000855A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv0000104Dsd0000907B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000104Dsd00009081*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000104Dsd00009084*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000104Dsd00009085*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001179sd00000001*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv00001179sd00000003*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv00001179sd00000004*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450M
+
+pci:v00001002d00006760sv00001179sd0000FB22*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB23*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB2C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB31*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB32*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB33*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB38*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB39*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB3A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB40*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB41*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB42*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB47*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB48*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB51*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB52*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB53*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB81*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB82*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FB83*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FC51*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001179sd0000FC52*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FC56*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FCD3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FCD4*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FCEE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv00001179sd0000FDEE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv0000144Dsd0000B074*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000144Dsd0000B084*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000144Dsd0000C095*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000144Dsd0000C0B3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490M
+
+pci:v00001002d00006760sv0000144Dsd0000C538*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000144Dsd0000C581*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000144Dsd0000C589*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000144Dsd0000C609*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv0000144Dsd0000C625*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv0000144Dsd0000C636*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv00001462sd000010AC*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv0000152Dsd00000916*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv000017AAsd000021E5*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv000017AAsd00003900*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv000017AAsd00003902*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv000017AAsd00003969*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv000017AAsd00003970*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv000017AAsd00003976*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv000017AAsd0000397B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv000017AAsd0000397D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv000017AAsd00005101*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470M
+
+pci:v00001002d00006760sv000017AAsd00005102*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv000017AAsd00005103*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv000017AAsd00005106*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450M
+
+pci:v00001002d00006760sv00001854sd00000897*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001854sd00000900*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001854sd00000908*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
+
+pci:v00001002d00006760sv00001854sd00002015*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6470M
pci:v00001002d00006761*
ID_MODEL_FROM_DATABASE=Seymour LP [Radeon HD 6430M]
@@ -4349,6 +5501,24 @@ pci:v00001002d00006768*
pci:v00001002d00006770*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450A/7450A]
+pci:v00001002d00006770sv000017AAsd0000308D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+
+pci:v00001002d00006770sv000017AAsd00003623*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450A
+
+pci:v00001002d00006770sv000017AAsd00003627*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450A
+
+pci:v00001002d00006770sv000017AAsd00003629*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450A
+
+pci:v00001002d00006770sv000017AAsd0000363C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450A
+
+pci:v00001002d00006770sv000017AAsd00003658*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470A
+
pci:v00001002d00006771*
ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490]
@@ -4356,26 +5526,134 @@ pci:v00001002d00006772*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7450A]
pci:v00001002d00006778*
- ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470]
+ ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470]
+
+pci:v00001002d00006778sv00001019sd00000024*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470
+
+pci:v00001002d00006778sv00001019sd00000027*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8470
+
+pci:v00001002d00006778sv00001028sd00002120*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470
+
+pci:v00001002d00006778sv00001462sd0000B491*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8470
+
+pci:v00001002d00006778sv00001462sd0000B492*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8470
pci:v00001002d00006778sv00001462sd0000B493*
ID_MODEL_FROM_DATABASE=Radeon HD 8470 OEM
+pci:v00001002d00006778sv00001642sd00003C65*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8470
+
+pci:v00001002d00006778sv00001642sd00003C75*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8470
+
+pci:v00001002d00006778sv0000174Bsd00008145*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8470
+
+pci:v00001002d00006778sv0000174Bsd0000E145*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470
+
pci:v00001002d00006779*
- ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450]
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450]
+
+pci:v00001002d00006779sv00001019sd00000016*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001019sd00000017*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001019sd00000018*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001028sd00002120*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv0000103Csd00002128*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv0000103Csd00002AEE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+
+pci:v00001002d00006779sv00001462sd00002346*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
+
+pci:v00001002d00006779sv00001462sd00002490*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001462sd00002494*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001462sd00002496*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
+
+pci:v00001002d00006779sv0000148Csd00007450*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
pci:v00001002d00006779sv0000148Csd00008450*
ID_MODEL_FROM_DATABASE=Radeon HD 8450 OEM
+pci:v00001002d00006779sv00001545sd00007470*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7470
+
+pci:v00001002d00006779sv00001642sd00003A65*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001642sd00003A66*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
+
+pci:v00001002d00006779sv00001642sd00003A75*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001642sd00003A76*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
+
+pci:v00001002d00006779sv00001682sd00003200*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450
+
pci:v00001002d00006779sv0000174Bsd00007450*
ID_MODEL_FROM_DATABASE=Radeon HD 7450
+pci:v00001002d00006779sv0000174Bsd0000E127*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv0000174Bsd0000E153*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
pci:v00001002d00006779sv0000174Bsd0000E164*
ID_MODEL_FROM_DATABASE=Radeon HD 6450 1 GB DDR3
+pci:v00001002d00006779sv0000174Bsd0000E180*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv0000174Bsd0000E201*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
pci:v00001002d00006779sv000017AFsd00008450*
ID_MODEL_FROM_DATABASE=Radeon HD 8450 OEM
+pci:v00001002d00006779sv00001B0Asd00009096*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001B0Asd00009097*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001B0Asd000090A8*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450A
+
+pci:v00001002d00006779sv00001B0Asd000090B1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450
+
+pci:v00001002d00006779sv00001B0Asd000090B3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+
+pci:v00001002d00006779sv00001B0Asd000090BB*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7450A
+
pci:v00001002d0000677B*
ID_MODEL_FROM_DATABASE=Caicos PRO [Radeon HD 7450]
@@ -4418,6 +5696,9 @@ pci:v00001002d00006798*
pci:v00001002d00006798sv00001002sd00003000*
ID_MODEL_FROM_DATABASE=Tahiti XT2 [Radeon HD 7970 GHz Edition]
+pci:v00001002d00006798sv00001002sd00004000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8970 OEM
+
pci:v00001002d00006798sv00001043sd0000041C*
ID_MODEL_FROM_DATABASE=HD 7970 DirectCU II
@@ -4481,12 +5762,42 @@ pci:v00001002d0000679Asv00001462sd00003000*
pci:v00001002d0000679B*
ID_MODEL_FROM_DATABASE=Malta [Radeon HD 7990]
+pci:v00001002d0000679Bsv00001002sd00000B28*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM
+
+pci:v00001002d0000679Bsv00001002sd00000B2A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7990
+
+pci:v00001002d0000679Bsv00001462sd00008036*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM
+
pci:v00001002d0000679E*
ID_MODEL_FROM_DATABASE=Tahiti LE [Radeon HD 7870 XT]
pci:v00001002d0000679F*
ID_MODEL_FROM_DATABASE=Tahiti
+pci:v00001002d000067A0*
+ ID_MODEL_FROM_DATABASE=Hawaii XT GL
+
+pci:v00001002d000067A1*
+ ID_MODEL_FROM_DATABASE=Hawaii GL
+
+pci:v00001002d000067A2*
+ ID_MODEL_FROM_DATABASE=Hawaii GL
+
+pci:v00001002d000067B0*
+ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X]
+
+pci:v00001002d000067B1*
+ ID_MODEL_FROM_DATABASE=Hawaii PRO [Radeon R9 290]
+
+pci:v00001002d000067B9*
+ ID_MODEL_FROM_DATABASE=Vesuvius
+
+pci:v00001002d000067BE*
+ ID_MODEL_FROM_DATABASE=Hawaii LE
+
pci:v00001002d00006800*
ID_MODEL_FROM_DATABASE=Wimbledon XT [Radeon HD 7970M]
@@ -4527,10 +5838,10 @@ pci:v00001002d00006809*
ID_MODEL_FROM_DATABASE=Pitcairn LE GL [FirePro W5000]
pci:v00001002d00006810*
- ID_MODEL_FROM_DATABASE=Pitcairn
+ ID_MODEL_FROM_DATABASE=Curacao XT [Radeon R9 270X]
pci:v00001002d00006811*
- ID_MODEL_FROM_DATABASE=Pitcairn
+ ID_MODEL_FROM_DATABASE=Curacao PRO [Radeon R9 270]
pci:v00001002d00006816*
ID_MODEL_FROM_DATABASE=Pitcairn
@@ -4542,26 +5853,32 @@ pci:v00001002d00006818*
ID_MODEL_FROM_DATABASE=Pitcairn XT [Radeon HD 7870 GHz Edition]
pci:v00001002d00006818sv00001002sd00000B05*
- ID_MODEL_FROM_DATABASE=Pitcairn XT [Radeon HD 8870 OEM]
+ ID_MODEL_FROM_DATABASE=Radeon HD 8870 OEM
+
+pci:v00001002d00006818sv0000174Bsd00008B04*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8860
pci:v00001002d00006819*
ID_MODEL_FROM_DATABASE=Pitcairn PRO [Radeon HD 7850]
pci:v00001002d00006819sv0000174Bsd0000E221*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon HD 7850 2 GB GDDR5 DVI-I/DVI-D/HDMI/DP
+ ID_MODEL_FROM_DATABASE=Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP
pci:v00001002d00006820*
ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8800M Series]
+pci:v00001002d00006820sv0000103Csd00001851*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7750M
+
pci:v00001002d00006821*
ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8800M Series]
+pci:v00001002d00006822*
+ ID_MODEL_FROM_DATABASE=Venus PRO
+
pci:v00001002d00006823*
ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8800M Series]
-pci:v00001002d00006824*
- ID_MODEL_FROM_DATABASE=Chelsea [Radeon HD 7700M Series]
-
pci:v00001002d00006825*
ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M]
@@ -4580,6 +5897,9 @@ pci:v00001002d00006828*
pci:v00001002d00006829*
ID_MODEL_FROM_DATABASE=Cape Verde
+pci:v00001002d0000682A*
+ ID_MODEL_FROM_DATABASE=Venus PRO
+
pci:v00001002d0000682B*
ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8800M Series]
@@ -4589,14 +5909,29 @@ pci:v00001002d0000682D*
pci:v00001002d0000682F*
ID_MODEL_FROM_DATABASE=Chelsea LP [Radeon HD 7730M]
+pci:v00001002d0000682Fsv0000103Csd00001851*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7750M
+
pci:v00001002d00006830*
ID_MODEL_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
pci:v00001002d00006831*
ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
+pci:v00001002d00006835*
+ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 200 Series]
+
pci:v00001002d00006837*
- ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730]
+ ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730]
+
+pci:v00001002d00006837sv00001462sd00002796*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8730
+
+pci:v00001002d00006837sv00001462sd00008092*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8730
+
+pci:v00001002d00006837sv0000148Csd00008730*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8730
pci:v00001002d00006837sv00001787sd00003000*
ID_MODEL_FROM_DATABASE=Radeon HD 6570
@@ -4626,10 +5961,325 @@ pci:v00001002d0000683F*
ID_MODEL_FROM_DATABASE=Cape Verde PRO [Radeon HD 7750]
pci:v00001002d00006840*
- ID_MODEL_FROM_DATABASE=Thames XT [Radeon HD 7670M]
+ ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7500M/7600M Series]
+
+pci:v00001002d00006840sv00001025sd0000050E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd0000050F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd00000513*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd00000514*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd0000056D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd0000059A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd0000059B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd0000059E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd00000600*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd00000606*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001025sd00000696*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006840sv00001025sd00000697*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006840sv00001025sd00000698*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006840sv00001025sd00000699*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006840sv00001025sd00000757*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd0000056A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd0000056E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd00000598*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd0000059D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd000005A3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd000005B9*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001028sd000005BB*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd000017F1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570M
+
+pci:v00001002d00006840sv0000103Csd000017F4*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006840sv0000103Csd00001813*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7590M
+
+pci:v00001002d00006840sv0000103Csd0000182F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001830*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001835*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd0000183A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd0000183C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd0000183E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001840*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001842*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001844*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001848*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd0000184A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd0000184C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001895*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd00001897*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd000018A5*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd000018A7*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000103Csd000018F4*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd0000100A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd0000104B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd000010DC*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd00002121*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd00002122*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd00002123*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd00002125*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001043sd00002127*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB11*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB22*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB23*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB2C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB31*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB32*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB38*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB39*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB3A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB40*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB41*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB47*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB48*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB51*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB52*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB53*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB81*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB82*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FB83*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FC56*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FCD4*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv00001179sd0000FCEE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000144Dsd0000C0C5*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7690M
+
+pci:v00001002d00006840sv0000144Dsd0000C0CE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv0000144Dsd0000C0DA*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv000017AAsd00003970*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv000017AAsd0000397B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv000017AAsd00005101*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv000017AAsd00005102*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
+
+pci:v00001002d00006840sv000017AAsd00005103*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7670M
pci:v00001002d00006841*
- ID_MODEL_FROM_DATABASE=Thames [Radeon 7550M/7570M/7650M]
+ ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7550M/7570M/7650M]
+
+pci:v00001002d00006841sv00001028sd00000561*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001028sd0000056C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001028sd0000057F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570M
+
+pci:v00001002d00006841sv0000103Csd000017F1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570M
+
+pci:v00001002d00006841sv0000103Csd000017F4*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv0000103Csd00001813*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570M
+
+pci:v00001002d00006841sv0000103Csd0000183A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv0000103Csd0000183C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv0000103Csd0000183E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv0000103Csd00001840*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv0000103Csd00001842*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv0000103Csd00001844*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001043sd0000100A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001043sd0000104B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001043sd000010DC*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001043sd00002134*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7650M
+
+pci:v00001002d00006841sv00001179sd00000001*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570M
+
+pci:v00001002d00006841sv00001179sd00000002*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570M
+
+pci:v00001002d00006841sv00001179sd0000FB43*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
+
+pci:v00001002d00006841sv00001179sd0000FB91*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
+
+pci:v00001002d00006841sv00001179sd0000FB92*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
+
+pci:v00001002d00006841sv00001179sd0000FB93*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
+
+pci:v00001002d00006841sv00001179sd0000FBA2*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
+
+pci:v00001002d00006841sv00001179sd0000FBA3*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
+
+pci:v00001002d00006841sv0000144Dsd0000C0C7*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7550M
pci:v00001002d00006842*
ID_MODEL_FROM_DATABASE=Thames LE [Radeon HD 7000M Series]
@@ -4637,12 +6287,6 @@ pci:v00001002d00006842*
pci:v00001002d00006843*
ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7670M]
-pci:v00001002d00006849*
- ID_MODEL_FROM_DATABASE=Lombok [AMD Radeon HD 7400 Series]
-
-pci:v00001002d00006880*
- ID_MODEL_FROM_DATABASE=Cypress
-
pci:v00001002d00006888*
ID_MODEL_FROM_DATABASE=Cypress XT [FirePro V8800]
@@ -4724,9 +6368,66 @@ pci:v00001002d000068A1sv0000106Bsd000000CC*
pci:v00001002d000068A8*
ID_MODEL_FROM_DATABASE=Granville [Radeon HD 6850M/6870M]
+pci:v00001002d000068A8sv00001025sd00000442*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000451*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd0000050A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd0000050B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd0000050C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd0000050E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd0000050F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000513*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000514*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000515*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000516*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000525*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd00000526*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001025sd0000056D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
+pci:v00001002d000068A8sv00001028sd0000048F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6870M
+
+pci:v00001002d000068A8sv00001028sd00000490*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6870M
+
+pci:v00001002d000068A8sv00001028sd000004B9*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6870M
+
+pci:v00001002d000068A8sv00001028sd000004BA*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6870M
+
pci:v00001002d000068A8sv0000103Csd0000159B*
ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+pci:v00001002d000068A8sv0000144Dsd0000C0AD*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6850M
+
pci:v00001002d000068A9*
ID_MODEL_FROM_DATABASE=Juniper XT [FirePro V5800]
@@ -4757,6 +6458,21 @@ pci:v00001002d000068BFsv0000174Bsd00006750*
pci:v00001002d000068C0*
ID_MODEL_FROM_DATABASE=Madison [Mobility Radeon HD 5730 / 6570M]
+pci:v00001002d000068C0sv00001019sd00002383*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv00001028sd000002A2*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv00001028sd000002FE*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv00001028sd00000419*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv0000103Csd0000147D*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
pci:v00001002d000068C0sv0000103Csd00001521*
ID_MODEL_FROM_DATABASE=Madison XT [FirePro M5800]
@@ -4769,21 +6485,429 @@ pci:v00001002d000068C0sv0000103Csd00001596*
pci:v00001002d000068C0sv0000103Csd00001599*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 6570
+pci:v00001002d000068C0sv00001043sd00001C22*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv000017AAsd00003927*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv000017AAsd00003952*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5730
+
+pci:v00001002d000068C0sv000017AAsd00003978*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6570M
+
pci:v00001002d000068C1*
- ID_MODEL_FROM_DATABASE=Madison [Mobility Radeon HD 5650/5750 / 6550M]
+ ID_MODEL_FROM_DATABASE=Madison [Mobility Radeon HD 5650/5750 / 6530M/6550M]
+
+pci:v00001002d000068C1sv00001025sd00000205*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000293*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000294*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000296*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000308*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000030A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000311*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000312*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000031C*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000031D*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
pci:v00001002d000068C1sv00001025sd0000033D*
ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+pci:v00001002d000068C1sv00001025sd0000033E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000033F*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000346*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
pci:v00001002d000068C1sv00001025sd00000347*
ID_MODEL_FROM_DATABASE=Aspire 7740G
+pci:v00001002d000068C1sv00001025sd00000348*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000356*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000357*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000358*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000359*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000035A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000035B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000035C*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000035D*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000035E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000360*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000362*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000364*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000365*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000366*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000367*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000368*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000036C*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000036D*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000036E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000036F*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000372*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000373*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000377*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000378*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000379*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000037A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000037B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000037E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000037F*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000382*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000383*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000384*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000385*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000386*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000387*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000388*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000038B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000038C*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000039A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000411*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000412*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000418*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000419*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000420*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000421*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000425*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000042A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000042E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000042F*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000432*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000433*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000442*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000044C*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd0000044E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000451*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000454*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000455*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000475*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000476*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000487*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000489*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000498*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001025sd00000517*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000051A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000051B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000051C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000051D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd00000525*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd00000526*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000052B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000052C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000053C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000053D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000053E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd0000053F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001025sd00000607*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
+pci:v00001002d000068C1sv00001028sd0000041B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001028sd00000447*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001028sd00000448*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001028sd00000456*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001028sd00000457*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd00001436*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd00001437*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd00001440*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd00001448*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd00001449*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd0000144A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd0000144B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd0000147B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd0000149C*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000103Csd0000149E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
pci:v00001002d000068C1sv0000103Csd00001521*
ID_MODEL_FROM_DATABASE=Madison Pro [FirePro M5800]
+pci:v00001002d000068C1sv00001043sd00001BC2*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000104Dsd00009071*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000104Dsd00009077*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000104Dsd00009081*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD00*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD12*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD1A*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD30*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD31*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD50*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FD52*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6530M
+
+pci:v00001002d000068C1sv00001179sd0000FD63*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6530M
+
+pci:v00001002d000068C1sv00001179sd0000FD65*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6530M
+
+pci:v00001002d000068C1sv00001179sd0000FDD0*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv00001179sd0000FDD2*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6530M
+
+pci:v00001002d000068C1sv0000144Dsd0000C07E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv0000144Dsd0000C085*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv000014C0sd00000043*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv000014C0sd0000004D*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv000017AAsd00003928*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv000017AAsd00003951*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5650
+
+pci:v00001002d000068C1sv000017AAsd00003977*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550M
+
pci:v00001002d000068C7*
ID_MODEL_FROM_DATABASE=Madison [Mobility Radeon HD 5570/6550A]
+pci:v00001002d000068C7sv00001462sd00002241*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5570
+
+pci:v00001002d000068C7sv00001462sd00002243*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5570
+
+pci:v00001002d000068C7sv00001462sd00002244*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5570
+
+pci:v00001002d000068C7sv00001462sd00002245*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550A
+
+pci:v00001002d000068C7sv00001462sd00002246*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6550A
+
pci:v00001002d000068C8*
ID_MODEL_FROM_DATABASE=Redwood XT GL [FirePro V4800]
@@ -4791,13 +6915,46 @@ pci:v00001002d000068C9*
ID_MODEL_FROM_DATABASE=Redwood PRO GL [FirePro V3800]
pci:v00001002d000068D8*
- ID_MODEL_FROM_DATABASE=Redwood XT [Radeon HD 5670]
+ ID_MODEL_FROM_DATABASE=Redwood XT [Radeon HD 5670/5690/5730]
+
+pci:v00001002d000068D8sv00001028sd000068E0*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5670
+
+pci:v00001002d000068D8sv0000174Bsd00005690*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5690
+
+pci:v00001002d000068D8sv0000174Bsd00005730*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5730
+
+pci:v00001002d000068D8sv0000174Bsd0000E151*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5670
pci:v00001002d000068D8sv00001787sd00003000*
ID_MODEL_FROM_DATABASE=Radeon HD 5730
+pci:v00001002d000068D8sv000017AFsd00003010*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5730
+
+pci:v00001002d000068D8sv000017AFsd00003011*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5690
+
pci:v00001002d000068D9*
- ID_MODEL_FROM_DATABASE=Redwood PRO [Radeon HD 5570]
+ ID_MODEL_FROM_DATABASE=Redwood PRO [Radeon HD 5550/5570/5630/6510/6610/7570]
+
+pci:v00001002d000068D9sv0000103Csd00006870*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068D9sv0000103Csd00006872*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068D9sv00001043sd000003CE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5550
+
+pci:v00001002d000068D9sv00001462sd00002151*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068D9sv00001462sd00002240*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
pci:v00001002d000068D9sv0000148Csd00003000*
ID_MODEL_FROM_DATABASE=Radeon HD 6510
@@ -4805,8 +6962,41 @@ pci:v00001002d000068D9sv0000148Csd00003000*
pci:v00001002d000068D9sv0000148Csd00003001*
ID_MODEL_FROM_DATABASE=Radeon HD 6610
+pci:v00001002d000068D9sv00001545sd00005550*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5550
+
+pci:v00001002d000068D9sv00001545sd00007570*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
+pci:v00001002d000068D9sv00001642sd00003985*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068D9sv00001642sd00003996*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068D9sv0000174Bsd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6510
+
+pci:v00001002d000068D9sv0000174Bsd00006510*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6510
+
+pci:v00001002d000068D9sv0000174Bsd00006610*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6610
+
+pci:v00001002d000068D9sv0000174Bsd0000E142*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068D9sv00001787sd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6510
+
+pci:v00001002d000068D9sv000017AFsd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6510
+
+pci:v00001002d000068D9sv000017AFsd00003010*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5630
+
pci:v00001002d000068DA*
- ID_MODEL_FROM_DATABASE=Redwood LE [Radeon HD 5550]
+ ID_MODEL_FROM_DATABASE=Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570]
pci:v00001002d000068DAsv0000148Csd00003000*
ID_MODEL_FROM_DATABASE=Radeon HD 6390
@@ -4814,30 +7004,156 @@ pci:v00001002d000068DAsv0000148Csd00003000*
pci:v00001002d000068DAsv0000148Csd00003001*
ID_MODEL_FROM_DATABASE=Radeon HD 6490
+pci:v00001002d000068DAsv00001545sd00007570*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7570
+
+pci:v00001002d000068DAsv0000174Bsd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6390
+
+pci:v00001002d000068DAsv0000174Bsd00005570*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5570
+
+pci:v00001002d000068DAsv0000174Bsd00005630*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5630
+
+pci:v00001002d000068DAsv0000174Bsd00006490*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6490
+
+pci:v00001002d000068DAsv00001787sd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5630
+
+pci:v00001002d000068DAsv000017AFsd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6390
+
+pci:v00001002d000068DAsv000017AFsd00003010*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5630
+
pci:v00001002d000068DE*
ID_MODEL_FROM_DATABASE=Redwood
pci:v00001002d000068E0*
ID_MODEL_FROM_DATABASE=Park [Mobility Radeon HD 5430/5450/5470]
+pci:v00001002d000068E0sv00001028sd00000404*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv00001028sd00000414*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv00001028sd00000434*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000103Csd00001433*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000103Csd00001434*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000103Csd00001469*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000103Csd0000146B*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
pci:v00001002d000068E0sv0000103Csd00001486*
ID_MODEL_FROM_DATABASE=TouchSmart tm2-2050er discrete GPU (Mobility Radeon HD 5450)
+pci:v00001002d000068E0sv0000103Csd00001622*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000103Csd00001623*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000103Csd0000EEEE*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv0000104Dsd00009076*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 5450
+
+pci:v00001002d000068E0sv00001682sd0000304E*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E0sv00001682sd00006000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E0sv000017AAsd00009E52*
+ ID_MODEL_FROM_DATABASE=FirePro M3800
+
+pci:v00001002d000068E0sv000017AAsd00009E53*
+ ID_MODEL_FROM_DATABASE=FirePro M3800
+
pci:v00001002d000068E1*
ID_MODEL_FROM_DATABASE=Park [Mobility Radeon HD 5430]
+pci:v00001002d000068E1sv00001043sd0000041F*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7350]
+
+pci:v00001002d000068E1sv00001043sd00003000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv0000148Csd00003000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv0000148Csd00003001*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6230]
+
+pci:v00001002d000068E1sv0000148Csd00003002*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6250]
+
+pci:v00001002d000068E1sv0000148Csd00003003*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6350]
+
pci:v00001002d000068E1sv0000148Csd00007350*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7350]
+pci:v00001002d000068E1sv0000148Csd00008350*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 8350]
+
pci:v00001002d000068E1sv00001545sd00005450*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+pci:v00001002d000068E1sv00001545sd00007350*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7350]
+
+pci:v00001002d000068E1sv00001682sd00003000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv00001682sd00006000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv00001682sd00007350*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7350]
+
+pci:v00001002d000068E1sv0000174Bsd00003000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
pci:v00001002d000068E1sv0000174Bsd00005470*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5470]
+pci:v00001002d000068E1sv0000174Bsd00006000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv0000174Bsd00006230*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6230]
+
pci:v00001002d000068E1sv0000174Bsd00006350*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6350]
+pci:v00001002d000068E1sv0000174Bsd00007350*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7350]
+
+pci:v00001002d000068E1sv00001787sd00003000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv000017AFsd00003000*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 5450]
+
+pci:v00001002d000068E1sv000017AFsd00003001*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6230]
+
+pci:v00001002d000068E1sv000017AFsd00003014*
+ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6350]
+
pci:v00001002d000068E1sv000017AFsd00003015*
ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7350]
@@ -4847,11 +7163,221 @@ pci:v00001002d000068E1sv000017AFsd00008350*
pci:v00001002d000068E4*
ID_MODEL_FROM_DATABASE=Robson CE [Radeon HD 6370M/7370M]
+pci:v00001002d000068E4sv00001019sd00002386*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350M
+
+pci:v00001002d000068E4sv00001019sd00002387*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350M
+
+pci:v00001002d000068E4sv00001019sd0000238D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001019sd0000238E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001025sd00000382*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001025sd00000489*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001025sd0000048A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001025sd0000048B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001025sd0000048C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001028sd000004C1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001028sd000004CA*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001028sd000004CC*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001028sd000004CD*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001028sd000004D7*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001411*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001421*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001426*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001428*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000142A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000142B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000143A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000143C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001445*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000162C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000162D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000162E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000162F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001639*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000163A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000163B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000163C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000163D*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000163E*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000163F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001641*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00001643*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00003578*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd0000357A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00003673*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000103Csd00003675*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001043sd00001C92*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001043sd000084A1*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001043sd000084AD*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000104Dsd00009081*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001545sd00007350*
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350]
+
+pci:v00001002d000068E4sv00001558sd00004510*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv00001558sd00005505*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv0000174Bsd00005450*
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 5450]
+
+pci:v00001002d000068E4sv000017AAsd000021DD*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv000017AAsd000021E9*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv000017AAsd00003971*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M
+
+pci:v00001002d000068E4sv000017AAsd00003972*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7370M
+
+pci:v00001002d000068E4sv000017AAsd0000397A*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M/7370M
+
+pci:v00001002d000068E4sv000017AAsd0000397B*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6370M/7370M
+
+pci:v00001002d000068E4sv000017AAsd0000397F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7370M
+
pci:v00001002d000068E5*
ID_MODEL_FROM_DATABASE=Robson LE [Radeon HD 6330M]
+pci:v00001002d000068E5sv00001179sd0000FD3C*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FD50*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FD52*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FD63*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FD65*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FD73*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FD75*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FDD0*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FDD2*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FDEA*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv00001179sd0000FDF8*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6330M
+
+pci:v00001002d000068E5sv0000148Csd00005450*
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 5450]
+
+pci:v00001002d000068E5sv0000148Csd00006350*
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 6350]
+
pci:v00001002d000068E5sv0000148Csd00007350*
- ID_MODEL_FROM_DATABASE=Radeon HD 7350
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350]
+
+pci:v00001002d000068E5sv0000148Csd00008350*
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 8350]
+
+pci:v00001002d000068E5sv00001545sd00007350*
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350]
pci:v00001002d000068E8*
ID_MODEL_FROM_DATABASE=Cedar
@@ -4869,20 +7395,74 @@ pci:v00001002d000068F8*
ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7300 Series]
pci:v00001002d000068F9*
- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 5000/6000/7350 Series]
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 5000/6000/7350/8350 Series]
pci:v00001002d000068F9sv00001019sd00000001*
ID_MODEL_FROM_DATABASE=Radeon HD 5450
+pci:v00001002d000068F9sv00001019sd00000002*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
pci:v00001002d000068F9sv00001019sd00000019*
ID_MODEL_FROM_DATABASE=Radeon HD 6350
+pci:v00001002d000068F9sv00001025sd00000518*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001025sd00000519*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
pci:v00001002d000068F9sv00001028sd0000010E*
ID_MODEL_FROM_DATABASE=XPS 8300
+pci:v00001002d000068F9sv00001028sd00002126*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv0000103Csd00002126*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv0000103Csd00002AAC*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv0000103Csd00002AAE*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv0000103Csd00003580*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
pci:v00001002d000068F9sv00001043sd000003C2*
ID_MODEL_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP)
+pci:v00001002d000068F9sv00001462sd00002130*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001462sd00002131*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001462sd00002133*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv00001462sd00002180*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001462sd00002181*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001462sd00002182*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv00001462sd00002183*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv00001462sd00002230*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001462sd00002231*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001462sd00002495*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
pci:v00001002d000068F9sv0000148Csd00003001*
ID_MODEL_FROM_DATABASE=Radeon HD 5530/6250
@@ -4898,6 +7478,39 @@ pci:v00001002d000068F9sv0000148Csd00003004*
pci:v00001002d000068F9sv0000148Csd00007350*
ID_MODEL_FROM_DATABASE=Radeon HD 7350
+pci:v00001002d000068F9sv0000148Csd00008350*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8350
+
+pci:v00001002d000068F9sv00001545sd00007350*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068F9sv00001642sd00003983*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001642sd00003984*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv00001642sd00003987*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
+pci:v00001002d000068F9sv00001642sd00003997*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001642sd00003A05*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001642sd00003B31*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350A
+
+pci:v00001002d000068F9sv00001682sd00003270*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068F9sv0000174Bsd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6230
+
+pci:v00001002d000068F9sv0000174Bsd00003987*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
pci:v00001002d000068F9sv0000174Bsd00005470*
ID_MODEL_FROM_DATABASE=Radeon HD 5470
@@ -4907,11 +7520,131 @@ pci:v00001002d000068F9sv0000174Bsd00005490*
pci:v00001002d000068F9sv0000174Bsd00005530*
ID_MODEL_FROM_DATABASE=Radeon HD 5530
+pci:v00001002d000068F9sv0000174Bsd00006230*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6230
+
+pci:v00001002d000068F9sv0000174Bsd00006250*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6250
+
+pci:v00001002d000068F9sv0000174Bsd00006290*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6290
+
+pci:v00001002d000068F9sv0000174Bsd00006350*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
pci:v00001002d000068F9sv0000174Bsd00007350*
ID_MODEL_FROM_DATABASE=Radeon HD 7350
+pci:v00001002d000068F9sv0000174Bsd00008350*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8350
+
+pci:v00001002d000068F9sv0000174Bsd0000E127*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv0000174Bsd0000E145*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv0000174Bsd0000E153*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv00001787sd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5470
+
+pci:v00001002d000068F9sv00001787sd00003001*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5530
+
+pci:v00001002d000068F9sv00001787sd00003002*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5490
+
+pci:v00001002d000068F9sv000017AAsd00003602*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv000017AAsd00003603*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv000017AAsd0000360F*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv000017AAsd00003619*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5450
+
+pci:v00001002d000068F9sv000017AFsd00003000*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6250
+
+pci:v00001002d000068F9sv000017AFsd00003001*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6230
+
+pci:v00001002d000068F9sv000017AFsd00003002*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6290
+
+pci:v00001002d000068F9sv000017AFsd00003011*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5470
+
+pci:v00001002d000068F9sv000017AFsd00003012*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5490
+
+pci:v00001002d000068F9sv000017AFsd00003013*
+ ID_MODEL_FROM_DATABASE=Radeon HD 5470
+
+pci:v00001002d000068F9sv000017AFsd00003014*
+ ID_MODEL_FROM_DATABASE=Radeon HD 6350
+
pci:v00001002d000068FA*
- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350]
+ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350]
+
+pci:v00001002d000068FAsv00001019sd00000019*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001019sd00000021*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001019sd00000022*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001019sd00000026*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8350
+
+pci:v00001002d000068FAsv0000103Csd00002ADF*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350A
+
+pci:v00001002d000068FAsv0000103Csd00002AE8*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350A
+
+pci:v00001002d000068FAsv00001043sd00008350*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8350
+
+pci:v00001002d000068FAsv00001462sd00002128*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001462sd00002184*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001462sd00002186*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001462sd00002495*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001462sd0000B490*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv00001642sd00003985*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv0000174Bsd00007350*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv0000174Bsd00008153*
+ ID_MODEL_FROM_DATABASE=Radeon HD 8350
+
+pci:v00001002d000068FAsv0000174Bsd0000E127*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv0000174Bsd0000E153*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
+
+pci:v00001002d000068FAsv0000174Bsd0000E180*
+ ID_MODEL_FROM_DATABASE=Radeon HD 7350
pci:v00001002d000068FAsv000017AFsd00003015*
ID_MODEL_FROM_DATABASE=Radeon HD 7350
@@ -4919,6 +7652,9 @@ pci:v00001002d000068FAsv000017AFsd00003015*
pci:v00001002d000068FE*
ID_MODEL_FROM_DATABASE=Cedar LE
+pci:v00001002d00006920*
+ ID_MODEL_FROM_DATABASE=Tonga
+
pci:v00001002d0000700F*
ID_MODEL_FROM_DATABASE=RS100 AGP Bridge
@@ -5418,7 +8154,7 @@ pci:v00001002d00009442sv00001002sd00000502*
ID_MODEL_FROM_DATABASE=MSI Radeon HD 4850 512MB GDDR3
pci:v00001002d00009442sv0000174Bsd0000E810*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon HD 4850 512MB GDDR3
+ ID_MODEL_FROM_DATABASE=Radeon HD 4850 512MB GDDR3
pci:v00001002d00009443*
ID_MODEL_FROM_DATABASE=R700 [Radeon HD 4850 X2]
@@ -5442,7 +8178,7 @@ pci:v00001002d0000944E*
ID_MODEL_FROM_DATABASE=RV770 CE [Radeon HD 4710]
pci:v00001002d0000944Esv0000174Bsd00003261*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon HD 4810
+ ID_MODEL_FROM_DATABASE=Radeon HD 4810
pci:v00001002d00009450*
ID_MODEL_FROM_DATABASE=RV770 GL [FireStream 9270]
@@ -5469,7 +8205,7 @@ pci:v00001002d00009480*
ID_MODEL_FROM_DATABASE=RV730/M96 [Mobility Radeon HD 4650/5165]
pci:v00001002d00009480sv0000103Csd00003628*
- ID_MODEL_FROM_DATABASE=ATI Mobility Radeon HD 4650 [dv6-1190en]
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4650 [dv6-1190en]
pci:v00001002d00009488*
ID_MODEL_FROM_DATABASE=RV730/M96-XT [Mobility Radeon HD 4670]
@@ -5481,7 +8217,7 @@ pci:v00001002d00009490*
ID_MODEL_FROM_DATABASE=RV730 XT [Radeon HD 4670]
pci:v00001002d00009490sv0000174Bsd0000E880*
- ID_MODEL_FROM_DATABASE=Radeon HD 4670 512MB DDR3
+ ID_MODEL_FROM_DATABASE=Radeon HD 4670 512MB GDDR3 Dual DVI-I/TVO
pci:v00001002d00009491*
ID_MODEL_FROM_DATABASE=RV730/M96-CSP [Radeon E4690]
@@ -5547,10 +8283,10 @@ pci:v00001002d000094C3sv00001028sd00000302*
ID_MODEL_FROM_DATABASE=Radeon HD 2400 Pro
pci:v00001002d000094C3sv0000174Bsd0000E400*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon HD 2400 PRO
+ ID_MODEL_FROM_DATABASE=Radeon HD 2400 PRO
pci:v00001002d000094C3sv000018BCsd00003550*
- ID_MODEL_FROM_DATABASE=GeCube Radeon HD 2400 PRO
+ ID_MODEL_FROM_DATABASE=Radeon HD 2400 PRO
pci:v00001002d000094C4*
ID_MODEL_FROM_DATABASE=RV610 LE [Radeon HD 2400 PRO AGP]
@@ -5583,7 +8319,7 @@ pci:v00001002d00009501*
ID_MODEL_FROM_DATABASE=RV670 [Radeon HD 3870]
pci:v00001002d00009501sv0000174Bsd0000E620*
- ID_MODEL_FROM_DATABASE=Sapphire Radeon HD 3870 PCIe 2.0
+ ID_MODEL_FROM_DATABASE=Radeon HD 3870
pci:v00001002d00009504*
ID_MODEL_FROM_DATABASE=RV670/M88 [Mobility Radeon HD 3850]
@@ -5657,6 +8393,45 @@ pci:v00001002d00009552sv0000174Bsd00003000*
pci:v00001002d00009553*
ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4530/4570/545v]
+pci:v00001002d00009553sv00001025sd0000015E*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001025sd0000017D*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001025sd00000205*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001025sd00000206*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001025sd00000237*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001028sd000002BE*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001028sd000002E8*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
+
+pci:v00001002d00009553sv0000103Csd00003624*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
+
+pci:v00001002d00009553sv0000103Csd00003628*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
+
+pci:v00001002d00009553sv0000103Csd00003636*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4530
+
+pci:v00001002d00009553sv00001043sd00001B32*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv00001043sd00001B42*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
+pci:v00001002d00009553sv0000104Dsd00009056*
+ ID_MODEL_FROM_DATABASE=Mobility Radeon HD 4570
+
pci:v00001002d00009553sv00001179sd0000FF82*
ID_MODEL_FROM_DATABASE=Satellite L505-13T GPU (Mobility Radeon HD 5145)
@@ -5898,7 +8673,7 @@ pci:v00001002d00009802*
ID_MODEL_FROM_DATABASE=Wrestler [Radeon HD 6310]
pci:v00001002d00009802sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001002d00009803*
ID_MODEL_FROM_DATABASE=Wrestler [Radeon HD 6310]
@@ -5964,7 +8739,7 @@ pci:v00001002d0000983C*
ID_MODEL_FROM_DATABASE=Kabini
pci:v00001002d0000983D*
- ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8250]
+ ID_MODEL_FROM_DATABASE=Temash [Radeon HD 8250/8280G]
pci:v00001002d0000983E*
ID_MODEL_FROM_DATABASE=Kabini
@@ -5972,6 +8747,54 @@ pci:v00001002d0000983E*
pci:v00001002d0000983F*
ID_MODEL_FROM_DATABASE=Kabini
+pci:v00001002d00009850*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU A6-6200 with R3 Graphics]
+
+pci:v00001002d00009851*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU A4-6000 with R2 Graphics]
+
+pci:v00001002d00009852*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU A4-6000 with R2 Graphics]
+
+pci:v00001002d00009853*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU E2-4000 with R2 Graphics]
+
+pci:v00001002d00009854*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU E2-3700 with R2 Graphics]
+
+pci:v00001002d00009855*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU XX-2450M with R3 Graphics]
+
+pci:v00001002d00009856*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU XX-2200M with R2 Graphics]
+
+pci:v00001002d00009857*
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon APU XX-2200M with R2 Graphics]
+
+pci:v00001002d00009858*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d00009859*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d0000985A*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d0000985B*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d0000985C*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d0000985D*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d0000985E*
+ ID_MODEL_FROM_DATABASE=Mullins
+
+pci:v00001002d0000985F*
+ ID_MODEL_FROM_DATABASE=Mullins
+
pci:v00001002d00009901*
ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7660D]
@@ -6093,10 +8916,10 @@ pci:v00001002d0000AA10*
ID_MODEL_FROM_DATABASE=RV610 HDMI Audio [Radeon HD 2350/2400 Series]
pci:v00001002d0000AA10sv0000174Bsd0000AA10*
- ID_MODEL_FROM_DATABASE=Sapphire HD 2400 PRO audio device
+ ID_MODEL_FROM_DATABASE=Radeon HD 2400 PRO
pci:v00001002d0000AA10sv000018BCsd0000AA10*
- ID_MODEL_FROM_DATABASE=GeCube Radeon HD 2400 PRO HDCP-capable digital-only audio device
+ ID_MODEL_FROM_DATABASE=Radeon HD 2400 PRO
pci:v00001002d0000AA18*
ID_MODEL_FROM_DATABASE=RV670/680 HDMI Audio [Radeon HD 3690/3800 Series]
@@ -6111,16 +8934,13 @@ pci:v00001002d0000AA30*
ID_MODEL_FROM_DATABASE=RV770 HDMI Audio [Radeon HD 4850/4870]
pci:v00001002d0000AA30sv0000174Bsd0000AA30*
- ID_MODEL_FROM_DATABASE=Sapphire HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink
+ ID_MODEL_FROM_DATABASE=Radeon HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink
pci:v00001002d0000AA38*
ID_MODEL_FROM_DATABASE=RV710/730 HDMI Audio [Radeon HD 4000 series]
pci:v00001002d0000AA38sv0000103Csd00003628*
- ID_MODEL_FROM_DATABASE=ATI RV710/730 [dv6-1190en]
-
-pci:v00001002d0000AA38sv0000174Bsd0000AA38*
- ID_MODEL_FROM_DATABASE=R700 Audio Device [Radeon HD 4000 Series]
+ ID_MODEL_FROM_DATABASE=dv6-1190en
pci:v00001002d0000AA50*
ID_MODEL_FROM_DATABASE=Cypress HDMI Audio [Radeon HD 5800 Series]
@@ -6159,7 +8979,7 @@ pci:v00001002d0000AA98*
ID_MODEL_FROM_DATABASE=Caicos HDMI Audio [Radeon HD 6400 Series]
pci:v00001002d0000AA98sv0000174Bsd0000AA98*
- ID_MODEL_FROM_DATABASE=Sapphire HD 6450 1GB DDR3
+ ID_MODEL_FROM_DATABASE=Radeon HD 6450 1GB DDR3
pci:v00001002d0000AAA0*
ID_MODEL_FROM_DATABASE=Tahiti XT HDMI Audio [Radeon HD 7970 Series]
@@ -7370,6 +10190,27 @@ pci:v00001014d0000034Asv00001014sd0000035E*
pci:v00001014d0000034Asv00001014sd000003FB*
ID_MODEL_FROM_DATABASE=PCIe3 28GB Cache RAID SAS Enclosure 6Gb x 16 (57D5)
+pci:v00001014d0000034Asv00001014sd000003FE*
+ ID_MODEL_FROM_DATABASE=PCIe3 x8 Cache SAS RAID Internal Adapter 6Gb (57D8)
+
+pci:v00001014d0000034Asv00001014sd000003FF*
+ ID_MODEL_FROM_DATABASE=PCIe3 x8 SAS RAID Internal Adapter 6Gb (57D7)
+
+pci:v00001014d0000034Asv00001014sd00000474*
+ ID_MODEL_FROM_DATABASE=PCIe3 x16 Cache SAS RAID Internal Adapter 6Gb (57EB)
+
+pci:v00001014d0000034Asv00001014sd00000475*
+ ID_MODEL_FROM_DATABASE=PCIe3 x16 SAS RAID Internal Adapter 6Gb (57EC)
+
+pci:v00001014d0000034Asv00001014sd00000499*
+ ID_MODEL_FROM_DATABASE=PCIe3 x16 Cache SAS RAID Internal Adapter 6Gb (57ED)
+
+pci:v00001014d0000034Asv00001014sd0000049A*
+ ID_MODEL_FROM_DATABASE=PCIe3 x16 SAS RAID Internal Adapter 6Gb (57EE)
+
+pci:v00001014d000004AA*
+ ID_MODEL_FROM_DATABASE=Flash Adapter 90 (PCIe2 0.9TB)
+
pci:v00001014d00003022*
ID_MODEL_FROM_DATABASE=QLA3022 Network Adapter
@@ -7674,14 +10515,11 @@ pci:v00001022d00001510*
ID_MODEL_FROM_DATABASE=Family 14h Processor Root Complex
pci:v00001022d00001510sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
+ ID_MODEL_FROM_DATABASE=PURE Fusion Mini
pci:v00001022d00001512*
ID_MODEL_FROM_DATABASE=Family 14h Processor Root Port
-pci:v00001022d00001512sv0000174Bsd00001001*
- ID_MODEL_FROM_DATABASE=Sapphire PURE Fusion Mini
-
pci:v00001022d00001513*
ID_MODEL_FROM_DATABASE=Family 14h Processor Root Port
@@ -8126,6 +10964,9 @@ pci:v00001022d0000780C*
pci:v00001022d0000780D*
ID_MODEL_FROM_DATABASE=FCH Azalia Controller
+pci:v00001022d0000780Dsv00001043sd00008444*
+ ID_MODEL_FROM_DATABASE=F2A85-M Series
+
pci:v00001022d0000780E*
ID_MODEL_FROM_DATABASE=FCH LPC Bridge
@@ -8141,6 +10982,12 @@ pci:v00001022d00007813*
pci:v00001022d00007814*
ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller
+pci:v00001022d00007900*
+ ID_MODEL_FROM_DATABASE=CZ SATA Controller [IDE mode]
+
+pci:v00001022d0000790B*
+ ID_MODEL_FROM_DATABASE=CZ SMBus Controller
+
pci:v00001022d00009600*
ID_MODEL_FROM_DATABASE=RS780 Host Bridge
@@ -8172,7 +11019,7 @@ pci:v00001022d00009606*
ID_MODEL_FROM_DATABASE=RS780 PCI to PCI bridge (PCIE port 2)
pci:v00001022d00009607*
- ID_MODEL_FROM_DATABASE=RS780 PCI to PCI bridge (PCIE port 3)
+ ID_MODEL_FROM_DATABASE=RS780/RS880 PCI to PCI bridge (PCIE port 3)
pci:v00001022d00009608*
ID_MODEL_FROM_DATABASE=RS780/RS880 PCI to PCI bridge (PCIE port 4)
@@ -10731,31 +13578,28 @@ pci:v0000103Cd0000323C*
ID_MODEL_FROM_DATABASE=Smart Array Gen8+ Controllers
pci:v0000103Cd0000323Csv0000103Csd00001920*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P430i
pci:v0000103Cd0000323Csv0000103Csd00001921*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P830i
pci:v0000103Cd0000323Csv0000103Csd00001922*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P430
pci:v0000103Cd0000323Csv0000103Csd00001923*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P431
pci:v0000103Cd0000323Csv0000103Csd00001924*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P830
pci:v0000103Cd0000323Csv0000103Csd00001925*
ID_MODEL_FROM_DATABASE=Smart Array
pci:v0000103Cd0000323Csv0000103Csd00001926*
- ID_MODEL_FROM_DATABASE=Smart Array
-
-pci:v0000103Cd0000323Csv0000103Csd00001927*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P731m
pci:v0000103Cd0000323Csv0000103Csd00001928*
- ID_MODEL_FROM_DATABASE=Smart Array
+ ID_MODEL_FROM_DATABASE=P230i
pci:v0000103Cd00003300*
ID_MODEL_FROM_DATABASE=Integrated Lights-Out Standard Virtual USB Controller
@@ -11430,7 +14274,7 @@ pci:v0000104Cd00008023sv0000103Csd0000088C*
ID_MODEL_FROM_DATABASE=NC8000 laptop
pci:v0000104Cd00008023sv00001043sd0000808B*
- ID_MODEL_FROM_DATABASE=K8N4-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v0000104Cd00008023sv00001043sd0000815B*
ID_MODEL_FROM_DATABASE=P5W DH Deluxe Motherboard
@@ -11673,7 +14517,7 @@ pci:v0000104Cd00008201*
ID_MODEL_FROM_DATABASE=PCI1620 Firmware Loading Function
pci:v0000104Cd00008204*
- ID_MODEL_FROM_DATABASE=PCI7410,7510,7610 PCI Firmware Loading Function
+ ID_MODEL_FROM_DATABASE=PCI7410/7510/7610 PCI Firmware Loading Function
pci:v0000104Cd00008204sv00001028sd00000139*
ID_MODEL_FROM_DATABASE=Latitude D400
@@ -11949,7 +14793,7 @@ pci:v0000104Cd0000AC49*
ID_MODEL_FROM_DATABASE=PCI7410 PC Card Cardbus Controller
pci:v0000104Cd0000AC4A*
- ID_MODEL_FROM_DATABASE=PCI7510,7610 PC card Cardbus Controller
+ ID_MODEL_FROM_DATABASE=PCI7510/7610 CardBus Bridge
pci:v0000104Cd0000AC4Asv00001028sd00000139*
ID_MODEL_FROM_DATABASE=Latitude D400
@@ -12063,7 +14907,7 @@ pci:v0000104Cd0000AC8Esv00001028sd0000018D*
ID_MODEL_FROM_DATABASE=Inspiron 700m/710m
pci:v0000104Cd0000AC8F*
- ID_MODEL_FROM_DATABASE=PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller
+ ID_MODEL_FROM_DATABASE=PCI7420/7620 SD/MS-Pro Controller
pci:v0000104Cd0000AC8Fsv00001028sd0000018D*
ID_MODEL_FROM_DATABASE=Inspiron 700m/710m
@@ -13520,6 +16364,9 @@ pci:v00001077d00002432*
pci:v00001077d00002532*
ID_MODEL_FROM_DATABASE=ISP2532-based 8Gb Fibre Channel to PCI Express HBA
+pci:v00001077d00002532sv0000103Csd00003262*
+ ID_MODEL_FROM_DATABASE=StorageWorks 81Q
+
pci:v00001077d00002532sv00001077sd00000167*
ID_MODEL_FROM_DATABASE=QME2572 Dual Port FC8 HBA Mezzanine
@@ -13766,9 +16613,6 @@ pci:v00001083d00000001*
pci:v00001084*
ID_VENDOR_FROM_DATABASE=Parador
-pci:v00001085*
- ID_VENDOR_FROM_DATABASE=Tulip Computers Int.B.V.
-
pci:v00001086*
ID_VENDOR_FROM_DATABASE=J. Bond Computer Systems
@@ -14465,6 +17309,9 @@ pci:v00001095d00003112sv00009005sd00000250*
pci:v00001095d00003114*
ID_MODEL_FROM_DATABASE=SiI 3114 [SATALink/SATARaid] Serial ATA Controller
+pci:v00001095d00003114sv00001043sd00008167*
+ ID_MODEL_FROM_DATABASE=A8N-SLI Deluxe/Premium Mainboard
+
pci:v00001095d00003114sv00001095sd00003114*
ID_MODEL_FROM_DATABASE=SiI 3114 SATALink Controller
@@ -16488,7 +19335,7 @@ pci:v000010B9d00001689*
ID_MODEL_FROM_DATABASE=M1689 K8 Northbridge [Super K8 Single Chip]
pci:v000010B9d00001695*
- ID_MODEL_FROM_DATABASE=M1695 K8 Northbridge [PCI Express and HyperTransport]
+ ID_MODEL_FROM_DATABASE=M1695 Host Bridge
pci:v000010B9d00001697*
ID_MODEL_FROM_DATABASE=M1697 HTT Host Bridge
@@ -17447,6 +20294,9 @@ pci:v000010DEd00000044*
pci:v000010DEd00000045*
ID_MODEL_FROM_DATABASE=NV40 [GeForce 6800 GT]
+pci:v000010DEd00000045sv00001043sd0000817D*
+ ID_MODEL_FROM_DATABASE=V9999GT
+
pci:v000010DEd00000045sv00001458sd00003140*
ID_MODEL_FROM_DATABASE=GV-N68T256D
@@ -17466,7 +20316,7 @@ pci:v000010DEd00000050*
ID_MODEL_FROM_DATABASE=CK804 ISA Bridge
pci:v000010DEd00000050sv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd00000050sv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17499,7 +20349,7 @@ pci:v000010DEd00000052sv00001028sd00000225*
ID_MODEL_FROM_DATABASE=PowerEdge T105 SMBus
pci:v000010DEd00000052sv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd00000052sv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17523,7 +20373,7 @@ pci:v000010DEd00000053*
ID_MODEL_FROM_DATABASE=CK804 IDE
pci:v000010DEd00000053sv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd00000053sv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17550,7 +20400,7 @@ pci:v000010DEd00000054sv00001028sd00000225*
ID_MODEL_FROM_DATABASE=PowerEdge T105 Serial ATA
pci:v000010DEd00000054sv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=A8N Series Mainboard
pci:v000010DEd00000054sv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17577,7 +20427,7 @@ pci:v000010DEd00000055sv00001028sd00000225*
ID_MODEL_FROM_DATABASE=PowerEdge T105 Serial ATA
pci:v000010DEd00000055sv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd00000055sv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17601,7 +20451,7 @@ pci:v000010DEd00000057*
ID_MODEL_FROM_DATABASE=CK804 Ethernet Controller
pci:v000010DEd00000057sv00001043sd00008141*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd00000057sv000010DEsd0000CB84*
ID_MODEL_FROM_DATABASE=NF4 Lanparty
@@ -17631,7 +20481,7 @@ pci:v000010DEd00000059*
ID_MODEL_FROM_DATABASE=CK804 AC'97 Audio Controller
pci:v000010DEd00000059sv00001043sd0000812A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd00000059sv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17652,7 +20502,7 @@ pci:v000010DEd0000005Asv00001028sd00000225*
ID_MODEL_FROM_DATABASE=PowerEdge T105 onboard USB
pci:v000010DEd0000005Asv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd0000005Asv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17679,7 +20529,7 @@ pci:v000010DEd0000005Bsv00001028sd00000225*
ID_MODEL_FROM_DATABASE=PowerEdge T105 onboard USB
pci:v000010DEd0000005Bsv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=K8N4-E or A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=K8N4/A8N Series Mainboard
pci:v000010DEd0000005Bsv000010F1sd00002865*
ID_MODEL_FROM_DATABASE=Tomcat K8E (S2865)
@@ -17712,7 +20562,7 @@ pci:v000010DEd0000005Esv00001028sd00000225*
ID_MODEL_FROM_DATABASE=PowerEdge T105 Memory Controller
pci:v000010DEd0000005Esv00001043sd0000815A*
- ID_MODEL_FROM_DATABASE=A8N-E Mainboard
+ ID_MODEL_FROM_DATABASE=A8N Series Mainboard
pci:v000010DEd0000005Esv000010DEsd0000005E*
ID_MODEL_FROM_DATABASE=ECS Elitegroup NFORCE3-A939 motherboard.
@@ -19865,6 +22715,9 @@ pci:v000010DEd00000391*
pci:v000010DEd00000391sv00001458sd00003427*
ID_MODEL_FROM_DATABASE=GV-NX76T128D-RH
+pci:v000010DEd00000391sv00001462sd00000452*
+ ID_MODEL_FROM_DATABASE=NX7600GT-VT2D256E
+
pci:v000010DEd00000392*
ID_MODEL_FROM_DATABASE=G73 [GeForce 7600 GS]
@@ -20687,6 +23540,9 @@ pci:v000010DEd000005E2*
pci:v000010DEd000005E3*
ID_MODEL_FROM_DATABASE=GT200b [GeForce GTX 285]
+pci:v000010DEd000005E3sv00001682sd00002490*
+ ID_MODEL_FROM_DATABASE=GX-285N-ZDF
+
pci:v000010DEd000005E6*
ID_MODEL_FROM_DATABASE=GT200b [GeForce GTX 275]
@@ -21674,6 +24530,9 @@ pci:v000010DEd00000862*
pci:v000010DEd00000863*
ID_MODEL_FROM_DATABASE=C79 [GeForce 9400M]
+pci:v000010DEd00000863sv0000106Bsd000000AA*
+ ID_MODEL_FROM_DATABASE=MacBook5,1
+
pci:v000010DEd00000864*
ID_MODEL_FROM_DATABASE=C79 [GeForce 9300]
@@ -21719,9 +24578,30 @@ pci:v000010DEd00000871*
pci:v000010DEd00000872*
ID_MODEL_FROM_DATABASE=C79 [GeForce G102M]
+pci:v000010DEd00000872sv00001043sd000019B4*
+ ID_MODEL_FROM_DATABASE=GeForce G102M
+
+pci:v000010DEd00000872sv00001043sd00001AA2*
+ ID_MODEL_FROM_DATABASE=GeForce G102M
+
+pci:v000010DEd00000872sv00001043sd00001C02*
+ ID_MODEL_FROM_DATABASE=GeForce G102M
+
+pci:v000010DEd00000872sv00001043sd00001C42*
+ ID_MODEL_FROM_DATABASE=GeForce G205M
+
pci:v000010DEd00000873*
ID_MODEL_FROM_DATABASE=C79 [GeForce G102M]
+pci:v000010DEd00000873sv00001043sd000019B4*
+ ID_MODEL_FROM_DATABASE=GeForce G102M
+
+pci:v000010DEd00000873sv00001043sd00001C12*
+ ID_MODEL_FROM_DATABASE=GeForce G102M
+
+pci:v000010DEd00000873sv00001043sd00001C52*
+ ID_MODEL_FROM_DATABASE=GeForce G205M
+
pci:v000010DEd00000874*
ID_MODEL_FROM_DATABASE=C79 [ION]
@@ -21884,6 +24764,123 @@ pci:v000010DEd00000A78*
pci:v000010DEd00000A7A*
ID_MODEL_FROM_DATABASE=GT218M [GeForce 315M]
+pci:v000010DEd00000A7Asv0000104Dsd0000907E*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FC50*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FC61*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FC71*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FC90*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FCC0*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FCD0*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FCE2*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FCF2*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD16*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD40*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD50*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD52*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD61*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD71*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD92*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FD96*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FDD0*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FDD2*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001179sd0000FDFE*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C0A2*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C0B2*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C581*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C587*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C588*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C597*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv0000144Dsd0000C606*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001462sd0000AA51*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv00001462sd0000AA58*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv00001462sd0000AC71*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv00001462sd0000AC81*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001462sd0000AC82*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv00001462sd0000AE33*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv000017AAsd00003950*
+ ID_MODEL_FROM_DATABASE=GeForce 405M
+
+pci:v000010DEd00000A7Asv000017AAsd0000397D*
+ ID_MODEL_FROM_DATABASE=GeForce 405M
+
+pci:v000010DEd00000A7Asv00001B0Asd00002091*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
+pci:v000010DEd00000A7Asv00001BFDsd00000003*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv00001BFDsd00008006*
+ ID_MODEL_FROM_DATABASE=GeForce 405
+
+pci:v000010DEd00000A7Asv00001BFDsd00008007*
+ ID_MODEL_FROM_DATABASE=GeForce 315M
+
pci:v000010DEd00000A7B*
ID_MODEL_FROM_DATABASE=GT218 [GeForce 505]
@@ -22427,11 +25424,14 @@ pci:v000010DEd00000E09*
pci:v000010DEd00000E0A*
ID_MODEL_FROM_DATABASE=GK104 HDMI Audio Controller
+pci:v000010DEd00000E0B*
+ ID_MODEL_FROM_DATABASE=GK106 HDMI Audio Controller
+
pci:v000010DEd00000E0C*
ID_MODEL_FROM_DATABASE=GF114 HDMI Audio Controller
pci:v000010DEd00000E1A*
- ID_MODEL_FROM_DATABASE=GK110 HDMI Audio [GeForce GTX Titan]
+ ID_MODEL_FROM_DATABASE=GK110 HDMI Audio
pci:v000010DEd00000E1B*
ID_MODEL_FROM_DATABASE=GK107 HDMI Audio Controller
@@ -22484,6 +25484,9 @@ pci:v000010DEd00000FC6*
pci:v000010DEd00000FC6sv00001043sd00008428*
ID_MODEL_FROM_DATABASE=GTX650-DC-1GD5
+pci:v000010DEd00000FCD*
+ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M]
+
pci:v000010DEd00000FD1*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 650M]
@@ -22505,6 +25508,18 @@ pci:v000010DEd00000FD1sv00001043sd00002141*
pci:v000010DEd00000FD2*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M]
+pci:v000010DEd00000FD2sv00001028sd0000054F*
+ ID_MODEL_FROM_DATABASE=GeForce GT 640M
+
+pci:v000010DEd00000FD2sv00001028sd0000055F*
+ ID_MODEL_FROM_DATABASE=GeForce GT 640M
+
+pci:v000010DEd00000FD2sv00001028sd00000595*
+ ID_MODEL_FROM_DATABASE=GeForce GT 640M LE
+
+pci:v000010DEd00000FD2sv00001028sd000005B2*
+ ID_MODEL_FROM_DATABASE=GeForce GT 640M LE
+
pci:v000010DEd00000FD3*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M LE]
@@ -22524,7 +25539,7 @@ pci:v000010DEd00000FDF*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 740M]
pci:v000010DEd00000FE0*
- ID_MODEL_FROM_DATABASE=GK107M [GeForce GTX 660M OEM]
+ ID_MODEL_FROM_DATABASE=GK107M [GeForce GTX 660M Mac Edition]
pci:v000010DEd00000FE1*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 730M]
@@ -22532,6 +25547,9 @@ pci:v000010DEd00000FE1*
pci:v000010DEd00000FE3*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M]
+pci:v000010DEd00000FE3sv000017AAsd00003675*
+ ID_MODEL_FROM_DATABASE=GeForce GT 745A
+
pci:v000010DEd00000FE4*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M]
@@ -22541,6 +25559,12 @@ pci:v000010DEd00000FE5*
pci:v000010DEd00000FE6*
ID_MODEL_FROM_DATABASE=GK107 [NVS K1 USM]
+pci:v000010DEd00000FE7*
+ ID_MODEL_FROM_DATABASE=GK107GL [GRID K1]
+
+pci:v000010DEd00000FE7sv000010DEsd0000101E*
+ ID_MODEL_FROM_DATABASE=GRID K100
+
pci:v000010DEd00000FEF*
ID_MODEL_FROM_DATABASE=GK107GL [GRID K340]
@@ -22553,9 +25577,18 @@ pci:v000010DEd00000FF2*
pci:v000010DEd00000FF5*
ID_MODEL_FROM_DATABASE=GK107GL [Tesla K1 USM]
+pci:v000010DEd00000FF6*
+ ID_MODEL_FROM_DATABASE=GK107GLM [Quadro K1100M]
+
pci:v000010DEd00000FF7*
ID_MODEL_FROM_DATABASE=GK107GL [Quadro K1 USM]
+pci:v000010DEd00000FF7sv000010DEsd00001037*
+ ID_MODEL_FROM_DATABASE=GRID K140Q
+
+pci:v000010DEd00000FF8*
+ ID_MODEL_FROM_DATABASE=GK107GLM [Quadro K500M]
+
pci:v000010DEd00000FF9*
ID_MODEL_FROM_DATABASE=GK107GL [Quadro K2000D]
@@ -22580,6 +25613,9 @@ pci:v000010DEd00000FFF*
pci:v000010DEd00001003*
ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX Titan LE]
+pci:v000010DEd00001004*
+ ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX 780]
+
pci:v000010DEd00001005*
ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX Titan]
@@ -22622,6 +25658,9 @@ pci:v000010DEd00001026*
pci:v000010DEd00001028*
ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20m]
+pci:v000010DEd0000103A*
+ ID_MODEL_FROM_DATABASE=GK110GL [Quadro K6000]
+
pci:v000010DEd00001040*
ID_MODEL_FROM_DATABASE=GF119 [GeForce GT 520]
@@ -22688,6 +25727,9 @@ pci:v000010DEd0000105Asv00001043sd00002112*
pci:v000010DEd0000105B*
ID_MODEL_FROM_DATABASE=GF119M [GeForce 705M]
+pci:v000010DEd0000105Bsv0000103Csd00002AFB*
+ ID_MODEL_FROM_DATABASE=GeForce 705A
+
pci:v000010DEd0000107C*
ID_MODEL_FROM_DATABASE=GF119 [NVS 315]
@@ -22775,27 +25817,132 @@ pci:v000010DEd000010D8*
pci:v000010DEd00001140*
ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M / GT 620M/625M/630M/720M]
+pci:v000010DEd00001140sv00001025sd00000600*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000606*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
pci:v000010DEd00001140sv00001025sd0000064A*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
pci:v000010DEd00001140sv00001025sd0000064C*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
+pci:v000010DEd00001140sv00001025sd0000067A*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000680*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000686*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd00000689*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000068B*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000068D*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000068E*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
pci:v000010DEd00001140sv00001025sd00000691*
ID_MODEL_FROM_DATABASE=GeForce 710M
+pci:v000010DEd00001140sv00001025sd00000692*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000694*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000702*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
pci:v000010DEd00001140sv00001025sd00000719*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
pci:v000010DEd00001140sv00001025sd00000725*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
+pci:v000010DEd00001140sv00001025sd00000728*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
pci:v000010DEd00001140sv00001025sd0000072B*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
+pci:v000010DEd00001140sv00001025sd0000072E*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000732*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001025sd00000763*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
pci:v000010DEd00001140sv00001025sd00000773*
ID_MODEL_FROM_DATABASE=GeForce 710M
+pci:v000010DEd00001140sv00001025sd00000774*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd00000776*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd0000077A*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000077B*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000077C*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000077D*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000077E*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd0000077F*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001025sd00000781*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000798*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000799*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd0000079B*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd0000079C*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000807*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000821*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000823*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000830*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000837*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001025sd00000841*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
pci:v000010DEd00001140sv00001028sd0000054D*
ID_MODEL_FROM_DATABASE=GeForce GT 630M
@@ -22811,6 +25958,60 @@ pci:v000010DEd00001140sv00001028sd00000557*
pci:v000010DEd00001140sv00001028sd00000565*
ID_MODEL_FROM_DATABASE=GeForce GT 630M
+pci:v000010DEd00001140sv00001028sd00000568*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv00001028sd00000590*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv00001028sd00000592*
+ ID_MODEL_FROM_DATABASE=GeForce GT 625M
+
+pci:v000010DEd00001140sv00001028sd00000594*
+ ID_MODEL_FROM_DATABASE=GeForce GT 625M
+
+pci:v000010DEd00001140sv00001028sd00000595*
+ ID_MODEL_FROM_DATABASE=GeForce GT 625M
+
+pci:v000010DEd00001140sv00001028sd000005A2*
+ ID_MODEL_FROM_DATABASE=GeForce GT 625M
+
+pci:v000010DEd00001140sv00001028sd000005B1*
+ ID_MODEL_FROM_DATABASE=GeForce GT 625M
+
+pci:v000010DEd00001140sv00001028sd000005B3*
+ ID_MODEL_FROM_DATABASE=GeForce GT 625M
+
+pci:v000010DEd00001140sv00001028sd000005DA*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv00001028sd000005E8*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv00001028sd000005F4*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv0000103Csd000018EF*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000103Csd000018F9*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000103Csd000018FB*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000103Csd000018FD*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000103Csd000018FF*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000103Csd00002AEF*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720A
+
+pci:v000010DEd00001140sv0000103Csd00002AF9*
+ ID_MODEL_FROM_DATABASE=GeForce 710A
+
pci:v000010DEd00001140sv00001043sd000010DD*
ID_MODEL_FROM_DATABASE=NVS 5200M
@@ -22826,6 +26027,9 @@ pci:v000010DEd00001140sv00001043sd0000124D*
pci:v000010DEd00001140sv00001043sd0000126D*
ID_MODEL_FROM_DATABASE=GeForce GT 720M
+pci:v000010DEd00001140sv00001043sd0000131D*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
pci:v000010DEd00001140sv00001043sd000014C7*
ID_MODEL_FROM_DATABASE=GeForce GT 720M
@@ -22847,45 +26051,285 @@ pci:v000010DEd00001140sv00001043sd000021FA*
pci:v000010DEd00001140sv00001043sd0000220A*
ID_MODEL_FROM_DATABASE=GeForce GT 720M
+pci:v000010DEd00001140sv00001043sd0000221A*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001043sd0000223A*
+ ID_MODEL_FROM_DATABASE=GeForce GT 710M
+
+pci:v000010DEd00001140sv00001043sd0000224A*
+ ID_MODEL_FROM_DATABASE=GeForce GT 710M
+
+pci:v000010DEd00001140sv00001043sd00008595*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000010CFsd000017F5*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001179sd0000FA01*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA02*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA03*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA05*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA11*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA13*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA18*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA19*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA21*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA23*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA2A*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA32*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA33*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA36*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA38*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA42*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA43*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA45*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA47*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA49*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA58*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA59*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA88*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001179sd0000FA89*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv0000144Dsd0000B092*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv0000144Dsd0000C0D5*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
pci:v000010DEd00001140sv0000144Dsd0000C0D7*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
+pci:v000010DEd00001140sv0000144Dsd0000C0E2*
+ ID_MODEL_FROM_DATABASE=NVS 5200M
+
+pci:v000010DEd00001140sv0000144Dsd0000C0E3*
+ ID_MODEL_FROM_DATABASE=NVS 5200M
+
+pci:v000010DEd00001140sv0000144Dsd0000C0E4*
+ ID_MODEL_FROM_DATABASE=NVS 5200M
+
pci:v000010DEd00001140sv0000144Dsd0000C652*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
+pci:v000010DEd00001140sv0000144Dsd0000C709*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv0000144Dsd0000C711*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001462sd000010B8*
+ ID_MODEL_FROM_DATABASE=GeForce GT 710M
+
+pci:v000010DEd00001140sv00001462sd000010E9*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001462sd0000AA33*
+ ID_MODEL_FROM_DATABASE=GeForce 720M
+
+pci:v000010DEd00001140sv00001462sd0000AAA2*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001462sd0000AE71*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv0000152Dsd00000926*
+ ID_MODEL_FROM_DATABASE=GeForce 620M
+
+pci:v000010DEd00001140sv0000152Dsd00000982*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000152Dsd00000983*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000152Dsd00001030*
+ ID_MODEL_FROM_DATABASE=GeForce GT 630M
+
+pci:v000010DEd00001140sv0000152Dsd00001055*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
pci:v000010DEd00001140sv000017AAsd00002200*
ID_MODEL_FROM_DATABASE=NVS 5200M
+pci:v000010DEd00001140sv000017AAsd00003656*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv000017AAsd00003800*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd00003801*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd00003802*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd00003803*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd00003804*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
pci:v000010DEd00001140sv000017AAsd00003901*
ID_MODEL_FROM_DATABASE=GeForce 610M / GT 620M
+pci:v000010DEd00001140sv000017AAsd00003902*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd00003903*
+ ID_MODEL_FROM_DATABASE=GeForce 610M/710M
+
pci:v000010DEd00001140sv000017AAsd00003904*
ID_MODEL_FROM_DATABASE=GeForce GT 620M/625M
+pci:v000010DEd00001140sv000017AAsd00003905*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd00003910*
+ ID_MODEL_FROM_DATABASE=GeForce 720M
+
+pci:v000010DEd00001140sv000017AAsd00003912*
+ ID_MODEL_FROM_DATABASE=GeForce 720M
+
+pci:v000010DEd00001140sv000017AAsd00003977*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
pci:v000010DEd00001140sv000017AAsd00003983*
ID_MODEL_FROM_DATABASE=GeForce 610M
+pci:v000010DEd00001140sv000017AAsd00005003*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
pci:v000010DEd00001140sv000017AAsd0000500D*
ID_MODEL_FROM_DATABASE=GeForce GT 620M
+pci:v000010DEd00001140sv000017AAsd00005014*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd00005017*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd00005019*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd0000501A*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd0000501F*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd00005025*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd00005027*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd0000502A*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd0000502B*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd0000502D*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv000017AAsd0000502E*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv000017AAsd0000502F*
+ ID_MODEL_FROM_DATABASE=GeForce GT 720M
+
+pci:v000010DEd00001140sv00001854sd00000177*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001854sd00000180*
+ ID_MODEL_FROM_DATABASE=GeForce 710M
+
+pci:v000010DEd00001140sv00001B0Asd000020DD*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
+pci:v000010DEd00001140sv00001B0Asd000020DF*
+ ID_MODEL_FROM_DATABASE=GeForce GT 620M
+
pci:v000010DEd00001180*
ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 680]
pci:v000010DEd00001180sv00003842sd00003682*
ID_MODEL_FROM_DATABASE=GeForce GTX 680 Mac Edition
+pci:v000010DEd00001182*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti]
+
pci:v000010DEd00001183*
ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 660 Ti]
+pci:v000010DEd00001184*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 770]
+
pci:v000010DEd00001185*
ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 660 OEM]
+pci:v000010DEd00001185sv000010DEsd0000106F*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 OEM]
+
+pci:v000010DEd00001187*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760]
+
pci:v000010DEd00001188*
ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 690]
pci:v000010DEd00001189*
ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 670]
+pci:v000010DEd00001189sv000010DEsd00001074*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM]
+
pci:v000010DEd0000118A*
ID_MODEL_FROM_DATABASE=GK104GL [GRID K520]
@@ -22895,9 +26339,24 @@ pci:v000010DEd0000118B*
pci:v000010DEd0000118C*
ID_MODEL_FROM_DATABASE=GK104 [NVS K2 USM]
+pci:v000010DEd0000118D*
+ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2]
+
+pci:v000010DEd0000118Dsv000010DEsd0000101D*
+ ID_MODEL_FROM_DATABASE=GRID K200
+
+pci:v000010DEd0000118E*
+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 OEM]
+
pci:v000010DEd0000118F*
ID_MODEL_FROM_DATABASE=GK104GL [Tesla K10]
+pci:v000010DEd0000119D*
+ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M]
+
+pci:v000010DEd0000119E*
+ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
+
pci:v000010DEd0000119F*
ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M]
@@ -22913,15 +26372,33 @@ pci:v000010DEd000011A2*
pci:v000010DEd000011A3*
ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 680MX]
+pci:v000010DEd000011A3sv0000106Bsd0000010D*
+ ID_MODEL_FROM_DATABASE=iMac 13,2
+
pci:v000010DEd000011A7*
ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 675MX]
pci:v000010DEd000011B0*
ID_MODEL_FROM_DATABASE=GK104GL [Quadro K2 USM]
+pci:v000010DEd000011B0sv000010DEsd0000101A*
+ ID_MODEL_FROM_DATABASE=GRID K240Q
+
+pci:v000010DEd000011B0sv000010DEsd0000101B*
+ ID_MODEL_FROM_DATABASE=GRID K260Q
+
pci:v000010DEd000011B1*
ID_MODEL_FROM_DATABASE=GK104GL [Tesla K2 USM]
+pci:v000010DEd000011B6*
+ ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K3100M]
+
+pci:v000010DEd000011B7*
+ ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K4100M]
+
+pci:v000010DEd000011B8*
+ ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K5100M]
+
pci:v000010DEd000011BA*
ID_MODEL_FROM_DATABASE=GK104GL [Quadro K5000]
@@ -22976,9 +26453,18 @@ pci:v000010DEd000011C4*
pci:v000010DEd000011C6*
ID_MODEL_FROM_DATABASE=GK106 [GeForce GTX 650 Ti]
+pci:v000010DEd000011C7*
+ ID_MODEL_FROM_DATABASE=GK106 [GeForce GTX 750 Ti]
+
+pci:v000010DEd000011C8*
+ ID_MODEL_FROM_DATABASE=GK106 [GeForce GTX 650 OEM]
+
pci:v000010DEd000011E0*
ID_MODEL_FROM_DATABASE=GK106M [GeForce GTX 770M]
+pci:v000010DEd000011E1*
+ ID_MODEL_FROM_DATABASE=GK106M [GeForce GTX 765M]
+
pci:v000010DEd000011E2*
ID_MODEL_FROM_DATABASE=GK106M [GeForce GTX 765M]
@@ -22988,6 +26474,9 @@ pci:v000010DEd000011E3*
pci:v000010DEd000011FA*
ID_MODEL_FROM_DATABASE=GK106GL [Quadro K4000]
+pci:v000010DEd000011FC*
+ ID_MODEL_FROM_DATABASE=GK106GLM [Quadro K2100M]
+
pci:v000010DEd00001200*
ID_MODEL_FROM_DATABASE=GF114 [GeForce GTX 560 Ti]
@@ -23060,8 +26549,38 @@ pci:v000010DEd00001247sv00001043sd0000212B*
pci:v000010DEd00001247sv00001043sd0000212C*
ID_MODEL_FROM_DATABASE=GeForce GT 635M
+pci:v000010DEd00001247sv0000152Dsd00000930*
+ ID_MODEL_FROM_DATABASE=GeForce GT 635M
+
pci:v000010DEd00001248*
- ID_MODEL_FROM_DATABASE=GF116M [GeForce GT 555M]
+ ID_MODEL_FROM_DATABASE=GF116M [GeForce GT 555M/635M]
+
+pci:v000010DEd00001248sv0000152Dsd00000930*
+ ID_MODEL_FROM_DATABASE=GeForce GT 635M
+
+pci:v000010DEd00001248sv000017C0sd000010E7*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv000017C0sd000010E8*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv000017C0sd000010EA*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv00001854sd00000890*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv00001854sd00000891*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv00001854sd00001795*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv00001854sd00001796*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd00001248sv00001854sd00003005*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
pci:v000010DEd00001249*
ID_MODEL_FROM_DATABASE=GF116 [GeForce GTS 450 Rev. 3]
@@ -23072,30 +26591,81 @@ pci:v000010DEd0000124B*
pci:v000010DEd0000124D*
ID_MODEL_FROM_DATABASE=GF116M [GeForce GT 555M/635M]
+pci:v000010DEd0000124Dsv00001028sd00000491*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd0000124Dsv00001028sd00000570*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd0000124Dsv00001028sd00000571*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd0000124Dsv00001462sd0000108D*
+ ID_MODEL_FROM_DATABASE=GeForce GT 555M
+
+pci:v000010DEd0000124Dsv00001462sd000010CC*
+ ID_MODEL_FROM_DATABASE=GeForce GT 635M
+
pci:v000010DEd00001251*
ID_MODEL_FROM_DATABASE=GF116M [GeForce GT 560M]
pci:v000010DEd00001280*
ID_MODEL_FROM_DATABASE=GK208 [GeForce GT 635]
+pci:v000010DEd00001282*
+ ID_MODEL_FROM_DATABASE=GK208 [GeForce GT 640 Rev. 2]
+
+pci:v000010DEd00001284*
+ ID_MODEL_FROM_DATABASE=GK208 [GeForce GT 630 Rev. 2]
+
pci:v000010DEd00001290*
ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 730M]
+pci:v000010DEd00001290sv0000103Csd00002AFA*
+ ID_MODEL_FROM_DATABASE=GeForce GT 730A
+
+pci:v000010DEd00001290sv0000103Csd00002B04*
+ ID_MODEL_FROM_DATABASE=GeForce GT 730A
+
+pci:v000010DEd00001290sv00001043sd000013AD*
+ ID_MODEL_FROM_DATABASE=GeForce GT 730M
+
+pci:v000010DEd00001290sv00001043sd000013CD*
+ ID_MODEL_FROM_DATABASE=GeForce GT 730M
+
pci:v000010DEd00001291*
ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 735M]
pci:v000010DEd00001292*
ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 740M]
+pci:v000010DEd00001292sv000017AAsd00003675*
+ ID_MODEL_FROM_DATABASE=GeForce GT 740A
+
+pci:v000010DEd00001292sv000017AAsd00003684*
+ ID_MODEL_FROM_DATABASE=GeForce GT 740A
+
pci:v000010DEd00001293*
ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 730M]
pci:v000010DEd00001294*
ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 740M]
+pci:v000010DEd00001295*
+ ID_MODEL_FROM_DATABASE=GK208M [GeForce 710M]
+
+pci:v000010DEd00001298*
+ ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 720M]
+
pci:v000010DEd000012A0*
ID_MODEL_FROM_DATABASE=GK208
+pci:v000010DEd000012B9*
+ ID_MODEL_FROM_DATABASE=GK208GLM [Quadro K610M]
+
+pci:v000010DEd000012BA*
+ ID_MODEL_FROM_DATABASE=GK208GLM [Quadro K510M]
+
pci:v000010DF*
ID_VENDOR_FROM_DATABASE=Emulex Corporation
@@ -23531,6 +27101,9 @@ pci:v000010ECd00005209*
pci:v000010ECd00005229*
ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader
+pci:v000010ECd00005229sv00001025sd00000813*
+ ID_MODEL_FROM_DATABASE=Aspire R7-571
+
pci:v000010ECd00005288*
ID_MODEL_FROM_DATABASE=Barossa PCI Express Card Reader
@@ -23562,7 +27135,7 @@ pci:v000010ECd00008129sv000010ECsd00008129*
ID_MODEL_FROM_DATABASE=RT8129 Fast Ethernet Adapter
pci:v000010ECd00008129sv000011ECsd00008129*
- ID_MODEL_FROM_DATABASE=RT8129 Fast Ethernet Adapter
+ ID_MODEL_FROM_DATABASE=RTL8111/8168 PCIe Gigabit Ethernet (misconfigured)
pci:v000010ECd00008136*
ID_MODEL_FROM_DATABASE=RTL8101E/RTL8102E PCI Express Fast Ethernet controller
@@ -23739,7 +27312,7 @@ pci:v000010ECd00008167sv00001462sd0000236C*
ID_MODEL_FROM_DATABASE=945P Neo3-F motherboard
pci:v000010ECd00008168*
- ID_MODEL_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
pci:v000010ECd00008168sv00001019sd00008168*
ID_MODEL_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
@@ -27908,6 +31481,15 @@ pci:v00001137d00000045sv00001137sd0000004F*
pci:v00001137d0000004E*
ID_MODEL_FROM_DATABASE=VIC 82 PCIe Upstream Port
+pci:v00001137d00000071*
+ ID_MODEL_FROM_DATABASE=VIC SR-IOV VF
+
+pci:v00001137d00000084*
+ ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA
+
+pci:v00001137d00000085*
+ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCOE HBA
+
pci:v00001137d000000CF*
ID_MODEL_FROM_DATABASE=VIC Userspace NIC
@@ -29183,6 +32765,9 @@ pci:v00001180d00000476sv000017AAsd0000201C*
pci:v00001180d00000476sv000017AAsd000020C4*
ID_MODEL_FROM_DATABASE=ThinkPad T61
+pci:v00001180d00000476sv000017AAsd000020C6*
+ ID_MODEL_FROM_DATABASE=ThinkPad R61
+
pci:v00001180d00000477*
ID_MODEL_FROM_DATABASE=RL5c477
@@ -29372,6 +32957,9 @@ pci:v00001180d00000832sv0000103Csd000030CC*
pci:v00001180d00000832sv0000103Csd000030CF*
ID_MODEL_FROM_DATABASE=Pavilion dv9668eg Laptop
+pci:v00001180d00000832sv000017AAsd000020C7*
+ ID_MODEL_FROM_DATABASE=ThinkPad R61
+
pci:v00001180d00000841*
ID_MODEL_FROM_DATABASE=R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394
@@ -29915,9 +33503,18 @@ pci:v000011ABd00002A30*
pci:v000011ABd00002A40*
ID_MODEL_FROM_DATABASE=88W8366 [TopDog] 802.11n Wireless
+pci:v000011ABd00002A41*
+ ID_MODEL_FROM_DATABASE=88W8366 [TopDog] 802.11n Wireless
+
+pci:v000011ABd00002A42*
+ ID_MODEL_FROM_DATABASE=88W8366 [TopDog] 802.11n Wireless
+
pci:v000011ABd00002A43*
ID_MODEL_FROM_DATABASE=88W8366 [TopDog] 802.11n Wireless
+pci:v000011ABd00002B36*
+ ID_MODEL_FROM_DATABASE=88W8764 [Avastar] 802.11n Wireless
+
pci:v000011ABd00004101*
ID_MODEL_FROM_DATABASE=OLPC Cafe Controller Secure Digital Controller
@@ -32130,13 +35727,28 @@ pci:v0000123E*
ID_VENDOR_FROM_DATABASE=Simutech, Inc.
pci:v0000123F*
- ID_VENDOR_FROM_DATABASE=C-Cube Microsystems
+ ID_VENDOR_FROM_DATABASE=LSI Logic
pci:v0000123Fd000000E4*
ID_MODEL_FROM_DATABASE=MPEG
pci:v0000123Fd00008120*
- ID_MODEL_FROM_DATABASE=E4?
+ ID_MODEL_FROM_DATABASE=DVxplore Codec
+
+pci:v0000123Fd00008120sv000010DEsd000001E1*
+ ID_MODEL_FROM_DATABASE=NVTV PAL
+
+pci:v0000123Fd00008120sv000010DEsd000001E2*
+ ID_MODEL_FROM_DATABASE=NVTV NTSC
+
+pci:v0000123Fd00008120sv000010DEsd000001E3*
+ ID_MODEL_FROM_DATABASE=NVTV PAL
+
+pci:v0000123Fd00008120sv000010DEsd00000248*
+ ID_MODEL_FROM_DATABASE=NVTV NTSC
+
+pci:v0000123Fd00008120sv000010DEsd00000249*
+ ID_MODEL_FROM_DATABASE=NVTV PAL
pci:v0000123Fd00008120sv000011BDsd00000006*
ID_MODEL_FROM_DATABASE=DV500 E4
@@ -32702,6 +36314,9 @@ pci:v0000126Fd00000710*
pci:v0000126Fd00000712*
ID_MODEL_FROM_DATABASE=SM712 LynxEM+
+pci:v0000126Fd00000718*
+ ID_MODEL_FROM_DATABASE=SM718 LynxSE+
+
pci:v0000126Fd00000720*
ID_MODEL_FROM_DATABASE=SM720 Lynx3DM
@@ -34229,6 +37844,9 @@ pci:v000012EBd00000001sv000012EBsd00000001*
pci:v000012EBd00000001sv00005053sd00003355*
ID_MODEL_FROM_DATABASE=Montego
+pci:v000012EBd00000001sv000050B2sd00001111*
+ ID_MODEL_FROM_DATABASE=XLerate
+
pci:v000012EBd00000002*
ID_MODEL_FROM_DATABASE=Vortex 2
@@ -37319,6 +40937,9 @@ pci:v00001425d00004086*
pci:v00001425d00004087*
ID_MODEL_FROM_DATABASE=T440T-4087 Unified Wire Ethernet Controller
+pci:v00001425d00004088*
+ ID_MODEL_FROM_DATABASE=T440-4088 Unified Wire Ethernet Controller
+
pci:v00001425d00004401*
ID_MODEL_FROM_DATABASE=T420-CR Unified Wire Ethernet Controller
@@ -37388,6 +41009,9 @@ pci:v00001425d00004486*
pci:v00001425d00004487*
ID_MODEL_FROM_DATABASE=T440T-4087 Unified Wire Ethernet Controller
+pci:v00001425d00004488*
+ ID_MODEL_FROM_DATABASE=T440-4088 Unified Wire Ethernet Controller
+
pci:v00001425d00004501*
ID_MODEL_FROM_DATABASE=T420-CR Unified Wire Storage Controller
@@ -37457,6 +41081,9 @@ pci:v00001425d00004586*
pci:v00001425d00004587*
ID_MODEL_FROM_DATABASE=T440T-4087 Unified Wire Storage Controller
+pci:v00001425d00004588*
+ ID_MODEL_FROM_DATABASE=T440-4088 Unified Wire Storage Controller
+
pci:v00001425d00004601*
ID_MODEL_FROM_DATABASE=T420-CR Unified Wire Storage Controller
@@ -37526,6 +41153,9 @@ pci:v00001425d00004686*
pci:v00001425d00004687*
ID_MODEL_FROM_DATABASE=T440T-4087 Unified Wire Storage Controller
+pci:v00001425d00004688*
+ ID_MODEL_FROM_DATABASE=T440-4088 Unified Wire Storage Controller
+
pci:v00001425d00004701*
ID_MODEL_FROM_DATABASE=T420-CR Unified Wire Ethernet Controller
@@ -37595,6 +41225,9 @@ pci:v00001425d00004786*
pci:v00001425d00004787*
ID_MODEL_FROM_DATABASE=T440T-4087 Unified Wire Ethernet Controller
+pci:v00001425d00004788*
+ ID_MODEL_FROM_DATABASE=T440-4088 Unified Wire Ethernet Controller
+
pci:v00001425d00004801*
ID_MODEL_FROM_DATABASE=T420-CR Unified Wire Ethernet Controller
@@ -37664,6 +41297,9 @@ pci:v00001425d00004886*
pci:v00001425d00004887*
ID_MODEL_FROM_DATABASE=T440T-4087 Unified Wire Ethernet Controller
+pci:v00001425d00004888*
+ ID_MODEL_FROM_DATABASE=T440-4088 Unified Wire Ethernet Controller
+
pci:v00001425d00005001*
ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller
@@ -37721,6 +41357,15 @@ pci:v00001425d00005012*
pci:v00001425d00005013*
ID_MODEL_FROM_DATABASE=T580-CR Unified Wire Ethernet Controller
+pci:v00001425d00005014*
+ ID_MODEL_FROM_DATABASE=T580-LP-SO-CR Unified Wire Ethernet Controller
+
+pci:v00001425d00005080*
+ ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller
+
+pci:v00001425d00005081*
+ ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
+
pci:v00001425d00005401*
ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller
@@ -37778,6 +41423,15 @@ pci:v00001425d00005412*
pci:v00001425d00005413*
ID_MODEL_FROM_DATABASE=T580-CR Unified Wire Ethernet Controller
+pci:v00001425d00005414*
+ ID_MODEL_FROM_DATABASE=T580-LP-SO-CR Unified Wire Ethernet Controller
+
+pci:v00001425d00005480*
+ ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller
+
+pci:v00001425d00005481*
+ ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
+
pci:v00001425d00005501*
ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Storage Controller
@@ -37835,6 +41489,15 @@ pci:v00001425d00005512*
pci:v00001425d00005513*
ID_MODEL_FROM_DATABASE=T580-CR Unified Wire Storage Controller
+pci:v00001425d00005514*
+ ID_MODEL_FROM_DATABASE=T580-LP-SO-CR Unified Wire Storage Controller
+
+pci:v00001425d00005580*
+ ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Storage Controller
+
+pci:v00001425d00005581*
+ ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Storage Controller
+
pci:v00001425d00005601*
ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Storage Controller
@@ -37892,6 +41555,15 @@ pci:v00001425d00005612*
pci:v00001425d00005613*
ID_MODEL_FROM_DATABASE=T580-CR Unified Wire Storage Controller
+pci:v00001425d00005614*
+ ID_MODEL_FROM_DATABASE=T580-LP-SO-CR Unified Wire Storage Controller
+
+pci:v00001425d00005680*
+ ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Storage Controller
+
+pci:v00001425d00005681*
+ ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Storage Controller
+
pci:v00001425d00005701*
ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller
@@ -37949,6 +41621,15 @@ pci:v00001425d00005712*
pci:v00001425d00005713*
ID_MODEL_FROM_DATABASE=T580-CR Unified Wire Ethernet Controller
+pci:v00001425d00005714*
+ ID_MODEL_FROM_DATABASE=T580-LP-SO-CR Unified Wire Ethernet Controller
+
+pci:v00001425d00005780*
+ ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller
+
+pci:v00001425d00005781*
+ ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
+
pci:v00001425d00005801*
ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller
@@ -38006,6 +41687,15 @@ pci:v00001425d00005812*
pci:v00001425d00005813*
ID_MODEL_FROM_DATABASE=T580-CR Unified Wire Ethernet Controller
+pci:v00001425d00005814*
+ ID_MODEL_FROM_DATABASE=T580-LP-SO-CR Unified Wire Ethernet Controller
+
+pci:v00001425d00005880*
+ ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller
+
+pci:v00001425d00005881*
+ ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
+
pci:v00001425d0000A000*
ID_MODEL_FROM_DATABASE=PE10K Unified Wire Ethernet Controller
@@ -38412,7 +42102,7 @@ pci:v0000148B*
ID_VENDOR_FROM_DATABASE=INNOMEDIALOGIC Inc.
pci:v0000148C*
- ID_VENDOR_FROM_DATABASE=C.P. Technology Co. Ltd
+ ID_VENDOR_FROM_DATABASE=Tul Corporation / PowerColor
pci:v0000148D*
ID_VENDOR_FROM_DATABASE=DIGICOM Systems, Inc.
@@ -38475,7 +42165,10 @@ pci:v00001498d00003064*
ID_MODEL_FROM_DATABASE=TPCI100 (2 Slot IndustryPack PCI Carrier)
pci:v00001498d000030C8*
- ID_MODEL_FROM_DATABASE=TPCI200
+ ID_MODEL_FROM_DATABASE=TPCI200 4 Slot IndustryPack PCI Carrier
+
+pci:v00001498d000070C8*
+ ID_MODEL_FROM_DATABASE=TPCE200 4 Slot IndustryPack PCIe Carrier
pci:v00001499*
ID_VENDOR_FROM_DATABASE=EMTEC CO., Ltd
@@ -39005,6 +42698,9 @@ pci:v000014E4d0000163Asv0000103Csd0000171D*
pci:v000014E4d0000163Asv0000103Csd00007056*
ID_MODEL_FROM_DATABASE=NC382i Integrated Quad Port PCI Express Gigabit Server Adapter
+pci:v000014E4d0000163Asv00001259sd00002984*
+ ID_MODEL_FROM_DATABASE=AT-2973SX
+
pci:v000014E4d0000163B*
ID_MODEL_FROM_DATABASE=NetXtreme II BCM5716 Gigabit Ethernet
@@ -39845,6 +43541,9 @@ pci:v000014E4d000016B0*
pci:v000014E4d000016B1*
ID_MODEL_FROM_DATABASE=NetLink BCM57781 Gigabit Ethernet PCIe
+pci:v000014E4d000016B1sv00001849sd000096B1*
+ ID_MODEL_FROM_DATABASE=Z77 Extreme4 motherboard
+
pci:v000014E4d000016B2*
ID_MODEL_FROM_DATABASE=NetLink BCM57791 Gigabit Ethernet PCIe
@@ -39864,7 +43563,13 @@ pci:v000014E4d000016B7*
ID_MODEL_FROM_DATABASE=NetXtreme BCM57782 Gigabit Ethernet PCIe
pci:v000014E4d000016BC*
- ID_MODEL_FROM_DATABASE=NetXtreme BCM57765 Memory Card Reader
+ ID_MODEL_FROM_DATABASE=BCM57765/57785 SDXC/MMC Card Reader
+
+pci:v000014E4d000016BE*
+ ID_MODEL_FROM_DATABASE=BCM57765/57785 MS Card Reader
+
+pci:v000014E4d000016BF*
+ ID_MODEL_FROM_DATABASE=BCM57765/57785 xD-Picture Card Reader
pci:v000014E4d000016C6*
ID_MODEL_FROM_DATABASE=NetXtreme BCM5702A3 Gigabit Ethernet
@@ -40487,6 +44192,9 @@ pci:v000014E4d00004365*
pci:v000014E4d00004365sv00001028sd00000016*
ID_MODEL_FROM_DATABASE=Wireless 1704 802.11n + BT 4.0
+pci:v000014E4d000043A0*
+ ID_MODEL_FROM_DATABASE=BCM4360 802.11ac Wireless Network Adapter
+
pci:v000014E4d000043B1*
ID_MODEL_FROM_DATABASE=BCM4352 802.11ac Wireless Network Adapter
@@ -40572,7 +44280,7 @@ pci:v000014E4d00004714*
ID_MODEL_FROM_DATABASE=BCM47xx Sentry5 External Interface
pci:v000014E4d00004715*
- ID_MODEL_FROM_DATABASE=Sentry5 USB Controller
+ ID_MODEL_FROM_DATABASE=BCM47xx Sentry5 USB / Ethernet Controller
pci:v000014E4d00004716*
ID_MODEL_FROM_DATABASE=BCM47xx Sentry5 USB Host Controller
@@ -40590,7 +44298,7 @@ pci:v000014E4d00004720*
ID_MODEL_FROM_DATABASE=BCM4712 MIPS CPU
pci:v000014E4d00004727*
- ID_MODEL_FROM_DATABASE=BCM4313 802.11b/g/n Wireless LAN Controller
+ ID_MODEL_FROM_DATABASE=BCM4313 802.11bgn Wireless Network Adapter
pci:v000014E4d00004727sv00001028sd00000010*
ID_MODEL_FROM_DATABASE=Inspiron M5010 / XPS 8300
@@ -40862,6 +44570,9 @@ pci:v000014F1d00001055*
pci:v000014F1d00001056*
ID_MODEL_FROM_DATABASE=HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)
+pci:v000014F1d00001056sv0000122Dsd00004035*
+ ID_MODEL_FROM_DATABASE=MDP3900V-W
+
pci:v000014F1d00001057*
ID_MODEL_FROM_DATABASE=HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)
@@ -42078,7 +45789,13 @@ pci:v00001555*
ID_VENDOR_FROM_DATABASE=GESYTEC GmBH
pci:v00001556*
- ID_VENDOR_FROM_DATABASE=PLD APPLICATIONS
+ ID_VENDOR_FROM_DATABASE=PLDA
+
+pci:v00001556d00001100*
+ ID_MODEL_FROM_DATABASE=PCI Express Core Reference Design
+
+pci:v00001556d0000110F*
+ ID_MODEL_FROM_DATABASE=PCI Express Core Reference Design Virtual Function
pci:v00001557*
ID_VENDOR_FROM_DATABASE=MEDIASTAR Co Ltd
@@ -42575,6 +46292,12 @@ pci:v000015B3d00001015*
pci:v000015B3d00001016*
ID_MODEL_FROM_DATABASE=MT27631 Family
+pci:v000015B3d00001017*
+ ID_MODEL_FROM_DATABASE=MT27640 Family
+
+pci:v000015B3d00001018*
+ ID_MODEL_FROM_DATABASE=MT27641 Family
+
pci:v000015B3d00005274*
ID_MODEL_FROM_DATABASE=MT21108 InfiniBridge
@@ -43100,6 +46823,9 @@ pci:v00001619d00000640*
pci:v00001619d00001610*
ID_MODEL_FROM_DATABASE=FarSync TE1 (T1,E1)
+pci:v00001619d00001612*
+ ID_MODEL_FROM_DATABASE=FarSync TE1 PCI Express (T1,E1)
+
pci:v00001619d00002610*
ID_MODEL_FROM_DATABASE=FarSync DSL-S1 (SHDSL)
@@ -43112,6 +46838,15 @@ pci:v00001619d00004620*
pci:v00001619d00004640*
ID_MODEL_FROM_DATABASE=FarSync T4Ue PCI Express (4-port X.21/V.35/V.24)
+pci:v00001619d00005621*
+ ID_MODEL_FROM_DATABASE=FarSync T2Ee PCI Express (2 port X.21/V.35/V.24)
+
+pci:v00001619d00005641*
+ ID_MODEL_FROM_DATABASE=FarSync T4Ee PCI Express (4 port X.21/V.35/V.24)
+
+pci:v00001619d00006620*
+ ID_MODEL_FROM_DATABASE=FarSync T2U-PMC PCI Express (2 port X.21/V.35/V.24)
+
pci:v0000161F*
ID_VENDOR_FROM_DATABASE=Rioworks
@@ -43157,6 +46892,9 @@ pci:v0000163Cd00005449*
pci:v00001641*
ID_VENDOR_FROM_DATABASE=MKNet Corp.
+pci:v00001642*
+ ID_VENDOR_FROM_DATABASE=Bitland(ShenZhen) Information Technology Co., Ltd.
+
pci:v00001657*
ID_VENDOR_FROM_DATABASE=Brocade Communications Systems, Inc.
@@ -43197,7 +46935,7 @@ pci:v00001657d00000021*
ID_MODEL_FROM_DATABASE=804 8Gbps FC HBA for HP Bladesystem c-class
pci:v00001657d00000022*
- ID_MODEL_FROM_DATABASE=1867/1860: 16Gbps/10Gbps Fabric Adapter
+ ID_MODEL_FROM_DATABASE=1860 16Gbps/10Gbps Fabric Adapter
pci:v00001657d00000022sv00001657sd00000022*
ID_MODEL_FROM_DATABASE=10Gbps CNA - FCOE
@@ -43208,6 +46946,9 @@ pci:v00001657d00000022sv00001657sd00000023*
pci:v00001657d00000022sv00001657sd00000024*
ID_MODEL_FROM_DATABASE=16Gbps FC HBA
+pci:v00001657d00000023*
+ ID_MODEL_FROM_DATABASE=1867/1869 16Gbps FC HBA
+
pci:v00001657d00000646*
ID_MODEL_FROM_DATABASE=400 4Gbps PCIe FC HBA
@@ -43223,6 +46964,9 @@ pci:v0000165Ad0000D200*
pci:v0000165Ad0000D300*
ID_MODEL_FROM_DATABASE=PIXCI(R) D3X Digital Video Capture Board [custom QL5232]
+pci:v0000165Ad0000EB01*
+ ID_MODEL_FROM_DATABASE=PIXCI(R) EB1 PCI Camera Link Video Capture Board
+
pci:v0000165D*
ID_VENDOR_FROM_DATABASE=Hsing Tech. Enterprise Co., Ltd.
@@ -44415,7 +48159,7 @@ pci:v00001749*
ID_VENDOR_FROM_DATABASE=RLX Technologies
pci:v0000174B*
- ID_VENDOR_FROM_DATABASE=PC Partner Limited
+ ID_VENDOR_FROM_DATABASE=PC Partner Limited / Sapphire Technology
pci:v0000174D*
ID_VENDOR_FROM_DATABASE=WellX Telecom SA
@@ -44429,6 +48173,12 @@ pci:v0000175E*
pci:v00001760*
ID_VENDOR_FROM_DATABASE=TEDIA spol. s r. o.
+pci:v00001760d00000101*
+ ID_MODEL_FROM_DATABASE=PCD-7004 Digital Bi-Directional Ports PCI Card
+
+pci:v00001760d00000102*
+ ID_MODEL_FROM_DATABASE=PCD-7104 Digital Input & Output PCI Card
+
pci:v00001771*
ID_VENDOR_FROM_DATABASE=InnoVISION Multimedia Ltd.
@@ -45432,7 +49182,7 @@ pci:v000018B8d0000B001*
ID_MODEL_FROM_DATABASE=AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor
pci:v000018BC*
- ID_VENDOR_FROM_DATABASE=Info-Tek Corp.
+ ID_VENDOR_FROM_DATABASE=GeCube Technologies, Inc.
pci:v000018C3*
ID_VENDOR_FROM_DATABASE=Micronas Semiconductor Holding AG
@@ -45482,6 +49232,9 @@ pci:v000018DD*
pci:v000018DDd00004C6F*
ID_MODEL_FROM_DATABASE=Artimi RTMI-100 UWB adapter
+pci:v000018DF*
+ ID_VENDOR_FROM_DATABASE=LeWiz Communications
+
pci:v000018E6*
ID_VENDOR_FROM_DATABASE=MPL AG
@@ -45692,6 +49445,18 @@ pci:v000018F4d000000E5*
pci:v000018F4d000000F5*
ID_MODEL_FROM_DATABASE=NT4E2-4T-BP Network Adapter 4x1Gb with Electrical Bypass
+pci:v000018F4d00000105*
+ ID_MODEL_FROM_DATABASE=NT4E2-4-PTP Network Adapter 4x1Gb
+
+pci:v000018F4d00000115*
+ ID_MODEL_FROM_DATABASE=NT20E2-PTP Network Adapter 2x10Gb
+
+pci:v000018F4d00000125*
+ ID_MODEL_FROM_DATABASE=NT4E2-4-PTP Network Adapter 4x1Gb
+
+pci:v000018F4d00000135*
+ ID_MODEL_FROM_DATABASE=NT20E2-PTP Network Adapter 2x10Gb
+
pci:v000018F6*
ID_VENDOR_FROM_DATABASE=NextIO
@@ -45791,6 +49556,18 @@ pci:v000018F7d00000021*
pci:v000018F7d00000022*
ID_MODEL_FROM_DATABASE=SuperFSCC/4-LVDS Serial PCIe Adapter [Fastcom]
+pci:v000018F7d00000023*
+ ID_MODEL_FROM_DATABASE=SuperFSCC/4 Serial cPCI Adapter [Fastcom]
+
+pci:v000018F7d00000025*
+ ID_MODEL_FROM_DATABASE=SuperFSCC/4-LVDS Serial PCI Adapter [Fastcom]
+
+pci:v000018F7d00000026*
+ ID_MODEL_FROM_DATABASE=SuperFSCC-LVDS Serial PCI Adapter [Fastcom]
+
+pci:v000018F7d00000027*
+ ID_MODEL_FROM_DATABASE=FSCC/4 Serial PCIe Adapter [Fastcom]
+
pci:v000018FB*
ID_VENDOR_FROM_DATABASE=Resilience Corporation
@@ -45938,6 +49715,24 @@ pci:v00001924d00000710sv00001924sd00005202*
pci:v00001924d00000803*
ID_MODEL_FROM_DATABASE=SFC9020 [Solarstorm]
+pci:v00001924d00000803sv00001014sd00000478*
+ ID_MODEL_FROM_DATABASE=2-port 10GbE Low-Latency (R7)
+
+pci:v00001924d00000803sv00001014sd00000479*
+ ID_MODEL_FROM_DATABASE=2-port 10GbE OpenOnload (R7)
+
+pci:v00001924d00000803sv00001014sd000004A7*
+ ID_MODEL_FROM_DATABASE=Solarflare 10Gb Low-latency Dual-port HBA (R7)
+
+pci:v00001924d00000803sv00001014sd000004A8*
+ ID_MODEL_FROM_DATABASE=Solarflare 10Gb Dual-port HBA (R7)
+
+pci:v00001924d00000803sv0000103Csd00002132*
+ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 570FLR-SFP+ Adapter (R1)
+
+pci:v00001924d00000803sv0000103Csd00002136*
+ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 570SFP+ Adapter (R7)
+
pci:v00001924d00000803sv00001924sd00001201*
ID_MODEL_FROM_DATABASE=SFA6902F-R1 SFP+ AOE Adapter
@@ -46034,6 +49829,15 @@ pci:v00001924d00000813sv00001924sd00007104*
pci:v00001924d00000813sv00001924sd00007904*
ID_MODEL_FROM_DATABASE=SFN5151T-R4 10GBASE-T Server Adapter
+pci:v00001924d00000903*
+ ID_MODEL_FROM_DATABASE=SFC9120
+
+pci:v00001924d00000903sv00001924sd00008002*
+ ID_MODEL_FROM_DATABASE=SFN7122F-R1 SFP+ Server Adapter
+
+pci:v00001924d00000903sv00001924sd00008006*
+ ID_MODEL_FROM_DATABASE=SFN7022F-R1 SFP+ Server Adapter
+
pci:v00001924d00001803*
ID_MODEL_FROM_DATABASE=SFC9020 Virtual Function [Solarstorm]
@@ -46905,7 +50709,10 @@ pci:v00001A41d00000002*
ID_MODEL_FROM_DATABASE=TILEPro processor
pci:v00001A41d00000200*
- ID_MODEL_FROM_DATABASE=TILE-Gx36 processor
+ ID_MODEL_FROM_DATABASE=TILE-Gx processor
+
+pci:v00001A41d00002000*
+ ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Bridge
pci:v00001A4A*
ID_VENDOR_FROM_DATABASE=SLAC National Accelerator Lab PPA-REG
@@ -46919,6 +50726,9 @@ pci:v00001A4Ad00001010*
pci:v00001A4Ad00002000*
ID_MODEL_FROM_DATABASE=PGPCard - 4 Lane
+pci:v00001A4Ad00002001*
+ ID_MODEL_FROM_DATABASE=PGPCard - 8 Lane Plus EVR
+
pci:v00001A4Ad00002010*
ID_MODEL_FROM_DATABASE=PCI-Express EVR
@@ -47033,6 +50843,12 @@ pci:v00001A78d00000031sv00001A78sd00000039*
pci:v00001A78d00000040*
ID_MODEL_FROM_DATABASE=FlashMAX II
+pci:v00001A78d00000041*
+ ID_MODEL_FROM_DATABASE=FlashMAX II
+
+pci:v00001A78d00000042*
+ ID_MODEL_FROM_DATABASE=FlashMAX II
+
pci:v00001A84*
ID_VENDOR_FROM_DATABASE=Commex Technologies
@@ -47091,7 +50907,7 @@ pci:v00001AB9*
ID_VENDOR_FROM_DATABASE=Espia Srl
pci:v00001ACC*
- ID_VENDOR_FROM_DATABASE=Point of View B.V
+ ID_VENDOR_FROM_DATABASE=Point of View BV
pci:v00001AD7*
ID_VENDOR_FROM_DATABASE=Spectracom Corporation
@@ -47132,6 +50948,21 @@ pci:v00001AE8d00000A44*
pci:v00001AE8d00000E44*
ID_MODEL_FROM_DATABASE=microEnable IV-GigE x4
+pci:v00001AE9*
+ ID_VENDOR_FROM_DATABASE=Wilocity Ltd.
+
+pci:v00001AE9d00000101*
+ ID_MODEL_FROM_DATABASE=Wil6200 PCI Express Root Port
+
+pci:v00001AE9d00000200*
+ ID_MODEL_FROM_DATABASE=Wil6200 PCI Express Port
+
+pci:v00001AE9d00000201*
+ ID_MODEL_FROM_DATABASE=Wil6200 Wireless PCI Express Port
+
+pci:v00001AE9d00000301*
+ ID_MODEL_FROM_DATABASE=Wil6200 802.11ad Wireless Network Adapter
+
pci:v00001AEC*
ID_VENDOR_FROM_DATABASE=Wolfson Microelectronics
@@ -47219,6 +51050,9 @@ pci:v00001B03d00006100*
pci:v00001B08*
ID_VENDOR_FROM_DATABASE=MSC Vertriebs GmbH
+pci:v00001B0A*
+ ID_VENDOR_FROM_DATABASE=Pegatron
+
pci:v00001B13*
ID_VENDOR_FROM_DATABASE=Jaton Corp
@@ -47237,12 +51071,24 @@ pci:v00001B21d00000611*
pci:v00001B21d00000612*
ID_MODEL_FROM_DATABASE=ASM1062 Serial ATA Controller
+pci:v00001B21d00000612sv00001849sd00000612*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00001B21d00001042*
ID_MODEL_FROM_DATABASE=ASM1042 SuperSpeed USB Host Controller
+pci:v00001B21d00001042sv00001849sd00001042*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00001B21d00001080*
ID_MODEL_FROM_DATABASE=ASM1083/1085 PCIe to PCI Bridge
+pci:v00001B21d00001080sv00001849sd00001080*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
+pci:v00001B2C*
+ ID_VENDOR_FROM_DATABASE=Opal-RT Technologies Inc.
+
pci:v00001B36*
ID_VENDOR_FROM_DATABASE=Red Hat, Inc.
@@ -47316,7 +51162,7 @@ pci:v00001B4Bd00009192*
ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
pci:v00001B4Bd000091A0*
- ID_MODEL_FROM_DATABASE=88SE91A0 SATA 6Gb/s Controller
+ ID_MODEL_FROM_DATABASE=88SE912x SATA 6Gb/s Controller [IDE mode]
pci:v00001B4Bd000091A4*
ID_MODEL_FROM_DATABASE=88SE912x IDE Controller
@@ -47327,6 +51173,9 @@ pci:v00001B4Bd00009230*
pci:v00001B4Bd00009480*
ID_MODEL_FROM_DATABASE=88SE9480 SAS/SATA 6Gb/s RAID controller
+pci:v00001B4Bd00009485*
+ ID_MODEL_FROM_DATABASE=88SE9485 SAS/SATA 6Gb/s controller
+
pci:v00001B55*
ID_VENDOR_FROM_DATABASE=NetUP Inc.
@@ -47405,6 +51254,9 @@ pci:v00001BB0*
pci:v00001BB0d00000002*
ID_MODEL_FROM_DATABASE=OmniCube Accelerator OA-3000
+pci:v00001BB0d00000010*
+ ID_MODEL_FROM_DATABASE=OmniCube Accelerator OA-3000-2
+
pci:v00001BB3*
ID_VENDOR_FROM_DATABASE=Bluecherry
@@ -47450,6 +51302,9 @@ pci:v00001BBFd00000004*
pci:v00001BF4*
ID_VENDOR_FROM_DATABASE=VTI Instruments Corporation
+pci:v00001BFD*
+ ID_VENDOR_FROM_DATABASE=EeeTOP
+
pci:v00001C1C*
ID_VENDOR_FROM_DATABASE=Symphony
@@ -47492,6 +51347,12 @@ pci:v00001C8Ad00000001*
pci:v00001CB1*
ID_VENDOR_FROM_DATABASE=Collion UG & Co.KG
+pci:v00001CC5*
+ ID_VENDOR_FROM_DATABASE=Embedded Intelligence, Inc.
+
+pci:v00001CC5d00000100*
+ ID_MODEL_FROM_DATABASE=CAN-PCIe-02
+
pci:v00001D44*
ID_VENDOR_FROM_DATABASE=DPT
@@ -48626,9 +52487,6 @@ pci:v00005053d00002010*
pci:v000050B2*
ID_VENDOR_FROM_DATABASE=TerraTec Electronic GmbH
-pci:v000050B2d00001111*
- ID_MODEL_FROM_DATABASE=Terratec XLerate
-
pci:v00005136*
ID_VENDOR_FROM_DATABASE=S S Technologies
@@ -49229,6 +53087,18 @@ pci:v00006666d00004000*
pci:v00006688*
ID_VENDOR_FROM_DATABASE=Zycoo Co., Ltd
+pci:v00006688d00001200*
+ ID_MODEL_FROM_DATABASE=CooVOX TDM Analog Module
+
+pci:v00006688d00001400*
+ ID_MODEL_FROM_DATABASE=CooVOX TDM GSM Module
+
+pci:v00006688d00001600*
+ ID_MODEL_FROM_DATABASE=CooVOX TDM E1/T1 Module
+
+pci:v00006688d00001800*
+ ID_MODEL_FROM_DATABASE=CooVOX TDM BRI Module
+
pci:v00006900*
ID_VENDOR_FROM_DATABASE=Red Hat, Inc.
@@ -49583,6 +53453,9 @@ pci:v00008086d00000150*
pci:v00008086d00000150sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00000150sv00001849sd00000150*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00000151*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
@@ -49607,6 +53480,12 @@ pci:v00008086d00000153sv00001043sd00001517*
pci:v00008086d00000154*
ID_MODEL_FROM_DATABASE=3rd Gen Core processor DRAM Controller
+pci:v00008086d00000154sv00001025sd00000813*
+ ID_MODEL_FROM_DATABASE=Aspire R7-571
+
+pci:v00008086d00000154sv0000103Csd000017F6*
+ ID_MODEL_FROM_DATABASE=ProBook 4540s
+
pci:v00008086d00000154sv00001043sd00001477*
ID_MODEL_FROM_DATABASE=N56VZ
@@ -49640,6 +53519,9 @@ pci:v00008086d0000015E*
pci:v00008086d00000162*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
+pci:v00008086d00000162sv00001849sd00000162*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00000166*
ID_MODEL_FROM_DATABASE=3rd Gen Core processor Graphics Controller
@@ -49734,22 +53616,28 @@ pci:v00008086d00000374*
ID_MODEL_FROM_DATABASE=80333 Address Translation Unit
pci:v00008086d00000402*
- ID_MODEL_FROM_DATABASE=Haswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
pci:v00008086d00000406*
- ID_MODEL_FROM_DATABASE=Haswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=4th Gen Core Processor Integrated Graphics Controller
pci:v00008086d0000040A*
- ID_MODEL_FROM_DATABASE=Haswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor Integrated Graphics Controller
pci:v00008086d00000412*
- ID_MODEL_FROM_DATABASE=Haswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
pci:v00008086d00000416*
- ID_MODEL_FROM_DATABASE=Haswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=4th Gen Core Processor Integrated Graphics Controller
pci:v00008086d0000041A*
- ID_MODEL_FROM_DATABASE=Haswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor Integrated Graphics Controller
+
+pci:v00008086d00000433*
+ ID_MODEL_FROM_DATABASE=Coleto Creek ACC - ME/CPM interface
+
+pci:v00008086d00000435*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCIe Endpoint
pci:v00008086d00000436*
ID_MODEL_FROM_DATABASE=DH8900CC Null Device
@@ -50349,25 +54237,25 @@ pci:v00008086d00000BF7*
ID_MODEL_FROM_DATABASE=Atom Processor D2xxx/N2xxx DRAM Controller
pci:v00008086d00000C00*
- ID_MODEL_FROM_DATABASE=Haswell DRAM Controller
+ ID_MODEL_FROM_DATABASE=4th Gen Core Processor DRAM Controller
pci:v00008086d00000C01*
- ID_MODEL_FROM_DATABASE=Haswell PCI Express x16 Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller
pci:v00008086d00000C04*
- ID_MODEL_FROM_DATABASE=Haswell DRAM Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller
pci:v00008086d00000C05*
- ID_MODEL_FROM_DATABASE=Haswell PCI Express x8 Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x8 Controller
pci:v00008086d00000C08*
- ID_MODEL_FROM_DATABASE=Haswell DRAM Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor DRAM Controller
pci:v00008086d00000C09*
- ID_MODEL_FROM_DATABASE=Haswell PCI Express x4 Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x4 Controller
pci:v00008086d00000C0C*
- ID_MODEL_FROM_DATABASE=Haswell HD Audio Controller
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller
pci:v00008086d00000C46*
ID_MODEL_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1
@@ -50493,352 +54381,397 @@ pci:v00008086d00000D36*
ID_MODEL_FROM_DATABASE=Crystal Well Integrated Graphics Controller
pci:v00008086d00000E00*
- ID_MODEL_FROM_DATABASE=Ivytown DMI2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DMI2
pci:v00008086d00000E01*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port in DMI2 Mode
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port in DMI2 Mode
pci:v00008086d00000E02*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 1a
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 1a
pci:v00008086d00000E03*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 1b
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 1b
pci:v00008086d00000E04*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 2a
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 2a
pci:v00008086d00000E05*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 2b
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 2b
pci:v00008086d00000E06*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 2c
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 2c
pci:v00008086d00000E07*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 2d
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 2d
pci:v00008086d00000E08*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 3a
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 3a
pci:v00008086d00000E09*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 3b
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 3b
pci:v00008086d00000E0A*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 3c
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 3c
pci:v00008086d00000E0B*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Root Port 3d
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 PCI Express Root Port 3d
+
+pci:v00008086d00000E10*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IIO Configuration Registers
+
+pci:v00008086d00000E13*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IIO Configuration Registers
+
+pci:v00008086d00000E17*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IIO Configuration Registers
+
+pci:v00008086d00000E18*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IIO Configuration Registers
pci:v00008086d00000E1C*
- ID_MODEL_FROM_DATABASE=Ivytown Debug and Error Injection Related Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IIO Configuration Registers
pci:v00008086d00000E1D*
- ID_MODEL_FROM_DATABASE=Ivytown R2PCIe
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 R2PCIe
pci:v00008086d00000E1E*
- ID_MODEL_FROM_DATABASE=Ivytown Semaphore and Scratchpad Configuration Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 UBOX Registers
pci:v00008086d00000E1F*
- ID_MODEL_FROM_DATABASE=Ivytown Semaphore and Scratchpad Configuration Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 UBOX Registers
pci:v00008086d00000E20*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 0
pci:v00008086d00000E21*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 1
pci:v00008086d00000E22*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 2
pci:v00008086d00000E23*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 3
pci:v00008086d00000E24*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 4
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 4
pci:v00008086d00000E25*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 5
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 5
pci:v00008086d00000E26*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 6
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 6
pci:v00008086d00000E27*
- ID_MODEL_FROM_DATABASE=Ivytown Crystal Beach DMA Channel 7
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Crystal Beach DMA Channel 7
pci:v00008086d00000E28*
- ID_MODEL_FROM_DATABASE=Ivytown VTd/Memory Map/Misc
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 VTd/Memory Map/Misc
pci:v00008086d00000E29*
- ID_MODEL_FROM_DATABASE=Ivytown Memory Hotplug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Memory Hotplug
pci:v00008086d00000E2A*
- ID_MODEL_FROM_DATABASE=Ivytown IIO RAS
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IIO RAS
pci:v00008086d00000E2C*
- ID_MODEL_FROM_DATABASE=Ivytown IOAPIC
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 IOAPIC
pci:v00008086d00000E2E*
- ID_MODEL_FROM_DATABASE=Ivytown CBDMA
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 CBDMA
pci:v00008086d00000E2F*
- ID_MODEL_FROM_DATABASE=Ivytown CBDMA
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 CBDMA
pci:v00008086d00000E30*
- ID_MODEL_FROM_DATABASE=Ivytown Home Agent 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Home Agent 0
pci:v00008086d00000E32*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 0
pci:v00008086d00000E33*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 1
pci:v00008086d00000E34*
- ID_MODEL_FROM_DATABASE=Ivytown PCI Express Ring Performance Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 R2PCIe
pci:v00008086d00000E36*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Ring Performance Ring Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring
pci:v00008086d00000E37*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Ring Performance Ring Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring
pci:v00008086d00000E38*
- ID_MODEL_FROM_DATABASE=Ivytown Home Agent 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Home Agent 1
pci:v00008086d00000E3A*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 2
pci:v00008086d00000E3E*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Ring Performance Ring Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring
pci:v00008086d00000E3F*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Ring Performance Ring Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring
pci:v00008086d00000E40*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 2
pci:v00008086d00000E41*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Ring Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Registers
pci:v00008086d00000E43*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link Reut 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link Reut 2
pci:v00008086d00000E44*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link Reut 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link Reut 2
pci:v00008086d00000E60*
- ID_MODEL_FROM_DATABASE=Ivytown Home Agent 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Home Agent 1
pci:v00008086d00000E68*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Target Address/Thermal Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Target Address/Thermal Registers
pci:v00008086d00000E6A*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers
pci:v00008086d00000E6B*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers
pci:v00008086d00000E6C*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers
pci:v00008086d00000E6D*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers
pci:v00008086d00000E71*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 RAS Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 RAS Registers
+
+pci:v00008086d00000E74*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 R2PCIe
+
+pci:v00008086d00000E75*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 R2PCIe
+
+pci:v00008086d00000E77*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Registers
pci:v00008086d00000E79*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 RAS Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 RAS Registers
+
+pci:v00008086d00000E7D*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 UBOX Registers
+
+pci:v00008086d00000E7F*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Registers
pci:v00008086d00000E80*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 0
pci:v00008086d00000E81*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Ring Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Ring Registers
pci:v00008086d00000E83*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link Reut 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link Reut 0
pci:v00008086d00000E84*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link Reut 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link Reut 0
+
+pci:v00008086d00000E87*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Registers
pci:v00008086d00000E90*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 1
pci:v00008086d00000E93*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link 1
pci:v00008086d00000E94*
- ID_MODEL_FROM_DATABASE=Ivytown QPI Link Reut 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 QPI Link Reut 1
pci:v00008086d00000EA0*
- ID_MODEL_FROM_DATABASE=Ivytown Home Agent 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Home Agent 0
pci:v00008086d00000EA8*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Target Address/Thermal Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Target Address/Thermal Registers
pci:v00008086d00000EAA*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers
pci:v00008086d00000EAB*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers
pci:v00008086d00000EAC*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers
pci:v00008086d00000EAD*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel Target Address Decoder Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers
+
+pci:v00008086d00000EAE*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO Registers
+
+pci:v00008086d00000EAF*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO Registers
pci:v00008086d00000EB0*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 Thermal Control 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 0
pci:v00008086d00000EB1*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 Thermal Control 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 1
pci:v00008086d00000EB2*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 ERROR Registers 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 0
pci:v00008086d00000EB3*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 ERROR Registers 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 1
pci:v00008086d00000EB4*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 Thermal Control 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 2
pci:v00008086d00000EB5*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 Thermal Control 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 3
pci:v00008086d00000EB6*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 ERROR Registers 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 2
pci:v00008086d00000EB7*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 1 Channel 0-3 ERROR Registers 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 3
+
+pci:v00008086d00000EBC*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO Registers
+
+pci:v00008086d00000EBE*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO Registers
+
+pci:v00008086d00000EBF*
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO Registers
pci:v00008086d00000EC0*
- ID_MODEL_FROM_DATABASE=Ivytown Power Control Unit 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Power Control Unit 0
pci:v00008086d00000EC1*
- ID_MODEL_FROM_DATABASE=Ivytown Power Control Unit 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Power Control Unit 1
pci:v00008086d00000EC2*
- ID_MODEL_FROM_DATABASE=Ivytown Power Control Unit 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Power Control Unit 2
pci:v00008086d00000EC3*
- ID_MODEL_FROM_DATABASE=Ivytown Power Control Unit 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Power Control Unit 3
pci:v00008086d00000EC4*
- ID_MODEL_FROM_DATABASE=Ivytown Power Control Unit 4
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Power Control Unit 4
pci:v00008086d00000EC8*
- ID_MODEL_FROM_DATABASE=Ivytown System Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 System Address Decoder
pci:v00008086d00000EC9*
- ID_MODEL_FROM_DATABASE=Ivytown Broadcast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Broadcast Registers
pci:v00008086d00000ECA*
- ID_MODEL_FROM_DATABASE=Ivytown Broadcast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Broadcast Registers
pci:v00008086d00000ED8*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000ED9*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EDC*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EDD*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EDE*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EDF*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EE0*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE1*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE2*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE3*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE4*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE5*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE6*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE7*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE8*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EE9*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EEA*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EEB*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EEC*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EED*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EEE*
- ID_MODEL_FROM_DATABASE=Ivytown Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Unicast Registers
pci:v00008086d00000EF0*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 Thermal Control 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 0
pci:v00008086d00000EF1*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 Thermal Control 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 1
pci:v00008086d00000EF2*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 ERROR Registers 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 0
pci:v00008086d00000EF3*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 ERROR Registers 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 1
pci:v00008086d00000EF4*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 Thermal Control 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 2
pci:v00008086d00000EF5*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 Thermal Control 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 3
pci:v00008086d00000EF6*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 ERROR Registers 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 2
pci:v00008086d00000EF7*
- ID_MODEL_FROM_DATABASE=Ivytown Integrated Memory Controller 0 Channel 0-3 ERROR Registers 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 3
pci:v00008086d00000EF8*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EF9*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EFA*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EFB*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EFC*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000EFD*
- ID_MODEL_FROM_DATABASE=Ivytown DDRIO
+ ID_MODEL_FROM_DATABASE=Xeon E5 v2/Core i7 DDRIO
pci:v00008086d00000F00*
ID_MODEL_FROM_DATABASE=ValleyView SSA-CUnit
@@ -51668,6 +55601,9 @@ pci:v00008086d0000105Esv00001775sd00001100*
pci:v00008086d0000105Esv00001775sd00006003*
ID_MODEL_FROM_DATABASE=Telum GE-QT
+pci:v00008086d0000105Esv000018DFsd00001214*
+ ID_MODEL_FROM_DATABASE=2x 1GbE, PCIe x1, dual Intel 82571EB chips
+
pci:v00008086d0000105Esv00008086sd0000005E*
ID_MODEL_FROM_DATABASE=PRO/1000 PT Dual Port Server Connection
@@ -52413,7 +56349,7 @@ pci:v00008086d000010F9*
ID_MODEL_FROM_DATABASE=82599 10 Gigabit Dual Port Network Connection
pci:v00008086d000010FB*
- ID_MODEL_FROM_DATABASE=82599EB 10-Gigabit SFI/SFP+ Network Connection
+ ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection
pci:v00008086d000010FBsv00001028sd00001F72*
ID_MODEL_FROM_DATABASE=Ethernet 10G 4P X520/I350 rNDC
@@ -52448,6 +56384,9 @@ pci:v00008086d000010FBsv00008086sd00000003*
pci:v00008086d000010FBsv00008086sd00000006*
ID_MODEL_FROM_DATABASE=Ethernet Server Adapter X520-1
+pci:v00008086d000010FBsv00008086sd00000008*
+ ID_MODEL_FROM_DATABASE=Ethernet OCP Server Adapter X520-2
+
pci:v00008086d000010FBsv00008086sd0000000A*
ID_MODEL_FROM_DATABASE=Ethernet Server Adapter X520-1
@@ -53291,6 +57230,12 @@ pci:v00008086d00001522sv00008086sd00000003*
pci:v00008086d00001522sv00008086sd00000004*
ID_MODEL_FROM_DATABASE=Ethernet Server Adapter I350-F2
+pci:v00008086d00001522sv00008086sd00000005*
+ ID_MODEL_FROM_DATABASE=Ethernet Server Adapter I350-F1
+
+pci:v00008086d00001522sv00008086sd000000A2*
+ ID_MODEL_FROM_DATABASE=Ethernet Server Adapter I350-T2
+
pci:v00008086d00001522sv00008086sd000000A3*
ID_MODEL_FROM_DATABASE=Ethernet Server Adapter I350-F4
@@ -53441,18 +57386,54 @@ pci:v00008086d0000154Dsv00008086sd00007B11*
pci:v00008086d00001557*
ID_MODEL_FROM_DATABASE=82599 10 Gigabit Network Connection
+pci:v00008086d00001557sv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet OCP Server Adapter X520-1
+
+pci:v00008086d00001558*
+ ID_MODEL_FROM_DATABASE=Ethernet Converged Network Adapter X520-Q1
+
+pci:v00008086d00001558sv00008086sd0000011A*
+ ID_MODEL_FROM_DATABASE=Ethernet Converged Network Adapter X520-Q1
+
+pci:v00008086d00001558sv00008086sd0000011B*
+ ID_MODEL_FROM_DATABASE=Ethernet Converged Network Adapter X520-Q1
+
pci:v00008086d00001559*
ID_MODEL_FROM_DATABASE=Ethernet Connection I218-V
pci:v00008086d0000155A*
ID_MODEL_FROM_DATABASE=Ethernet Connection I218-LM
+pci:v00008086d0000155C*
+ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter
+
+pci:v00008086d0000155Csv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X540-T2
+
+pci:v00008086d0000155D*
+ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter
+
+pci:v00008086d0000155Dsv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-SR2
+
pci:v00008086d00001560*
- ID_MODEL_FROM_DATABASE=Ethernet Controller X540-AT1
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X540
pci:v00008086d0000157B*
ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
+pci:v00008086d000015A0*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
+
+pci:v00008086d000015A1*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-V
+
+pci:v00008086d000015A2*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (3) I218-LM
+
+pci:v00008086d000015A3*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection (3) I218-V
+
pci:v00008086d00001960*
ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor
@@ -54140,6 +58121,9 @@ pci:v00008086d00001E02*
pci:v00008086d00001E02sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E02sv00001849sd00001E02*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E03*
ID_MODEL_FROM_DATABASE=7 Series Chipset Family 6-port SATA Controller [AHCI mode]
@@ -54182,6 +58166,9 @@ pci:v00008086d00001E10sv00001043sd00001517*
pci:v00008086d00001E10sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E10sv00001849sd00001E10*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E12*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 2
@@ -54200,21 +58187,33 @@ pci:v00008086d00001E16*
pci:v00008086d00001E16sv00001043sd00001477*
ID_MODEL_FROM_DATABASE=N56VZ
+pci:v00008086d00001E16sv00001849sd00001618*
+ ID_MODEL_FROM_DATABASE=Z77 Extreme4 motherboard
+
pci:v00008086d00001E18*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 5
pci:v00008086d00001E18sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E18sv00001849sd00001E18*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E1A*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 6
+pci:v00008086d00001E1Asv00001849sd00001E1A*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E1C*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 7
pci:v00008086d00001E1E*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 8
+pci:v00008086d00001E1Esv00001849sd00001E1E*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E20*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family High Definition Audio Controller
@@ -54227,6 +58226,9 @@ pci:v00008086d00001E20sv00001043sd00001517*
pci:v00008086d00001E20sv00001043sd00008415*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E20sv00001849sd00001898*
+ ID_MODEL_FROM_DATABASE=Z77 Extreme4 motherboard
+
pci:v00008086d00001E22*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller
@@ -54239,6 +58241,9 @@ pci:v00008086d00001E22sv00001043sd00001517*
pci:v00008086d00001E22sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E22sv00001849sd00001E22*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E24*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family Thermal Management Controller
@@ -54260,6 +58265,9 @@ pci:v00008086d00001E26sv00001043sd00001517*
pci:v00008086d00001E26sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E26sv00001849sd00001E26*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E2D*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2
@@ -54272,6 +58280,9 @@ pci:v00008086d00001E2Dsv00001043sd00001517*
pci:v00008086d00001E2Dsv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E2Dsv00001849sd00001E2D*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E31*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller
@@ -54284,6 +58295,9 @@ pci:v00008086d00001E31sv00001043sd00001517*
pci:v00008086d00001E31sv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E31sv00001849sd00001E31*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E33*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family LAN Controller
@@ -54299,6 +58313,9 @@ pci:v00008086d00001E3Asv00001043sd00001517*
pci:v00008086d00001E3Asv00001043sd000084CA*
ID_MODEL_FROM_DATABASE=P8H77-I Motherboard
+pci:v00008086d00001E3Asv00001849sd00001E3A*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E3B*
ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #2
@@ -54320,6 +58337,9 @@ pci:v00008086d00001E43*
pci:v00008086d00001E44*
ID_MODEL_FROM_DATABASE=Z77 Express Chipset LPC Controller
+pci:v00008086d00001E44sv00001849sd00001E44*
+ ID_MODEL_FROM_DATABASE=Motherboard
+
pci:v00008086d00001E45*
ID_MODEL_FROM_DATABASE=7 Series Chipset Family LPC Controller
@@ -54411,181 +58431,184 @@ pci:v00008086d00001E5F*
ID_MODEL_FROM_DATABASE=7 Series Chipset Family LPC Controller
pci:v00008086d00001F00*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F01*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F02*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F03*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F04*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F05*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F06*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F07*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F08*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F09*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F0A*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F0B*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F0C*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F0D*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F0E*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F0F*
- ID_MODEL_FROM_DATABASE=Avoton SSA-Cunit
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SoC Transaction Router
pci:v00008086d00001F10*
- ID_MODEL_FROM_DATABASE=Avoton PCIe Root Port 1
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCIe Root Port 1
pci:v00008086d00001F11*
- ID_MODEL_FROM_DATABASE=Avoton PCIe Root Port 2
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCIe Root Port 2
pci:v00008086d00001F12*
- ID_MODEL_FROM_DATABASE=Avoton PCIe Root Port 3
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCIe Root Port 3
pci:v00008086d00001F13*
- ID_MODEL_FROM_DATABASE=Avoton PCIe Root Port 4
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCIe Root Port 4
pci:v00008086d00001F14*
- ID_MODEL_FROM_DATABASE=Avoton RAS
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAS
pci:v00008086d00001F15*
- ID_MODEL_FROM_DATABASE=Avoton SMBus 2.0
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 SMBus 2.0
pci:v00008086d00001F16*
- ID_MODEL_FROM_DATABASE=Avoton RCEC
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RCEC
pci:v00008086d00001F18*
- ID_MODEL_FROM_DATABASE=Avoton nCPM
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 nCPM
pci:v00008086d00001F19*
- ID_MODEL_FROM_DATABASE=Avoton nCPM
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 nCPM
pci:v00008086d00001F20*
- ID_MODEL_FROM_DATABASE=Avoton 4-Port IDE SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 4-Port IDE SATA2 Controller
pci:v00008086d00001F21*
- ID_MODEL_FROM_DATABASE=Avoton 4-Port IDE SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 4-Port IDE SATA2 Controller
pci:v00008086d00001F22*
- ID_MODEL_FROM_DATABASE=Avoton AHCI SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 AHCI SATA2 Controller
pci:v00008086d00001F23*
- ID_MODEL_FROM_DATABASE=Avoton AHCI SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 AHCI SATA2 Controller
pci:v00008086d00001F24*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
pci:v00008086d00001F25*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
pci:v00008086d00001F26*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
pci:v00008086d00001F27*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
pci:v00008086d00001F2C*
- ID_MODEL_FROM_DATABASE=Avoton USB Enhanced Host Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 USB Enhanced Host Controller
pci:v00008086d00001F2E*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
pci:v00008086d00001F2F*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA2 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
pci:v00008086d00001F30*
- ID_MODEL_FROM_DATABASE=Avoton 2-Port IDE SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 2-Port IDE SATA3 Controller
pci:v00008086d00001F31*
- ID_MODEL_FROM_DATABASE=Avoton 2-Port IDE SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 2-Port IDE SATA3 Controller
pci:v00008086d00001F32*
- ID_MODEL_FROM_DATABASE=Avoton AHCI SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 AHCI SATA3 Controller
pci:v00008086d00001F33*
- ID_MODEL_FROM_DATABASE=Avoton AHCI SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 AHCI SATA3 Controller
pci:v00008086d00001F34*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA3 Controller
pci:v00008086d00001F35*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA3 Controller
pci:v00008086d00001F36*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA3 Controller
pci:v00008086d00001F37*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA3 Controller
pci:v00008086d00001F38*
- ID_MODEL_FROM_DATABASE=Avoton PCU
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCU
pci:v00008086d00001F39*
- ID_MODEL_FROM_DATABASE=Avoton PCU
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCU
pci:v00008086d00001F3A*
- ID_MODEL_FROM_DATABASE=Avoton PCU
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCU
pci:v00008086d00001F3B*
- ID_MODEL_FROM_DATABASE=Avoton PCU
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCU
pci:v00008086d00001F3C*
- ID_MODEL_FROM_DATABASE=Avoton PCU SMBus
-
-pci:v00008086d00001F3D*
- ID_MODEL_FROM_DATABASE=Avoton PCU SMBus
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 PCU SMBus
pci:v00008086d00001F3E*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA3 Controller
pci:v00008086d00001F3F*
- ID_MODEL_FROM_DATABASE=Avoton RAID SATA3 Controller
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA3 Controller
pci:v00008086d00001F40*
- ID_MODEL_FROM_DATABASE=Avoton GbE x4 1000base-KX
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
+
+pci:v00008086d00001F40sv00001028sd000010F1*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane
pci:v00008086d00001F41*
- ID_MODEL_FROM_DATABASE=Avoton GbE x4 SGMII
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I354
pci:v00008086d00001F42*
- ID_MODEL_FROM_DATABASE=Avoton GbE
-
-pci:v00008086d00001F43*
- ID_MODEL_FROM_DATABASE=Avoton GbE EEPROM-less
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 GbE
pci:v00008086d00001F44*
- ID_MODEL_FROM_DATABASE=Avoton GbE Virtual Function
+ ID_MODEL_FROM_DATABASE=Atom processor C2000 GbE Virtual Function
pci:v00008086d00001F45*
- ID_MODEL_FROM_DATABASE=Avoton GbE 2500base-KX
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I354 2.5 GbE Backplane
pci:v00008086d00002250*
- ID_MODEL_FROM_DATABASE=Xeon Phi Coprocessor 5110P
+ ID_MODEL_FROM_DATABASE=Xeon Phi coprocessor 5100 series
+
+pci:v00008086d0000225C*
+ ID_MODEL_FROM_DATABASE=Xeon Phi coprocessor SE10/7120 series
+
+pci:v00008086d0000225D*
+ ID_MODEL_FROM_DATABASE=Xeon Phi coprocessor 3120 series
pci:v00008086d00002310*
ID_MODEL_FROM_DATABASE=DH89xxCC LPC Controller
@@ -54641,6 +58664,66 @@ pci:v00008086d00002364*
pci:v00008086d00002365*
ID_MODEL_FROM_DATABASE=DH89xxCC MEI 1
+pci:v00008086d00002390*
+ ID_MODEL_FROM_DATABASE=Coleto Creek LPC Controller
+
+pci:v00008086d000023A1*
+ ID_MODEL_FROM_DATABASE=Coleto Creek 2-Port SATA Controller [IDE Mode]
+
+pci:v00008086d000023A3*
+ ID_MODEL_FROM_DATABASE=Coleto Creek 4-Port SATA Controller [AHCI Mode]
+
+pci:v00008086d000023A6*
+ ID_MODEL_FROM_DATABASE=Coleto Creek 2-Port SATA Controller [IDE Mode]
+
+pci:v00008086d000023B0*
+ ID_MODEL_FROM_DATABASE=Coleto Creek SMBus Controller
+
+pci:v00008086d000023B1*
+ ID_MODEL_FROM_DATABASE=Coleto Creek CHAP Counter
+
+pci:v00008086d000023B2*
+ ID_MODEL_FROM_DATABASE=Coleto Creek Thermal Management Controller
+
+pci:v00008086d000023B4*
+ ID_MODEL_FROM_DATABASE=Coleto Creek USB2 Enhanced Host Controller #1
+
+pci:v00008086d000023B5*
+ ID_MODEL_FROM_DATABASE=Coleto Creek USB2 Enhanced Host Controller #1
+
+pci:v00008086d000023C2*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #1
+
+pci:v00008086d000023C3*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #1
+
+pci:v00008086d000023C4*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #2
+
+pci:v00008086d000023C5*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #2
+
+pci:v00008086d000023C6*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #3
+
+pci:v00008086d000023C7*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #3
+
+pci:v00008086d000023C8*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #4
+
+pci:v00008086d000023C9*
+ ID_MODEL_FROM_DATABASE=Coleto Creek PCI Express Root Port #4
+
+pci:v00008086d000023E0*
+ ID_MODEL_FROM_DATABASE=Coleto Creek Watchdog Timer
+
+pci:v00008086d000023E4*
+ ID_MODEL_FROM_DATABASE=Coleto Creek MEI Controller #1
+
+pci:v00008086d000023E5*
+ ID_MODEL_FROM_DATABASE=Coleto Creek MEI Controller #2
+
pci:v00008086d00002410*
ID_MODEL_FROM_DATABASE=82801AA ISA Bridge (LPC)
@@ -54912,7 +58995,7 @@ pci:v00008086d00002448sv00001734sd00001055*
ID_MODEL_FROM_DATABASE=Amilo M1420
pci:v00008086d00002448sv000017AAsd000020AE*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002448sv00008086sd0000544B*
ID_MODEL_FROM_DATABASE=Desktop Board D425KT
@@ -58761,7 +62844,7 @@ pci:v00008086d00002811sv0000103Csd000030C1*
ID_MODEL_FROM_DATABASE=Compaq 6910p
pci:v00008086d00002811sv000017AAsd000020B6*
- ID_MODEL_FROM_DATABASE=T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002811sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -58875,7 +62958,7 @@ pci:v00008086d00002829sv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d00002829sv000017AAsd000020A7*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002829sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -58926,7 +63009,7 @@ pci:v00008086d00002830sv00001462sd00007235*
ID_MODEL_FROM_DATABASE=P965 Neo MS-7235 mainboard
pci:v00008086d00002830sv000017AAsd000020AA*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002830sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -58968,7 +63051,7 @@ pci:v00008086d00002831sv00001462sd00007235*
ID_MODEL_FROM_DATABASE=P965 Neo MS-7235 mainboard
pci:v00008086d00002831sv000017AAsd000020AA*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002831sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59007,7 +63090,7 @@ pci:v00008086d00002832sv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d00002832sv000017AAsd000020AA*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002832sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59052,7 +63135,7 @@ pci:v00008086d00002834sv00001462sd00007235*
ID_MODEL_FROM_DATABASE=P965 Neo MS-7235 mainboard
pci:v00008086d00002834sv000017AAsd000020AA*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002834sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59088,7 +63171,7 @@ pci:v00008086d00002835sv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d00002835sv000017AAsd000020AA*
- ID_MODEL_FROM_DATABASE=ThinkPad T60
+ ID_MODEL_FROM_DATABASE=Thinkpad T61/R61
pci:v00008086d00002835sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59130,7 +63213,7 @@ pci:v00008086d00002836sv00001462sd00007235*
ID_MODEL_FROM_DATABASE=P965 Neo MS-7235 mainboard
pci:v00008086d00002836sv000017AAsd000020AB*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002836sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59166,7 +63249,7 @@ pci:v00008086d0000283Asv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d0000283Asv000017AAsd000020AB*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d0000283Asv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59202,7 +63285,7 @@ pci:v00008086d0000283Esv00001462sd00007235*
ID_MODEL_FROM_DATABASE=P965 Neo MS-7235 mainboard
pci:v00008086d0000283Esv000017AAsd000020A9*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d0000283Esv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -59220,7 +63303,7 @@ pci:v00008086d0000283Fsv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d0000283Fsv000017AAsd000020AD*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002841*
ID_MODEL_FROM_DATABASE=82801H (ICH8 Family) PCI Express Port 2
@@ -59232,7 +63315,7 @@ pci:v00008086d00002841sv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d00002841sv000017AAsd000020AD*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002843*
ID_MODEL_FROM_DATABASE=82801H (ICH8 Family) PCI Express Port 3
@@ -59241,13 +63324,13 @@ pci:v00008086d00002843sv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d00002843sv000017AAsd000020AD*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002845*
ID_MODEL_FROM_DATABASE=82801H (ICH8 Family) PCI Express Port 4
pci:v00008086d00002845sv000017AAsd000020AD*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002847*
ID_MODEL_FROM_DATABASE=82801H (ICH8 Family) PCI Express Port 5
@@ -59259,7 +63342,7 @@ pci:v00008086d00002847sv0000103Csd000030C1*
ID_MODEL_FROM_DATABASE=Compaq 6910p
pci:v00008086d00002847sv000017AAsd000020AD*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002849*
ID_MODEL_FROM_DATABASE=82801H (ICH8 Family) PCI Express Port 6
@@ -59325,7 +63408,7 @@ pci:v00008086d0000284Bsv000014F1sd00005051*
ID_MODEL_FROM_DATABASE=Presario C700
pci:v00008086d0000284Bsv000017AAsd000020AC*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d0000284Bsv00008384sd00007616*
ID_MODEL_FROM_DATABASE=Dell Vostro 1400
@@ -59364,7 +63447,7 @@ pci:v00008086d00002850sv0000104Dsd0000902D*
ID_MODEL_FROM_DATABASE=VAIO VGN-NR120E
pci:v00008086d00002850sv000017AAsd000020A6*
- ID_MODEL_FROM_DATABASE=ThinkPad T61
+ ID_MODEL_FROM_DATABASE=ThinkPad T61/R61
pci:v00008086d00002850sv0000E4BFsd0000CC47*
ID_MODEL_FROM_DATABASE=CCG-RUMBA
@@ -61118,6 +65201,45 @@ pci:v00008086d00002F0A*
pci:v00008086d00002F0B*
ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 3
+pci:v00008086d00002F10*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F11*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F12*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F13*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F14*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F15*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F16*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F17*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F18*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F19*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F1A*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F1B*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
+pci:v00008086d00002F1C*
+ ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+
pci:v00008086d00002F1D*
ID_MODEL_FROM_DATABASE=Haswell-E PCIe Ring Interface
@@ -61208,6 +65330,15 @@ pci:v00008086d00002F41*
pci:v00008086d00002F43*
ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2
+pci:v00008086d00002F45*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2 Debug
+
+pci:v00008086d00002F46*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2 Debug
+
+pci:v00008086d00002F47*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2 Debug
+
pci:v00008086d00002F60*
ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 1
@@ -61238,6 +65369,9 @@ pci:v00008086d00002F70*
pci:v00008086d00002F71*
ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
+pci:v00008086d00002F76*
+ ID_MODEL_FROM_DATABASE=Haswell-E E3 QPI Link Debug
+
pci:v00008086d00002F78*
ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 1 Debug
@@ -61247,6 +65381,9 @@ pci:v00008086d00002F79*
pci:v00008086d00002F7D*
ID_MODEL_FROM_DATABASE=Haswell-E Scratchpad & Semaphore Registers
+pci:v00008086d00002F7E*
+ ID_MODEL_FROM_DATABASE=Haswell-E E3 QPI Link Debug
+
pci:v00008086d00002F80*
ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0
@@ -61256,12 +65393,45 @@ pci:v00008086d00002F81*
pci:v00008086d00002F83*
ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0
+pci:v00008086d00002F85*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0 Debug
+
+pci:v00008086d00002F86*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0 Debug
+
+pci:v00008086d00002F87*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0 Debug
+
+pci:v00008086d00002F88*
+ ID_MODEL_FROM_DATABASE=Haswell-E VCU
+
+pci:v00008086d00002F8A*
+ ID_MODEL_FROM_DATABASE=Haswell-E VCU
+
pci:v00008086d00002F90*
ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1
pci:v00008086d00002F93*
ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1
+pci:v00008086d00002F95*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1 Debug
+
+pci:v00008086d00002F96*
+ ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1 Debug
+
+pci:v00008086d00002F98*
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+
+pci:v00008086d00002F99*
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+
+pci:v00008086d00002F9A*
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+
+pci:v00008086d00002F9C*
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+
pci:v00008086d00002FA0*
ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 0
@@ -61304,6 +65474,12 @@ pci:v00008086d00002FB4*
pci:v00008086d00002FB5*
ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 3 Thermal Control
+pci:v00008086d00002FB6*
+ ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 2 ERROR Registers
+
+pci:v00008086d00002FB7*
+ ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 3 ERROR Registers
+
pci:v00008086d00002FB8*
ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 2 & 3
@@ -61335,16 +65511,16 @@ pci:v00008086d00002FC1*
ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
pci:v00008086d00002FC2*
- ID_MODEL_FROM_DATABASE=Power Control Unit
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
pci:v00008086d00002FC3*
- ID_MODEL_FROM_DATABASE=Power Control Unit
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
pci:v00008086d00002FC4*
- ID_MODEL_FROM_DATABASE=Power Control Unit
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
pci:v00008086d00002FC5*
- ID_MODEL_FROM_DATABASE=Power Control Unit
+ ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
pci:v00008086d00002FD0*
ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 0 Thermal Control
@@ -62484,7 +66660,7 @@ pci:v00008086d00003A3Csv00001043sd000082D4*
ID_MODEL_FROM_DATABASE=P5Q Deluxe Motherboard
pci:v00008086d00003A3Csv00001458sd00005006*
- ID_MODEL_FROM_DATABASE=GA-EP45-DS5 Motherboard
+ ID_MODEL_FROM_DATABASE=Motherboard
pci:v00008086d00003A3E*
ID_MODEL_FROM_DATABASE=82801JI (ICH10 Family) HD Audio Controller
@@ -64206,226 +68382,226 @@ pci:v00008086d00008819*
ID_MODEL_FROM_DATABASE=Platform Controller Hub EG20T IEEE 1588 Hardware Assist
pci:v00008086d00008C00*
- ID_MODEL_FROM_DATABASE=Lynx Point 4-port SATA Controller 1 [IDE mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode]
pci:v00008086d00008C01*
- ID_MODEL_FROM_DATABASE=Lynx Point 4-port SATA Controller 1 [IDE mode]
+ ID_MODEL_FROM_DATABASE=8 Series Chipset Family 4-port SATA Controller 1 [IDE mode] - Mobile
pci:v00008086d00008C02*
- ID_MODEL_FROM_DATABASE=Lynx Point 6-port SATA Controller 1 [AHCI mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
pci:v00008086d00008C03*
- ID_MODEL_FROM_DATABASE=Lynx Point 6-port SATA Controller 1 [AHCI mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
pci:v00008086d00008C04*
- ID_MODEL_FROM_DATABASE=Lynx Point SATA Controller 1 [RAID mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
pci:v00008086d00008C05*
- ID_MODEL_FROM_DATABASE=Lynx Point SATA Controller 1 [RAID mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
pci:v00008086d00008C06*
- ID_MODEL_FROM_DATABASE=Lynx Point SATA Controller 1 [RAID mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
pci:v00008086d00008C07*
- ID_MODEL_FROM_DATABASE=Lynx Point SATA Controller 1 [RAID mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
pci:v00008086d00008C08*
- ID_MODEL_FROM_DATABASE=Lynx Point 2-port SATA Controller 2 [IDE mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 2-port SATA Controller 2 [IDE mode]
pci:v00008086d00008C09*
- ID_MODEL_FROM_DATABASE=Lynx Point 2-port SATA Controller 2 [IDE mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 2-port SATA Controller 2 [IDE mode]
pci:v00008086d00008C0E*
- ID_MODEL_FROM_DATABASE=Lynx Point SATA Controller 1 [RAID mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
pci:v00008086d00008C0F*
- ID_MODEL_FROM_DATABASE=Lynx Point SATA Controller 1 [RAID mode]
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
pci:v00008086d00008C10*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #1
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
pci:v00008086d00008C11*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #1
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
pci:v00008086d00008C12*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #2
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
pci:v00008086d00008C13*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #2
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2
pci:v00008086d00008C14*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #3
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #3
pci:v00008086d00008C15*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #3
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #3
pci:v00008086d00008C16*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #4
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #4
pci:v00008086d00008C17*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #4
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #4
pci:v00008086d00008C18*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #5
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #5
pci:v00008086d00008C19*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #5
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #5
pci:v00008086d00008C1A*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #6
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #6
pci:v00008086d00008C1B*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #6
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #6
pci:v00008086d00008C1C*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #7
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #7
pci:v00008086d00008C1D*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #7
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #7
pci:v00008086d00008C1E*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #8
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #8
pci:v00008086d00008C1F*
- ID_MODEL_FROM_DATABASE=Lynx Point PCI Express Root Port #8
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #8
pci:v00008086d00008C20*
- ID_MODEL_FROM_DATABASE=Lynx Point High Definition Audio Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
pci:v00008086d00008C21*
- ID_MODEL_FROM_DATABASE=Lynx Point High Definition Audio Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller
pci:v00008086d00008C22*
- ID_MODEL_FROM_DATABASE=Lynx Point SMBus Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller
pci:v00008086d00008C23*
- ID_MODEL_FROM_DATABASE=Lynx Point CHAP Counters
+ ID_MODEL_FROM_DATABASE=8 Series Chipset Family CHAP Counters
pci:v00008086d00008C24*
- ID_MODEL_FROM_DATABASE=Lynx Point Thermal Management Controller
+ ID_MODEL_FROM_DATABASE=8 Series Chipset Family Thermal Management Controller
pci:v00008086d00008C26*
- ID_MODEL_FROM_DATABASE=Lynx Point USB Enhanced Host Controller #1
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1
pci:v00008086d00008C2D*
- ID_MODEL_FROM_DATABASE=Lynx Point USB Enhanced Host Controller #2
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2
pci:v00008086d00008C31*
- ID_MODEL_FROM_DATABASE=Lynx Point USB xHCI Host Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI
pci:v00008086d00008C33*
- ID_MODEL_FROM_DATABASE=Lynx Point LAN Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LAN Controller
pci:v00008086d00008C34*
- ID_MODEL_FROM_DATABASE=Lynx Point NAND Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family NAND Controller
pci:v00008086d00008C3A*
- ID_MODEL_FROM_DATABASE=Lynx Point MEI Controller #1
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1
pci:v00008086d00008C3B*
- ID_MODEL_FROM_DATABASE=Lynx Point MEI Controller #2
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #2
pci:v00008086d00008C3C*
- ID_MODEL_FROM_DATABASE=Lynx Point IDE-r Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family IDE-r Controller
pci:v00008086d00008C3D*
- ID_MODEL_FROM_DATABASE=Lynx Point KT Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family KT Controller
pci:v00008086d00008C40*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C41*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series Chipset Family Mobile Super SKU LPC Controller
pci:v00008086d00008C42*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family Desktop Super SKU LPC Controller
pci:v00008086d00008C43*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C44*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=Z87 Express LPC Controller
pci:v00008086d00008C45*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C46*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=Z85 Express LPC Controller
pci:v00008086d00008C47*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C48*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C49*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=HM86 Express LPC Controller
pci:v00008086d00008C4A*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=H87 Express LPC Controller
pci:v00008086d00008C4B*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=HM87 Express LPC Controller
pci:v00008086d00008C4C*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=Q85 Express LPC Controller
pci:v00008086d00008C4D*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C4E*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=Q87 Express LPC Controller
pci:v00008086d00008C4F*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=QM87 Express LPC Controller
pci:v00008086d00008C50*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=B85 Express LPC Controller
pci:v00008086d00008C51*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C52*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=C222 Series Chipset Family Server Essential SKU LPC Controller
pci:v00008086d00008C53*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C54*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=C224 Series Chipset Family Server Standard SKU LPC Controller
pci:v00008086d00008C55*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C56*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=C226 Series Chipset Family Server Advanced SKU LPC Controller
pci:v00008086d00008C57*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C58*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family WS SKU LPC Controller
pci:v00008086d00008C59*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C5A*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C5B*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C5C*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=C220 Series Chipset Family H81 Express LPC Controller
pci:v00008086d00008C5D*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C5E*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008C5F*
- ID_MODEL_FROM_DATABASE=Lynx Point LPC Controller
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
pci:v00008086d00008D00*
ID_MODEL_FROM_DATABASE=Wellsburg 4-port SATA Controller [IDE mode]
@@ -64599,7 +68775,7 @@ pci:v00008086d00008D6E*
ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [RAID mode]
pci:v00008086d00008D7C*
- ID_MODEL_FROM_DATABASE=Wellsburg EPSS
+ ID_MODEL_FROM_DATABASE=Wellsburg SPSR
pci:v00008086d00008D7D*
ID_MODEL_FROM_DATABASE=Wellsburg MS SMBus 0
@@ -66332,8 +70508,35 @@ pci:v0000BD11*
pci:v0000BDBD*
ID_VENDOR_FROM_DATABASE=Blackmagic Design
+pci:v0000BDBDd0000A117*
+ ID_MODEL_FROM_DATABASE=Intensity Pro
+
+pci:v0000BDBDd0000A11A*
+ ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 2
+
pci:v0000BDBDd0000A11B*
- ID_MODEL_FROM_DATABASE=DeckLink SDI
+ ID_MODEL_FROM_DATABASE=DeckLink SDI/Duo/Quad
+
+pci:v0000BDBDd0000A11C*
+ ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3
+
+pci:v0000BDBDd0000A11D*
+ ID_MODEL_FROM_DATABASE=DeckLink Studio
+
+pci:v0000BDBDd0000A11E*
+ ID_MODEL_FROM_DATABASE=DeckLink Optical Fibre
+
+pci:v0000BDBDd0000A121*
+ ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3D/3D+
+
+pci:v0000BDBDd0000A12E*
+ ID_MODEL_FROM_DATABASE=DeckLink 4K Extreme
+
+pci:v0000BDBDd0000A12F*
+ ID_MODEL_FROM_DATABASE=DeckLink Mini Monitor
+
+pci:v0000BDBDd0000A130*
+ ID_MODEL_FROM_DATABASE=DeckLink Mini Recorder
pci:v0000C001*
ID_VENDOR_FROM_DATABASE=TSI Telsys
@@ -66464,6 +70667,12 @@ pci:v0000D161d00008007*
pci:v0000D161d00008008*
ID_MODEL_FROM_DATABASE=Hx8 Series 8-port Base Card (PCI-Express)
+pci:v0000D161d0000800A*
+ ID_MODEL_FROM_DATABASE=Wildcard TE133 single-span T1/E1/J1 card (PCI Express)
+
+pci:v0000D161d0000800B*
+ ID_MODEL_FROM_DATABASE=Wildcard TE134 single-span T1/E1/J1 card
+
pci:v0000D161d0000B410*
ID_MODEL_FROM_DATABASE=Wildcard B410 quad-BRI card
@@ -66501,8 +70710,44 @@ pci:v0000DD01*
ID_VENDOR_FROM_DATABASE=Digital Devices GmbH
pci:v0000DD01d00000003*
+ ID_MODEL_FROM_DATABASE=Octopus DVB Adapter
+
+pci:v0000DD01d00000003sv0000DD01sd00000001*
+ ID_MODEL_FROM_DATABASE=Octopus DVB adapter
+
+pci:v0000DD01d00000003sv0000DD01sd00000002*
ID_MODEL_FROM_DATABASE=Octopus LE DVB adapter
+pci:v0000DD01d00000003sv0000DD01sd00000003*
+ ID_MODEL_FROM_DATABASE=Octopus OEM
+
+pci:v0000DD01d00000003sv0000DD01sd00000004*
+ ID_MODEL_FROM_DATABASE=Octopus V3 DVB adapter
+
+pci:v0000DD01d00000003sv0000DD01sd00000010*
+ ID_MODEL_FROM_DATABASE=Octopus Mini
+
+pci:v0000DD01d00000003sv0000DD01sd00000020*
+ ID_MODEL_FROM_DATABASE=Cine S2 V6 DVB adapter
+
+pci:v0000DD01d00000003sv0000DD01sd00000021*
+ ID_MODEL_FROM_DATABASE=Cine S2 V6.5 DVB adapter
+
+pci:v0000DD01d00000003sv0000DD01sd00000030*
+ ID_MODEL_FROM_DATABASE=Cine CT V6.1 DVB adapter
+
+pci:v0000DD01d00000003sv0000DD01sd0000DB03*
+ ID_MODEL_FROM_DATABASE=Mystique SaTiX-S2 V3 DVB adapter
+
+pci:v0000DD01d00000011*
+ ID_MODEL_FROM_DATABASE=Octopus CI DVB Adapter
+
+pci:v0000DD01d00000011sv0000DD01sd00000040*
+ ID_MODEL_FROM_DATABASE=Octopus CI
+
+pci:v0000DD01d00000011sv0000DD01sd00000041*
+ ID_MODEL_FROM_DATABASE=Octopus CI Single
+
pci:v0000DEAD*
ID_VENDOR_FROM_DATABASE=Indigita Corporation
diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
index 8c9584b358..da8385ef91 100644
--- a/hwdb/20-usb-vendor-model.hwdb
+++ b/hwdb/20-usb-vendor-model.hwdb
@@ -266,6 +266,12 @@ usb:v03EBp2310*
usb:v03EBp2FE4*
ID_MODEL_FROM_DATABASE=ATxmega32A4U DFU bootloader
+usb:v03EBp2FF0*
+ ID_MODEL_FROM_DATABASE=atmega32u2 DFU bootloader
+
+usb:v03EBp2FFA*
+ ID_MODEL_FROM_DATABASE=at90usb162 DFU bootloader
+
usb:v03EBp2FFB*
ID_MODEL_FROM_DATABASE=at90usb AVR DFU bootloader
@@ -599,6 +605,9 @@ usb:v03F0p0917*
usb:v03F0p0924*
ID_MODEL_FROM_DATABASE=Modular Smartcard Keyboard
+usb:v03F0p094A*
+ ID_MODEL_FROM_DATABASE=Optical Mouse [672662-001]
+
usb:v03F0p0A01*
ID_MODEL_FROM_DATABASE=ScanJet 2400c
@@ -2009,6 +2018,9 @@ usb:v0403p8040*
usb:v0403p8070*
ID_MODEL_FROM_DATABASE=7 Port Hub
+usb:v0403p8210*
+ ID_MODEL_FROM_DATABASE=MGTimer - MGCC (Vic) Timing System
+
usb:v0403p8370*
ID_MODEL_FROM_DATABASE=7 Port Hub
@@ -2924,9 +2936,15 @@ usb:v040Ap1001*
usb:v040Ap4000*
ID_MODEL_FROM_DATABASE=InkJet Color Printer
+usb:v040Ap4021*
+ ID_MODEL_FROM_DATABASE=Photo Printer 6800
+
usb:v040Ap4022*
ID_MODEL_FROM_DATABASE=1400 Digital Photo Printer
+usb:v040Ap4034*
+ ID_MODEL_FROM_DATABASE=805 Photo Printer
+
usb:v040Ap4056*
ID_MODEL_FROM_DATABASE=ESP 7200 Series AiO
@@ -4293,7 +4311,7 @@ usb:v0424p7500*
ID_MODEL_FROM_DATABASE=LAN7500 Ethernet 10/100/1000 Adapter
usb:v0424p9512*
- ID_MODEL_FROM_DATABASE=LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub
+ ID_MODEL_FROM_DATABASE=SMC9512/9514 USB Hub
usb:v0424pA700*
ID_MODEL_FROM_DATABASE=2 Port Hub
@@ -4877,6 +4895,9 @@ usb:v043Dp010F*
usb:v043Dp0142*
ID_MODEL_FROM_DATABASE=X3650 (Printer, Scanner, Copier)
+usb:v043Dp01FA*
+ ID_MODEL_FROM_DATABASE=S310 series
+
usb:v043Dp4303*
ID_MODEL_FROM_DATABASE=Xerox WorkCentre Pro 412
@@ -4898,6 +4919,9 @@ usb:v043Ep7001*
usb:v043Ep7013*
ID_MODEL_FROM_DATABASE=MP3 Player
+usb:v043Ep70F5*
+ ID_MODEL_FROM_DATABASE=External HDD
+
usb:v043Ep8484*
ID_MODEL_FROM_DATABASE=LPC-U30 Webcam II
@@ -5157,7 +5181,7 @@ usb:v0451pDBC0*
ID_MODEL_FROM_DATABASE=Device Bay Controller
usb:v0451pE001*
- ID_MODEL_FROM_DATABASE=GraphLink
+ ID_MODEL_FROM_DATABASE=GraphLink [SilverLink]
usb:v0451pE003*
ID_MODEL_FROM_DATABASE=TI-84 Plus Calculator
@@ -5168,6 +5192,9 @@ usb:v0451pE004*
usb:v0451pE008*
ID_MODEL_FROM_DATABASE=TI-84 Plus Silver Calculator
+usb:v0451pE012*
+ ID_MODEL_FROM_DATABASE=TI-Nspire Calculator
+
usb:v0451pF430*
ID_MODEL_FROM_DATABASE=MSP-FET430UIF JTAG Tool
@@ -5894,6 +5921,9 @@ usb:v045Ep029E*
usb:v045Ep02A0*
ID_MODEL_FROM_DATABASE=Xbox360 Big Button IR
+usb:v045Ep02A1*
+ ID_MODEL_FROM_DATABASE=Xbox 360 Wireless Receiver for Windows
+
usb:v045Ep02A8*
ID_MODEL_FROM_DATABASE=Xbox360 Wireless N Networking Adapter [Atheros AR7010+AR9280]
@@ -5906,6 +5936,9 @@ usb:v045Ep02AE*
usb:v045Ep02B0*
ID_MODEL_FROM_DATABASE=Xbox NUI Motor
+usb:v045Ep02B6*
+ ID_MODEL_FROM_DATABASE=Xbox 360 / Bluetooth Wireless Headset
+
usb:v045Ep0400*
ID_MODEL_FROM_DATABASE=Windows Powered Pocket PC 2002
@@ -6371,6 +6404,9 @@ usb:v045Ep0779*
usb:v045Ep930A*
ID_MODEL_FROM_DATABASE=ISOUSB.SYS Intel 82930 Isochronous IO Test Board
+usb:v045EpFFCA*
+ ID_MODEL_FROM_DATABASE=Catalina
+
usb:v045EpFFF8*
ID_MODEL_FROM_DATABASE=Keyboard
@@ -6626,6 +6662,9 @@ usb:v046Ap002D*
usb:v046Ap003E*
ID_MODEL_FROM_DATABASE=SmartTerminal ST-2xxx
+usb:v046Ap0041*
+ ID_MODEL_FROM_DATABASE=G86 6240 Keyboard
+
usb:v046Ap0080*
ID_MODEL_FROM_DATABASE=eHealth Terminal ST 1503
@@ -7043,6 +7082,9 @@ usb:v046Dp0A17*
usb:v046Dp0A1F*
ID_MODEL_FROM_DATABASE=G930
+usb:v046Dp0A29*
+ ID_MODEL_FROM_DATABASE=H600 [Wireless Headset]
+
usb:v046Dp0B02*
ID_MODEL_FROM_DATABASE=C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode)
@@ -7232,6 +7274,9 @@ usb:v046DpC062*
usb:v046DpC063*
ID_MODEL_FROM_DATABASE=DELL Laser Mouse
+usb:v046DpC066*
+ ID_MODEL_FROM_DATABASE=G9x Laser Mouse
+
usb:v046DpC068*
ID_MODEL_FROM_DATABASE=G500 Laser Mouse
@@ -7266,7 +7311,7 @@ usb:v046DpC121*
ID_MODEL_FROM_DATABASE=Harmony One Remote
usb:v046DpC122*
- ID_MODEL_FROM_DATABASE=Harmony 700 Remote
+ ID_MODEL_FROM_DATABASE=Harmony 650/700 Remote
usb:v046DpC124*
ID_MODEL_FROM_DATABASE=Harmony 300 Remote
@@ -7274,6 +7319,9 @@ usb:v046DpC124*
usb:v046DpC125*
ID_MODEL_FROM_DATABASE=Harmony 200 Remote
+usb:v046DpC126*
+ ID_MODEL_FROM_DATABASE=Harmony Link
+
usb:v046DpC201*
ID_MODEL_FROM_DATABASE=WingMan Extreme Joystick with Throttle
@@ -7592,6 +7640,9 @@ usb:v046DpC529*
usb:v046DpC52B*
ID_MODEL_FROM_DATABASE=Unifying Receiver
+usb:v046DpC52E*
+ ID_MODEL_FROM_DATABASE=MK260 Wireless Combo Receiver
+
usb:v046DpC52F*
ID_MODEL_FROM_DATABASE=Unifying Receiver
@@ -7610,6 +7661,9 @@ usb:v046DpC626*
usb:v046DpC627*
ID_MODEL_FROM_DATABASE=3Dconnexion Space Explorer 3D Mouse
+usb:v046DpC629*
+ ID_MODEL_FROM_DATABASE=3Dconnexion SpacePilot Pro 3D Mouse
+
usb:v046DpC702*
ID_MODEL_FROM_DATABASE=Cordless Presenter
@@ -8024,6 +8078,9 @@ usb:v0471p20D0*
usb:v0471p20E3*
ID_MODEL_FROM_DATABASE=GoGear Raga
+usb:v0471p20E4*
+ ID_MODEL_FROM_DATABASE=GoGear ViBE 8GB
+
usb:v0471p262C*
ID_MODEL_FROM_DATABASE=SPC230NC Webcam
@@ -8423,6 +8480,9 @@ usb:v047FpAC01*
usb:v047FpAD01*
ID_MODEL_FROM_DATABASE=GameCom 777 5.1 Headset
+usb:v047FpC00E*
+ ID_MODEL_FROM_DATABASE=Blackwire C310 headset
+
usb:v0480*
ID_VENDOR_FROM_DATABASE=Toshiba America Info. Systems, Inc.
@@ -8438,6 +8498,9 @@ usb:v0480p0011*
usb:v0480p0014*
ID_MODEL_FROM_DATABASE=InTouch Module
+usb:v0480pA006*
+ ID_MODEL_FROM_DATABASE=External Disk 1.5TB
+
usb:v0480pA007*
ID_MODEL_FROM_DATABASE=External Disk USB 3.0
@@ -8450,6 +8513,9 @@ usb:v0482*
usb:v0482p000E*
ID_MODEL_FROM_DATABASE=FS-1020D Printer
+usb:v0482p000F*
+ ID_MODEL_FROM_DATABASE=FS-1920 Mono Printer
+
usb:v0482p0100*
ID_MODEL_FROM_DATABASE=Finecam S3x
@@ -9701,6 +9767,9 @@ usb:v04A9p1721*
usb:v04A9p1723*
ID_MODEL_FROM_DATABASE=MP470 ser
+usb:v04A9p1724*
+ ID_MODEL_FROM_DATABASE=PIXMA MP520 series
+
usb:v04A9p1725*
ID_MODEL_FROM_DATABASE=MP610 ser
@@ -9719,6 +9788,9 @@ usb:v04A9p1729*
usb:v04A9p172B*
ID_MODEL_FROM_DATABASE=MP140 ser
+usb:v04A9p173B*
+ ID_MODEL_FROM_DATABASE=PIXMA MP270 All-In-One Printer
+
usb:v04A9p173E*
ID_MODEL_FROM_DATABASE=MP560
@@ -10442,9 +10514,15 @@ usb:v04A9p310B*
usb:v04A9p310E*
ID_MODEL_FROM_DATABASE=Digital IXUS 50 (PTP mode)
+usb:v04A9p310F*
+ ID_MODEL_FROM_DATABASE=PowerShot A420
+
usb:v04A9p3110*
ID_MODEL_FROM_DATABASE=EOS Digital Rebel XTi
+usb:v04A9p3115*
+ ID_MODEL_FROM_DATABASE=PowerShot SD900 / Digital IXUS 900 Ti / IXY DIGITAL 1000
+
usb:v04A9p3116*
ID_MODEL_FROM_DATABASE=Digital IXUS 750 / PowerShot SD550 (PTP mode)
@@ -10454,9 +10532,21 @@ usb:v04A9p3117*
usb:v04A9p3119*
ID_MODEL_FROM_DATABASE=PowerShot SD700 IS / Digital IXUS 800 IS / IXY Digital 800 IS
+usb:v04A9p311A*
+ ID_MODEL_FROM_DATABASE=PowerShot S3 IS
+
usb:v04A9p311B*
ID_MODEL_FROM_DATABASE=PowerShot A540
+usb:v04A9p311C*
+ ID_MODEL_FROM_DATABASE=PowerShot SD600 DIGITAL ELPH / DIGITAL IXUS 60 / IXY DIGITAL 70
+
+usb:v04A9p3125*
+ ID_MODEL_FROM_DATABASE=PowerShot G7
+
+usb:v04A9p3126*
+ ID_MODEL_FROM_DATABASE=PowerShot A530
+
usb:v04A9p3127*
ID_MODEL_FROM_DATABASE=SELPHY CP710
@@ -10466,9 +10556,21 @@ usb:v04A9p3128*
usb:v04A9p312D*
ID_MODEL_FROM_DATABASE=Elura 100
+usb:v04A9p3136*
+ ID_MODEL_FROM_DATABASE=PowerShot SD800 IS / Digital IXUS 850 IS / IXY DIGITAL 900 IS
+
+usb:v04A9p3137*
+ ID_MODEL_FROM_DATABASE=PowerShot SD40 / Digital IXUS i7 IXY / DIGITAL L4
+
usb:v04A9p3138*
ID_MODEL_FROM_DATABASE=PowerShot A710 IS
+usb:v04A9p3139*
+ ID_MODEL_FROM_DATABASE=PowerShot A640
+
+usb:v04A9p313A*
+ ID_MODEL_FROM_DATABASE=PowerShot A630
+
usb:v04A9p3141*
ID_MODEL_FROM_DATABASE=SELPHY ES1
@@ -10481,11 +10583,35 @@ usb:v04A9p3143*
usb:v04A9p3145*
ID_MODEL_FROM_DATABASE=EOS 450D
+usb:v04A9p3146*
+ ID_MODEL_FROM_DATABASE=EOS 40D
+
usb:v04A9p3147*
ID_MODEL_FROM_DATABASE=EOS 1Ds Mark III
+usb:v04A9p3148*
+ ID_MODEL_FROM_DATABASE=PowerShot S5 IS
+
+usb:v04A9p3149*
+ ID_MODEL_FROM_DATABASE=PowerShot A460
+
+usb:v04A9p314B*
+ ID_MODEL_FROM_DATABASE=PowerShot SD850 IS DIGITAL ELPH / Digital IXUS 950 IS / IXY DIGITAL 810 IS
+
+usb:v04A9p314C*
+ ID_MODEL_FROM_DATABASE=PowerShot A570 IS
+
+usb:v04A9p314D*
+ ID_MODEL_FROM_DATABASE=PowerShot A560
+
+usb:v04A9p314E*
+ ID_MODEL_FROM_DATABASE=PowerShot SD750 DIGITAL ELPH / DIGITAL IXUS 75 / IXY DIGITAL 90
+
usb:v04A9p314F*
- ID_MODEL_FROM_DATABASE=Powershot SD1000
+ ID_MODEL_FROM_DATABASE=PowerShot SD1000 DIGITAL ELPH / DIGITAL IXUS 70 / IXY DIGITAL 10
+
+usb:v04A9p3150*
+ ID_MODEL_FROM_DATABASE=PowerShot A550
usb:v04A9p3155*
ID_MODEL_FROM_DATABASE=PowerShot A450
@@ -10493,9 +10619,18 @@ usb:v04A9p3155*
usb:v04A9p315A*
ID_MODEL_FROM_DATABASE=PowerShot G9
+usb:v04A9p315B*
+ ID_MODEL_FROM_DATABASE=PowerShot A650 IS
+
usb:v04A9p315D*
ID_MODEL_FROM_DATABASE=PowerShot A720
+usb:v04A9p315E*
+ ID_MODEL_FROM_DATABASE=PowerShot SX100 IS
+
+usb:v04A9p315F*
+ ID_MODEL_FROM_DATABASE=PowerShot SD950 IS DIGITAL ELPH / DIGITAL IXUS 960 IS / IXY DIGITAL 2000 IS
+
usb:v04A9p3160*
ID_MODEL_FROM_DATABASE=Digital IXUS 860 IS
@@ -10505,12 +10640,21 @@ usb:v04A9p3170*
usb:v04A9p3171*
ID_MODEL_FROM_DATABASE=SELPHY CP740
+usb:v04A9p3173*
+ ID_MODEL_FROM_DATABASE=PowerShot SD890 IS DIGITAL ELPH / Digital IXUS 970 IS / IXY DIGITAL 820 IS
+
+usb:v04A9p3174*
+ ID_MODEL_FROM_DATABASE=PowerShot SD790 IS DIGITAL ELPH / Digital IXUS 90 IS / IXY DIGITAL 95 IS
+
usb:v04A9p3175*
ID_MODEL_FROM_DATABASE=IXY Digital 25 IS
usb:v04A9p3176*
ID_MODEL_FROM_DATABASE=PowerShot A590
+usb:v04A9p3177*
+ ID_MODEL_FROM_DATABASE=PowerShot A580
+
usb:v04A9p317A*
ID_MODEL_FROM_DATABASE=PC1267 [Powershot A470]
@@ -10523,9 +10667,30 @@ usb:v04A9p3185*
usb:v04A9p3186*
ID_MODEL_FROM_DATABASE=SELPHY ES20
+usb:v04A9p318D*
+ ID_MODEL_FROM_DATABASE=PowerShot SX100 IS
+
+usb:v04A9p318E*
+ ID_MODEL_FROM_DATABASE=PowerShot A1000 IS
+
+usb:v04A9p318F*
+ ID_MODEL_FROM_DATABASE=PowerShot G10
+
+usb:v04A9p3191*
+ ID_MODEL_FROM_DATABASE=PowerShot A2000 IS
+
usb:v04A9p3192*
ID_MODEL_FROM_DATABASE=PowerShot SX110 IS
+usb:v04A9p3193*
+ ID_MODEL_FROM_DATABASE=PowerShot SD990 IS DIGITAL ELPH / Digital IXUS 980 IS / IXY DIGITAL 3000 IS
+
+usb:v04A9p3195*
+ ID_MODEL_FROM_DATABASE=PowerShot SX1 IS
+
+usb:v04A9p3196*
+ ID_MODEL_FROM_DATABASE=PowerShot SD880 IS DIGITAL ELPH / Digital IXUS 870 IS / IXY DIGITAL 920 IS
+
usb:v04A9p319A*
ID_MODEL_FROM_DATABASE=EOS 7D
@@ -10550,24 +10715,66 @@ usb:v04A9p31B1*
usb:v04A9p31BC*
ID_MODEL_FROM_DATABASE=PowerShot D10
+usb:v04A9p31BD*
+ ID_MODEL_FROM_DATABASE=PowerShot SD960 IS DIGITAL ELPH / Digital IXUS 110 IS / IXY DIGITAL 510 IS
+
+usb:v04A9p31BE*
+ ID_MODEL_FROM_DATABASE=PowerShot A2100 IS
+
usb:v04A9p31BF*
ID_MODEL_FROM_DATABASE=PowerShot A480
usb:v04A9p31C0*
ID_MODEL_FROM_DATABASE=PowerShot SX200 IS
+usb:v04A9p31C1*
+ ID_MODEL_FROM_DATABASE=PowerShot SD970 IS DIGITAL ELPH / Digital IXUS 990 IS / IXY DIGITAL 830 IS
+
+usb:v04A9p31C2*
+ ID_MODEL_FROM_DATABASE=PowerShot SD780 IS DIGITAL ELPH / Digital IXUS 100 IS / IXY DIGITAL 210 IS
+
+usb:v04A9p31C3*
+ ID_MODEL_FROM_DATABASE=PowerShot A1100 IS
+
+usb:v04A9p31C4*
+ ID_MODEL_FROM_DATABASE=PowerShot SD1200 IS DIGITAL ELPH / Digital IXUS 95 IS / IXY DIGITAL 110 IS
+
+usb:v04A9p31CF*
+ ID_MODEL_FROM_DATABASE=EOS Rebel T1i / EOS 500D / EOS Kiss X3
+
usb:v04A9p31DD*
ID_MODEL_FROM_DATABASE=SELPHY CP780
+usb:v04A9p31DF*
+ ID_MODEL_FROM_DATABASE=PowerShot G11
+
+usb:v04A9p31E0*
+ ID_MODEL_FROM_DATABASE=PowerShot SX120 IS
+
+usb:v04A9p31E1*
+ ID_MODEL_FROM_DATABASE=PowerShot S90
+
+usb:v04A9p31E4*
+ ID_MODEL_FROM_DATABASE=PowerShot SX20 IS
+
usb:v04A9p31E5*
ID_MODEL_FROM_DATABASE=Digital IXUS 200 IS
+usb:v04A9p31E6*
+ ID_MODEL_FROM_DATABASE=PowerShot SD940 IS DIGITAL ELPH / Digital IXUS 120 IS / IXY DIGITAL 220 IS
+
+usb:v04A9p31EA*
+ ID_MODEL_FROM_DATABASE=EOS Rebel T2i / EOS 550D / EOS Kiss X4
+
usb:v04A9p31EE*
ID_MODEL_FROM_DATABASE=SELPHY ES40
usb:v04A9p31EF*
ID_MODEL_FROM_DATABASE=PowerShot A495
+usb:v04A9p31F0*
+ ID_MODEL_FROM_DATABASE=PowerShot A490
+
usb:v04A9p31F1*
ID_MODEL_FROM_DATABASE=PowerShot A3100 IS / PowerShot A3150 IS
@@ -10598,6 +10805,9 @@ usb:v04A9p31FF*
usb:v04A9p3209*
ID_MODEL_FROM_DATABASE=Vixia HF S21 A
+usb:v04A9p320F*
+ ID_MODEL_FROM_DATABASE=PowerShot G12
+
usb:v04A9p3210*
ID_MODEL_FROM_DATABASE=Powershot SX30 IS
@@ -10619,9 +10829,15 @@ usb:v04A9p3223*
usb:v04A9p3224*
ID_MODEL_FROM_DATABASE=PowerShot A3200 IS
+usb:v04A9p3225*
+ ID_MODEL_FROM_DATABASE=PowerShot ELPH 500 HS / IXUS 310 HS
+
usb:v04A9p3226*
ID_MODEL_FROM_DATABASE=PowerShow A800
+usb:v04A9p3227*
+ ID_MODEL_FROM_DATABASE=PowerShot ELPH 100 HS / IXUS 115 HS
+
usb:v04A9p3228*
ID_MODEL_FROM_DATABASE=PowerShot SX230 HS
@@ -10634,6 +10850,9 @@ usb:v04A9p322A*
usb:v04A9p322B*
ID_MODEL_FROM_DATABASE=Powershot A1200
+usb:v04A9p322C*
+ ID_MODEL_FROM_DATABASE=PowerShot SX220 HS
+
usb:v04A9p3233*
ID_MODEL_FROM_DATABASE=PowerShot G1 X
@@ -10664,6 +10883,9 @@ usb:v04A9p3240*
usb:v04A9p3241*
ID_MODEL_FROM_DATABASE=PowerShot ELPH 110 HS / IXUS 125 HS
+usb:v04A9p3242*
+ ID_MODEL_FROM_DATABASE=PowerShot D20
+
usb:v04A9p3243*
ID_MODEL_FROM_DATABASE=PowerShot A4000 IS
@@ -10706,6 +10928,18 @@ usb:v04A9p325B*
usb:v04A9p325C*
ID_MODEL_FROM_DATABASE=PowerShot SX500 IS
+usb:v04A9p325F*
+ ID_MODEL_FROM_DATABASE=PowerShot SX280 HS
+
+usb:v04A9p3260*
+ ID_MODEL_FROM_DATABASE=PowerShot SX270 HS
+
+usb:v04A9p3264*
+ ID_MODEL_FROM_DATABASE=PowerShot A1400
+
+usb:v04A9p3268*
+ ID_MODEL_FROM_DATABASE=PowerShot ELPH 330 HS / IXUS 255 HS
+
usb:v04AA*
ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd
@@ -10916,12 +11150,18 @@ usb:v04B0p041E*
usb:v04B0p0422*
ID_MODEL_FROM_DATABASE=D700 (ptp)
+usb:v04B0p0423*
+ ID_MODEL_FROM_DATABASE=D5000
+
usb:v04B0p0424*
ID_MODEL_FROM_DATABASE=D3000
usb:v04B0p0425*
ID_MODEL_FROM_DATABASE=D300S
+usb:v04B0p0428*
+ ID_MODEL_FROM_DATABASE=D7000
+
usb:v04B0p042A*
ID_MODEL_FROM_DATABASE=D800 (ptp)
@@ -11042,6 +11282,9 @@ usb:v04B4p0002*
usb:v04B4p0033*
ID_MODEL_FROM_DATABASE=Mouse
+usb:v04B4p0060*
+ ID_MODEL_FROM_DATABASE=Wireless optical mouse
+
usb:v04B4p0100*
ID_MODEL_FROM_DATABASE=Cino FuzzyScan F760-B
@@ -11996,6 +12239,9 @@ usb:v04C5p1042*
usb:v04C5p105B*
ID_MODEL_FROM_DATABASE=AH-F401U Air H device
+usb:v04C5p1084*
+ ID_MODEL_FROM_DATABASE=PalmSecure Sensor V2
+
usb:v04C5p1096*
ID_MODEL_FROM_DATABASE=fi-5110EOX
@@ -12065,6 +12311,9 @@ usb:v04CA*
usb:v04CAp1766*
ID_MODEL_FROM_DATABASE=HID Monitor Controls
+usb:v04CAp2004*
+ ID_MODEL_FROM_DATABASE=Bluetooth 4.0 [Broadcom BCM20702A0]
+
usb:v04CAp9304*
ID_MODEL_FROM_DATABASE=Hub
@@ -12500,6 +12749,9 @@ usb:v04D8p8101*
usb:v04D8p8107*
ID_MODEL_FROM_DATABASE=Microstick II
+usb:v04D8p9004*
+ ID_MODEL_FROM_DATABASE=Microchip REAL ICE
+
usb:v04D8p900A*
ID_MODEL_FROM_DATABASE=PICkit3
@@ -12563,6 +12815,9 @@ usb:v04D9p2221*
usb:v04D9p2323*
ID_MODEL_FROM_DATABASE=Keyboard
+usb:v04D9p2519*
+ ID_MODEL_FROM_DATABASE=Shenzhen LogoTech 2.4GHz receiver
+
usb:v04D9p2832*
ID_MODEL_FROM_DATABASE=1channel Telephone line recorder
@@ -12842,6 +13097,9 @@ usb:v04E1p0201*
usb:v04E2*
ID_VENDOR_FROM_DATABASE=Exar Corp.
+usb:v04E2p1410*
+ ID_MODEL_FROM_DATABASE=XR21V1410 USB-UART IC
+
usb:v04E3*
ID_VENDOR_FROM_DATABASE=Zilog, Inc.
@@ -13098,7 +13356,7 @@ usb:v04E8p0111*
ID_MODEL_FROM_DATABASE=Connect3D Flash Drive
usb:v04E8p0300*
- ID_MODEL_FROM_DATABASE=E2530 Phone (Mass storage mode)
+ ID_MODEL_FROM_DATABASE=E2530 / GT-C3350 Phones (Mass storage mode)
usb:v04E8p1003*
ID_MODEL_FROM_DATABASE=MP3 Player and Recorder
@@ -13508,12 +13766,18 @@ usb:v04E8p5F05*
usb:v04E8p6032*
ID_MODEL_FROM_DATABASE=G2 Portable hard drive
+usb:v04E8p6034*
+ ID_MODEL_FROM_DATABASE=G2 Portable hard drive
+
usb:v04E8p60B3*
ID_MODEL_FROM_DATABASE=M2 Portable Hard Drive
usb:v04E8p60C4*
ID_MODEL_FROM_DATABASE=M2 Portable Hard Drive USB 3.0
+usb:v04E8p61B6*
+ ID_MODEL_FROM_DATABASE=M3 Portable Hard Drive 1TB
+
usb:v04E8p6601*
ID_MODEL_FROM_DATABASE=Mobile Phone
@@ -13632,7 +13896,7 @@ usb:v04E8p685D*
ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II] (Download mode)
usb:v04E8p685E*
- ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II] (USB Debugging mode)
+ ID_MODEL_FROM_DATABASE=GT-I9100 / GT-C3350 Phones (USB Debugging mode)
usb:v04E8p6860*
ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1]
@@ -13910,6 +14174,9 @@ usb:v04F2pB059*
usb:v04F2pB071*
ID_MODEL_FROM_DATABASE=2.0M UVC Webcam / CNF7129
+usb:v04F2pB083*
+ ID_MODEL_FROM_DATABASE=CKF7063 Webcam (HP)
+
usb:v04F2pB091*
ID_MODEL_FROM_DATABASE=Webcam
@@ -13943,6 +14210,9 @@ usb:v04F2pB1CF*
usb:v04F2pB1D6*
ID_MODEL_FROM_DATABASE=CNF9055 Toshiba Webcam
+usb:v04F2pB1E4*
+ ID_MODEL_FROM_DATABASE=Toshiba Integrated Webcam
+
usb:v04F2pB213*
ID_MODEL_FROM_DATABASE=Fujitsu Integrated Camera
@@ -13976,6 +14246,9 @@ usb:v04F2pB2EA*
usb:v04F2pB330*
ID_MODEL_FROM_DATABASE=Asus 720p CMOS webcam
+usb:v04F2pB354*
+ ID_MODEL_FROM_DATABASE=UVC 1.00 device HD UVC WebCam
+
usb:v04F3*
ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp.
@@ -14624,6 +14897,9 @@ usb:v04F9p201B*
usb:v04F9p2027*
ID_MODEL_FROM_DATABASE=QL-560 P-Touch Label Printer
+usb:v04F9p202B*
+ ID_MODEL_FROM_DATABASE=PT-7600 P-Touch Label Printer
+
usb:v04F9p2100*
ID_MODEL_FROM_DATABASE=Card Reader Writer
@@ -14777,6 +15053,9 @@ usb:v0502p3202*
usb:v0502p3203*
ID_MODEL_FROM_DATABASE=Liquid (Debug mode)
+usb:v0502p3230*
+ ID_MODEL_FROM_DATABASE=BeTouch E120
+
usb:v0502p3317*
ID_MODEL_FROM_DATABASE=Liquid
@@ -14987,6 +15266,9 @@ usb:v050Dp0307*
usb:v050Dp0409*
ID_MODEL_FROM_DATABASE=F5U409 Serial
+usb:v050Dp0416*
+ ID_MODEL_FROM_DATABASE=Staples 12416 7 port desktop hub
+
usb:v050Dp0551*
ID_MODEL_FROM_DATABASE=F6C550-AVR UPS
@@ -15294,7 +15576,7 @@ usb:v0525pA4A4*
ID_MODEL_FROM_DATABASE=Linux-USB user-mode bulk source/sink
usb:v0525pA4A5*
- ID_MODEL_FROM_DATABASE=Linux-USB File Storage Gadget
+ ID_MODEL_FROM_DATABASE=Pocketbook Pro 903
usb:v0525pA4A6*
ID_MODEL_FROM_DATABASE=Linux-USB Serial Gadget
@@ -15482,6 +15764,9 @@ usb:v053A*
usb:v053Ap0B00*
ID_MODEL_FROM_DATABASE=Hub
+usb:v053Ap0B01*
+ ID_MODEL_FROM_DATABASE=Preh MCI 3100
+
usb:v053B*
ID_VENDOR_FROM_DATABASE=Global Village Communication
@@ -15683,6 +15968,9 @@ usb:v0547p2750*
usb:v0547p2810*
ID_MODEL_FROM_DATABASE=Cypress ATAPI Bridge
+usb:v0547p4D90*
+ ID_MODEL_FROM_DATABASE=AmScope MD1900 camera
+
usb:v0547p7777*
ID_MODEL_FROM_DATABASE=Bluetooth Device
@@ -16022,6 +16310,9 @@ usb:v054Cp01D5*
usb:v054Cp01DE*
ID_MODEL_FROM_DATABASE=VRD-VC10 [Video Capture]
+usb:v054Cp01E8*
+ ID_MODEL_FROM_DATABASE=UP-DR150 Photo Printer
+
usb:v054Cp01E9*
ID_MODEL_FROM_DATABASE=Net MD
@@ -16358,6 +16649,9 @@ usb:v0557p7000*
usb:v0557p7820*
ID_MODEL_FROM_DATABASE=UC-2322 2xSerial Ports [mos7820]
+usb:v0557p8021*
+ ID_MODEL_FROM_DATABASE=CS1764A [CubiQ DVI KVMP Switch]
+
usb:v0558*
ID_VENDOR_FROM_DATABASE=Truevision, Inc.
@@ -16904,6 +17198,9 @@ usb:v056Ap00DB*
usb:v056Ap00DD*
ID_MODEL_FROM_DATABASE=Bamboo Pen (CTL-470)
+usb:v056Ap00DE*
+ ID_MODEL_FROM_DATABASE=CTH-470 [Bamboo Fun Pen & Touch]
+
usb:v056Ap00F6*
ID_MODEL_FROM_DATABASE=Cintiq 24HD touch (DTH-2400) touchscreen
@@ -18686,6 +18983,9 @@ usb:v059Fp0421*
usb:v059Fp0641*
ID_MODEL_FROM_DATABASE=Mobile Hard Drive
+usb:v059Fp100C*
+ ID_MODEL_FROM_DATABASE=Rugged Triple Interface Mobile Hard Drive
+
usb:v059Fp1010*
ID_MODEL_FROM_DATABASE=Desktop Hard Drive
@@ -18749,6 +19049,12 @@ usb:v05A4p9731*
usb:v05A4p9783*
ID_MODEL_FROM_DATABASE=Wireless Keypad
+usb:v05A4p9837*
+ ID_MODEL_FROM_DATABASE=Targus Number Keypad
+
+usb:v05A4p9862*
+ ID_MODEL_FROM_DATABASE=Targus Number Keypad (Composite Device)
+
usb:v05A4p9881*
ID_MODEL_FROM_DATABASE=IR receiver [VRC-1100 Vista MCE Remote Control]
@@ -19097,6 +19403,9 @@ usb:v05ACp1105*
usb:v05ACp1107*
ID_MODEL_FROM_DATABASE=Thunderbolt Display Audio
+usb:v05ACp1112*
+ ID_MODEL_FROM_DATABASE=FaceTime HD Camera (Display)
+
usb:v05ACp1201*
ID_MODEL_FROM_DATABASE=3G iPod
@@ -19304,6 +19613,9 @@ usb:v05ACp8241*
usb:v05ACp8242*
ID_MODEL_FROM_DATABASE=Built-in IR Receiver
+usb:v05ACp8281*
+ ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
+
usb:v05ACp8286*
ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
@@ -20672,6 +20984,9 @@ usb:v05E3p0726*
usb:v05E3p0727*
ID_MODEL_FROM_DATABASE=microSD Reader/Writer
+usb:v05E3p0731*
+ ID_MODEL_FROM_DATABASE=GL3310 SATA 3Gb/s Bridge Controller
+
usb:v05E3p0736*
ID_MODEL_FROM_DATABASE=microSD Reader/Writer
@@ -20825,9 +21140,15 @@ usb:v05F9*
usb:v05F9p1104*
ID_MODEL_FROM_DATABASE=Magellan 2200VS
+usb:v05F9p2202*
+ ID_MODEL_FROM_DATABASE=Point of Sale Handheld Scanner
+
usb:v05F9p2206*
ID_MODEL_FROM_DATABASE=Datalogic Gryphon GFS4170
+usb:v05F9p2601*
+ ID_MODEL_FROM_DATABASE=Datalogin Magellan 1000i Barcode Scanner
+
usb:v05F9p2602*
ID_MODEL_FROM_DATABASE=Datalogic Magellan 1100i Barcode Scanner
@@ -21137,6 +21458,15 @@ usb:v0623*
usb:v0624*
ID_VENDOR_FROM_DATABASE=Avocent Corp.
+usb:v0624p0248*
+ ID_MODEL_FROM_DATABASE=Virtual Hub
+
+usb:v0624p0249*
+ ID_MODEL_FROM_DATABASE=Virtual Keyboard/Mouse
+
+usb:v0624p0251*
+ ID_MODEL_FROM_DATABASE=Virtual Mass Storage
+
usb:v0624p0294*
ID_MODEL_FROM_DATABASE=Dell 03R874 KVM dongle
@@ -21311,6 +21641,9 @@ usb:v0644p800D*
usb:v0644p800E*
ID_MODEL_FROM_DATABASE=TASCAM US-122L
+usb:v0644p801D*
+ ID_MODEL_FROM_DATABASE=DR-100
+
usb:v0644p8021*
ID_MODEL_FROM_DATABASE=TASCAM US-122mkII
@@ -21407,6 +21740,9 @@ usb:v064EpC107*
usb:v064EpD101*
ID_MODEL_FROM_DATABASE=Acer CrystalEye Webcam
+usb:v064EpD217*
+ ID_MODEL_FROM_DATABASE=HP TrueVision HD
+
usb:v064EpE201*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
@@ -21489,7 +21825,7 @@ usb:v065A*
ID_VENDOR_FROM_DATABASE=Optoelectronics Co., Ltd
usb:v065Ap0001*
- ID_MODEL_FROM_DATABASE=Barcode scanner / NLV-1001 (keyboard mode)
+ ID_MODEL_FROM_DATABASE=Opticon OPR-2001 / NLV-1001 (keyboard mode)
usb:v065Ap0009*
ID_MODEL_FROM_DATABASE=NLV-1001 (serial mode) / OPN-2001 [Opticon]
@@ -22070,6 +22406,9 @@ usb:v067Bp2528*
usb:v067Bp25A1*
ID_MODEL_FROM_DATABASE=PL25A1 Host-Host Bridge
+usb:v067Bp2773*
+ ID_MODEL_FROM_DATABASE=PL2773 SATAII bridge controller
+
usb:v067Bp3400*
ID_MODEL_FROM_DATABASE=Hi-Speed Flash Disk with TruePrint AES3400
@@ -22862,6 +23201,21 @@ usb:v06BCp000B*
usb:v06BCp0027*
ID_MODEL_FROM_DATABASE=Okipage 14e
+usb:v06BCp00F7*
+ ID_MODEL_FROM_DATABASE=OKI B4600 Mono Printer
+
+usb:v06BCp015E*
+ ID_MODEL_FROM_DATABASE=OKIPOS 411/412 POS Printer
+
+usb:v06BCp01C9*
+ ID_MODEL_FROM_DATABASE=OKI B430 Mono Printer
+
+usb:v06BCp020B*
+ ID_MODEL_FROM_DATABASE=OKI ES4140 Mono Printer
+
+usb:v06BCp02BB*
+ ID_MODEL_FROM_DATABASE=OKI PT390 POS Printer
+
usb:v06BCp0A91*
ID_MODEL_FROM_DATABASE=B2500MFP (printer+scanner)
@@ -23222,6 +23576,9 @@ usb:v06D1*
usb:v06D3*
ID_VENDOR_FROM_DATABASE=Mitsubishi Electric Corp.
+usb:v06D3p0284*
+ ID_MODEL_FROM_DATABASE=FX-USB-AW/-BD RS482 Converters
+
usb:v06D3p0380*
ID_MODEL_FROM_DATABASE=CP8000D Port
@@ -23339,6 +23696,9 @@ usb:v06DE*
usb:v06E0*
ID_VENDOR_FROM_DATABASE=Multi-Tech Systems, Inc.
+usb:v06E0p0319*
+ ID_MODEL_FROM_DATABASE=MT9234ZBA-USB MultiModem ZBA
+
usb:v06E0pF101*
ID_MODEL_FROM_DATABASE=MT5634ZBA-USB MultiModemUSB (old firmware)
@@ -23351,6 +23711,9 @@ usb:v06E0pF104*
usb:v06E0pF107*
ID_MODEL_FROM_DATABASE=MT5634ZBA-USB-V92 MultiModemUSB
+usb:v06E0pF120*
+ ID_MODEL_FROM_DATABASE=MT9234ZBA-USB-CDC-ACM-XR MultiModem ZBA CDC-ACM-XR
+
usb:v06E1*
ID_VENDOR_FROM_DATABASE=ADS Technologies, Inc.
@@ -25154,6 +25517,12 @@ usb:v0798*
usb:v0798p0001*
ID_MODEL_FROM_DATABASE=Braille Voyager
+usb:v0798p0640*
+ ID_MODEL_FROM_DATABASE=BC640
+
+usb:v0798p0680*
+ ID_MODEL_FROM_DATABASE=BC680
+
usb:v0799*
ID_VENDOR_FROM_DATABASE=Altera
@@ -25163,6 +25532,12 @@ usb:v0799p7651*
usb:v079B*
ID_VENDOR_FROM_DATABASE=Sagem
+usb:v079Bp0024*
+ ID_MODEL_FROM_DATABASE=MSO300/MSO301 Fingerprint Sensor
+
+usb:v079Bp0026*
+ ID_MODEL_FROM_DATABASE=MSO350/MSO351 Fingerprint Sensor & SmartCard Reader
+
usb:v079Bp0027*
ID_MODEL_FROM_DATABASE=USB-Serial Controller
@@ -25175,12 +25550,18 @@ usb:v079Bp0030*
usb:v079Bp0042*
ID_MODEL_FROM_DATABASE=Mobile
+usb:v079Bp0047*
+ ID_MODEL_FROM_DATABASE=CBM/MSO1300 Fingerprint Sensor
+
usb:v079Bp004A*
ID_MODEL_FROM_DATABASE=XG-760A 802.11bg
usb:v079Bp004B*
ID_MODEL_FROM_DATABASE=Wi-Fi 11g adapter
+usb:v079Bp0052*
+ ID_MODEL_FROM_DATABASE=MSO1350 Fingerprint Sensor & SmartCard Reader
+
usb:v079Bp0056*
ID_MODEL_FROM_DATABASE=Agfa AP1100 Photo Printer
@@ -25553,6 +25934,9 @@ usb:v07B4p0118*
usb:v07B4p0184*
ID_MODEL_FROM_DATABASE=P-S100 port
+usb:v07B4p0202*
+ ID_MODEL_FROM_DATABASE=Foot Switch RS-26
+
usb:v07B4p0203*
ID_MODEL_FROM_DATABASE=Digital Voice Recorder DW-90
@@ -25565,12 +25949,24 @@ usb:v07B4p0207*
usb:v07B4p0209*
ID_MODEL_FROM_DATABASE=Digital Voice Recorder DM-20
+usb:v07B4p020B*
+ ID_MODEL_FROM_DATABASE=Digital Voice Recorder DS-4000
+
usb:v07B4p020D*
ID_MODEL_FROM_DATABASE=Digital Voice Recorder VN-240PC
+usb:v07B4p0211*
+ ID_MODEL_FROM_DATABASE=Digital Voice Recorder DS-2300
+
+usb:v07B4p0218*
+ ID_MODEL_FROM_DATABASE=Foot Switch RS-28
+
usb:v07B4p0244*
ID_MODEL_FROM_DATABASE=Digital Voice Recorder VN-8500PC
+usb:v07B4p024F*
+ ID_MODEL_FROM_DATABASE=Digital Voice Recorder DS-7000
+
usb:v07B4p0280*
ID_MODEL_FROM_DATABASE=m:robe 100
@@ -25664,6 +26060,9 @@ usb:v07B8p5301*
usb:v07B8p6001*
ID_MODEL_FROM_DATABASE=802.11bg
+usb:v07B8p8188*
+ ID_MODEL_FROM_DATABASE=AboCom Systems Inc [WN2001 Prolink Wireless-N Nano Adapter]
+
usb:v07B8pA001*
ID_MODEL_FROM_DATABASE=WUG2200 802.11g Wireless Adapter [Envara WiND512]
@@ -27071,6 +27470,9 @@ usb:v0846p1020*
usb:v0846p1040*
ID_MODEL_FROM_DATABASE=FA120 Fast Ethernet USB 2.0 [Asix AX88172 / AX8817x]
+usb:v0846p1100*
+ ID_MODEL_FROM_DATABASE=Managed Switch M4100 series, M5300 series, M7100 series
+
usb:v0846p4110*
ID_MODEL_FROM_DATABASE=MA111(v1) 802.11b Wireless [Intersil Prism 3.0]
@@ -27945,7 +28347,7 @@ usb:v08E5*
ID_VENDOR_FROM_DATABASE=Litronic
usb:v08E6*
- ID_VENDOR_FROM_DATABASE=Gemplus
+ ID_VENDOR_FROM_DATABASE=Gemalto (was Gemplus)
usb:v08E6p0001*
ID_MODEL_FROM_DATABASE=GemPC-Touch 430
@@ -27986,6 +28388,9 @@ usb:v08E6p4433*
usb:v08E6p5501*
ID_MODEL_FROM_DATABASE=GemProx-PU Contactless Smart Card Reader
+usb:v08E6p5503*
+ ID_MODEL_FROM_DATABASE=Prox-DU Contactless Interface
+
usb:v08E6pACE0*
ID_MODEL_FROM_DATABASE=UA HYBRID TOKEN
@@ -28901,6 +29306,9 @@ usb:v0930p0B05*
usb:v0930p0B09*
ID_MODEL_FROM_DATABASE=PX1396E-3T01 External hard drive
+usb:v0930p0B1A*
+ ID_MODEL_FROM_DATABASE=STOR.E ALU 2S
+
usb:v0930p1300*
ID_MODEL_FROM_DATABASE=Wireless Broadband (CDMA EV-DO) SM-Bus Minicard Status Port
@@ -29087,6 +29495,9 @@ usb:v0934*
usb:v0936*
ID_VENDOR_FROM_DATABASE=NuTesla
+usb:v0936p000C*
+ ID_MODEL_FROM_DATABASE=Rhythmedics 6 BioData Integrator
+
usb:v0936p0030*
ID_MODEL_FROM_DATABASE=Composite Device, Mass Storage Device (Flash Drive) amd HID
@@ -29135,6 +29546,9 @@ usb:v093Ap2500*
usb:v093Ap2510*
ID_MODEL_FROM_DATABASE=Optical Mouse
+usb:v093Ap2521*
+ ID_MODEL_FROM_DATABASE=Optical Mouse
+
usb:v093Ap2600*
ID_MODEL_FROM_DATABASE=Typhoon Easycam USB 330K (newer)/Typhoon Easycam USB 2.0 VGA 1.3M/Sansun SN-508
@@ -29375,6 +29789,15 @@ usb:v0955p7030*
usb:v0955p7100*
ID_MODEL_FROM_DATABASE=Notion Ink Adam
+usb:v0955p7820*
+ ID_MODEL_FROM_DATABASE=Tegra 2 AC100 developer mode
+
+usb:v0955pB400*
+ ID_MODEL_FROM_DATABASE=SHIELD (debug)
+
+usb:v0955pB401*
+ ID_MODEL_FROM_DATABASE=SHIELD
+
usb:v0956*
ID_VENDOR_FROM_DATABASE=BSquare Corp.
@@ -29483,6 +29906,9 @@ usb:v0978*
usb:v0979*
ID_VENDOR_FROM_DATABASE=Jeilin Technology Corp., Ltd
+usb:v0979p0222*
+ ID_MODEL_FROM_DATABASE=Keychain Display
+
usb:v0979p0224*
ID_MODEL_FROM_DATABASE=JL2005A Toy Camera
@@ -29816,8 +30242,11 @@ usb:v09DAp8090*
usb:v09DAp9033*
ID_MODEL_FROM_DATABASE=X-718BK Optical Mouse
+usb:v09DAp9066*
+ ID_MODEL_FROM_DATABASE=F3 V-Track Gaming Mouse
+
usb:v09DAp9090*
- ID_MODEL_FROM_DATABASE=XL-750BK Laser Mouse
+ ID_MODEL_FROM_DATABASE=XL-730K / XL-750BK / XL-755BK Mice
usb:v09DB*
ID_VENDOR_FROM_DATABASE=Measurement Computing Corp.
@@ -30626,6 +31055,9 @@ usb:v0A5Fp0081*
usb:v0A5Fp008B*
ID_MODEL_FROM_DATABASE=HC100 wristbands Printer
+usb:v0A5Fp00D1*
+ ID_MODEL_FROM_DATABASE=Zebra GC420d Label Printer
+
usb:v0A5Fp930A*
ID_MODEL_FROM_DATABASE=Printer
@@ -31157,6 +31589,9 @@ usb:v0AC8pC326*
usb:v0AC8pC33F*
ID_MODEL_FROM_DATABASE=Webcam
+usb:v0AC8pC429*
+ ID_MODEL_FROM_DATABASE=Lenovo ThinkCentre Web Camera
+
usb:v0AC9*
ID_VENDOR_FROM_DATABASE=Micro Solutions, Inc.
@@ -31202,6 +31637,9 @@ usb:v0ACDp0401*
usb:v0ACDp0630*
ID_MODEL_FROM_DATABASE=Spectrum III Mag-Only Insert Reader (SPT3-355 Series) USB-CDC
+usb:v0ACDp0810*
+ ID_MODEL_FROM_DATABASE=SecurePIN (IDPA-506100Y) PIN Pad
+
usb:v0ACE*
ID_VENDOR_FROM_DATABASE=ZyDAS
@@ -31604,12 +32042,18 @@ usb:v0B0Dp0000*
usb:v0B0E*
ID_VENDOR_FROM_DATABASE=GN Netcom
+usb:v0B0Ep0420*
+ ID_MODEL_FROM_DATABASE=Jabra SPEAK 510
+
usb:v0B0Ep1022*
ID_MODEL_FROM_DATABASE=Jabra PRO 9450, Type 9400BS (DECT Headset)
usb:v0B0Ep620C*
ID_MODEL_FROM_DATABASE=Jabra BT620s
+usb:v0B0Ep9330*
+ ID_MODEL_FROM_DATABASE=Jabra GN9330 Headset
+
usb:v0B0F*
ID_VENDOR_FROM_DATABASE=AVID Technology
@@ -31913,6 +32357,18 @@ usb:v0B64*
usb:v0B65*
ID_VENDOR_FROM_DATABASE=Expert Magnetics Corp.
+usb:v0B66*
+ ID_VENDOR_FROM_DATABASE=Cybiko Inc.
+
+usb:v0B66p0041*
+ ID_MODEL_FROM_DATABASE=Xtreme
+
+usb:v0B67*
+ ID_VENDOR_FROM_DATABASE=Fairbanks Scales
+
+usb:v0B67p555E*
+ ID_MODEL_FROM_DATABASE=SCB-R9000
+
usb:v0B69*
ID_VENDOR_FROM_DATABASE=CacheVision
@@ -32421,7 +32877,7 @@ usb:v0BB4p0A4F*
ID_MODEL_FROM_DATABASE=PocketPC Sync
usb:v0BB4p0A50*
- ID_MODEL_FROM_DATABASE=HTC SmartPhone Sync
+ ID_MODEL_FROM_DATABASE=SmartPhone (MTP)
usb:v0BB4p0A51*
ID_MODEL_FROM_DATABASE=SPV C400 / T-Mobile SDA GSM/GPRS Pocket PC
@@ -32789,6 +33245,9 @@ usb:v0BC2p0503*
usb:v0BC2p2000*
ID_MODEL_FROM_DATABASE=Storage Adapter V3 (TPP)
+usb:v0BC2p2100*
+ ID_MODEL_FROM_DATABASE=FreeAgent Go
+
usb:v0BC2p2200*
ID_MODEL_FROM_DATABASE=FreeAgent Go FW
@@ -32798,6 +33257,9 @@ usb:v0BC2p2300*
usb:v0BC2p2320*
ID_MODEL_FROM_DATABASE=USB 3.0 bridge [Portable Expansion Drive]
+usb:v0BC2p3008*
+ ID_MODEL_FROM_DATABASE=FreeAgent Desk 1TB
+
usb:v0BC2p3320*
ID_MODEL_FROM_DATABASE=SRD00F2 [Expansion Desktop Drive]
@@ -32825,6 +33287,12 @@ usb:v0BC2p5161*
usb:v0BC2pA003*
ID_MODEL_FROM_DATABASE=Backup Plus
+usb:v0BC2pA0A1*
+ ID_MODEL_FROM_DATABASE=Backup Plus Desktop
+
+usb:v0BC2pA0A4*
+ ID_MODEL_FROM_DATABASE=Backup Plus Desktop Drive
+
usb:v0BC3*
ID_VENDOR_FROM_DATABASE=IPWireless, Inc.
@@ -33029,6 +33497,9 @@ usb:v0BDAp8176*
usb:v0BDAp8178*
ID_MODEL_FROM_DATABASE=RTL8192CU 802.11n WLAN Adapter
+usb:v0BDAp8179*
+ ID_MODEL_FROM_DATABASE=RTL8188EUS 802.11n Wireless Network Adapter
+
usb:v0BDAp817F*
ID_MODEL_FROM_DATABASE=RTL8188RU 802.11n WLAN Adapter
@@ -33185,6 +33656,9 @@ usb:v0BF8p100C*
usb:v0BF8p100F*
ID_MODEL_FROM_DATABASE=miniCard D2301 802.11bg Wireless Module [SiS 163U]
+usb:v0BF8p1017*
+ ID_MODEL_FROM_DATABASE=Keyboard KB SCR
+
usb:v0BFD*
ID_VENDOR_FROM_DATABASE=Kvaser AB
@@ -33414,7 +33888,7 @@ usb:v0C2Ep0007*
ID_MODEL_FROM_DATABASE=Metrologic MS7120 Barcode Scanner (IBM SurePOS mode)
usb:v0C2Ep0200*
- ID_MODEL_FROM_DATABASE=Metrologic Scanner
+ ID_MODEL_FROM_DATABASE=MS7120 Barcode Scanner
usb:v0C2Ep0204*
ID_MODEL_FROM_DATABASE=Metrologic MS7120 Barcode Scanner (keyboard mode)
@@ -33842,6 +34316,9 @@ usb:v0C45p62E0*
usb:v0C45p6310*
ID_MODEL_FROM_DATABASE=Sonix USB 2.0 Camera
+usb:v0C45p6341*
+ ID_MODEL_FROM_DATABASE=Defender G-Lens 2577 HD720p Camera
+
usb:v0C45p63E0*
ID_MODEL_FROM_DATABASE=Sonix Integrated Webcam
@@ -33860,6 +34337,9 @@ usb:v0C45p6413*
usb:v0C45p6417*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v0C45p6419*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam
+
usb:v0C45p641D*
ID_MODEL_FROM_DATABASE=1.3 MPixel Integrated Webcam
@@ -34553,6 +35033,9 @@ usb:v0CCDp00A9*
usb:v0CCDp00B3*
ID_MODEL_FROM_DATABASE=NOXON DAB/DAB+ Stick
+usb:v0CCDp00E0*
+ ID_MODEL_FROM_DATABASE=NOXON DAB/DAB+ Stick V2
+
usb:v0CCDp10A7*
ID_MODEL_FROM_DATABASE=TerraTec G3
@@ -34707,7 +35190,7 @@ usb:v0CF3p1001*
ID_MODEL_FROM_DATABASE=Thomson TG121N [Atheros AR9001U-(2)NG]
usb:v0CF3p1002*
- ID_MODEL_FROM_DATABASE=TP-Link TL-WN821N v2 802.11n [Atheros AR9170]
+ ID_MODEL_FROM_DATABASE=TP-Link TL-WN821N v2 / TL-WN822N v1 802.11n [Atheros AR9170]
usb:v0CF3p1006*
ID_MODEL_FROM_DATABASE=TP-Link TL-WN322G v3 / TL-WN422G v2 802.11g [Atheros AR9271]
@@ -34731,7 +35214,7 @@ usb:v0CF3p3008*
ID_MODEL_FROM_DATABASE=Bluetooth (AR3011)
usb:v0CF3p7015*
- ID_MODEL_FROM_DATABASE=TP-Link TL-WN821N v3 802.11n [Atheros AR7010+AR9287]
+ ID_MODEL_FROM_DATABASE=TP-Link TL-WN821N v3 / TL-WN822N v2 802.11n [Atheros AR7010+AR9287]
usb:v0CF3p9170*
ID_MODEL_FROM_DATABASE=AR9170 802.11n
@@ -35024,6 +35507,9 @@ usb:v0D50*
usb:v0D50p0011*
ID_MODEL_FROM_DATABASE=USB-Temp2 Thermometer
+usb:v0D50p0040*
+ ID_MODEL_FROM_DATABASE=F4 foot switch
+
usb:v0D51*
ID_VENDOR_FROM_DATABASE=Volex (Asia) Pte., Ltd
@@ -36578,6 +37064,9 @@ usb:v0E79p1416*
usb:v0E79p1417*
ID_MODEL_FROM_DATABASE=A43 IT
+usb:v0E79p14AD*
+ ID_MODEL_FROM_DATABASE=97 Titanium HD
+
usb:v0E79p150E*
ID_MODEL_FROM_DATABASE=80 G9
@@ -37133,6 +37622,9 @@ usb:v0F53*
usb:v0F54*
ID_VENDOR_FROM_DATABASE=Kawai Musical Instruments Mfg. Co., Ltd
+usb:v0F54p0101*
+ ID_MODEL_FROM_DATABASE=MP6 Stage Piano
+
usb:v0F55*
ID_VENDOR_FROM_DATABASE=AmbiCom, Inc.
@@ -37427,6 +37919,9 @@ usb:v0FCEp015A*
usb:v0FCEp0166*
ID_MODEL_FROM_DATABASE=Xperia Mini Pro
+usb:v0FCEp0167*
+ ID_MODEL_FROM_DATABASE=ST15i (Xperia mini)
+
usb:v0FCEp0169*
ID_MODEL_FROM_DATABASE=Xperia S
@@ -37472,15 +37967,24 @@ usb:v0FCEp3149*
usb:v0FCEp5177*
ID_MODEL_FROM_DATABASE=Xperia Ion [Debug Mode]
+usb:v0FCEp518C*
+ ID_MODEL_FROM_DATABASE=C1605 [Xperia E dual] MTD mode
+
usb:v0FCEp614F*
ID_MODEL_FROM_DATABASE=Xperia X12 (debug mode)
usb:v0FCEp6166*
ID_MODEL_FROM_DATABASE=Xperia Mini Pro
+usb:v0FCEp618C*
+ ID_MODEL_FROM_DATABASE=C1605 [Xperia E dual] MSC mode
+
usb:v0FCEp715A*
ID_MODEL_FROM_DATABASE=Xperia Pro [Tethering]
+usb:v0FCEp7166*
+ ID_MODEL_FROM_DATABASE=Xperia Mini Pro (Tethering mode)
+
usb:v0FCEp7177*
ID_MODEL_FROM_DATABASE=Xperia Ion [Tethering]
@@ -37643,6 +38147,12 @@ usb:v0FD0*
usb:v0FD1*
ID_VENDOR_FROM_DATABASE=Giant Electronics Ltd.
+usb:v0FD2*
+ ID_VENDOR_FROM_DATABASE=Seac Banche
+
+usb:v0FD2p0001*
+ ID_MODEL_FROM_DATABASE=RDS 6000
+
usb:v0FD4*
ID_VENDOR_FROM_DATABASE=Tenovis GmbH & Co., KG
@@ -37811,9 +38321,30 @@ usb:v1004p61C6*
usb:v1004p61CC*
ID_MODEL_FROM_DATABASE=Optimus S
+usb:v1004p61F1*
+ ID_MODEL_FROM_DATABASE=Optimus Android Phone [LG Software mode]
+
+usb:v1004p61F9*
+ ID_MODEL_FROM_DATABASE=V909 G-Slate
+
usb:v1004p61FC*
ID_MODEL_FROM_DATABASE=Optimus 3
+usb:v1004p61FE*
+ ID_MODEL_FROM_DATABASE=Optimus Android Phone [USB tethering mode]
+
+usb:v1004p6300*
+ ID_MODEL_FROM_DATABASE=Optimus Android Phone
+
+usb:v1004p631C*
+ ID_MODEL_FROM_DATABASE=Optimus Android Phone [MTP mode]
+
+usb:v1004p631E*
+ ID_MODEL_FROM_DATABASE=Optimus Android Phone [Camera/PTP mode]
+
+usb:v1004p6356*
+ ID_MODEL_FROM_DATABASE=Optimus Android Phone [Virtual CD mode]
+
usb:v1004p6800*
ID_MODEL_FROM_DATABASE=CDMA Modem
@@ -38027,6 +38558,9 @@ usb:v1038*
usb:v1038p0100*
ID_MODEL_FROM_DATABASE=Zboard
+usb:v1038p1361*
+ ID_MODEL_FROM_DATABASE=Sensei
+
usb:v1039*
ID_VENDOR_FROM_DATABASE=devolo AG
@@ -38174,6 +38708,15 @@ usb:v1050*
usb:v1050p0010*
ID_MODEL_FROM_DATABASE=Yubikey
+usb:v1050p0110*
+ ID_MODEL_FROM_DATABASE=Yubikey NEO OTP
+
+usb:v1050p0111*
+ ID_MODEL_FROM_DATABASE=Yubikey NEO OTP+CCID
+
+usb:v1050p0211*
+ ID_MODEL_FROM_DATABASE=Gnubby
+
usb:v1053*
ID_VENDOR_FROM_DATABASE=Immanuel Electronics Co., Ltd
@@ -38217,7 +38760,10 @@ usb:v1058p070A*
ID_MODEL_FROM_DATABASE=My Passport Essential SE
usb:v1058p071A*
- ID_MODEL_FROM_DATABASE=My Passport 1TB
+ ID_MODEL_FROM_DATABASE=My Passport
+
+usb:v1058p0730*
+ ID_MODEL_FROM_DATABASE=My Passport
usb:v1058p0740*
ID_MODEL_FROM_DATABASE=My Passport
@@ -38573,6 +39119,9 @@ usb:v1082*
usb:v1083*
ID_VENDOR_FROM_DATABASE=Canon Electronics, Inc.
+usb:v1083p161B*
+ ID_MODEL_FROM_DATABASE=DR-2010C Scanner
+
usb:v1083p162C*
ID_MODEL_FROM_DATABASE=P-150 Scanner
@@ -38786,6 +39335,9 @@ usb:v10C4p87BE*
usb:v10C4p8863*
ID_MODEL_FROM_DATABASE=C8051F34x Bootloader
+usb:v10C4p8897*
+ ID_MODEL_FROM_DATABASE=C8051F38x HDMI Splitter [UHBX]
+
usb:v10C4pEA60*
ID_MODEL_FROM_DATABASE=CP210x UART Bridge / myAVR mySmartUSB light
@@ -38822,6 +39374,9 @@ usb:v10CD*
usb:v10CE*
ID_VENDOR_FROM_DATABASE=Silicon Labs
+usb:v10CEp000E*
+ ID_MODEL_FROM_DATABASE=Shinko/Sinfonia CHC-S2145
+
usb:v10CEpEA6A*
ID_MODEL_FROM_DATABASE=MobiData EDGE USB Modem
@@ -38861,6 +39416,9 @@ usb:v10D4*
usb:v10D5*
ID_VENDOR_FROM_DATABASE=Uni Class Technology Co., Ltd
+usb:v10D5p0004*
+ ID_MODEL_FROM_DATABASE=PS/2 Converter
+
usb:v10D5p5552*
ID_MODEL_FROM_DATABASE=KVM Human Interface Composite Device (Keyboard/Mouse ports)
@@ -39578,6 +40136,9 @@ usb:v120Fp5260*
usb:v1210*
ID_VENDOR_FROM_DATABASE=DigiTech
+usb:v1210p0016*
+ ID_MODEL_FROM_DATABASE=RP500 Guitar Multi-Effects Processor
+
usb:v1210p001B*
ID_MODEL_FROM_DATABASE=RP155 Guitar Multi-Effects Processor
@@ -39593,6 +40154,15 @@ usb:v121Ep3403*
usb:v1223*
ID_VENDOR_FROM_DATABASE=SKYCABLE ENTERPRISE. CO., LTD.
+usb:v1228*
+ ID_VENDOR_FROM_DATABASE=Datapaq Limited
+
+usb:v1228p0012*
+ ID_MODEL_FROM_DATABASE=Q18 Data Logger
+
+usb:v1228p0015*
+ ID_MODEL_FROM_DATABASE=TPaq21/MPaq21 Datalogger
+
usb:v1230*
ID_VENDOR_FROM_DATABASE=Chipidea-Microelectronica, S.A.
@@ -40037,6 +40607,9 @@ usb:v12D1p14C8*
usb:v12D1p14C9*
ID_MODEL_FROM_DATABASE=K3770 3G Modem
+usb:v12D1p14CF*
+ ID_MODEL_FROM_DATABASE=K3772
+
usb:v12D1p14D1*
ID_MODEL_FROM_DATABASE=K3770 3G Modem (Mass Storage Mode)
@@ -40050,7 +40623,7 @@ usb:v12D1p1505*
ID_MODEL_FROM_DATABASE=E398 LTE/UMTS/GSM Modem/Networkcard
usb:v12D1p1506*
- ID_MODEL_FROM_DATABASE=E398 LTE/UMTS/GSM Modem/Networkcard
+ ID_MODEL_FROM_DATABASE=Modem/Networkcard
usb:v12D1p150A*
ID_MODEL_FROM_DATABASE=E398 LTE/UMTS/GSM Modem/Networkcard
@@ -40061,6 +40634,9 @@ usb:v12D1p1520*
usb:v12D1p1521*
ID_MODEL_FROM_DATABASE=K4505 HSPA+
+usb:v12D1p155A*
+ ID_MODEL_FROM_DATABASE=R205 Mobile WiFi (CD-ROM mode)
+
usb:v12D1p1805*
ID_MODEL_FROM_DATABASE=AT&T Go Phone U2800A phone
@@ -40070,6 +40646,9 @@ usb:v12D1p1C05*
usb:v12D1p1C0B*
ID_MODEL_FROM_DATABASE=E173s 3G broadband stick (modem off)
+usb:v12D1p1C20*
+ ID_MODEL_FROM_DATABASE=R205 Mobile WiFi (Charging)
+
usb:v12D1p1D50*
ID_MODEL_FROM_DATABASE=ET302s TD-SCDMA/TD-HSDPA Mobile Broadband
@@ -40475,6 +41054,9 @@ usb:v138Ap0018*
usb:v138Ap003C*
ID_MODEL_FROM_DATABASE=VFS471 Fingerprint Reader
+usb:v138Ap003D*
+ ID_MODEL_FROM_DATABASE=VFS491
+
usb:v138E*
ID_VENDOR_FROM_DATABASE=Jungo LTD
@@ -40916,6 +41498,15 @@ usb:v1403*
usb:v1403p0001*
ID_MODEL_FROM_DATABASE=Digital Photo Frame
+usb:v1409*
+ ID_VENDOR_FROM_DATABASE=IDS Imaging Development Systems GmbH
+
+usb:v1409p1000*
+ ID_MODEL_FROM_DATABASE=generic (firmware not loaded yet)
+
+usb:v1409p1485*
+ ID_MODEL_FROM_DATABASE=uEye UI1485
+
usb:v140E*
ID_VENDOR_FROM_DATABASE=Telechips, Inc.
@@ -41069,6 +41660,9 @@ usb:v1446*
usb:v1446p6A73*
ID_MODEL_FROM_DATABASE=Stamps.com Model 510 5LB Scale
+usb:v1446p6A78*
+ ID_MODEL_FROM_DATABASE=DYMO Endicia 75lb Digital Scale
+
usb:v1453*
ID_VENDOR_FROM_DATABASE=Radio Shack
@@ -41183,6 +41777,9 @@ usb:v147ApE03A*
usb:v147ApE03C*
ID_MODEL_FROM_DATABASE=eHome Infrared Receiver
+usb:v147ApE03D*
+ ID_MODEL_FROM_DATABASE=2 Channel Audio
+
usb:v147ApE03E*
ID_MODEL_FROM_DATABASE=Infrared Receiver [IR605A/Q]
@@ -41465,6 +42062,12 @@ usb:v14DD*
usb:v14DDp1007*
ID_MODEL_FROM_DATABASE=D2CIM-VUSB KVM connector
+usb:v14E0*
+ ID_VENDOR_FROM_DATABASE=WiNRADiO Communications
+
+usb:v14E0p0501*
+ ID_MODEL_FROM_DATABASE=WR-G528e 'CHEETAH'
+
usb:v14E1*
ID_VENDOR_FROM_DATABASE=Dialogue Technology Corp.
@@ -41591,6 +42194,9 @@ usb:v152D*
usb:v152Dp0539*
ID_MODEL_FROM_DATABASE=JMS539 SuperSpeed SATA II 3.0G Bridge
+usb:v152Dp0770*
+ ID_MODEL_FROM_DATABASE=Alienware Integrated Webcam
+
usb:v152Dp2329*
ID_MODEL_FROM_DATABASE=JM20329 SATA Bridge
@@ -41651,6 +42257,9 @@ usb:v1532p001C*
usb:v1532p0024*
ID_MODEL_FROM_DATABASE=Razer Mamba
+usb:v1532p002E*
+ ID_MODEL_FROM_DATABASE=RZ01-0058 Gaming Mouse [Naga]
+
usb:v1532p0036*
ID_MODEL_FROM_DATABASE=RZ01-0075, Gaming Mouse [Naga Hex]
@@ -41813,6 +42422,9 @@ usb:v1598*
usb:v15A2*
ID_VENDOR_FROM_DATABASE=Freescale Semiconductor, Inc.
+usb:v15A2p0038*
+ ID_MODEL_FROM_DATABASE=9S08JS Bootloader
+
usb:v15A2p003B*
ID_MODEL_FROM_DATABASE=USB2CAN Application for ColdFire DEMOJM board
@@ -42038,6 +42650,9 @@ usb:v15E4*
usb:v15E4p0024*
ID_MODEL_FROM_DATABASE=Mixtrack
+usb:v15E4p0140*
+ ID_MODEL_FROM_DATABASE=ION VCR 2 PC / Video 2 PC
+
usb:v15E8*
ID_VENDOR_FROM_DATABASE=SohoWare
@@ -43037,6 +43652,9 @@ usb:v16D0p054B*
usb:v16D0p05BE*
ID_MODEL_FROM_DATABASE=EasyLogic Board
+usb:v16D0p06F9*
+ ID_MODEL_FROM_DATABASE=Gabotronics Xminilab
+
usb:v16D0p0753*
ID_MODEL_FROM_DATABASE=Digistump DigiSpark
@@ -43046,6 +43664,9 @@ usb:v16D0p075C*
usb:v16D0p075D*
ID_MODEL_FROM_DATABASE=AB-1.x UAC2 [Audio Widget]
+usb:v16D0p080A*
+ ID_MODEL_FROM_DATABASE=S2E1 Interface
+
usb:v16D3*
ID_VENDOR_FROM_DATABASE=Frontline Test Equipment, Inc.
@@ -43361,6 +43982,12 @@ usb:v1753*
usb:v1753pC901*
ID_MODEL_FROM_DATABASE=PPC900 Pinpad Terminal
+usb:v1756*
+ ID_VENDOR_FROM_DATABASE=ENENSYS Technologies
+
+usb:v1756p0006*
+ ID_MODEL_FROM_DATABASE=DiviPitch
+
usb:v1759*
ID_VENDOR_FROM_DATABASE=LucidPort Technology, Inc.
@@ -43490,12 +44117,21 @@ usb:v17A0p0200*
usb:v17A0p0201*
ID_MODEL_FROM_DATABASE=StudioDock monitors (audio)
+usb:v17A0p0210*
+ ID_MODEL_FROM_DATABASE=StudioGT monitors
+
usb:v17A0p0301*
ID_MODEL_FROM_DATABASE=Q2U handheld microphone with XLR
usb:v17A0p0302*
ID_MODEL_FROM_DATABASE=GoMic compact condenser microphone
+usb:v17A0p0304*
+ ID_MODEL_FROM_DATABASE=Q2U handheld mic with XLR
+
+usb:v17A0p0305*
+ ID_MODEL_FROM_DATABASE=GoMic compact condenser mic
+
usb:v17A0p0310*
ID_MODEL_FROM_DATABASE=Meteor condenser microphone
@@ -43529,6 +44165,12 @@ usb:v17B3*
usb:v17B3p0004*
ID_MODEL_FROM_DATABASE=Linux-USB Midi Gadget
+usb:v17B5*
+ ID_VENDOR_FROM_DATABASE=Lunatone
+
+usb:v17B5p0010*
+ ID_MODEL_FROM_DATABASE=MFT Sensor
+
usb:v17BA*
ID_VENDOR_FROM_DATABASE=SAURIS GmbH
@@ -43610,6 +44252,9 @@ usb:v17E9*
usb:v17E9p0051*
ID_MODEL_FROM_DATABASE=USB VGA Adaptor
+usb:v17E9p030B*
+ ID_MODEL_FROM_DATABASE=HP T100
+
usb:v17E9p0377*
ID_MODEL_FROM_DATABASE=Plugable UD-160-A (M)
@@ -43634,6 +44279,9 @@ usb:v17E9p037D*
usb:v17E9p430A*
ID_MODEL_FROM_DATABASE=HP Port Replicator (Composite Device)
+usb:v17E9p4312*
+ ID_MODEL_FROM_DATABASE=S2340T
+
usb:v17EB*
ID_VENDOR_FROM_DATABASE=Cornice, Inc.
@@ -43646,6 +44294,9 @@ usb:v17EFp1003*
usb:v17EFp1004*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v17EFp1008*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v17EFp100A*
ID_MODEL_FROM_DATABASE=ThinkPad Mini Dock Plus Series 3
@@ -43688,12 +44339,18 @@ usb:v17EFp4814*
usb:v17EFp4815*
ID_MODEL_FROM_DATABASE=Integrated Webcam [R5U877]
+usb:v17EFp4816*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam
+
usb:v17EFp481C*
ID_MODEL_FROM_DATABASE=Integrated Webcam
usb:v17EFp481D*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v17EFp6004*
+ ID_MODEL_FROM_DATABASE=ISD-V4 Tablet Pen
+
usb:v17EFp6007*
ID_MODEL_FROM_DATABASE=Smartcard Keyboard
@@ -43829,6 +44486,9 @@ usb:v1873pEE93*
usb:v187C*
ID_VENDOR_FROM_DATABASE=Alienware Corporation
+usb:v187Cp0511*
+ ID_MODEL_FROM_DATABASE=AlienFX Mobile lighting
+
usb:v187Cp0600*
ID_MODEL_FROM_DATABASE=Dual Compatible Game Pad
@@ -43905,7 +44565,7 @@ usb:v18A5p0237*
ID_MODEL_FROM_DATABASE=Portable Harddrive (500 GB)
usb:v18A5p0302*
- ID_MODEL_FROM_DATABASE=32GB Flash Drive
+ ID_MODEL_FROM_DATABASE=Flash Drive
usb:v18B1*
ID_VENDOR_FROM_DATABASE=Petalynx
@@ -43992,16 +44652,16 @@ usb:v18D1p4E40*
ID_MODEL_FROM_DATABASE=Nexus 7 (fastboot)
usb:v18D1p4E41*
- ID_MODEL_FROM_DATABASE=ASUS Nexus 7 (MTP modus)
+ ID_MODEL_FROM_DATABASE=Nexus 7 (MTP)
usb:v18D1p4E42*
ID_MODEL_FROM_DATABASE=Nexus 7 (debug)
usb:v18D1p4E43*
- ID_MODEL_FROM_DATABASE=ASUS Nexus 7 (PTP modus)
+ ID_MODEL_FROM_DATABASE=Nexus 7 (PTP)
usb:v18D1p4EE1*
- ID_MODEL_FROM_DATABASE=Nexus 4
+ ID_MODEL_FROM_DATABASE=Nexus 4 / 10
usb:v18D1p4EE2*
ID_MODEL_FROM_DATABASE=Nexus 4 (debug)
@@ -44018,6 +44678,12 @@ usb:v18D1p7102*
usb:v18D1pB004*
ID_MODEL_FROM_DATABASE=Pandigital / B&N Novel 9" tablet
+usb:v18D1pD109*
+ ID_MODEL_FROM_DATABASE=LG G2x MTP
+
+usb:v18D1pD10A*
+ ID_MODEL_FROM_DATABASE=LG G2x MTP (debug)
+
usb:v18D5*
ID_VENDOR_FROM_DATABASE=Starline International Group Limited
@@ -44108,6 +44774,9 @@ usb:v1914*
usb:v1915*
ID_VENDOR_FROM_DATABASE=Nordic Semiconductor ASA
+usb:v1915p000C*
+ ID_MODEL_FROM_DATABASE=Wireless Desktop nRF24L01 CX-1766
+
usb:v1915p2233*
ID_MODEL_FROM_DATABASE=Linksys WUSB11 v2.8 802.11b Adapter [Atmel AT76C505]
@@ -44120,6 +44789,12 @@ usb:v1915p2235*
usb:v1915p2236*
ID_MODEL_FROM_DATABASE=Linksys WUSB11 v3.0 802.11b Adapter [Intersil PRISM 3]
+usb:v1923*
+ ID_VENDOR_FROM_DATABASE=FitLinxx
+
+usb:v1923p0002*
+ ID_MODEL_FROM_DATABASE=Personal SyncPoint
+
usb:v1926*
ID_VENDOR_FROM_DATABASE=NextWindow
@@ -44207,6 +44882,9 @@ usb:v1926p0086*
usb:v1926p0087*
ID_MODEL_FROM_DATABASE=1950 HID Touchscreen
+usb:v1926p0DC2*
+ ID_MODEL_FROM_DATABASE=HID Touchscreen
+
usb:v192F*
ID_VENDOR_FROM_DATABASE=Avago Technologies, Pte.
@@ -44300,6 +44978,9 @@ usb:v1951*
usb:v1953*
ID_VENDOR_FROM_DATABASE=Ironkey Inc.
+usb:v1953p0202*
+ ID_MODEL_FROM_DATABASE=S200 2GB Rev. 1
+
usb:v1954*
ID_VENDOR_FROM_DATABASE=Radiient Technologies
@@ -44537,6 +45218,12 @@ usb:v19D2pFFF2*
usb:v19D2pFFF3*
ID_MODEL_FROM_DATABASE=Gobi Wireless Modem
+usb:v19DB*
+ ID_VENDOR_FROM_DATABASE=KFI Printers
+
+usb:v19DBp02F1*
+ ID_MODEL_FROM_DATABASE=NAUT324C
+
usb:v19E1*
ID_VENDOR_FROM_DATABASE=WeiDuan Electronic Accessory (S.Z.) Co., Ltd.
@@ -44567,6 +45254,9 @@ usb:v19FFp0102*
usb:v19FFp0201*
ID_MODEL_FROM_DATABASE=Rocketfish Wireless 2.4G Laser Mouse
+usb:v19FFp0238*
+ ID_MODEL_FROM_DATABASE=DX-WRM1401 Mouse
+
usb:v1A08*
ID_VENDOR_FROM_DATABASE=Bellwood International, Inc.
@@ -44619,7 +45309,7 @@ usb:v1A40*
ID_VENDOR_FROM_DATABASE=Terminus Technology Inc.
usb:v1A40p0101*
- ID_MODEL_FROM_DATABASE=4-Port HUB
+ ID_MODEL_FROM_DATABASE=Hub
usb:v1A40p0201*
ID_MODEL_FROM_DATABASE=FE 2.1 7-port Hub
@@ -44669,6 +45359,12 @@ usb:v1A72p1008*
usb:v1A79*
ID_VENDOR_FROM_DATABASE=Bayer Health Care LLC
+usb:v1A79p6002*
+ ID_MODEL_FROM_DATABASE=Contour
+
+usb:v1A79p7410*
+ ID_MODEL_FROM_DATABASE=Contour Next
+
usb:v1A7B*
ID_VENDOR_FROM_DATABASE=Lumberg Connect GmbH & Co. KG
@@ -44765,6 +45461,12 @@ usb:v1AB1p0588*
usb:v1ACB*
ID_VENDOR_FROM_DATABASE=Salcomp Plc
+usb:v1ACC*
+ ID_VENDOR_FROM_DATABASE=Midiplus Co, Ltd.
+
+usb:v1ACCp0103*
+ ID_MODEL_FROM_DATABASE=AudioLink plus 4x4 2.9.28
+
usb:v1AD1*
ID_VENDOR_FROM_DATABASE=Desay Wire Co., Ltd.
@@ -45191,6 +45893,75 @@ usb:v1B47p0001*
usb:v1B48*
ID_VENDOR_FROM_DATABASE=Plastron Precision Co., Ltd.
+usb:v1B52*
+ ID_VENDOR_FROM_DATABASE=ARH Inc.
+
+usb:v1B52p2101*
+ ID_MODEL_FROM_DATABASE=FXMC Neural Network Controller
+
+usb:v1B52p2102*
+ ID_MODEL_FROM_DATABASE=FXMC Neural Network Controller V2
+
+usb:v1B52p2103*
+ ID_MODEL_FROM_DATABASE=FXMC Neural Network Controller V3
+
+usb:v1B52p4101*
+ ID_MODEL_FROM_DATABASE=Passport Reader CLR device
+
+usb:v1B52p4201*
+ ID_MODEL_FROM_DATABASE=Passport Reader PRM device
+
+usb:v1B52p4202*
+ ID_MODEL_FROM_DATABASE=Passport Reader PRM extension device
+
+usb:v1B52p4203*
+ ID_MODEL_FROM_DATABASE=Passport Reader PRM DSP device
+
+usb:v1B52p4204*
+ ID_MODEL_FROM_DATABASE=Passport Reader PRMC device
+
+usb:v1B52p4205*
+ ID_MODEL_FROM_DATABASE=Passport Reader CSHR device
+
+usb:v1B52p4206*
+ ID_MODEL_FROM_DATABASE=Passport Reader PRMC V2 device
+
+usb:v1B52p4301*
+ ID_MODEL_FROM_DATABASE=Passport Reader MRZ device
+
+usb:v1B52p4302*
+ ID_MODEL_FROM_DATABASE=Passport Reader MRZ DSP device
+
+usb:v1B52p4303*
+ ID_MODEL_FROM_DATABASE=Passport Reader CSLR device
+
+usb:v1B52p4401*
+ ID_MODEL_FROM_DATABASE=Card Reader
+
+usb:v1B52p4501*
+ ID_MODEL_FROM_DATABASE=Passport Reader RFID device
+
+usb:v1B52p4502*
+ ID_MODEL_FROM_DATABASE=Passport Reader RFID AIG device
+
+usb:v1B52p6101*
+ ID_MODEL_FROM_DATABASE=Neural Network Controller
+
+usb:v1B52p6202*
+ ID_MODEL_FROM_DATABASE=Fingerprint Reader device
+
+usb:v1B52p6203*
+ ID_MODEL_FROM_DATABASE=Fingerprint Scanner device
+
+usb:v1B52p8101*
+ ID_MODEL_FROM_DATABASE=Camera V1
+
+usb:v1B52p8102*
+ ID_MODEL_FROM_DATABASE=Recovery / Camera V2
+
+usb:v1B52p8103*
+ ID_MODEL_FROM_DATABASE=Camera V3
+
usb:v1B59*
ID_VENDOR_FROM_DATABASE=K.S. Terminals Inc.
@@ -45344,6 +46115,12 @@ usb:v1BAEp0002*
usb:v1BBB*
ID_VENDOR_FROM_DATABASE=T & A Mobile Phones
+usb:v1BBBp011E*
+ ID_MODEL_FROM_DATABASE=Alcatel One Touch L100V / Telekom Speedstick LTE II
+
+usb:v1BBBpF017*
+ ID_MODEL_FROM_DATABASE=Alcatel One Touch L100V / Telekom Speedstick LTE II
+
usb:v1BC4*
ID_VENDOR_FROM_DATABASE=Ford Motor Co.
@@ -45351,7 +46128,7 @@ usb:v1BC5*
ID_VENDOR_FROM_DATABASE=AVIXE Technology (China) Ltd.
usb:v1BC7*
- ID_VENDOR_FROM_DATABASE=Telit
+ ID_VENDOR_FROM_DATABASE=Telit Wireless Solutions
usb:v1BC7p0020*
ID_MODEL_FROM_DATABASE=HE863
@@ -45359,6 +46136,9 @@ usb:v1BC7p0020*
usb:v1BC7p0021*
ID_MODEL_FROM_DATABASE=HE910
+usb:v1BC7p0023*
+ ID_MODEL_FROM_DATABASE=HE910-D ECM
+
usb:v1BC7p1003*
ID_MODEL_FROM_DATABASE=UC864-E
@@ -45374,6 +46154,12 @@ usb:v1BC7p1006*
usb:v1BC7p1010*
ID_MODEL_FROM_DATABASE=DE910-DUAL
+usb:v1BC7p1011*
+ ID_MODEL_FROM_DATABASE=CE910-DUAL
+
+usb:v1BC7p1200*
+ ID_MODEL_FROM_DATABASE=LE920
+
usb:v1BCE*
ID_VENDOR_FROM_DATABASE=Contac Cable Industrial Limited
@@ -45401,6 +46187,9 @@ usb:v1BCFp2885*
usb:v1BCFp2888*
ID_MODEL_FROM_DATABASE=HP Universal Camera
+usb:v1BCFp2B83*
+ ID_MODEL_FROM_DATABASE=Laptop Integrated Webcam FHD
+
usb:v1BD0*
ID_VENDOR_FROM_DATABASE=Hangzhou Riyue Electronic Co., Ltd.
@@ -45656,6 +46445,9 @@ usb:v1CBEp00FD*
usb:v1CBEp00FF*
ID_MODEL_FROM_DATABASE=Stellaris ROM DFU Bootloader
+usb:v1CBEp0166*
+ ID_MODEL_FROM_DATABASE=CANAL USB2CAN
+
usb:v1CBF*
ID_VENDOR_FROM_DATABASE=FORTAT SKYMARK INDUSTRIAL COMPANY
@@ -45821,6 +46613,12 @@ usb:v1D34p000D*
usb:v1D34p0013*
ID_MODEL_FROM_DATABASE=Dream Cheeky LED Message Board
+usb:v1D45*
+ ID_VENDOR_FROM_DATABASE=Touch
+
+usb:v1D45p1D45*
+ ID_MODEL_FROM_DATABASE=Foxlink Optical touch sensor
+
usb:v1D4D*
ID_VENDOR_FROM_DATABASE=PEGATRON CORPORATION
@@ -45842,6 +46640,9 @@ usb:v1D50p5119*
usb:v1D50p602B*
ID_MODEL_FROM_DATABASE=FPGALink
+usb:v1D50p6053*
+ ID_MODEL_FROM_DATABASE=Darkgame Controller
+
usb:v1D57*
ID_VENDOR_FROM_DATABASE=Xenta
@@ -45908,6 +46709,12 @@ usb:v1D6Bp0105*
usb:v1D6Bp0200*
ID_MODEL_FROM_DATABASE=Qemu Audio Device
+usb:v1D90*
+ ID_VENDOR_FROM_DATABASE=Citizen
+
+usb:v1D90p201E*
+ ID_MODEL_FROM_DATABASE=PPU-700
+
usb:v1DE1*
ID_VENDOR_FROM_DATABASE=Actions Microelectronics Co.
@@ -46037,6 +46844,9 @@ usb:v1E68*
usb:v1E68p001B*
ID_MODEL_FROM_DATABASE=DataStation maxi g.u
+usb:v1E68p0050*
+ ID_MODEL_FROM_DATABASE=DataStation maxi light
+
usb:v1E71*
ID_VENDOR_FROM_DATABASE=NZXT
@@ -46121,9 +46931,18 @@ usb:v1EE8p0014*
usb:v1EF6*
ID_VENDOR_FROM_DATABASE=EADS Deutschland GmbH
+usb:v1EF6p2233*
+ ID_MODEL_FROM_DATABASE=Cassidian NH90 STTE
+
usb:v1EF6p5064*
ID_MODEL_FROM_DATABASE=FDR Interface
+usb:v1EF6p5523*
+ ID_MODEL_FROM_DATABASE=Cassidian SSDC Adapter II
+
+usb:v1EF6p5545*
+ ID_MODEL_FROM_DATABASE=Cassidian SSDC Adapter III
+
usb:v1EF6p5648*
ID_MODEL_FROM_DATABASE=RIU CSMU/BSD
@@ -46139,6 +46958,12 @@ usb:v1F28p0020*
usb:v1F28p0021*
ID_MODEL_FROM_DATABASE=CD INSTALLER USB Device
+usb:v1F3A*
+ ID_VENDOR_FROM_DATABASE=Onda (unverified)
+
+usb:v1F3ApEFE8*
+ ID_MODEL_FROM_DATABASE=V972 tablet in flashing mode
+
usb:v1F44*
ID_VENDOR_FROM_DATABASE=The Neat Company
diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
new file mode 100644
index 0000000000..20d398f7d9
--- /dev/null
+++ b/hwdb/60-keyboard.hwdb
@@ -0,0 +1,1088 @@
+# This file is part of systemd.
+#
+# Keyboard mapping of scan codes to key codes, and
+# scan codes to add to the AT keyboard's 'force-release' list.
+#
+# The lookup keys are composed in:
+# 60-keyboard.rules
+#
+# Note: The format of the "keyboard:" prefix match key is a
+# contract between the rules file and the hardware data, it might
+# change in later revisions to support more or better matches, it
+# is not necessarily expected to be a stable ABI.
+#
+# Supported hardware matches are:
+# - USB keyboards identified by the usb kernel modalias:
+# keyboard:usb:vXXXXpYYYY*
+# XXXX is the 4-digit hex uppercase vendor, and YYYY
+# the 4-digit hex uppercase product.
+#
+# - AT keyboard DMI data matches:
+# keyboard:dmi:bvn*:bvr*:bd*:svn<vendor>:pn<product>:pvr*
+# <vendor> and <product> are the firmware-provided strings
+# exported by the kernel DMI modalias.
+#
+# - Platform driver device name and DMI data match:
+# keyboard:name:<input device name>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
+# <input device name> is the name device specified by the
+# driver, <vendor> is the firmware-provided string exported
+# by the kernel DMI modalias.
+#
+# Scan codes are specified as:
+# KEYBOARD_KEY_<hex scan code>=<key code identifier>
+# The scan code should be expressed in hex lowercase and in
+# full bytes, a multiple of 2 digits. The key codes are retrieved
+# and normalized from the kernel input API header.
+#
+# A '!' as the first charcter of the key identifier string
+# will add the scan code to the AT keyboard's list of scan codes
+# where the driver will synthesize a release event and not expect
+# it to be generated by the hardware.
+#
+# To debug key presses and access scan code mapping data of
+# an input device use the commonly available tool: evtest(1).
+
+##########################################
+# Acer
+##########################################
+
+# Acer platform kernel driver
+keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr*
+ KEYBOARD_KEY_82=f21
+
+# Aspire 5720
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr*
+ KEYBOARD_KEY_84=bluetooth # sent when bluetooth module missing, and key pressed
+ KEYBOARD_KEY_92=media # Acer arcade
+ KEYBOARD_KEY_d4=bluetooth # Bluetooth on
+ KEYBOARD_KEY_d9=bluetooth # Bluetooth off
+ KEYBOARD_KEY_f4=prog3 # e-key
+
+# Aspire 5920g
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:*
+ KEYBOARD_KEY_8a=media
+ KEYBOARD_KEY_92=media
+ KEYBOARD_KEY_a6=setup
+ KEYBOARD_KEY_b2=www
+ KEYBOARD_KEY_d9=bluetooth # (toggle) on-to-off
+
+# Aspire 6920
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:*
+ KEYBOARD_KEY_d9=bluetooth # (toggle) on-to-off
+ KEYBOARD_KEY_92=media
+ KEYBOARD_KEY_9e=back
+ KEYBOARD_KEY_83=rewind
+ KEYBOARD_KEY_89=fastforward
+
+# Aspire 8930
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
+ KEYBOARD_KEY_ca=prog3 # key 'HOLD' on CineDash Media Console
+ KEYBOARD_KEY_83=rewind
+ KEYBOARD_KEY_89=fastforward
+ KEYBOARD_KEY_92=media # key 'ARCADE' on CineDash Media Console
+ KEYBOARD_KEY_9e=back
+
+# Travelmate C300
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
+ KEYBOARD_KEY_67=f24 # FIXME: rotate screen
+ KEYBOARD_KEY_68=up
+ KEYBOARD_KEY_69=down
+ KEYBOARD_KEY_6b=fn
+ KEYBOARD_KEY_6c=screenlock # FIXME: lock tablet device/buttons
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
+keyboard:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
+ KEYBOARD_KEY_a5=help # Fn+F1
+ KEYBOARD_KEY_a6=setup # Fn+F2 Acer eSettings
+ KEYBOARD_KEY_a7=battery # Fn+F3 Power Management
+ KEYBOARD_KEY_a9=switchvideomode # Fn+F5
+ KEYBOARD_KEY_b3=euro
+ KEYBOARD_KEY_b4=dollar
+ KEYBOARD_KEY_ce=brightnessup # Fn+Right
+ KEYBOARD_KEY_d4=bluetooth # (toggle) off-to-on
+ KEYBOARD_KEY_d5=wlan # (toggle) on-to-off
+ KEYBOARD_KEY_d6=wlan # (toggle) off-to-on
+ KEYBOARD_KEY_d7=bluetooth # (toggle) on-to-off
+ KEYBOARD_KEY_d8=bluetooth # (toggle) off-to-on
+ KEYBOARD_KEY_d9=brightnessup # Fn+Right
+ KEYBOARD_KEY_ee=brightnessup # Fn+Right
+ KEYBOARD_KEY_ef=brightnessdown # Fn+Left
+ KEYBOARD_KEY_f1=f22 # Fn+F7 Touchpad toggle (off-to-on)
+ KEYBOARD_KEY_f2=f23 # Fn+F7 Touchpad toggle (on-to-off)
+ KEYBOARD_KEY_f3=prog2 # "P2" programmable button
+ KEYBOARD_KEY_f4=prog1 # "P1" programmable button
+ KEYBOARD_KEY_f5=presentation
+ KEYBOARD_KEY_f8=fn
+ KEYBOARD_KEY_f9=prog1 # Launch NTI shadow
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5220*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5610*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5620*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5720*:pvr*
+ KEYBOARD_KEY_ee=screenlock
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6292*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*8471*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*7720*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1810T*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO751h:*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO531h:*
+ KEYBOARD_KEY_d9=bluetooth
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr*
+ KEYBOARD_KEY_b2=www
+ KEYBOARD_KEY_ee=screenlock
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6593:*
+keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1640:*
+ KEYBOARD_KEY_b2=www
+ KEYBOARD_KEY_ee=screenlock
+
+###########################################################
+# Alienware
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnAlienware*:pn*
+ KEYBOARD_KEY_8a=ejectcd
+
+###########################################################
+# Asus
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnASUS:pn*
+ KEYBOARD_KEY_ed=volumeup
+ KEYBOARD_KEY_ee=volumedown
+ KEYBOARD_KEY_ef=mute
+
+keyboard:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:pvr*
+ KEYBOARD_KEY_6b=f21 # Touchpad Toggle
+
+###########################################################
+# BenQ
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svn*BenQ*:pn*Joybook*R22*:pvr*
+ KEYBOARD_KEY_6e=wlan
+
+###########################################################
+# Compal
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnCOMPAL:pnHEL80I:*
+ KEYBOARD_KEY_84=wlan
+
+###########################################################
+# COMPAQ
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnCompaq*:pn*E500*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnCompaq*:pn*Evo*N*:pvr*
+ KEYBOARD_KEY_a3=www # I key
+ KEYBOARD_KEY_9a=search
+ KEYBOARD_KEY_9e=email
+ KEYBOARD_KEY_9f=homepage
+
+###########################################################
+# Dell
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pn*
+ KEYBOARD_KEY_81=playpause # Play/Pause
+ KEYBOARD_KEY_82=stopcd # Stop
+ KEYBOARD_KEY_83=previoussong # Previous song
+ KEYBOARD_KEY_84=nextsong # Next song
+ KEYBOARD_KEY_85=brightnessdown # Fn+Down Brightness Down
+ KEYBOARD_KEY_86=brightnessup # Fn+Up Brightness Up
+ KEYBOARD_KEY_87=battery # Fn+F3 battery icon
+ KEYBOARD_KEY_88=unknown # Fn+F2 Turn On/Off Wireless - handled in hardware
+ KEYBOARD_KEY_89=ejectclosecd # Fn+F10 Eject CD
+ KEYBOARD_KEY_8a=suspend # Fn+F1 hibernate
+ KEYBOARD_KEY_8b=switchvideomode # Fn+F8 CRT/LCD (high keycode: "displaytoggle")
+ KEYBOARD_KEY_8c=unknown # Fn+Right Auto Brightness
+ KEYBOARD_KEY_8F=switchvideomode # Fn+F7 aspect ratio
+ KEYBOARD_KEY_90=previoussong # Front panel previous song
+ KEYBOARD_KEY_91=prog1 # Wi-Fi Catcher (Dell-specific)
+ KEYBOARD_KEY_92=media # MediaDirect button (house icon)
+ KEYBOARD_KEY_93=unknown # FIXME Fn+Left Auto Brightness
+ KEYBOARD_KEY_95=camera # Shutter button - Takes a picture if optional camera available
+ KEYBOARD_KEY_97=email # Tablet email button
+ KEYBOARD_KEY_98=f21 # FIXME: Tablet screen rotation
+ KEYBOARD_KEY_99=nextsong # Front panel next song
+ KEYBOARD_KEY_9a=setup # Tablet tools button
+ KEYBOARD_KEY_9b=switchvideomode # Display toggle button
+ KEYBOARD_KEY_9e=f21 # Touchpad toggle
+ KEYBOARD_KEY_a2=playpause # Front panel play/pause
+ KEYBOARD_KEY_a4=stopcd # Front panel stop
+ KEYBOARD_KEY_ed=media # MediaDirect button
+ KEYBOARD_KEY_d8=screenlock # FIXME: Tablet lock button
+ KEYBOARD_KEY_d9=f21 # Touchpad toggle
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*910:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*101[012]:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1110:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1210:pvr*
+ KEYBOARD_KEY_84=wlan
+
+# Latitude XT2
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*XT2:pvr*
+ KEYBOARD_KEY_9b=up # tablet rocker up
+ KEYBOARD_KEY_9e=enter # tablet rocker press
+ KEYBOARD_KEY_9f=back # tablet back
+ KEYBOARD_KEY_a3=down # tablet rocker down
+
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnStudio*155[78]:pvr*
+ KEYBOARD_KEY_a0=! # mute
+ KEYBOARD_KEY_ae=! # volume down
+ KEYBOARD_KEY_b0=! # volume up
+
+# Dell Touchpad
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:pvr*
+ KEYBOARD_KEY_9e=!f21
+
+# Dell XPS
+keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS*:pvr*
+ KEYBOARD_KEY_8c=!unknown
+
+###########################################################
+# Everex
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnEverex:pnXT5000*:pvr*
+ KEYBOARD_KEY_5c=media
+ KEYBOARD_KEY_65=f21 # Fn+F5 Touchpad toggle
+ KEYBOARD_KEY_67=prog3 # Fan speed control button
+ KEYBOARD_KEY_6f=brightnessup
+ KEYBOARD_KEY_7f=brightnessdown
+ KEYBOARD_KEY_b2=www
+ KEYBOARD_KEY_ec=mail
+
+##########################################
+# Fujitsu
+##########################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pnAMILO*M*:pvr*
+ KEYBOARD_KEY_97=prog2
+ KEYBOARD_KEY_9f=prog1
+
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pnAmilo*Li*1718:*
+ KEYBOARD_KEY_d6=wlan
+
+# Amilo Li 2732
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pnAMILO*Li*2732:*
+ KEYBOARD_KEY_d9=brightnessdown # Fn+F8 brightness down
+ KEYBOARD_KEY_ef=brightnessup # Fn+F9 brightness up
+ KEYBOARD_KEY_a9=switchvideomode # Fn+F10 Cycle between available video outputs
+
+# Amilo Pa 2548
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*AMILO*Pa*2548*:pvr*
+ KEYBOARD_KEY_e0=volumedown
+ KEYBOARD_KEY_e1=volumeup
+ KEYBOARD_KEY_e5=prog1
+
+# Amilo Pro Edition V3505
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*AMILO*Pro*Edition*V3505*:pvr*
+ KEYBOARD_KEY_a5=help # Fn+F1
+ KEYBOARD_KEY_a9=switchvideomode # Fn+F3
+ KEYBOARD_KEY_d9=brightnessdown # Fn+F8
+ KEYBOARD_KEY_e0=brightnessup # Fn+F9
+
+# Amilo Pro v3205
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*AMILO*Pro*V3205*:pvr*
+ KEYBOARD_KEY_f4=f21 # FIXME: silent-mode decrease CPU/GPU clock
+ KEYBOARD_KEY_f7=switchvideomode # Fn+F3
+
+# Amilo Si 1520
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*Amilo*Si*1520*:pvr*
+ KEYBOARD_KEY_e1=wlan
+ KEYBOARD_KEY_f3=wlan
+ KEYBOARD_KEY_ee=brightnessdown
+ KEYBOARD_KEY_e0=brightnessup
+ KEYBOARD_KEY_e2=bluetooth
+ KEYBOARD_KEY_f7=video
+
+# Esprimo Mobile V5
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*ESPRIMO*Mobile*V5*:pvr*
+ KEYBOARD_KEY_a9=switchvideomode
+ KEYBOARD_KEY_d9=brightnessdown
+ KEYBOARD_KEY_df=sleep
+ KEYBOARD_KEY_ef=brightnessup
+
+# Esprimo Mobile V6
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*ESPRIMO*Mobile*V6*:pvr*
+ KEYBOARD_KEY_ce=brightnessup
+ KEYBOARD_KEY_ef=brightnessdown
+
+###########################################################
+# GIGABYTE
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pnU2442:*
+ KEYBOARD_KEY_a0=! # mute
+
+###########################################################
+# Genius
+###########################################################
+
+# Slimstar 320
+keyboard:usb:v0458p0708d*dc*dsc*dp*ic*isc*ip*in01*
+ KEYBOARD_KEY_0900f0=scrollup
+ KEYBOARD_KEY_0900f1=scrolldown
+ KEYBOARD_KEY_0900f3=back
+ KEYBOARD_KEY_0900f2=forward
+ KEYBOARD_KEY_0900f5=wordprocessor
+ KEYBOARD_KEY_0900f6=spreadsheet
+ KEYBOARD_KEY_0900f4=presentation
+ KEYBOARD_KEY_0c0223=www
+ KEYBOARD_KEY_0900f7=chat
+ KEYBOARD_KEY_0900fb=prog1
+ KEYBOARD_KEY_0900f8=close
+ KEYBOARD_KEY_0900f9=graphicseditor
+ KEYBOARD_KEY_0900fd=scale
+ KEYBOARD_KEY_0900fc=screenlock
+
+###########################################################
+# Hewlett Packard
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:pvr*
+ KEYBOARD_KEY_81=fn_esc
+ KEYBOARD_KEY_89=battery # Fn+F8
+ KEYBOARD_KEY_8a=screenlock # Fn+F6
+ KEYBOARD_KEY_8b=camera
+ KEYBOARD_KEY_8c=media # music
+ KEYBOARD_KEY_8e=dvd
+ KEYBOARD_KEY_b1=help
+ KEYBOARD_KEY_b3=unknown # FIXME: Auto brightness
+ KEYBOARD_KEY_d7=wlan
+ KEYBOARD_KEY_92=brightnessdown # Fn+F7 (Fn+F9 on 6730b)
+ KEYBOARD_KEY_97=brightnessup # Fn+F8 (Fn+F10 on 6730b)
+ KEYBOARD_KEY_ee=switchvideomode # Fn+F4
+
+# Tablet
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][aA][bB][lL][eE][tT]*:pvr*
+ KEYBOARD_KEY_82=prog2 # Funny Key
+ KEYBOARD_KEY_83=prog1 # Q
+ KEYBOARD_KEY_84=tab
+ KEYBOARD_KEY_85=esc
+ KEYBOARD_KEY_86=pageup
+ KEYBOARD_KEY_87=pagedown
+
+# Pavilion
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*:pvr*
+ KEYBOARD_KEY_88=media # FIXME: quick play
+ KEYBOARD_KEY_b7=print
+ KEYBOARD_KEY_d8=!f23 # touchpad off
+ KEYBOARD_KEY_d9=!f22 # touchpad on
+
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*Pavilion*dv7*Notebook*PC:pvr*
+ KEYBOARD_KEY_b7=print
+ KEYBOARD_KEY_c2=media # FIXME: quick play
+ KEYBOARD_KEY_c6=break
+ KEYBOARD_KEY_94=0
+
+# Elitebook
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*Compaq*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*EliteBook*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2230s*:pvr*
+ KEYBOARD_KEY_88=presentation
+ KEYBOARD_KEY_d9=help # I key (high keycode: "info")
+
+# Presario
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*Presario*CQ*:pvr*
+ KEYBOARD_KEY_d8=f21
+ KEYBOARD_KEY_d9=f21
+
+# 2510p 2530p
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2510p*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2530p*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*G60*Notebook*PC:pvr*
+ KEYBOARD_KEY_d8=!f23 # touchpad off
+ KEYBOARD_KEY_d9=!f22 # touchpad on
+
+# 2570p
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:pvr*
+ KEYBOARD_KEY_f8=wlan # Wireless HW switch button
+
+# TX2
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:pvr*
+ KEYBOARD_KEY_c2=media
+ KEYBOARD_KEY_d8=!f23 # Toggle touchpad button on tx2 (OFF)
+ KEYBOARD_KEY_d9=!f22 # Toggle touchpad button on tx2 (ON)
+
+# Presario 2100
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnPresario*2100*:pvr*
+ KEYBOARD_KEY_f0=help
+ KEYBOARD_KEY_f1=screenlock
+ KEYBOARD_KEY_f3=search
+
+# Elitebook 8440p
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*EliteBook*8440p:pvr*
+ KEYBOARD_KEY_88=www
+ KEYBOARD_KEY_a0=mute
+ KEYBOARD_KEY_ae=volumedown
+ KEYBOARD_KEY_b0=volumeup
+ KEYBOARD_KEY_ec=mail
+
+# Elitebook 8460p
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*EliteBook*8460p:pvr*
+ KEYBOARD_KEY_f8=wlan # Wireless HW switch button
+ KEYBOARD_KEY_b3=prog1 # Fn+F11 - Ambient Light Sensor button
+ KEYBOARD_KEY_b1=prog2 # Fn+ESC - System information button
+
+# HDX9494nr
+keyboard:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHDX9494NR:pvr*
+ KEYBOARD_KEY_b2=www # Fn+F3
+ KEYBOARD_KEY_d8=!f23 # touchpad off
+ KEYBOARD_KEY_d9=!f22 # touchpad on
+
+###########################################################
+# IBM
+###########################################################
+
+# thinkpad_acpi driver
+keyboard:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnIBM*:pn*:pvr*
+ KEYBOARD_KEY_01=battery # Fn+F2
+ KEYBOARD_KEY_02=screenlock # Fn+F3
+ KEYBOARD_KEY_03=sleep # Fn+F4
+ KEYBOARD_KEY_04=wlan # Fn+F5
+ KEYBOARD_KEY_06=switchvideomode # Fn+F7
+ KEYBOARD_KEY_07=zoom # Fn+F8 screen expand
+ KEYBOARD_KEY_08=f24 # Fn+F9 undock
+ KEYBOARD_KEY_0b=suspend # Fn+F12
+ KEYBOARD_KEY_0f=brightnessup # Fn+Home
+ KEYBOARD_KEY_10=brightnessdown # Fn+End
+ KEYBOARD_KEY_11=kbdillumtoggle # Fn+PgUp - ThinkLight
+ KEYBOARD_KEY_13=zoom # Fn+Space
+ KEYBOARD_KEY_14=volumeup
+ KEYBOARD_KEY_15=volumedown
+ KEYBOARD_KEY_16=mute
+ KEYBOARD_KEY_17=prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor")
+
+# IBM Thinkpad USB Keyboard Trackpoint
+keyboard:usb:v04B3p301[89]*
+ KEYBOARD_KEY_900f0=screenlock
+ KEYBOARD_KEY_900f1=wlan
+ KEYBOARD_KEY_900f2=switchvideomode
+ KEYBOARD_KEY_900f3=suspend
+ KEYBOARD_KEY_900f4=brightnessup
+ KEYBOARD_KEY_900f5=brightnessdown
+ KEYBOARD_KEY_900f8=zoom
+
+###########################################################
+# Inventec
+###########################################################
+
+# Symphony
+keyboard:dmi:bvn*:bvr*:bd*:svnINVENTEC:pnSYMPHONY*6.0/7.0:pvr*
+ KEYBOARD_KEY_f3=prog2
+ KEYBOARD_KEY_f4=prog1
+
+###########################################################
+# Lenovo
+###########################################################
+
+# thinkpad_acpi driver
+keyboard:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
+ KEYBOARD_KEY_01=screenlock
+ KEYBOARD_KEY_02=battery
+ KEYBOARD_KEY_03=sleep
+ KEYBOARD_KEY_04=wlan
+ KEYBOARD_KEY_06=switchvideomode
+ KEYBOARD_KEY_07=f21
+ KEYBOARD_KEY_08=f24
+ KEYBOARD_KEY_0b=suspend
+ KEYBOARD_KEY_0f=brightnessup
+ KEYBOARD_KEY_10=brightnessdown
+ KEYBOARD_KEY_11=kbdillumtoggle
+ KEYBOARD_KEY_13=zoom
+ KEYBOARD_KEY_14=volumeup
+ KEYBOARD_KEY_15=volumedown
+ KEYBOARD_KEY_16=mute
+ KEYBOARD_KEY_17=prog1
+ KEYBOARD_KEY_1a=f20
+
+#
+keyboard:name:Ideapad extra buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
+ KEYBOARD_KEY_42=f23
+ KEYBOARD_KEY_43=f22
+
+# ThinkPad Keyboard with TrackPoint
+keyboard:usb:v17EFp6009*
+ KEYBOARD_KEY_090012=screenlock # Fn+F2
+ KEYBOARD_KEY_090013=battery # Fn+F3
+ KEYBOARD_KEY_090014=wlan # Fn+F5
+ KEYBOARD_KEY_090016=switchvideomode # Fn+F7
+ KEYBOARD_KEY_090017=f21 # Fn+F8 touchpad toggle
+ KEYBOARD_KEY_090019=suspend # Fn+F12
+ KEYBOARD_KEY_09001a=brightnessup # Fn+Home
+ KEYBOARD_KEY_09001b=brightnessdown # Fn+End
+ KEYBOARD_KEY_09001d=zoom # Fn+Space
+ KEYBOARD_KEY_090011=prog1 # ThinkVantage button
+ KEYBOARD_KEY_090015=camera # Fn+F6 headset/camera VoIP key ??
+ KEYBOARD_KEY_090010=f20 # Microphone mute button; should be micmute
+
+# Lenovo 3000
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*3000*:pvr*
+ KEYBOARD_KEY_8b=switchvideomode # Fn+F7 video
+ KEYBOARD_KEY_96=wlan # Fn+F5 wireless
+ KEYBOARD_KEY_97=sleep # Fn+F4 suspend
+ KEYBOARD_KEY_98=suspend # Fn+F12 hibernate
+ KEYBOARD_KEY_b4=prog1 # Lenovo Care
+
+# lenovo-ideapad
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr*
+ KEYBOARD_KEY_81=rfkill # does nothing in BIOS
+ KEYBOARD_KEY_83=display_off # BIOS toggles screen state
+ KEYBOARD_KEY_b9=brightnessup # does nothing in BIOS
+ KEYBOARD_KEY_ba=brightnessdown # does nothing in BIOS
+ KEYBOARD_KEY_f1=camera # BIOS toggles camera power
+ KEYBOARD_KEY_f2=f21 # touchpad toggle (key alternately emits F2 and F3)
+ KEYBOARD_KEY_f3=f21
+
+# Thinkpad X200_Tablet
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X2*Tablet*:pvr*
+ KEYBOARD_KEY_5d=menu
+ KEYBOARD_KEY_63=fn
+ KEYBOARD_KEY_66=screenlock
+ KEYBOARD_KEY_67=cyclewindows # bezel circular arrow
+ KEYBOARD_KEY_68=setup # bezel setup / menu
+ KEYBOARD_KEY_6c=direction # rotate screen
+
+# ThinkPad X6 Tablet
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X6*:pvr*
+ KEYBOARD_KEY_6c=f21 # rotate
+ KEYBOARD_KEY_68=screenlock # screenlock
+ KEYBOARD_KEY_6b=esc # escape
+ KEYBOARD_KEY_6d=right # right on d-pad
+ KEYBOARD_KEY_6e=left # left on d-pad
+ KEYBOARD_KEY_71=up # up on d-pad
+ KEYBOARD_KEY_6f=down # down on d-pad
+ KEYBOARD_KEY_69=enter # enter on d-pad
+
+# IdeaPad
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*Y550*:pvr*
+ KEYBOARD_KEY_95=media
+ KEYBOARD_KEY_a3=play
+
+# V480
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:pvr*
+ KEYBOARD_KEY_f1=f21
+
+# IdeaPad
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*U300s*:pvr*
+ KEYBOARD_KEY_f1=f21
+ KEYBOARD_KEY_ce=f20
+
+###########################################################
+# Logitech
+###########################################################
+
+# iTouch
+keyboard:usb:v046DpC308*
+ KEYBOARD_KEY_90001=shop # Shopping
+ KEYBOARD_KEY_90002=config # iTouch
+ KEYBOARD_KEY_90003=finance # Finance
+ KEYBOARD_KEY_90004=prog1 # My Sites
+ KEYBOARD_KEY_90005=prog2 # Community
+ KEYBOARD_KEY_C0183=media # Media
+
+# Cordless Desktop S510
+keyboard:usb:v046DpC50C*
+ KEYBOARD_KEY_d4=zoomin
+ KEYBOARD_KEY_cc=zoomout
+
+# Wave cordless
+keyboard:usb:v046DpC317*
+ KEYBOARD_KEY_9001c=scale # expo
+ KEYBOARD_KEY_9001f=zoomout
+ KEYBOARD_KEY_90020=zoomin
+ KEYBOARD_KEY_9003d=prog1 # gadget
+ KEYBOARD_KEY_90005=camera
+ KEYBOARD_KEY_90018=media
+ KEYBOARD_KEY_90041=wordprocessor
+ KEYBOARD_KEY_90042=spreadsheet
+ KEYBOARD_KEY_90043=calendar
+ KEYBOARD_KEY_90044=prog2 # fn+f4 (program a)
+ KEYBOARD_KEY_90045=prog3 # fn+f5 (program b)
+ KEYBOARD_KEY_90046=prog4 # fn+f6 (program c)
+ KEYBOARD_KEY_90048=messenger # fn+f8 (msn messenger)
+ KEYBOARD_KEY_9002d=search # fn+f10 (search www)
+ KEYBOARD_KEY_9004b=find # fn+f11 (search pc)
+ KEYBOARD_KEY_9004c=ejectclosecd
+
+# Wave cordless
+keyboard:usb:v046DpC517*
+ KEYBOARD_KEY_c101f=zoomout
+ KEYBOARD_KEY_c1020=zoomin
+ KEYBOARD_KEY_c1005=camera
+ KEYBOARD_KEY_c0183=media
+ KEYBOARD_KEY_c1041=wordprocessor
+ KEYBOARD_KEY_c1042=spreadsheet
+ KEYBOARD_KEY_c1043=calendar
+ KEYBOARD_KEY_c1044=prog2 # fn+f4 (program a)
+ KEYBOARD_KEY_c1045=prog3 # fn+f5 (program b)
+ KEYBOARD_KEY_c1046=prog4 # fn+f6 (program c)
+ KEYBOARD_KEY_c1048=messenger # fn+f8 (msn messenger)
+ KEYBOARD_KEY_c104a=find # fn+f10 (search www)
+ KEYBOARD_KEY_c104c=ejectclosecd
+
+# Cordless Wave Pro
+keyboard:usb:v046DpC52[9B]*
+ KEYBOARD_KEY_0c01b6=camera
+ KEYBOARD_KEY_0c0183=media
+ KEYBOARD_KEY_0c0184=wordprocessor
+ KEYBOARD_KEY_0c0186=spreadsheet
+ KEYBOARD_KEY_0c018e=calendar
+ KEYBOARD_KEY_0c0223=homepage
+ KEYBOARD_KEY_0c01bc=messenger
+ KEYBOARD_KEY_0c018a=mail
+ KEYBOARD_KEY_0c0221=search
+ KEYBOARD_KEY_0c00b8=ejectcd
+ KEYBOARD_KEY_0c022d=zoomin
+ KEYBOARD_KEY_0c022e=zoomout
+
+# Logitech Presenter R400
+keyboard:usb:v046DpC52Dd*dc*dsc*dp*ic*isc*ip*in00*
+ KEYBOARD_KEY_070029=presentation
+ KEYBOARD_KEY_07003e=presentation
+ KEYBOARD_KEY_070037=displaytoggle
+
+# Internet Navigator
+keyboard:usb:v046DpC309*
+ KEYBOARD_KEY_90001=chat # Messenger/SMS
+ KEYBOARD_KEY_90002=camera # webcam
+ KEYBOARD_KEY_90003=prog1 # iTouch
+ KEYBOARD_KEY_90004=shop # Shopping
+ KEYBOARD_KEY_C0201=new # New (F1)
+ KEYBOARD_KEY_C0289=reply # Reply mail (F2)
+ KEYBOARD_KEY_C028B=forwardmail # Forward mail (F3)
+ KEYBOARD_KEY_C028C=send # Send (F4)
+ KEYBOARD_KEY_C021A=undo # Undo (F5).
+ KEYBOARD_KEY_C0279=redo # Redo (F6).
+ KEYBOARD_KEY_C0208=print # Print (F7)
+ KEYBOARD_KEY_C0207=save # Save (F8)
+ KEYBOARD_KEY_C0194=file # My Computer (F9)
+ KEYBOARD_KEY_C01A7=documents # My Documents (F10)
+ KEYBOARD_KEY_C01B6=images # My Pictures (F11) ??
+ KEYBOARD_KEY_C01B7=sound # My Music (F12) ??
+
+
+###########################################################
+# Maxdata
+###########################################################
+
+# Pro 7000
+keyboard:dmi:bvn*:bvr*:bd*:svnMAXDATA:pnPro*7000*:pvr*
+ KEYBOARD_KEY_97=prog2
+ KEYBOARD_KEY_9f=prog1
+ KEYBOARD_KEY_a0=mute # Fn+F5
+ KEYBOARD_KEY_82=www
+ KEYBOARD_KEY_ec=email
+ KEYBOARD_KEY_ae=volumedown # Fn+Down
+ KEYBOARD_KEY_b0=volumeup # Fn+Up
+ KEYBOARD_KEY_df=suspend # Fn+F2
+ KEYBOARD_KEY_f5=help
+
+###########################################################
+# Medion
+###########################################################
+
+# FID2060
+keyboard:dmi:bvn*:bvr*:bd*:svnMEDION*:pn*FID2060*:pvr*
+ KEYBOARD_KEY_6b=channeldown # Thottle Down
+ KEYBOARD_KEY_6d=channelup # Thottle Up
+
+# NB-A555
+keyboard:dmi:bvn*:bvr*:bd*:svnMEDIONNB:pnA555*:pvr*
+ KEYBOARD_KEY_63=www # N button
+ KEYBOARD_KEY_66=prog1 # link 1 button
+ KEYBOARD_KEY_67=email # envelope button
+ KEYBOARD_KEY_69=prog2 # link 2 button
+
+###########################################################
+# Microsoft
+###########################################################
+
+# Microsoft Natural Ergonomic Keyboard 4000
+keyboard:usb:v045Ep00DB*
+ KEYBOARD_KEY_c022d=zoomin
+ KEYBOARD_KEY_c022e=zoomout
+
+###########################################################
+# Micro Star
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*
+keyboard:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*
+ KEYBOARD_KEY_a0=mute # Fn+F9
+ KEYBOARD_KEY_ae=volumedown # Fn+F7
+ KEYBOARD_KEY_b0=volumeup # Fn+F8
+ KEYBOARD_KEY_b2=www # e button
+ KEYBOARD_KEY_df=sleep # Fn+F12
+ KEYBOARD_KEY_e2=bluetooth # satellite dish2
+ KEYBOARD_KEY_e4=f21 # Fn+F3 Touchpad disable
+ KEYBOARD_KEY_ec=email # envelope button
+ KEYBOARD_KEY_ee=camera # Fn+F6 camera disable
+ KEYBOARD_KEY_f6=wlan # satellite dish1
+ KEYBOARD_KEY_f7=brightnessdown # Fn+F4
+ KEYBOARD_KEY_f8=brightnessup # Fn+F5
+ KEYBOARD_KEY_f9=search
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE60*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE70*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*:pvr*
+ KEYBOARD_KEY_c2=ejectcd
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*U-100*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*U100*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*N033:*
+ KEYBOARD_KEY_f7=reserved
+ KEYBOARD_KEY_f8=reserved
+
+#
+keyboard:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnU90/U100:*
+ KEYBOARD_KEY_e4=reserved
+
+###########################################################
+# MSI
+###########################################################
+
+keyboard:name:MSI Laptop hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnM[iI][cC][rR][oO]-S[tT][aA][rR]*:pvr*
+ KEYBOARD_KEY_0213=f22
+ KEYBOARD_KEY_0214=f23
+
+###########################################################
+# OLPC
+###########################################################
+
+# XO
+keyboard:dmi:bvn*:bvr*:bd*:svnOLPC:pnXO:*
+ KEYBOARD_KEY_59=fn
+ KEYBOARD_KEY_81=fn_esc
+ KEYBOARD_KEY_f9=camera
+ KEYBOARD_KEY_f8=sound # Fn+CAMERA = Mic
+ KEYBOARD_KEY_43=brightnessdown
+ KEYBOARD_KEY_44=brightnessup
+ KEYBOARD_KEY_57=volumedown
+ KEYBOARD_KEY_58=volumeup
+ KEYBOARD_KEY_bb=f1
+ KEYBOARD_KEY_bc=f2
+ KEYBOARD_KEY_bd=f3
+ KEYBOARD_KEY_be=f4
+ KEYBOARD_KEY_bf=f5
+ KEYBOARD_KEY_c0=f6
+ KEYBOARD_KEY_c1=f7
+ KEYBOARD_KEY_c2=f8
+ KEYBOARD_KEY_c3=f9
+ KEYBOARD_KEY_c4=f10
+ KEYBOARD_KEY_c7=f11
+ KEYBOARD_KEY_d8=f12
+ KEYBOARD_KEY_f7=f13
+ KEYBOARD_KEY_f6=f14
+ KEYBOARD_KEY_f5=f15
+ KEYBOARD_KEY_f4=f16
+ KEYBOARD_KEY_f3=f17
+ KEYBOARD_KEY_f2=f18
+ KEYBOARD_KEY_f1=f19
+ KEYBOARD_KEY_f0=f20
+ KEYBOARD_KEY_ef=f21
+ KEYBOARD_KEY_ee=chat
+ KEYBOARD_KEY_e4=chat
+ KEYBOARD_KEY_dd=menu # Frame
+ KEYBOARD_KEY_da=prog1 # Fn+Frame
+ KEYBOARD_KEY_d3=delete
+ KEYBOARD_KEY_d2=insert
+ KEYBOARD_KEY_c9=pageup
+ KEYBOARD_KEY_d1=pagedown
+ KEYBOARD_KEY_c7=home
+ KEYBOARD_KEY_cF=end
+ KEYBOARD_KEY_73=hp
+ KEYBOARD_KEY_7e=hp
+ KEYBOARD_KEY_db=leftmeta # left grab
+ KEYBOARD_KEY_dc=rightmeta # right grab
+ KEYBOARD_KEY_85=rightmeta # Right grab releases on a different scancode
+ KEYBOARD_KEY_d6=kbdillumtoggle # Fn+Space
+ KEYBOARD_KEY_69=switchvideomode # Brightness key
+ KEYBOARD_KEY_65=kp8 # up
+ KEYBOARD_KEY_66=kp2 # down
+ KEYBOARD_KEY_67=kp4 # left
+ KEYBOARD_KEY_68=kp6 # right
+ KEYBOARD_KEY_e5=kp9 # pgup
+ KEYBOARD_KEY_e6=kp3 # pgdn
+ KEYBOARD_KEY_e7=kp7 # home
+ KEYBOARD_KEY_e8=kp1 # end
+
+###########################################################
+# Onkyo
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnONKYO*CORPORATION:pnONKYOPC:*
+ KEYBOARD_KEY_a0=mute # Fn+D
+ KEYBOARD_KEY_ae=volumedown # Fn+F
+ KEYBOARD_KEY_b0=volumeup # Fn+G
+ KEYBOARD_KEY_df=sleep # Fn+W
+ KEYBOARD_KEY_e0=bluetooth # Fn+H
+ KEYBOARD_KEY_e2=cyclewindows # Fn+Esc
+ KEYBOARD_KEY_ee=battery # Fn+Q
+ KEYBOARD_KEY_f0=media # Fn+R
+ KEYBOARD_KEY_f5=switchvideomode # Fn+E
+ KEYBOARD_KEY_f6=camera # Fn+T
+ KEYBOARD_KEY_f7=f21 # Fn+Y (touchpad toggle)
+ KEYBOARD_KEY_f8=brightnessup # Fn+S
+ KEYBOARD_KEY_f9=brightnessdown # Fn+A
+ KEYBOARD_KEY_fb=wlan # Fn+J
+
+###########################################################
+# OQO
+###########################################################
+
+# Model 2
+keyboard:dmi:bvn*:bvr*:bd*:svnOQO*Inc.*:pnOQO*Model*2*:pvr*
+ KEYBOARD_KEY_8e=wlan
+ KEYBOARD_KEY_f0=switchvideomode
+ KEYBOARD_KEY_f1=mute
+ KEYBOARD_KEY_f2=volumedown
+ KEYBOARD_KEY_f3=volumeup
+
+###########################################################
+# Quanta
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*:rvnQuanta:rn30B7:rvr65.2B:*
+ KEYBOARD_KEY_88=media # "quick play
+
+###########################################################
+# Samsung
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*
+ KEYBOARD_KEY_74=prog1 # User key
+ KEYBOARD_KEY_75=www
+ KEYBOARD_KEY_78=mail
+ KEYBOARD_KEY_82=!switchvideomode # Fn+F4 CRT/LCD (high keycode: "displaytoggle")
+ KEYBOARD_KEY_83=!battery # Fn+F2
+ KEYBOARD_KEY_84=!prog1 # Fn+F5 backlight on/off
+ KEYBOARD_KEY_86=!wlan # Fn+F9
+ KEYBOARD_KEY_88=!brightnessup # Fn+Up
+ KEYBOARD_KEY_89=!brightnessdown # Fn+Down
+ KEYBOARD_KEY_b1=!prog2 # Fn+F7 run Samsung Magic Doctor (keypressed event is generated twice)
+ KEYBOARD_KEY_b3=!prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
+ KEYBOARD_KEY_b4=!wlan # Fn+F9 (X60P)
+ KEYBOARD_KEY_c5=!prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
+ KEYBOARD_KEY_d5=!wlan # Fn+F12 wlan/airplane switch
+ KEYBOARD_KEY_f7=!f22 # Fn+F10 Touchpad on
+ KEYBOARD_KEY_f9=!f23 # Fn+F10 Touchpad off
+
+# Series 3
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*300E[457]*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*200E[45]*:pvr*
+ KEYBOARD_KEY_ce=! # Fn+F1 launch control setting
+
+# Series 5
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*530U*:pvr*
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
+ KEYBOARD_KEY_a8=! # Fn Lock - Function lock on
+ KEYBOARD_KEY_a9=! # Fn Lock - Function lock off
+
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr*
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
+ KEYBOARD_KEY_a8=! # Fn Lock - Function lock on
+ KEYBOARD_KEY_a9=! # Fn Lock - Function lock off
+
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr*
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
+ KEYBOARD_KEY_a0=!mute # Fn+F6 mute
+ KEYBOARD_KEY_ae=!volumedown # Fn+F7
+ KEYBOARD_KEY_b0=!volumeup # Fn+F8
+ KEYBOARD_KEY_97=!kbdillumdown # Fn+F9 keyboard backlight down
+ KEYBOARD_KEY_96=!kbdillumup # Fn+F10 keyboard backlight up
+ KEYBOARD_KEY_b3=!prog3 # Fn+F11 fan/cooling mode changer
+
+# Series 9
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34]*:pvr*
+ KEYBOARD_KEY_ce=! # Fn+F8 keyboard backlight up
+ KEYBOARD_KEY_8d=! # Fn+F7 keyboard backlight down
+ KEYBOARD_KEY_96=! # Fn+F1 performance mode (?)
+ KEYBOARD_KEY_97=! # Fn+F12 Wi-Fi toggle
+ KEYBOARD_KEY_d5=! # Fn+F6 battery life extender
+
+# SQ1US
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pnSQ1US:pvr*
+ KEYBOARD_KEY_d4=menu
+ KEYBOARD_KEY_d8=f1
+ KEYBOARD_KEY_d9=f10
+ KEYBOARD_KEY_d6=f3
+ KEYBOARD_KEY_d7=f9
+ KEYBOARD_KEY_e4=f5
+ KEYBOARD_KEY_ee=f11
+
+# SX20S
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:pvr*
+ KEYBOARD_KEY_74=mute
+ KEYBOARD_KEY_75=mute
+ KEYBOARD_KEY_77=f22 # Touchpad on
+ KEYBOARD_KEY_79=f23 # Touchpad off
+
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr*
+ KEYBOARD_KEY_ba=ejectcd
+ KEYBOARD_KEY_96=keyboardbrightnessup
+ KEYBOARD_KEY_97=keyboardbrightnessdown
+
+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr*
+ KEYBOARD_KEY_ad=leftmeta
+
+###########################################################
+# SONY
+###########################################################
+
+# sony-laptop driver
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*
+ KEYBOARD_KEY_06=mute # Fn+F2
+ KEYBOARD_KEY_07=volumedown # Fn+F3
+ KEYBOARD_KEY_08=volumeup # Fn+F4
+ KEYBOARD_KEY_09=brightnessdown # Fn+F5
+ KEYBOARD_KEY_0a=brightnessup # Fn+F6
+ KEYBOARD_KEY_0b=switchvideomode # Fn+F7
+ KEYBOARD_KEY_0e=zoom # Fn+F10
+ KEYBOARD_KEY_10=suspend # Fn+F12
+
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-C1*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-K25*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-F[1-6]*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-FX*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-FRV*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-GR*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-TR*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-NV*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*PCG-Z*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pn*VGN-S360*:pvr*
+ KEYBOARD_KEY_06=battery
+ KEYBOARD_KEY_07=mute
+
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pnVGN-AR71*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pnVGN-FW*:pvr*
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pnVGN-Z21*:pvr*
+ KEYBOARD_KEY_00=brightnessdown # Fn+F5
+ KEYBOARD_KEY_10=brightnessup # Fn+F6
+ KEYBOARD_KEY_11=switchvideomode # Fn+F7
+ KEYBOARD_KEY_12=zoomout
+ KEYBOARD_KEY_14=zoomin
+ KEYBOARD_KEY_15=suspend # Fn+F12
+ KEYBOARD_KEY_17=prog1
+ KEYBOARD_KEY_20=media
+
+keyboard:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pnVPC*:pvr*
+ KEYBOARD_KEY_05=f21 # Fn+F1 -> KEY_F21 (The actual touchpad toggle)
+ KEYBOARD_KEY_0d=zoomout # Fn+F9
+ KEYBOARD_KEY_0e=zoomin # Fn+F10
+
+###########################################################
+# Toshiba
+###########################################################
+
+# Satellite A100
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITE*A100:pvr*
+ KEYBOARD_KEY_a4=stopcd
+ KEYBOARD_KEY_b2=www
+
+# Satellite A110
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*A110:pvr*
+ KEYBOARD_KEY_92=stop
+ KEYBOARD_KEY_93=www
+ KEYBOARD_KEY_94=media
+ KEYBOARD_KEY_9e=f22 # Touchpad on
+ KEYBOARD_KEY_9f=f23 # Touchpad off
+ KEYBOARD_KEY_b9=nextsong
+ KEYBOARD_KEY_d9=brightnessup
+ KEYBOARD_KEY_ee=screenlock
+ KEYBOARD_KEY_f4=previoussong
+ KEYBOARD_KEY_f7=playpause
+
+# Satellite M30X
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*M30X:pvr*
+ KEYBOARD_KEY_ef=brightnessdown
+ KEYBOARD_KEY_d9=brightnessup
+ KEYBOARD_KEY_ee=screenlock
+ KEYBOARD_KEY_93=media
+ KEYBOARD_KEY_9e=f22 # touchpad enable
+ KEYBOARD_KEY_9f=f23 # touchpad disable
+
+# Satellite P75-A
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr*
+ KEYBOARD_KEY_ef=brightnessdown
+ KEYBOARD_KEY_ee=brightnessup
+ KEYBOARD_KEY_a9=switchvideomode # switch display outputs
+ KEYBOARD_KEY_d4=wlan # RF Switch Off
+
+###########################################################
+# VIA
+###########################################################
+
+keyboard:dmi:bvn*:bvr*:bd*:svnVIA:pnK8N800:pvr*
+ KEYBOARD_KEY_81=prog1
+
+###########################################################
+# Zepto
+###########################################################
+
+# Znote
+keyboard:dmi:bvn*:bvr*:bd*:svnZepto:pnZnote:*
+ KEYBOARD_KEY_93=switchvideomode # Fn+F3 Toggle Video Output
+ KEYBOARD_KEY_95=brightnessdown # Fn+F4 Brightness Down
+ KEYBOARD_KEY_91=brightnessup # Fn+F5 Brightness Up
+ KEYBOARD_KEY_a5=f23 # Fn+F6 Disable Touchpad
+ KEYBOARD_KEY_a6=f22 # Fn+F6 Enable Touchpad
+ KEYBOARD_KEY_a7=bluetooth # Fn+F10 Enable Bluetooth
+ KEYBOARD_KEY_a9=bluetooth # Fn+F10 Disable Bluetooth
+ KEYBOARD_KEY_f1=wlan # RF Switch Off
+ KEYBOARD_KEY_f2=wlan # RF Switch On
+ KEYBOARD_KEY_f4=prog1 # P1 Button
+ KEYBOARD_KEY_f3=prog2 # P2 Button
+ KEYBOARD_KEY_a0=! # mute
+ KEYBOARD_KEY_ae=! # volume down
+ KEYBOARD_KEY_b0=! # volume up
+
+# Znote 6615WD
+keyboard:dmi:bvn*:bvr*:bd*:svnZepto:pnZnote*6615WD:*
+ KEYBOARD_KEY_a0=! # mute
+ KEYBOARD_KEY_ae=! # volume down
+ KEYBOARD_KEY_b0=! # volume up
+
+###########################################################
+# Other
+###########################################################
+
+# Common Volume Keys
+keyboard:dmi:bvn*:bvr*:bd*:svnFUJITSU*SIEMENS:pnAMILO*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnFOXCONN:pnQBOOK:*
+keyboard:dmi:bvn*:bvr*:bd*:svnMTC:pn*:pvrA0:*
+keyboard:dmi:bvn*:bvr*:bd*:svnMio*Technology:pnN890:*
+keyboard:dmi:bvn*:bvr*:bd*:svnPEGATRON*CORP.:pnSpring*Peak:*
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU]30[05]*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*Pro*[uU]300*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU]500*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnViooo*Corporation:pnPT17:*
+keyboard:dmi:bvn*:bvr*:bd*:svnHANNspree:pnSN10E100:*
+keyboard:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pni1520M:*
+keyboard:dmi:bvn*:bvr*:bd*:svnBenQ:pn*nScreen*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnBenQ:pnJoybook*Lite*:pvr*
+keyboard:dmi:bvn*:bvr*:bd*:svnDIXONSP:pnDIXON*:pvr*
+ KEYBOARD_KEY_a0=! # mute
+ KEYBOARD_KEY_ae=! # volume down
+ KEYBOARD_KEY_b0=! # volume up
diff --git a/keymaps-force-release/common-volume-keys b/keymaps-force-release/common-volume-keys
deleted file mode 100644
index 3a7654d735..0000000000
--- a/keymaps-force-release/common-volume-keys
+++ /dev/null
@@ -1,3 +0,0 @@
-0xa0 #mute
-0xae #volume down
-0xb0 #volume up
diff --git a/keymaps-force-release/dell-touchpad b/keymaps-force-release/dell-touchpad
deleted file mode 100644
index 18e9bdee66..0000000000
--- a/keymaps-force-release/dell-touchpad
+++ /dev/null
@@ -1 +0,0 @@
-0x9E
diff --git a/keymaps-force-release/dell-xps b/keymaps-force-release/dell-xps
deleted file mode 100644
index 69f7899ad7..0000000000
--- a/keymaps-force-release/dell-xps
+++ /dev/null
@@ -1 +0,0 @@
-0x8C
diff --git a/keymaps-force-release/hp-other b/keymaps-force-release/hp-other
deleted file mode 100644
index 6621370095..0000000000
--- a/keymaps-force-release/hp-other
+++ /dev/null
@@ -1,3 +0,0 @@
-# list of scancodes (hex or decimal), optional comment
-0xd8 # Touchpad off
-0xd9 # Touchpad on
diff --git a/keymaps-force-release/samsung-other b/keymaps-force-release/samsung-other
deleted file mode 100644
index c51123a0b6..0000000000
--- a/keymaps-force-release/samsung-other
+++ /dev/null
@@ -1,10 +0,0 @@
-# list of scancodes (hex or decimal), optional comment
-0x82 # Fn+F4 CRT/LCD
-0x83 # Fn+F2 battery
-0x84 # Fn+F5 backlight on/off
-0x86 # Fn+F9 WLAN
-0x88 # Fn-Up brightness up
-0x89 # Fn-Down brightness down
-0xB3 # Fn+F8 switch power mode (battery/dynamic/performance)
-0xF7 # Fn+F10 Touchpad on
-0xF9 # Fn+F10 Touchpad off
diff --git a/keymaps-force-release/samsung-series-9 b/keymaps-force-release/samsung-series-9
deleted file mode 100644
index 65707effb7..0000000000
--- a/keymaps-force-release/samsung-series-9
+++ /dev/null
@@ -1,6 +0,0 @@
-# list of scancodes (hex or decimal), optional comment
-0xCE # Fn+F8 keyboard backlit up
-0x8D # Fn+F7 keyboard backlit down
-0x97 # Fn+F12 wifi on/off
-0x96 # Fn+F1 performance mode (?)
-0xD5 # Fn+F6 battery life extender
diff --git a/keymaps/acer b/keymaps/acer
deleted file mode 100644
index 4e7c297dea..0000000000
--- a/keymaps/acer
+++ /dev/null
@@ -1,22 +0,0 @@
-0xA5 help # Fn+F1
-0xA6 setup # Fn+F2 Acer eSettings
-0xA7 battery # Fn+F3 Power Management
-0xA9 switchvideomode # Fn+F5
-0xB3 euro
-0xB4 dollar
-0xCE brightnessup # Fn+Right
-0xD4 bluetooth # (toggle) off-to-on
-0xD5 wlan # (toggle) on-to-off
-0xD6 wlan # (toggle) off-to-on
-0xD7 bluetooth # (toggle) on-to-off
-0xD8 bluetooth # (toggle) off-to-on
-0xD9 brightnessup # Fn+Right
-0xEE brightnessup # Fn+Right
-0xEF brightnessdown # Fn+Left
-0xF1 f22 # Fn+F7 Touchpad toggle (off-to-on)
-0xF2 f23 # Fn+F7 Touchpad toggle (on-to-off)
-0xF3 prog2 # "P2" programmable button
-0xF4 prog1 # "P1" programmable button
-0xF5 presentation
-0xF8 fn
-0xF9 f23 # Launch NTI shadow
diff --git a/keymaps/acer-aspire_5720 b/keymaps/acer-aspire_5720
deleted file mode 100644
index 3ff9de3f32..0000000000
--- a/keymaps/acer-aspire_5720
+++ /dev/null
@@ -1,5 +0,0 @@
-0x84 bluetooth # sent when bluetooth module missing, and key pressed
-0x92 media # acer arcade
-0xD4 bluetooth # bluetooth on
-0xD9 bluetooth # bluetooth off
-0xF4 prog3 # e-key
diff --git a/keymaps/acer-aspire_5920g b/keymaps/acer-aspire_5920g
deleted file mode 100644
index 633c4e854c..0000000000
--- a/keymaps/acer-aspire_5920g
+++ /dev/null
@@ -1,5 +0,0 @@
-0x8A media
-0x92 media
-0xA6 setup
-0xB2 www
-0xD9 bluetooth # (toggle) on-to-off
diff --git a/keymaps/acer-aspire_6920 b/keymaps/acer-aspire_6920
deleted file mode 100644
index 699c954b4e..0000000000
--- a/keymaps/acer-aspire_6920
+++ /dev/null
@@ -1,5 +0,0 @@
-0xD9 bluetooth # (toggle) on-to-off
-0x92 media
-0x9E back
-0x83 rewind
-0x89 fastforward
diff --git a/keymaps/acer-aspire_8930 b/keymaps/acer-aspire_8930
deleted file mode 100644
index fb27bfb4f5..0000000000
--- a/keymaps/acer-aspire_8930
+++ /dev/null
@@ -1,5 +0,0 @@
-0xCA prog3 # key 'HOLD' on cine dash media console
-0x83 rewind
-0x89 fastforward
-0x92 media # key 'ARCADE' on cine dash media console
-0x9E back
diff --git a/keymaps/acer-travelmate_c300 b/keymaps/acer-travelmate_c300
deleted file mode 100644
index bfef4cf868..0000000000
--- a/keymaps/acer-travelmate_c300
+++ /dev/null
@@ -1,5 +0,0 @@
-0x67 f24 # FIXME: rotate screen
-0x68 up
-0x69 down
-0x6B fn
-0x6C screenlock # FIXME: lock tablet device/buttons
diff --git a/keymaps/asus b/keymaps/asus
deleted file mode 100644
index 2a5995f982..0000000000
--- a/keymaps/asus
+++ /dev/null
@@ -1,3 +0,0 @@
-0xED volumeup
-0xEE volumedown
-0xEF mute
diff --git a/keymaps/compaq-e_evo b/keymaps/compaq-e_evo
deleted file mode 100644
index 5fbc573aa4..0000000000
--- a/keymaps/compaq-e_evo
+++ /dev/null
@@ -1,4 +0,0 @@
-0xA3 www # I key
-0x9A search
-0x9E email
-0x9F homepage
diff --git a/keymaps/dell b/keymaps/dell
deleted file mode 100644
index 4f907b3eef..0000000000
--- a/keymaps/dell
+++ /dev/null
@@ -1,29 +0,0 @@
-0x81 playpause # Play/Pause
-0x82 stopcd # Stop
-0x83 previoussong # Previous song
-0x84 nextsong # Next song
-0x85 brightnessdown # Fn+Down arrow Brightness Down
-0x86 brightnessup # Fn+Up arrow Brightness Up
-0x87 battery # Fn+F3 battery icon
-0x88 unknown # Fn+F2 Turn On/Off Wireless - handled in hardware
-0x89 ejectclosecd # Fn+F10 Eject CD
-0x8A suspend # Fn+F1 hibernate
-0x8B switchvideomode # Fn+F8 CRT/LCD (high keycode: "displaytoggle")
-0x8C f23 # Fn+Right arrow Auto Brightness
-0x8F switchvideomode # Fn+F7 aspect ratio
-0x90 previoussong # Front panel previous song
-0x91 prog1 # Wifi Catcher (DELL Specific)
-0x92 media # MediaDirect button (house icon)
-0x93 f23 # FIXME Fn+Left arrow Auto Brightness
-0x95 camera # Shutter button Takes a picture if optional camera available
-0x97 email # Tablet email button
-0x98 f21 # FIXME: Tablet screen rotatation
-0x99 nextsong # Front panel next song
-0x9A setup # Tablet tools button
-0x9B switchvideomode # Display Toggle button
-0x9E f21 #touchpad toggle
-0xA2 playpause # Front panel play/pause
-0xA4 stopcd # Front panel stop
-0xED media # MediaDirect button
-0xD8 screenlock # FIXME: Tablet lock button
-0xD9 f21 # touchpad toggle
diff --git a/keymaps/dell-latitude-xt2 b/keymaps/dell-latitude-xt2
deleted file mode 100644
index 39872f559d..0000000000
--- a/keymaps/dell-latitude-xt2
+++ /dev/null
@@ -1,4 +0,0 @@
-0x9B up # tablet rocker up
-0x9E enter # tablet rocker press
-0x9F back # tablet back
-0xA3 down # tablet rocker down
diff --git a/keymaps/everex-xt5000 b/keymaps/everex-xt5000
deleted file mode 100644
index 4823a832f5..0000000000
--- a/keymaps/everex-xt5000
+++ /dev/null
@@ -1,7 +0,0 @@
-0x5C media
-0x65 f21 # Fn+F5 Touchpad toggle
-0x67 prog3 # Fan Speed Control button
-0x6F brightnessup
-0x7F brightnessdown
-0xB2 www
-0xEC mail
diff --git a/keymaps/fujitsu-amilo_li_2732 b/keymaps/fujitsu-amilo_li_2732
deleted file mode 100644
index 9b8b36a170..0000000000
--- a/keymaps/fujitsu-amilo_li_2732
+++ /dev/null
@@ -1,3 +0,0 @@
-0xD9 brightnessdown # Fn+F8 brightness down
-0xEF brightnessup # Fn+F9 brightness up
-0xA9 switchvideomode # Fn+F10 Cycle between available video outputs
diff --git a/keymaps/fujitsu-amilo_pa_2548 b/keymaps/fujitsu-amilo_pa_2548
deleted file mode 100644
index f7b0c52444..0000000000
--- a/keymaps/fujitsu-amilo_pa_2548
+++ /dev/null
@@ -1,3 +0,0 @@
-0xE0 volumedown
-0xE1 volumeup
-0xE5 prog1
diff --git a/keymaps/fujitsu-amilo_pro_edition_v3505 b/keymaps/fujitsu-amilo_pro_edition_v3505
deleted file mode 100644
index d2e38cbb23..0000000000
--- a/keymaps/fujitsu-amilo_pro_edition_v3505
+++ /dev/null
@@ -1,4 +0,0 @@
-0xA5 help # Fn-F1
-0xA9 switchvideomode # Fn-F3
-0xD9 brightnessdown # Fn-F8
-0xE0 brightnessup # Fn-F9
diff --git a/keymaps/fujitsu-amilo_pro_v3205 b/keymaps/fujitsu-amilo_pro_v3205
deleted file mode 100644
index 43e3199d59..0000000000
--- a/keymaps/fujitsu-amilo_pro_v3205
+++ /dev/null
@@ -1,2 +0,0 @@
-0xF4 f21 # FIXME: silent-mode decrease CPU/GPU clock
-0xF7 switchvideomode # Fn+F3
diff --git a/keymaps/fujitsu-amilo_si_1520 b/keymaps/fujitsu-amilo_si_1520
deleted file mode 100644
index 1419bd9b5e..0000000000
--- a/keymaps/fujitsu-amilo_si_1520
+++ /dev/null
@@ -1,6 +0,0 @@
-0xE1 wlan
-0xF3 wlan
-0xEE brightnessdown
-0xE0 brightnessup
-0xE2 bluetooth
-0xF7 video
diff --git a/keymaps/fujitsu-esprimo_mobile_v5 b/keymaps/fujitsu-esprimo_mobile_v5
deleted file mode 100644
index d3d056b366..0000000000
--- a/keymaps/fujitsu-esprimo_mobile_v5
+++ /dev/null
@@ -1,4 +0,0 @@
-0xA9 switchvideomode
-0xD9 brightnessdown
-0xDF sleep
-0xEF brightnessup
diff --git a/keymaps/fujitsu-esprimo_mobile_v6 b/keymaps/fujitsu-esprimo_mobile_v6
deleted file mode 100644
index 52c70c50cb..0000000000
--- a/keymaps/fujitsu-esprimo_mobile_v6
+++ /dev/null
@@ -1,2 +0,0 @@
-0xCE brightnessup
-0xEF brightnessdown
diff --git a/keymaps/genius-slimstar-320 b/keymaps/genius-slimstar-320
deleted file mode 100644
index d0a3656dd8..0000000000
--- a/keymaps/genius-slimstar-320
+++ /dev/null
@@ -1,35 +0,0 @@
-# Genius SlimStar 320
-#
-# Only buttons which are not properly mapped yet are configured below
-
-# "Scroll wheel", a circular up/down/left/right button. Aimed for scolling,
-# but since there are no scrollleft/scrollright, let's map to back/forward.
-0x900f0 scrollup
-0x900f1 scrolldown
-0x900f3 back
-0x900f2 forward
-
-# Multimedia buttons, left side (from left to right)
-# [W]
-0x900f5 wordprocessor
-# [Ex]
-0x900f6 spreadsheet
-# [P]
-0x900f4 presentation
-# Other five (calculator, playpause, stop, mute and eject) are OK
-
-# Right side, from left to right
-# [e]
-0xc0223 www
-# "man"
-0x900f7 chat
-# "Y"
-0x900fb prog1
-# [X]
-0x900f8 close
-# "picture"
-0x900f9 graphicseditor
-# "two windows"
-0x900fd scale
-# "lock"
-0x900fc screenlock
diff --git a/keymaps/hewlett-packard b/keymaps/hewlett-packard
deleted file mode 100644
index 4461fa2ce5..0000000000
--- a/keymaps/hewlett-packard
+++ /dev/null
@@ -1,12 +0,0 @@
-0x81 fn_esc
-0x89 battery # FnF8
-0x8A screenlock # FnF6
-0x8B camera
-0x8C media # music
-0x8E dvd
-0xB1 help
-0xB3 f23 # FIXME: Auto brightness
-0xD7 wlan
-0x92 brightnessdown # FnF7 (FnF9 on 6730b)
-0x97 brightnessup # FnF8 (FnF10 on 6730b)
-0xEE switchvideomode # FnF4
diff --git a/keymaps/hewlett-packard-2510p_2530p b/keymaps/hewlett-packard-2510p_2530p
deleted file mode 100644
index 41ad2e9b5a..0000000000
--- a/keymaps/hewlett-packard-2510p_2530p
+++ /dev/null
@@ -1,2 +0,0 @@
-0xD8 f23 # touchpad off
-0xD9 f22 # touchpad on
diff --git a/keymaps/hewlett-packard-compaq_elitebook b/keymaps/hewlett-packard-compaq_elitebook
deleted file mode 100644
index 42007c5483..0000000000
--- a/keymaps/hewlett-packard-compaq_elitebook
+++ /dev/null
@@ -1,2 +0,0 @@
-0x88 presentation
-0xD9 help # I key (high keycode: "info")
diff --git a/keymaps/hewlett-packard-hdx9494nr b/keymaps/hewlett-packard-hdx9494nr
deleted file mode 100644
index 92217879c8..0000000000
--- a/keymaps/hewlett-packard-hdx9494nr
+++ /dev/null
@@ -1,3 +0,0 @@
-0xB2 www # FnF3
-0xD8 f23 # touchpad off
-0xD9 f22 # touchpad on
diff --git a/keymaps/hewlett-packard-pavilion b/keymaps/hewlett-packard-pavilion
deleted file mode 100644
index 3d3cefc8e6..0000000000
--- a/keymaps/hewlett-packard-pavilion
+++ /dev/null
@@ -1,3 +0,0 @@
-0x88 media # FIXME: quick play
-0xD8 f23 # touchpad off
-0xD9 f22 # touchpad on
diff --git a/keymaps/hewlett-packard-presario-2100 b/keymaps/hewlett-packard-presario-2100
deleted file mode 100644
index 1df39dcbd2..0000000000
--- a/keymaps/hewlett-packard-presario-2100
+++ /dev/null
@@ -1,3 +0,0 @@
-0xF0 help
-0xF1 screenlock
-0xF3 search
diff --git a/keymaps/hewlett-packard-tablet b/keymaps/hewlett-packard-tablet
deleted file mode 100644
index d19005ab90..0000000000
--- a/keymaps/hewlett-packard-tablet
+++ /dev/null
@@ -1,6 +0,0 @@
-0x82 prog2 # Funny Key
-0x83 prog1 # Q
-0x84 tab
-0x85 esc
-0x86 pageup
-0x87 pagedown
diff --git a/keymaps/hewlett-packard-tx2 b/keymaps/hewlett-packard-tx2
deleted file mode 100644
index 36a690fcf6..0000000000
--- a/keymaps/hewlett-packard-tx2
+++ /dev/null
@@ -1,3 +0,0 @@
-0xC2 media
-0xD8 f23 # Toggle touchpad button on tx2 (OFF)
-0xD9 f22 # Toggle touchpad button on tx2 (ON)
diff --git a/keymaps/hewlett-packard_elitebook-8440p b/keymaps/hewlett-packard_elitebook-8440p
deleted file mode 100644
index e0c2a1a859..0000000000
--- a/keymaps/hewlett-packard_elitebook-8440p
+++ /dev/null
@@ -1,5 +0,0 @@
-0x88 www
-0xA0 mute
-0xAE volumedown
-0xB0 volumeup
-0xEC mail
diff --git a/keymaps/hewlett-packard_elitebook-8460p b/keymaps/hewlett-packard_elitebook-8460p
deleted file mode 100644
index 1fe1b7237c..0000000000
--- a/keymaps/hewlett-packard_elitebook-8460p
+++ /dev/null
@@ -1,3 +0,0 @@
-0xF8 wlan # Wireless HW switch button
-0xB3 prog1 # Fn+F11 - Ambient Light Sensor button
-0xB1 prog2 # Fn+ESC - System information button
diff --git a/keymaps/ibm-thinkpad-usb-keyboard-trackpoint b/keymaps/ibm-thinkpad-usb-keyboard-trackpoint
deleted file mode 100644
index 027e50bf88..0000000000
--- a/keymaps/ibm-thinkpad-usb-keyboard-trackpoint
+++ /dev/null
@@ -1,7 +0,0 @@
-0x900f0 screenlock
-0x900f1 wlan
-0x900f2 switchvideomode
-0x900f3 suspend
-0x900f4 brightnessup
-0x900f5 brightnessdown
-0x900f8 zoom
diff --git a/keymaps/inventec-symphony_6.0_7.0 b/keymaps/inventec-symphony_6.0_7.0
deleted file mode 100644
index 4a8b4ba5a7..0000000000
--- a/keymaps/inventec-symphony_6.0_7.0
+++ /dev/null
@@ -1,2 +0,0 @@
-0xF3 prog2
-0xF4 prog1
diff --git a/keymaps/lenovo-3000 b/keymaps/lenovo-3000
deleted file mode 100644
index 5bd165654a..0000000000
--- a/keymaps/lenovo-3000
+++ /dev/null
@@ -1,5 +0,0 @@
-0x8B switchvideomode # Fn+F7 video
-0x96 wlan # Fn+F5 wireless
-0x97 sleep # Fn+F4 suspend
-0x98 suspend # Fn+F12 hibernate
-0xB4 prog1 # Lenovo Care
diff --git a/keymaps/lenovo-ideapad b/keymaps/lenovo-ideapad
deleted file mode 100644
index fc339839f2..0000000000
--- a/keymaps/lenovo-ideapad
+++ /dev/null
@@ -1,8 +0,0 @@
-# Key codes observed on S10-3, assumed valid on other IdeaPad models
-0x81 rfkill # does nothing in BIOS
-0x83 display_off # BIOS toggles screen state
-0xB9 brightnessup # does nothing in BIOS
-0xBA brightnessdown # does nothing in BIOS
-0xF1 camera # BIOS toggles camera power
-0xf2 f21 # touchpad toggle (key alternately emits f2 and f3)
-0xf3 f21
diff --git a/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint b/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint
deleted file mode 100644
index d87549e445..0000000000
--- a/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint
+++ /dev/null
@@ -1,13 +0,0 @@
-0x90012 screenlock # Fn+F2
-0x90013 battery # Fn+F3
-0x90014 wlan # Fn+F5
-0x90016 switchvideomode # Fn+F7
-0x90017 f21 # Fn+F8 touchpadtoggle
-0x90019 suspend # Fn+F12
-0x9001A brightnessup # Fn+Home
-0x9001B brightnessdown # Fn+End
-0x9001D zoom # Fn+Space
-0x90011 prog1 # Thinkvantage button
-
-0x90015 camera # Fn+F6 headset/camera VoIP key ??
-0x90010 f20 # Microphone mute button; should be micmute, but see https://mail.gnome.org/archives/commits-list/2013-January/msg05822.html
diff --git a/keymaps/lenovo-thinkpad_x200_tablet b/keymaps/lenovo-thinkpad_x200_tablet
deleted file mode 100644
index 31ea3b2c70..0000000000
--- a/keymaps/lenovo-thinkpad_x200_tablet
+++ /dev/null
@@ -1,6 +0,0 @@
-0x5D menu
-0x63 fn
-0x66 screenlock
-0x67 cyclewindows # bezel circular arrow
-0x68 setup # bezel setup / menu
-0x6c direction # rotate screen
diff --git a/keymaps/lenovo-thinkpad_x6_tablet b/keymaps/lenovo-thinkpad_x6_tablet
deleted file mode 100644
index 6fd16b5662..0000000000
--- a/keymaps/lenovo-thinkpad_x6_tablet
+++ /dev/null
@@ -1,8 +0,0 @@
-0x6C f21 # rotate
-0x68 screenlock # screenlock
-0x6B esc # escape
-0x6D right # right on d-pad
-0x6E left # left on d-pad
-0x71 up # up on d-pad
-0x6F down # down on d-pad
-0x69 enter # enter on d-pad
diff --git a/keymaps/lg-x110 b/keymaps/lg-x110
deleted file mode 100644
index ba08cba3fe..0000000000
--- a/keymaps/lg-x110
+++ /dev/null
@@ -1,12 +0,0 @@
-0xA0 mute # Fn-F9
-0xAE volumedown # Fn-Left
-0xAF search # Fn-F3
-0xB0 volumeup # Fn-Right
-0xB1 battery # Fn-F10 Info
-0xB3 suspend # Fn-F12
-0xDF sleep # Fn-F4
-# 0xE2 bluetooth # satellite dish2
-0xE4 f21 # Fn-F5 Touchpad disable
-0xF6 wlan # Fn-F6
-0xF7 reserved # brightnessdown # Fn-Down
-0xF8 reserved # brightnessup # Fn-Up
diff --git a/keymaps/logitech-wave b/keymaps/logitech-wave
deleted file mode 100644
index caa5d5d310..0000000000
--- a/keymaps/logitech-wave
+++ /dev/null
@@ -1,16 +0,0 @@
-0x9001C scale #expo
-0x9001F zoomout #zoom out
-0x90020 zoomin #zoom in
-0x9003D prog1 #gadget
-0x90005 camera #camera
-0x90018 media #media center
-0x90041 wordprocessor #fn+f1 (word)
-0x90042 spreadsheet #fn+f2 (excel)
-0x90043 calendar #fn+f3 (calendar)
-0x90044 prog2 #fn+f4 (program a)
-0x90045 prog3 #fn+f5 (program b)
-0x90046 prog4 #fn+f6 (program c)
-0x90048 messenger #fn+f8 (msn messenger)
-0x9002D find #fn+f10 (search www)
-0x9004B search #fn+f11 (search pc)
-0x9004C ejectclosecd #fn+f12 (eject)
diff --git a/keymaps/logitech-wave-cordless b/keymaps/logitech-wave-cordless
deleted file mode 100644
index a10dad5e4d..0000000000
--- a/keymaps/logitech-wave-cordless
+++ /dev/null
@@ -1,15 +0,0 @@
-0xD4 zoomin
-0xCC zoomout
-0xC0183 media
-0xC1005 camera
-0xC101F zoomout
-0xC1020 zoomin
-0xC1041 wordprocessor
-0xC1042 spreadsheet
-0xC1043 calendar
-0xC1044 prog2 #fn+f4 (program a)
-0xC1045 prog3 #fn+f5 (program b)
-0xC1046 prog4 #fn+f6 (program c)
-0xC1048 messenger
-0xC104A find #fn+f10 (search www)
-0xC104C ejectclosecd
diff --git a/keymaps/logitech-wave-pro-cordless b/keymaps/logitech-wave-pro-cordless
deleted file mode 100644
index e7aa02206c..0000000000
--- a/keymaps/logitech-wave-pro-cordless
+++ /dev/null
@@ -1,12 +0,0 @@
-0xC01B6 camera
-0xC0183 media
-0xC0184 wordprocessor
-0xC0186 spreadsheet
-0xC018E calendar
-0xC0223 homepage
-0xC01BC messenger
-0xC018A mail
-0xC0221 search
-0xC00B8 ejectcd
-0xC022D zoomin
-0xC022E zoomout
diff --git a/keymaps/maxdata-pro_7000 b/keymaps/maxdata-pro_7000
deleted file mode 100644
index c0e4f77af4..0000000000
--- a/keymaps/maxdata-pro_7000
+++ /dev/null
@@ -1,9 +0,0 @@
-0x97 prog2
-0x9F prog1
-0xA0 mute # Fn-F5
-0x82 www
-0xEC email
-0xAE volumedown # Fn-Down
-0xB0 volumeup # Fn-Up
-0xDF suspend # Fn+F2
-0xF5 help
diff --git a/keymaps/medion-fid2060 b/keymaps/medion-fid2060
deleted file mode 100644
index 5a76c76799..0000000000
--- a/keymaps/medion-fid2060
+++ /dev/null
@@ -1,2 +0,0 @@
-0x6B channeldown # Thottle Down
-0x6D channelup # Thottle Up
diff --git a/keymaps/medionnb-a555 b/keymaps/medionnb-a555
deleted file mode 100644
index c3b5dfa60b..0000000000
--- a/keymaps/medionnb-a555
+++ /dev/null
@@ -1,4 +0,0 @@
-0x63 www # N button
-0x66 prog1 # link 1 button
-0x67 email # envelope button
-0x69 prog2 # link 2 button
diff --git a/keymaps/micro-star b/keymaps/micro-star
deleted file mode 100644
index 4a438698ed..0000000000
--- a/keymaps/micro-star
+++ /dev/null
@@ -1,13 +0,0 @@
-0xA0 mute # Fn-F9
-0xAE volumedown # Fn-F7
-0xB0 volumeup # Fn-F8
-0xB2 www # e button
-0xDF sleep # Fn-F12
-0xE2 bluetooth # satellite dish2
-0xE4 f21 # Fn-F3 Touchpad disable
-0xEC email # envelope button
-0xEE camera # Fn-F6 camera disable
-0xF6 wlan # satellite dish1
-0xF7 brightnessdown # Fn-F4
-0xF8 brightnessup # Fn-F5
-0xF9 search
diff --git a/keymaps/module-asus-w3j b/keymaps/module-asus-w3j
deleted file mode 100644
index 773e0b3e82..0000000000
--- a/keymaps/module-asus-w3j
+++ /dev/null
@@ -1,11 +0,0 @@
-0x41 nextsong
-0x45 playpause
-0x43 stopcd
-0x40 previoussong
-0x4C ejectclosecd
-0x32 mute
-0x31 volumedown
-0x30 volumeup
-0x5D wlan
-0x7E bluetooth
-0x8A media # high keycode: "tv"
diff --git a/keymaps/module-ibm b/keymaps/module-ibm
deleted file mode 100644
index a92dfa2506..0000000000
--- a/keymaps/module-ibm
+++ /dev/null
@@ -1,16 +0,0 @@
-0x01 battery # Fn+F2
-0x02 screenlock # Fn+F3
-0x03 sleep # Fn+F4
-0x04 wlan # Fn+F5
-0x06 switchvideomode # Fn+F7
-0x07 zoom # Fn+F8 screen expand
-0x08 f24 # Fn+F9 undock
-0x0B suspend # Fn+F12
-0x0F brightnessup # Fn+Home
-0x10 brightnessdown # Fn+End
-0x11 kbdillumtoggle # Fn+PgUp - ThinkLight
-0x13 zoom # Fn+Space
-0x14 volumeup
-0x15 volumedown
-0x16 mute
-0x17 prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor")
diff --git a/keymaps/module-lenovo b/keymaps/module-lenovo
deleted file mode 100644
index 573a6a774b..0000000000
--- a/keymaps/module-lenovo
+++ /dev/null
@@ -1,17 +0,0 @@
-0x1 screenlock # Fn+F2
-0x2 battery # Fn+F3
-0x3 sleep # Fn+F4
-0x4 wlan # Fn+F5
-0x6 switchvideomode # Fn+F7
-0x7 f21 # Fn+F8 touchpadtoggle
-0x8 f24 # Fn+F9 undock
-0xB suspend # Fn+F12
-0xF brightnessup # Fn+Home
-0x10 brightnessdown # Fn+End
-0x11 kbdillumtoggle # Fn+PgUp - ThinkLight
-0x13 zoom # Fn+Space
-0x14 volumeup
-0x15 volumedown
-0x16 mute
-0x17 prog1 # ThinkPad/ThinkVantage button (high keycode: "vendor")
-0x1A f20 # Microphone mute button; should be micmute, but see https://mail.gnome.org/archives/commits-list/2013-January/msg05822.html
diff --git a/keymaps/module-sony b/keymaps/module-sony
deleted file mode 100644
index 7c000131d1..0000000000
--- a/keymaps/module-sony
+++ /dev/null
@@ -1,8 +0,0 @@
-0x06 mute # Fn+F2
-0x07 volumedown # Fn+F3
-0x08 volumeup # Fn+F4
-0x09 brightnessdown # Fn+F5
-0x0A brightnessup # Fn+F6
-0x0B switchvideomode # Fn+F7
-0x0E zoom # Fn+F10
-0x10 suspend # Fn+F12
diff --git a/keymaps/module-sony-old b/keymaps/module-sony-old
deleted file mode 100644
index 596a34258a..0000000000
--- a/keymaps/module-sony-old
+++ /dev/null
@@ -1,2 +0,0 @@
-0x06 battery
-0x07 mute
diff --git a/keymaps/module-sony-vgn b/keymaps/module-sony-vgn
deleted file mode 100644
index c8ba001516..0000000000
--- a/keymaps/module-sony-vgn
+++ /dev/null
@@ -1,8 +0,0 @@
-0x00 brightnessdown # Fn+F5
-0x10 brightnessup # Fn+F6
-0x11 switchvideomode # Fn+F7
-0x12 zoomout
-0x14 zoomin
-0x15 suspend # Fn+F12
-0x17 prog1
-0x20 media
diff --git a/keymaps/module-sony-vpc b/keymaps/module-sony-vpc
deleted file mode 100644
index 681082c59e..0000000000
--- a/keymaps/module-sony-vpc
+++ /dev/null
@@ -1,4 +0,0 @@
-# 0x05 touchpad_toggle # fn_f1 -> KEY_TOUCHPAD_TOGGLE
-0x05 f21 # fn_f1 -> KEY_F21 (The actual touchpad toggle)
-0x0d zoomout # fn_f9
-0x0e zoomin # fn_f10
diff --git a/keymaps/olpc-xo b/keymaps/olpc-xo
deleted file mode 100644
index 34434a121d..0000000000
--- a/keymaps/olpc-xo
+++ /dev/null
@@ -1,74 +0,0 @@
-0x59 fn
-0x81 fn_esc
-0xF9 camera
-0xF8 sound # Fn-CAMERA = Mic
-
-
-# Function key mappings, as per
-# http://dev.laptop.org/ticket/10213#comment:20
-#
-# Unmodified F1-F8 produce F1-F8, so no remap necessary.
-# Unmodified F9-F12 control brightness and volume.
-0x43 brightnessdown
-0x44 brightnessup
-0x57 volumedown
-0x58 volumeup
-
-# fn-modified fkeys all produce the unmodified version of the key.
-0xBB f1
-0xBC f2
-0xBD f3
-0xBE f4
-0xBF f5
-0xC0 f6
-0xC1 f7
-0xC2 f8
-0xC3 f9
-0xC4 f10
-0xD7 f11
-0xD8 f12
-
-
-# Using F13-F21 for the .5 F keys right now.
-0xF7 f13
-0xF6 f14
-0xF5 f15
-0xF4 f16
-0xF3 f17
-0xF2 f18
-0xF1 f19
-0xF0 f20
-0xEF f21
-
-0xEE chat
-0xE4 chat # Just mapping Fn-Chat to Chat for now
-0xDD menu # Frame
-0xDA prog1 # Fn-Frame
-
-# The FN of some keys is other keys
-0xD3 delete
-0xD2 insert
-0xC9 pageup
-0xD1 pagedown
-0xC7 home
-0xCF end
-
-# Language key - don't ask what they are doing as KEY_HP
-0x73 hp
-0x7E hp
-
-0xDB leftmeta # left grab
-0xDC rightmeta # right grab
-0x85 rightmeta # Right grab releases on a different scancode
-0xD6 kbdillumtoggle # Fn-space
-0x69 switchvideomode # Brightness key
-
-# Game keys
-0x65 kp8 # up
-0x66 kp2 # down
-0x67 kp4 # left
-0x68 kp6 # right
-0xE5 kp9 # pgup
-0xE6 kp3 # pgdn
-0xE7 kp7 # home
-0xE8 kp1 # end
diff --git a/keymaps/onkyo b/keymaps/onkyo
deleted file mode 100644
index ee864ade4d..0000000000
--- a/keymaps/onkyo
+++ /dev/null
@@ -1,14 +0,0 @@
-0xA0 mute # Fn+D
-0xAE volumedown # Fn+F
-0xB0 volumeup # Fn+G
-0xDF sleep # Fn+W
-0xE0 bluetooth # Fn+H
-0xE2 cyclewindows # Fn+Esc
-0xEE battery # Fn+Q
-0xF0 media # Fn+R
-0xF5 switchvideomode # Fn+E
-0xF6 camera # Fn+T
-0xF7 f21 # Fn+Y (touchpad toggle)
-0xF8 brightnessup # Fn+S
-0xF9 brightnessdown # Fn+A
-0xFB wlan # Fn+J
diff --git a/keymaps/oqo-model2 b/keymaps/oqo-model2
deleted file mode 100644
index b7f4851abe..0000000000
--- a/keymaps/oqo-model2
+++ /dev/null
@@ -1,5 +0,0 @@
-0x8E wlan
-0xF0 switchvideomode
-0xF1 mute
-0xF2 volumedown
-0xF3 volumeup
diff --git a/keymaps/samsung-other b/keymaps/samsung-other
deleted file mode 100644
index 3ac0c2f10c..0000000000
--- a/keymaps/samsung-other
+++ /dev/null
@@ -1,14 +0,0 @@
-0x74 prog1 # User key
-0x75 www
-0x78 mail
-0x82 switchvideomode # Fn+F4 CRT/LCD (high keycode: "displaytoggle")
-0x83 battery # Fn+F2
-0x84 prog1 # Fn+F5 backlight on/off
-0x86 wlan # Fn+F9
-0x88 brightnessup # Fn-Up
-0x89 brightnessdown # Fn-Down
-0xB1 prog2 # Fn+F7 run Samsung Magic Doctor (keypressed event is generated twice)
-0xB3 prog3 # Fn+F8 switch power mode (battery/dynamic/performance)
-0xB4 wlan # Fn+F9 (X60P)
-0xF7 f22 # Fn+F10 Touchpad on
-0xF9 f23 # Fn+F10 Touchpad off
diff --git a/keymaps/samsung-series-9 b/keymaps/samsung-series-9
deleted file mode 100644
index 3b65735fa0..0000000000
--- a/keymaps/samsung-series-9
+++ /dev/null
@@ -1,5 +0,0 @@
-0x96 kbdillumup # Fn+F8 keyboard backlit up
-0x97 kbdillumdown # Fn+F7 keyboard backlit down
-0xD5 wlan # Fn+F12 wifi on/off
-0xCE prog1 # Fn+F1 performance mode
-0x8D prog2 # Fn+F6 battery life extender
diff --git a/keymaps/samsung-sq1us b/keymaps/samsung-sq1us
deleted file mode 100644
index ea2141ef84..0000000000
--- a/keymaps/samsung-sq1us
+++ /dev/null
@@ -1,7 +0,0 @@
-0xD4 menu
-0xD8 f1
-0xD9 f10
-0xD6 f3
-0xD7 f9
-0xE4 f5
-0xEE f11
diff --git a/keymaps/samsung-sx20s b/keymaps/samsung-sx20s
deleted file mode 100644
index 9d954ee415..0000000000
--- a/keymaps/samsung-sx20s
+++ /dev/null
@@ -1,4 +0,0 @@
-0x74 mute
-0x75 mute
-0x77 f22 # Touchpad on
-0x79 f23 # Touchpad off
diff --git a/keymaps/toshiba-satellite_a100 b/keymaps/toshiba-satellite_a100
deleted file mode 100644
index 22007be71b..0000000000
--- a/keymaps/toshiba-satellite_a100
+++ /dev/null
@@ -1,2 +0,0 @@
-0xA4 stopcd
-0xB2 www
diff --git a/keymaps/toshiba-satellite_a110 b/keymaps/toshiba-satellite_a110
deleted file mode 100644
index 1429409351..0000000000
--- a/keymaps/toshiba-satellite_a110
+++ /dev/null
@@ -1,10 +0,0 @@
-0x92 stop
-0x93 www
-0x94 media
-0x9E f22 # Touchpad on
-0x9F f23 # Touchpad off
-0xB9 nextsong
-0xD9 brightnessup
-0xEE screenlock
-0xF4 previoussong
-0xF7 playpause
diff --git a/keymaps/toshiba-satellite_m30x b/keymaps/toshiba-satellite_m30x
deleted file mode 100644
index ae8e34941b..0000000000
--- a/keymaps/toshiba-satellite_m30x
+++ /dev/null
@@ -1,6 +0,0 @@
-0xef brightnessdown
-0xd9 brightnessup
-0xee screenlock
-0x93 media
-0x9e f22 #touchpad_enable
-0x9f f23 #touchpad_disable
diff --git a/keymaps/zepto-znote b/keymaps/zepto-znote
deleted file mode 100644
index cf72fda47b..0000000000
--- a/keymaps/zepto-znote
+++ /dev/null
@@ -1,11 +0,0 @@
-0x93 switchvideomode # Fn+F3 Toggle Video Output
-0x95 brightnessdown # Fn+F4 Brightness Down
-0x91 brightnessup # Fn+F5 Brightness Up
-0xA5 f23 # Fn+F6 Disable Touchpad
-0xA6 f22 # Fn+F6 Enable Touchpad
-0xA7 bluetooth # Fn+F10 Enable Bluetooth
-0XA9 bluetooth # Fn+F10 Disable Bluetooth
-0xF1 wlan # RF Switch Off
-0xF2 wlan # RF Switch On
-0xF4 prog1 # P1 Button
-0xF3 prog2 # P2 Button
diff --git a/m4/attributes.m4 b/m4/attributes.m4
index f0bcf24211..aa53ef2380 100644
--- a/m4/attributes.m4
+++ b/m4/attributes.m4
@@ -40,12 +40,12 @@ dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
AC_DEFUN([CC_CHECK_FLAG_APPEND], [
AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
AS_TR_SH([cc_cv_$2_$3]),
- [eval "AS_TR_SH([cc_save_$2])='${$2}'"
- eval "AS_TR_SH([$2])='-Werror $3'"
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])],
- [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
- [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
- eval "AS_TR_SH([$2])='$cc_save_$2'"])
+ [eval "AS_TR_SH([cc_save_$2])='${$2}'"
+ eval "AS_TR_SH([$2])='-Werror $3'"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])],
+ [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
+ [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
+ eval "AS_TR_SH([$2])='$cc_save_$2'"])
AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
[eval "$1='${$1} $3'"])
@@ -92,10 +92,10 @@ AC_DEFUN([CC_NOUNDEFINED], [
dnl for a much more readable commandline, so that people can understand what
dnl it does without going to look for what the heck -z defs does.
for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
- CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
- break
+ CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
+ break
done
- ;;
+ ;;
esac
AC_SUBST([LDFLAGS_NOUNDEFINED])
@@ -231,8 +231,8 @@ AC_DEFUN([CC_FLAG_VISIBILITY], [
[cc_flag_visibility_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $cc_cv_werror"
CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
- cc_cv_flag_visibility='yes',
- cc_cv_flag_visibility='no')
+ cc_cv_flag_visibility='yes',
+ cc_cv_flag_visibility='no')
CFLAGS="$cc_flag_visibility_save_CFLAGS"])
AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
@@ -252,7 +252,7 @@ AC_DEFUN([CC_FUNC_EXPECT], [
[int some_function() {
int a = 3;
return (int)__builtin_expect(a, 3);
- }])],
+ }])],
[cc_cv_func_expect=yes],
[cc_cv_func_expect=no])
CFLAGS="$ac_save_CFLAGS"
diff --git a/m4/gtk-doc.m4 b/m4/gtk-doc.m4
index 0ada151935..ac2eccb4ad 100644
--- a/m4/gtk-doc.m4
+++ b/m4/gtk-doc.m4
@@ -37,7 +37,7 @@ AC_DEFUN([GTK_DOC_CHECK],
dnl don't check for glib if we build glib
if test "x$PACKAGE_NAME" != "xglib"; then
dnl don't fail if someone does not have glib
- PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,)
+ PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:])
fi
fi
@@ -58,6 +58,10 @@ AC_DEFUN([GTK_DOC_CHECK],
enable_gtk_doc_pdf=no
fi
+ if test -z "$AM_DEFAULT_VERBOSITY"; then
+ AM_DEFAULT_VERBOSITY=1
+ fi
+ AC_SUBST([AM_DEFAULT_VERBOSITY])
AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
diff --git a/make-directive-index.py b/make-directive-index.py
index 396947b303..b43fea0b99 100755
--- a/make-directive-index.py
+++ b/make-directive-index.py
@@ -21,6 +21,7 @@ import sys
import collections
import re
from xml_helper import *
+from copy import deepcopy
TEMPLATE = '''\
<refentry id="systemd.directives" conditional="HAVE_PYTHON">
@@ -138,6 +139,14 @@ TEMPLATE = '''\
</refsect1>
<refsect1>
+ <title>Constants</title>
+
+ <para>Various constant used and/or defined by systemd.</para>
+
+ <variablelist id='constants' />
+ </refsect1>
+
+ <refsect1>
<title>Miscellaneous options and directives</title>
<para>Other configuration elements which don't fit in
@@ -221,24 +230,35 @@ def _extract_directives(directive_groups, formatting, page):
storfile[text].append((pagename, section))
formatting[text] = name
+ storfile = directive_groups['constants']
+ for name in t.iterfind('.//constant'):
+ if name.attrib.get('noindex'):
+ continue
+ name.tail = ''
+ if name.text.startswith('('): # a cast, strip it
+ name.text = name.text.partition(' ')[2]
+ storfile[name.text].append((pagename, section))
+ formatting[name.text] = name
+
def _make_section(template, name, directives, formatting):
varlist = template.find(".//*[@id='{}']".format(name))
for varname, manpages in sorted(directives.items()):
entry = tree.SubElement(varlist, 'varlistentry')
term = tree.SubElement(entry, 'term')
- term.append(formatting[varname])
+ display = deepcopy(formatting[varname])
+ term.append(display)
para = tree.SubElement(tree.SubElement(entry, 'listitem'), 'para')
b = None
for manpage, manvolume in sorted(set(manpages)):
- if b is not None:
- b.tail = ', '
- b = tree.SubElement(para, 'citerefentry')
- c = tree.SubElement(b, 'refentrytitle')
- c.text = manpage
- d = tree.SubElement(b, 'manvolnum')
- d.text = manvolume
+ if b is not None:
+ b.tail = ', '
+ b = tree.SubElement(para, 'citerefentry')
+ c = tree.SubElement(b, 'refentrytitle')
+ c.text = manpage
+ d = tree.SubElement(b, 'manvolnum')
+ d.text = manvolume
entry.tail = '\n\n'
def _make_colophon(template, groups):
@@ -264,7 +284,7 @@ def _make_page(template, directive_groups, formatting):
}
"""
for name, directives in directive_groups.items():
- _make_section(template, name, directives, formatting)
+ _make_section(template, name, directives, formatting)
_make_colophon(template, directive_groups.values())
diff --git a/man/SD_ALERT.3 b/man/SD_ALERT.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_ALERT.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_ALERT.html b/man/SD_ALERT.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_ALERT.html
+++ b/man/SD_ALERT.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_CRIT.3 b/man/SD_CRIT.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_CRIT.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_CRIT.html b/man/SD_CRIT.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_CRIT.html
+++ b/man/SD_CRIT.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_DEBUG.3 b/man/SD_DEBUG.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_DEBUG.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_DEBUG.html b/man/SD_DEBUG.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_DEBUG.html
+++ b/man/SD_DEBUG.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_EMERG.3 b/man/SD_EMERG.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_EMERG.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_EMERG.html b/man/SD_EMERG.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_EMERG.html
+++ b/man/SD_EMERG.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_ERR.3 b/man/SD_ERR.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_ERR.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_ERR.html b/man/SD_ERR.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_ERR.html
+++ b/man/SD_ERR.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_ID128_CONST_STR.3 b/man/SD_ID128_CONST_STR.3
new file mode 100644
index 0000000000..e201b0f6fa
--- /dev/null
+++ b/man/SD_ID128_CONST_STR.3
@@ -0,0 +1 @@
+.so man3/sd-id128.3
diff --git a/man/SD_ID128_CONST_STR.html b/man/SD_ID128_CONST_STR.html
index c29d171da1..6bd1585c5a 100644
--- a/man/SD_ID128_CONST_STR.html
+++ b/man/SD_ID128_CONST_STR.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/SD_ID128_FORMAT_STR.3 b/man/SD_ID128_FORMAT_STR.3
new file mode 100644
index 0000000000..e201b0f6fa
--- /dev/null
+++ b/man/SD_ID128_FORMAT_STR.3
@@ -0,0 +1 @@
+.so man3/sd-id128.3
diff --git a/man/SD_ID128_FORMAT_STR.html b/man/SD_ID128_FORMAT_STR.html
index c29d171da1..6bd1585c5a 100644
--- a/man/SD_ID128_FORMAT_STR.html
+++ b/man/SD_ID128_FORMAT_STR.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/SD_ID128_FORMAT_VAL.3 b/man/SD_ID128_FORMAT_VAL.3
new file mode 100644
index 0000000000..e201b0f6fa
--- /dev/null
+++ b/man/SD_ID128_FORMAT_VAL.3
@@ -0,0 +1 @@
+.so man3/sd-id128.3
diff --git a/man/SD_ID128_FORMAT_VAL.html b/man/SD_ID128_FORMAT_VAL.html
index c29d171da1..6bd1585c5a 100644
--- a/man/SD_ID128_FORMAT_VAL.html
+++ b/man/SD_ID128_FORMAT_VAL.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/SD_ID128_MAKE.3 b/man/SD_ID128_MAKE.3
new file mode 100644
index 0000000000..e201b0f6fa
--- /dev/null
+++ b/man/SD_ID128_MAKE.3
@@ -0,0 +1 @@
+.so man3/sd-id128.3
diff --git a/man/SD_ID128_MAKE.html b/man/SD_ID128_MAKE.html
index c29d171da1..6bd1585c5a 100644
--- a/man/SD_ID128_MAKE.html
+++ b/man/SD_ID128_MAKE.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/SD_INFO.3 b/man/SD_INFO.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_INFO.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_INFO.html b/man/SD_INFO.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_INFO.html
+++ b/man/SD_INFO.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_APPEND.3 b/man/SD_JOURNAL_APPEND.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/SD_JOURNAL_APPEND.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/SD_JOURNAL_APPEND.html b/man/SD_JOURNAL_APPEND.html
index 91ba994e49..deb02e768c 100644
--- a/man/SD_JOURNAL_APPEND.html
+++ b/man/SD_JOURNAL_APPEND.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_CURRENT_USER.3 b/man/SD_JOURNAL_CURRENT_USER.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/SD_JOURNAL_CURRENT_USER.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/SD_JOURNAL_SYSTEM_ONLY.html b/man/SD_JOURNAL_CURRENT_USER.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/SD_JOURNAL_SYSTEM_ONLY.html
+++ b/man/SD_JOURNAL_CURRENT_USER.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_FOREACH.3 b/man/SD_JOURNAL_FOREACH.3
new file mode 100644
index 0000000000..93a93a1c06
--- /dev/null
+++ b/man/SD_JOURNAL_FOREACH.3
@@ -0,0 +1 @@
+.so man3/sd_journal_next.3
diff --git a/man/SD_JOURNAL_FOREACH.html b/man/SD_JOURNAL_FOREACH.html
index 7a5cd7c414..4b66ec502d 100644
--- a/man/SD_JOURNAL_FOREACH.html
+++ b/man/SD_JOURNAL_FOREACH.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772947248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274688721504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
the read pointer into the journal by one entry. The
only argument taken is a journal context object as
allocated via
@@ -48,7 +48,7 @@
for an example. Similar,
<code class="function">SD_JOURNAL_FOREACH_BACKWARDS()</code>
may be used for iterating the journal in reverse
- order.</p></div><div class="refsect1"><a name="idm259772933856"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
+ order.</p></div><div class="refsect1"><a name="idm274688708112"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
advanced/set back on success or a negative errno-style
error code. When the end or beginning of the journal
is reached, a number smaller than requested is
@@ -57,14 +57,13 @@
<code class="function">sd_journal_previous()</code> reach the
end/beginning of the journal they will return 0,
instead of 1 when they are successful. This should be
- considered an EOF marker.</p></div><div class="refsect1"><a name="idm259772923184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
+ considered an EOF marker.</p></div><div class="refsect1"><a name="idm274688698112"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
<code class="function">sd_journal_next_skip()</code> and
<code class="function">sd_journal_previous_skip()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772917408"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274688692528"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -90,7 +89,7 @@ int main(int argc, char *argv[]) {
}
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259772914160"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274688689024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_FOREACH_BACKWARDS.3 b/man/SD_JOURNAL_FOREACH_BACKWARDS.3
new file mode 100644
index 0000000000..93a93a1c06
--- /dev/null
+++ b/man/SD_JOURNAL_FOREACH_BACKWARDS.3
@@ -0,0 +1 @@
+.so man3/sd_journal_next.3
diff --git a/man/SD_JOURNAL_FOREACH_BACKWARDS.html b/man/SD_JOURNAL_FOREACH_BACKWARDS.html
index 7a5cd7c414..4b66ec502d 100644
--- a/man/SD_JOURNAL_FOREACH_BACKWARDS.html
+++ b/man/SD_JOURNAL_FOREACH_BACKWARDS.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772947248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274688721504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
the read pointer into the journal by one entry. The
only argument taken is a journal context object as
allocated via
@@ -48,7 +48,7 @@
for an example. Similar,
<code class="function">SD_JOURNAL_FOREACH_BACKWARDS()</code>
may be used for iterating the journal in reverse
- order.</p></div><div class="refsect1"><a name="idm259772933856"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
+ order.</p></div><div class="refsect1"><a name="idm274688708112"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
advanced/set back on success or a negative errno-style
error code. When the end or beginning of the journal
is reached, a number smaller than requested is
@@ -57,14 +57,13 @@
<code class="function">sd_journal_previous()</code> reach the
end/beginning of the journal they will return 0,
instead of 1 when they are successful. This should be
- considered an EOF marker.</p></div><div class="refsect1"><a name="idm259772923184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
+ considered an EOF marker.</p></div><div class="refsect1"><a name="idm274688698112"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
<code class="function">sd_journal_next_skip()</code> and
<code class="function">sd_journal_previous_skip()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772917408"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274688692528"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -90,7 +89,7 @@ int main(int argc, char *argv[]) {
}
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259772914160"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274688689024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_FOREACH_DATA.3 b/man/SD_JOURNAL_FOREACH_DATA.3
new file mode 100644
index 0000000000..25bd005a92
--- /dev/null
+++ b/man/SD_JOURNAL_FOREACH_DATA.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_data.3
diff --git a/man/SD_JOURNAL_FOREACH_DATA.html b/man/SD_JOURNAL_FOREACH_DATA.html
index 924d74ecf0..677c8836ed 100644
--- a/man/SD_JOURNAL_FOREACH_DATA.html
+++ b/man/SD_JOURNAL_FOREACH_DATA.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782712960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274684373776"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
the data object associated with a specific field from
the current journal entry. It takes four arguments:
the journal context object, a string with the field
@@ -77,12 +77,12 @@
having to decompress large compressed data objects in
full.</p><p><code class="function">sd_journal_get_data_threshold()</code>
returns the currently configured data field size
- threshold.</p></div><div class="refsect1"><a name="idm259782687296"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
+ threshold.</p></div><div class="refsect1"><a name="idm274684347840"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <code class="function">sd_journal_enumerate_data()</code>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -92,7 +92,7 @@
nothing. <code class="function">sd_journal_set_data_threshold()</code>
and <code class="function">sd_journal_get_threshold()</code>
return 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259782681248"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274684341792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
<code class="function">sd_journal_enumerate_data()</code>,
<code class="function">sd_journal_restart_data()</code>,
<code class="function">sd_journal_set_data_threshold()</code>
@@ -100,9 +100,8 @@
<code class="function">sd_journal_get_data_threshold()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777759888"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274679375856"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
for a complete example how to use
<code class="function">sd_journal_get_data()</code>.</p><p>Use the
@@ -115,7 +114,7 @@ int print_fields(sd_journal *j) {
SD_JOURNAL_FOREACH_DATA(j, data, length)
printf("%.*s\n", (int) length, data);
}
-...</pre></div><div class="refsect1"><a name="idm259777755392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+...</pre></div><div class="refsect1"><a name="idm274679371360"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_FOREACH_UNIQUE.3 b/man/SD_JOURNAL_FOREACH_UNIQUE.3
new file mode 100644
index 0000000000..69f4069cda
--- /dev/null
+++ b/man/SD_JOURNAL_FOREACH_UNIQUE.3
@@ -0,0 +1 @@
+.so man3/sd_journal_query_unique.3
diff --git a/man/SD_JOURNAL_FOREACH_UNIQUE.html b/man/SD_JOURNAL_FOREACH_UNIQUE.html
index 4edd48f1f4..6605f2ba5b 100644
--- a/man/SD_JOURNAL_FOREACH_UNIQUE.html
+++ b/man/SD_JOURNAL_FOREACH_UNIQUE.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782903840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274683751280"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
queries the journal for all unique values the
specified field can take. It takes two arguments: the
journal to query and the field name to look
@@ -60,21 +60,20 @@
influenced by matches set with
<code class="function">sd_journal_add_match()</code> but this
might change in a later version of this
- software.</p></div><div class="refsect1"><a name="idm259782890000"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ software.</p></div><div class="refsect1"><a name="idm274683737440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
returns 0 on success or a negative errno-style error
code. <code class="function">sd_journal_enumerate_unique()</code>
returns a positive integer if the next field data has
been read, 0 when no more fields are known, or a
negative errno-style error
code. <code class="function">sd_journal_restart_unique()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259782878928"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274683726464"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
<code class="function">sd_journal_enumerate_unique()</code> and
<code class="function">sd_journal_restart_unique()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259782873808"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274683721584"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
<code class="function">SD_JOURNAL_FOREACH_UNIQUE</code> macro
to iterate through all values a field of the journal
can take. The following example lists all unit names
@@ -102,7 +101,7 @@ int main(int argc, char *argv[]) {
printf("%.*s\n", (int) l, (const char*) d);
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259782869328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274683716976"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_INVALIDATE.3 b/man/SD_JOURNAL_INVALIDATE.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/SD_JOURNAL_INVALIDATE.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/SD_JOURNAL_INVALIDATE.html b/man/SD_JOURNAL_INVALIDATE.html
index 91ba994e49..deb02e768c 100644
--- a/man/SD_JOURNAL_INVALIDATE.html
+++ b/man/SD_JOURNAL_INVALIDATE.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_LOCAL_ONLY.3 b/man/SD_JOURNAL_LOCAL_ONLY.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/SD_JOURNAL_LOCAL_ONLY.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/SD_JOURNAL_LOCAL_ONLY.html b/man/SD_JOURNAL_LOCAL_ONLY.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/SD_JOURNAL_LOCAL_ONLY.html
+++ b/man/SD_JOURNAL_LOCAL_ONLY.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_NOP.3 b/man/SD_JOURNAL_NOP.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/SD_JOURNAL_NOP.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/SD_JOURNAL_NOP.html b/man/SD_JOURNAL_NOP.html
index 91ba994e49..deb02e768c 100644
--- a/man/SD_JOURNAL_NOP.html
+++ b/man/SD_JOURNAL_NOP.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_RUNTIME_ONLY.3 b/man/SD_JOURNAL_RUNTIME_ONLY.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/SD_JOURNAL_RUNTIME_ONLY.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/SD_JOURNAL_RUNTIME_ONLY.html b/man/SD_JOURNAL_RUNTIME_ONLY.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/SD_JOURNAL_RUNTIME_ONLY.html
+++ b/man/SD_JOURNAL_RUNTIME_ONLY.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_SUPPRESS_LOCATION.3 b/man/SD_JOURNAL_SUPPRESS_LOCATION.3
new file mode 100644
index 0000000000..102bfea111
--- /dev/null
+++ b/man/SD_JOURNAL_SUPPRESS_LOCATION.3
@@ -0,0 +1 @@
+.so man3/sd_journal_print.3
diff --git a/man/SD_JOURNAL_SUPPRESS_LOCATION.html b/man/SD_JOURNAL_SUPPRESS_LOCATION.html
index 5c3a673261..349702bd56 100644
--- a/man/SD_JOURNAL_SUPPRESS_LOCATION.html
+++ b/man/SD_JOURNAL_SUPPRESS_LOCATION.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259774278688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685988832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
used to submit simple, plain text log entries to the
system journal. The first argument is a priority
value. This is followed by a format string and its
@@ -28,14 +28,14 @@
or
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. The
priority value is one of
- <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. It is recommended to use this call to
@@ -44,15 +44,15 @@
are enforced.</p><p><code class="function">sd_journal_printv()</code> is
similar to <code class="function">sd_journal_print()</code> but
takes a variable argument list encapsulated in an
- object of type <code class="literal">va_list</code> (see
+ object of type <code class="varname">va_list</code> (see
<a href="stdarg.html"><span class="citerefentry"><span class="refentrytitle">stdarg</span>(3)</span></a>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</p><p><code class="function">sd_journal_send()</code> may be
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
- the format <code class="literal">VARIABLE=value</code>. The
+ terminated by <code class="constant">NULL</code>. The strings passed should be of
+ the format "<code class="literal">VARIABLE=value</code>". The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
with an underscore. (All assignments that do not
@@ -60,14 +60,14 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for details, but additional application defined fields
may be used. A variable may be assigned more than one
value per entry.</p><p><code class="function">sd_journal_sendv()</code> is
similar to <code class="function">sd_journal_send()</code> but
- takes an array of <code class="literal">struct iovec</code> (as
+ takes an array of <code class="varname">struct iovec</code> (as
defined in <code class="filename">uio.h</code>, see
<a href="readv.html"><span class="citerefentry"><span class="refentrytitle">readv</span>(3)</span></a>
for details) instead of the format string. Each
@@ -84,12 +84,12 @@
readable representation of the current error code
stored in
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <code class="constant">NULL</code> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <code class="literal">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
+ priority used is <code class="constant">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
is a wrapper around
<code class="function">sd_journal_sendv()</code> to make it
easier to use when only text strings shall be
@@ -101,7 +101,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
NULL);</pre><p>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<code class="filename">sd-journal.h</code>.</p><p><a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
and <code class="function">sd_journal_print()</code> may
@@ -112,24 +112,23 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<code class="function">sd_journal_print()</code> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
<code class="function">sd_journal_send()</code>. Using
<code class="function">syslog()</code> has the benefit of being
- more portable.</p></div><div class="refsect1"><a name="idm259774235216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
+ more portable.</p></div><div class="refsect1"><a name="idm274685947600"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
errno-style error code. The
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- variable itself is not altered.</p></div><div class="refsect1"><a name="idm259769322816"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
+ variable itself is not altered.</p></div><div class="refsect1"><a name="idm274685945488"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
<code class="function">sd_journal_printv()</code>,
<code class="function">sd_journal_send()</code> and
<code class="function">sd_journal_sendv()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259769317616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680973328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/SD_JOURNAL_SYSTEM.3 b/man/SD_JOURNAL_SYSTEM.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/SD_JOURNAL_SYSTEM.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/SD_JOURNAL_SYSTEM.html b/man/SD_JOURNAL_SYSTEM.html
new file mode 100644
index 0000000000..47476e1d8b
--- /dev/null
+++ b/man/SD_JOURNAL_SYSTEM.html
@@ -0,0 +1,120 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>sd_journal_open</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ the log journal for reading. It will find all journal
+ files automatically and interleave them automatically
+ when reading. As first argument it takes a pointer to
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
+ second argument is a flags field, which may consist of
+ the following flags ORed together:
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ only journal files generated on the local machine will
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
+ makes sure only volatile journal files will be opened,
+ excluding those which are stored on persistent
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes an absolute directory path as argument. All
+ journal files in this directory will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
+ close the journal context allocated with
+ <code class="function">sd_journal_open()</code> or
+ <code class="function">sd_journal_open_directory()</code> and
+ free its resources.</p><p>When opening the journal only journal files
+ accessible to the calling user will be opened. If
+ journal files are not accessible to the caller, this
+ will be silently ignored.</p><p>See
+ <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
+ for an example of how to iterate through the journal
+ after opening it with
+ <code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
+ <code class="function">sd_journal_open()</code> references a
+ specific journal entry as <span class="emphasis"><em>current</em></span> entry,
+ similar to a file seek index in a classic file system
+ file, but without absolute positions. It may be
+ altered with
+ <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
+ and
+ <a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a>
+ and related calls. The current entry position may be
+ exported in <span class="emphasis"><em>cursor</em></span> strings, as accessible
+ via
+ <a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. Cursor
+ strings may be used to globally identify a specific
+ journal entry in a stable way and then later to seek
+ to it (or if the specific entry is not available
+ locally, to its closest entry in time)
+ <a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
+ <code class="function">sd_journal_get_fd()</code> and related
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
+ return 0 on success or a negative errno-style error
+ code. <code class="function">sd_journal_close()</code> returns
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code> and
+ <code class="function">sd_journal_close()</code> interfaces are
+ available as a shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
+ <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
+ <a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>
+ </p></div></div></body></html>
diff --git a/man/SD_LISTEN_FDS_START.3 b/man/SD_LISTEN_FDS_START.3
new file mode 100644
index 0000000000..2191e918df
--- /dev/null
+++ b/man/SD_LISTEN_FDS_START.3
@@ -0,0 +1 @@
+.so man3/sd_listen_fds.3
diff --git a/man/SD_LISTEN_FDS_START.html b/man/SD_LISTEN_FDS_START.html
index ccf9edbd91..6af7146da3 100644
--- a/man/SD_LISTEN_FDS_START.html
+++ b/man/SD_LISTEN_FDS_START.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_listen_fds"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_listen_fds, SD_LISTEN_FDS_START — Check for file descriptors passed by the system manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><pre class="funcsynopsisinfo">#define SD_LISTEN_FDS_START 3</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_listen_fds</b>(</code></td><td>int <var class="pdparam">unset_environment</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784828416"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_listen_fds()</code> shall be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_listen_fds"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_listen_fds, SD_LISTEN_FDS_START — Check for file descriptors passed by the system manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><pre class="funcsynopsisinfo">#define SD_LISTEN_FDS_START 3</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_listen_fds</b>(</code></td><td>int <var class="pdparam">unset_environment</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274679238848"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_listen_fds()</code> shall be
called by a daemon to check for file descriptors
passed by the init system as part of the socket-based
activation logic.</p><p>If the <em class="parameter"><code>unset_environment</code></em>
- parameter is non-zero
+ parameter is non-zero,
<code class="function">sd_listen_fds()</code> will unset the
<code class="varname">$LISTEN_FDS</code>/<code class="varname">$LISTEN_PID</code>
environment variables before returning (regardless
@@ -34,31 +34,31 @@
processes.</p><p>If a daemon receives more than one file
descriptor, they will be passed in the same order as
configured in the systemd socket definition
- file. Nonetheless it is recommended to verify the
+ file. Nonetheless, it is recommended to verify the
correct socket types before using them. To simplify
- this checking the functions
+ this checking, the functions
<a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>,
<a href="sd_is_socket.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket</span>(3)</span></a>,
<a href="sd_is_socket_inet.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_inet</span>(3)</span></a>,
<a href="sd_is_socket_unix.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_unix</span>(3)</span></a>
- are provided. In order to maximize flexibility it is
+ are provided. In order to maximize flexibility, it is
recommended to make these checks as loose as possible
- without allowing incorrect setups. i.e. often the
+ without allowing incorrect setups. i.e. often, the
actual port number a socket is bound to matters little
for the service to work, hence it should not be
verified. On the other hand, whether a socket is a
datagram or stream socket matters a lot for the most
common program logics and should be checked.</p><p>This function call will set the FD_CLOEXEC flag
for all passed file descriptors to avoid further
- inheritance to children of the calling process.</p></div><div class="refsect1"><a name="idm259784817584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, this call returns a negative
+ inheritance to children of the calling process.</p></div><div class="refsect1"><a name="idm274679228016"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, this call returns a negative
errno-style error code. If
<code class="varname">$LISTEN_FDS</code>/<code class="varname">$LISTEN_PID</code>
was not set or was not correctly set for this daemon and
hence no file descriptors were received, 0 is
- returned. Otherwise the number of file descriptors
+ returned. Otherwise, the number of file descriptors
passed is returned. The application may find them
starting with file descriptor SD_LISTEN_FDS_START,
- i.e. file descriptor 3.</p></div><div class="refsect1"><a name="idm259788713104"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
+ i.e. file descriptor 3.</p></div><div class="refsect1"><a name="idm274683123968"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithm it
implements is simple, and can easily be reimplemented
@@ -67,11 +67,11 @@
implementation.</p><p>Internally, this function checks whether the
<code class="varname">$LISTEN_PID</code> environment variable
equals the daemon PID. If not, it returns
- immediately. Otherwise it parses the number passed in
+ immediately. Otherwise, it parses the number passed in
the <code class="varname">$LISTEN_FDS</code> environment
variable, then sets the FD_CLOEXEC flag for the parsed
number of file descriptors starting from
- SD_LISTEN_FDS_START. Finally it returns the parsed
+ SD_LISTEN_FDS_START. Finally, it returns the parsed
number.</p><p>For details about the algorithm check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
@@ -81,23 +81,22 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation this function will always return 0 and
- otherwise become a NOP.</p></div><div class="refsect1"><a name="idm259788702720"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$LISTEN_PID"><span class="term"><code class="varname">$LISTEN_PID</code>, </span><span class="term"><code class="varname">$LISTEN_FDS</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_PID">¶</a></dt><dd><p>Set by the init system
+ compilation, this function will always return 0 and
+ otherwise become a NOP.</p></div><div class="refsect1"><a name="idm274683113840"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$LISTEN_PID"><span class="term"><code class="varname">$LISTEN_PID</code>, </span><span class="term"><code class="varname">$LISTEN_FDS</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_PID">¶</a></dt><dd><p>Set by the init system
for supervised processes that use
socket-based activation. This
environment variable specifies the
data
<code class="function">sd_listen_fds()</code>
parses. See above for
- details.</p></dd></dl></div></div><div class="refsect1"><a name="idm259788691040"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ details.</p></dd></dl></div></div><div class="refsect1"><a name="idm274683109248"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>,
diff --git a/man/SD_NOTICE.3 b/man/SD_NOTICE.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_NOTICE.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_NOTICE.html b/man/SD_NOTICE.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_NOTICE.html
+++ b/man/SD_NOTICE.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/SD_WARNING.3 b/man/SD_WARNING.3
new file mode 100644
index 0000000000..d5f713ec46
--- /dev/null
+++ b/man/SD_WARNING.3
@@ -0,0 +1 @@
+.so man3/sd-daemon.3
diff --git a/man/SD_WARNING.html b/man/SD_WARNING.html
index 8d0c31281d..8003b756e8 100644
--- a/man/SD_WARNING.html
+++ b/man/SD_WARNING.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/binfmt.d.5 b/man/binfmt.d.5
new file mode 100644
index 0000000000..2fb3fd03d0
--- /dev/null
+++ b/man/binfmt.d.5
@@ -0,0 +1,88 @@
+'\" t
+.TH "BINFMT\&.D" "5" "" "systemd 208" "binfmt.d"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+binfmt.d \- Configure additional binary formats for executables at boot
+.SH "SYNOPSIS"
+.PP
+/etc/binfmt\&.d/*\&.conf
+.PP
+/run/binfmt\&.d/*\&.conf
+.PP
+/usr/lib/binfmt\&.d/*\&.conf
+.SH "DESCRIPTION"
+.PP
+At boot,
+\fBsystemd-binfmt.service\fR(8)
+reads configuration files from the above directories to register in the kernel additional binary formats for executables\&.
+.SH "CONFIGURATION FORMAT"
+.PP
+Each file contains a list of binfmt_misc kernel binary format rules\&. Consult
+\m[blue]\fBbinfmt_misc\&.txt\fR\m[]\&\s-2\u[1]\d\s+2
+for more information on registration of additional binary formats and how to write rules\&.
+.PP
+Empty lines and lines beginning with ; and # are ignored\&. Note that this means you may not use ; and # as delimiter in binary format rules\&.
+.PP
+Each configuration file shall be named in the style of
+\fIprogram\fR\&.conf\&. Files in
+/etc/
+override files with the same name in
+/usr/lib/
+and
+/run/\&. Files in
+/run/
+override files with the same name in
+/usr/lib/\&. Packages should install their configuration files in
+/usr/lib/, files in
+/etc/
+are reserved for the local administrator, who may use this logic to override the configuration files installed from vendor packages\&. All files are sorted by their filename in lexicographic order, regardless in which of the directories they reside\&. If multiple files specify the same binary type name, the entry in the file with the lexicographically latest name will be applied\&.
+.PP
+If the administrator wants to disable a configuration file supplied by the vendor, the recommended way is to place a symlink to
+/dev/null
+in
+/etc/binfmt\&.d/
+bearing the same filename\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&/etc/binfmt.d/wine.conf example:\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Start WINE on Windows executables
+:DOSWin:M::MZ::/usr/bin/wine:
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-binfmt.service\fR(8),
+\fBsystemd-delta\fR(1),
+\fBwine\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+binfmt_misc.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/binfmt_misc.txt
+.RE
diff --git a/man/binfmt.d.html b/man/binfmt.d.html
index 5c41de9966..9e1e8fbd6a 100644
--- a/man/binfmt.d.html
+++ b/man/binfmt.d.html
@@ -19,13 +19,13 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="binfmt.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>binfmt.d — Configure additional binary formats for
- executables at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/binfmt.d/*.conf</code></p><p><code class="filename">/run/binfmt.d/*.conf</code></p><p><code class="filename">/usr/lib/binfmt.d/*.conf</code></p></div><div class="refsect1"><a name="idm259789864160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>At boot,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="binfmt.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>binfmt.d — Configure additional binary formats for
+ executables at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/binfmt.d/*.conf</code></p><p><code class="filename">/run/binfmt.d/*.conf</code></p><p><code class="filename">/usr/lib/binfmt.d/*.conf</code></p></div><div class="refsect1"><a name="idm274694856288"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>At boot,
<a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a>
reads configuration files from the above directories
to register in the kernel additional binary
- formats for executables.</p></div><div class="refsect1"><a name="idm259786317744"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>Each file contains a list of binfmt_misc kernel
- binary format rules. Consult <a class="ulink" href="http://www.kernel.org/doc/Documentation/binfmt_misc.txt" target="_top">binfmt_misc.txt</a>
+ formats for executables.</p></div><div class="refsect1"><a name="idm274693435872"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>Each file contains a list of binfmt_misc kernel
+ binary format rules. Consult <a class="ulink" href="https://www.kernel.org/doc/Documentation/binfmt_misc.txt" target="_top">binfmt_misc.txt</a>
for more information on registration of additional
binary formats and how to write rules.</p><p>Empty lines and lines beginning with ; and # are
ignored. Note that this means you may not use ; and #
@@ -42,16 +42,16 @@
administrator, who may use this logic to override the
configuration files installed from vendor
packages. All files are sorted by their filename in
- alphabetical order, regardless in which of the
- directories they reside, to guarantee that a specific
- configuration file takes precedence over another file
- with an alphabetically later name.</p><p>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ lexicographic order, regardless in which of the
+ directories they reside. If multiple files specify
+ the same binary type name, the entry in the file with
+ the lexicographically latest name will be applied.</p><p>If the administrator wants to disable a
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<code class="filename">/dev/null</code> in
<code class="filename">/etc/binfmt.d/</code> bearing the
- same file name.</p></div><div class="refsect1"><a name="idm259786305920"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259786305248"></a><p class="title"><b>Example 1. /etc/binfmt.d/wine.conf example:</b></p><div class="example-contents"><pre class="programlisting"># Start WINE on Windows executables
-:DOSWin:M::MZ::/usr/bin/wine:</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259786303600"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ same filename.</p></div><div class="refsect1"><a name="idm274693042576"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274694573168"></a><p class="title"><b>Example 1. /etc/binfmt.d/wine.conf example:</b></p><div class="example-contents"><pre class="programlisting"># Start WINE on Windows executables
+:DOSWin:M::MZ::/usr/bin/wine:</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274694448960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a>,
<a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>,
diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml
index 762d1fc66e..94f97e0ed4 100644
--- a/man/binfmt.d.xml
+++ b/man/binfmt.d.xml
@@ -67,7 +67,7 @@
<para>Each file contains a list of binfmt_misc kernel
binary format rules. Consult <ulink
- url="http://www.kernel.org/doc/Documentation/binfmt_misc.txt">binfmt_misc.txt</ulink>
+ url="https://www.kernel.org/doc/Documentation/binfmt_misc.txt">binfmt_misc.txt</ulink>
for more information on registration of additional
binary formats and how to write rules.</para>
@@ -88,17 +88,17 @@
administrator, who may use this logic to override the
configuration files installed from vendor
packages. All files are sorted by their filename in
- alphabetical order, regardless in which of the
- directories they reside, to guarantee that a specific
- configuration file takes precedence over another file
- with an alphabetically later name.</para>
+ lexicographic order, regardless in which of the
+ directories they reside. If multiple files specify
+ the same binary type name, the entry in the file with
+ the lexicographically latest name will be applied.</para>
<para>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<filename>/dev/null</filename> in
<filename>/etc/binfmt.d/</filename> bearing the
- same file name.</para>
+ same filename.</para>
</refsect1>
<refsect1>
diff --git a/man/bootchart.conf.5 b/man/bootchart.conf.5
new file mode 100644
index 0000000000..901d343cd4
--- /dev/null
+++ b/man/bootchart.conf.5
@@ -0,0 +1,88 @@
+'\" t
+.TH "BOOTCHART\&.CONF" "5" "" "systemd 208" "bootchart.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+bootchart.conf \- Boot performance analysis graphing tool configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/systemd/bootchart\&.conf
+.SH "DESCRIPTION"
+.PP
+When starting, systemd\-bootchart will read the configuration file
+bootchart\&.conf\&. This configuration file determines logging parameters and graph output\&.
+.SH "OPTIONS"
+.PP
+\fISamples=500\fR
+.RS 4
+Configure the amount of samples to record in total before bootchart exits\&. Each sample will record at intervals defined by Frequency=\&.
+.RE
+.PP
+\fIFrequency=25\fR
+.RS 4
+Configure the sample log frequency\&. This can be a fractional number, but must be larger than 0\&.0\&. Most systems can cope with values under 25\-50 without impacting boot time severely\&.
+.RE
+.PP
+\fIRelative=no\fR
+.RS 4
+Configures whether the left axis of the output graph equals time=0\&.0 (\fBCLOCK_MONOTONIC\fR
+start)\&. This is useful for using bootchart at post\-boot time to profile an already booted system, otherwise the graph would become extremely large\&. If set to yes, the horizontal axis starts at the first recorded sample instead of time=0\&.0\&.
+.RE
+.PP
+\fIFilter=no\fR
+.RS 4
+Configures whether the resulting graph should omit tasks that did not contribute significantly to the boot\&. Processes that are too short\-lived (only seen in one sample) or that do not consume any significant CPU time (less than 0\&.001sec) will not be displayed in the output graph\&.
+.RE
+.PP
+\fIOutput=[path]\fR
+.RS 4
+Configures the output directory for writing the graphs\&. By default, bootchart writes the graphs to
+/run/log\&.
+.RE
+.PP
+\fIInit=[path]\fR
+.RS 4
+Configures bootchart to run a non\-standard binary instead of
+/sbin/init\&. This option is only relevant if bootchart was invoked from the kernel command line with init=/usr/lib/systemd/systemd\-bootchart\&.
+.RE
+.PP
+\fIPlotMemoryUsage=no\fR
+.RS 4
+If set to yes, enables logging and graphing of processes\*(Aq PSS memory consumption\&.
+.RE
+.PP
+\fIPlotEntropyGraph=no\fR
+.RS 4
+If set to yes, enables logging and graphing of the kernel random entropy pool size\&.
+.RE
+.PP
+\fIScaleX=100\fR
+.RS 4
+Horizontal scaling factor for all variable graph components\&.
+.RE
+.PP
+\fIScaleY=20\fR
+.RS 4
+Vertical scaling factor for all variable graph components\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd-bootchart\fR(1),
+\fBsystemd.directives\fR(7)
diff --git a/man/bootchart.conf.html b/man/bootchart.conf.html
index 406e5ac229..3965dc2223 100644
--- a/man/bootchart.conf.html
+++ b/man/bootchart.conf.html
@@ -19,16 +19,16 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="bootchart.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>bootchart.conf — Boot performance analysis graphing tool configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/bootchart.conf</code></p></div><div class="refsect1"><a name="idm259797249936"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>When starting, systemd-bootchart will read the
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="bootchart.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>bootchart.conf — Boot performance analysis graphing tool configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/bootchart.conf</code></p></div><div class="refsect1"><a name="idm274677131392"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>When starting, systemd-bootchart will read the
configuration file <code class="filename">bootchart.conf</code>.
This configuration file determines logging parameters and
- graph output.</p></div><div class="refsect1"><a name="idm259797247936"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="Samples=500"><span class="term"><code class="varname">Samples=500</code></span><a class="headerlink" title="Permalink to this term" href="#Samples=500">¶</a></dt><dd><p>Configure the amount of samples to
- record total before bootchart exits. Each sample will
+ graph output.</p></div><div class="refsect1"><a name="idm274677129392"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="Samples=500"><span class="term"><code class="varname">Samples=500</code></span><a class="headerlink" title="Permalink to this term" href="#Samples=500">¶</a></dt><dd><p>Configure the amount of samples to
+ record in total before bootchart exits. Each sample will
record at intervals defined by Frequency=.</p></dd><dt id="Frequency=25"><span class="term"><code class="varname">Frequency=25</code></span><a class="headerlink" title="Permalink to this term" href="#Frequency=25">¶</a></dt><dd><p>Configure the sample log frequency.
This can be a fractional number, but must be larger than
0.0. Most systems can cope with values under 25-50 without
impacting boot time severely.</p></dd><dt id="Relative=no"><span class="term"><code class="varname">Relative=no</code></span><a class="headerlink" title="Permalink to this term" href="#Relative=no">¶</a></dt><dd><p>Configures whether the left axis of the
- output graph equals time=0.0 (CLOCK_MONOTONIC start). This
+ output graph equals time=0.0 (<code class="constant">CLOCK_MONOTONIC</code> start). This
is useful for using bootchart at post-boot time to profile
an already booted system, otherwise the graph would become
extremely large. If set to yes, the horizontal axis starts
@@ -38,17 +38,17 @@
to the boot. Processes that are too short-lived (only
seen in one sample) or that do not consume any significant
CPU time (less than 0.001sec) will not be displayed in
- the output graph.</p></dd><dt id="Output=[path]"><span class="term"><code class="varname">Output=[path]</code></span><a class="headerlink" title="Permalink to this term" href="#Output=%5Bpath%5D">¶</a></dt><dd><p>Configures the output folder for writing
+ the output graph.</p></dd><dt id="Output=[path]"><span class="term"><code class="varname">Output=[path]</code></span><a class="headerlink" title="Permalink to this term" href="#Output=%5Bpath%5D">¶</a></dt><dd><p>Configures the output directory for writing
the graphs. By default, bootchart writes the graphs to
<code class="filename">/run/log</code>.</p></dd><dt id="Init=[path]"><span class="term"><code class="varname">Init=[path]</code></span><a class="headerlink" title="Permalink to this term" href="#Init=%5Bpath%5D">¶</a></dt><dd><p>Configures bootchart to run a non-standard
binary instead of <code class="filename">/sbin/init</code>. This
option is only relevant if bootchart was invoked from the
kernel command line with
init=/usr/lib/systemd/systemd-bootchart.</p></dd><dt id="PlotMemoryUsage=no"><span class="term"><code class="varname">PlotMemoryUsage=no</code></span><a class="headerlink" title="Permalink to this term" href="#PlotMemoryUsage=no">¶</a></dt><dd><p>If set to yes, enables logging and graphing
- of processes PSS memory consumption.</p></dd><dt id="PlotEntropyGraph=no"><span class="term"><code class="varname">PlotEntropyGraph=no</code></span><a class="headerlink" title="Permalink to this term" href="#PlotEntropyGraph=no">¶</a></dt><dd><p>If set to yes, enables logging and graphing
+ of processes' PSS memory consumption.</p></dd><dt id="PlotEntropyGraph=no"><span class="term"><code class="varname">PlotEntropyGraph=no</code></span><a class="headerlink" title="Permalink to this term" href="#PlotEntropyGraph=no">¶</a></dt><dd><p>If set to yes, enables logging and graphing
of the kernel random entropy pool size.</p></dd><dt id="ScaleX=100"><span class="term"><code class="varname">ScaleX=100</code></span><a class="headerlink" title="Permalink to this term" href="#ScaleX=100">¶</a></dt><dd><p>Horizontal scaling factor for all variable
graph components.</p></dd><dt id="ScaleY=20"><span class="term"><code class="varname">ScaleY=20</code></span><a class="headerlink" title="Permalink to this term" href="#ScaleY=20">¶</a></dt><dd><p>Vertical scaling factor for all variable
- graph components.</p></dd></dl></div></div><div class="refsect1"><a name="idm259801179456"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ graph components.</p></dd></dl></div></div><div class="refsect1"><a name="idm274677185504"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>,
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
</p></div></div></body></html>
diff --git a/man/bootchart.conf.xml b/man/bootchart.conf.xml
index 1e440eb2cc..68d10d4415 100644
--- a/man/bootchart.conf.xml
+++ b/man/bootchart.conf.xml
@@ -72,7 +72,7 @@
<varlistentry>
<term><varname>Samples=500</varname></term>
<listitem><para>Configure the amount of samples to
- record total before bootchart exits. Each sample will
+ record in total before bootchart exits. Each sample will
record at intervals defined by Frequency=.</para></listitem>
</varlistentry>
@@ -87,7 +87,7 @@
<varlistentry>
<term><varname>Relative=no</varname></term>
<listitem><para>Configures whether the left axis of the
- output graph equals time=0.0 (CLOCK_MONOTONIC start). This
+ output graph equals time=0.0 (<constant>CLOCK_MONOTONIC</constant> start). This
is useful for using bootchart at post-boot time to profile
an already booted system, otherwise the graph would become
extremely large. If set to yes, the horizontal axis starts
@@ -107,7 +107,7 @@
<varlistentry>
<term><varname>Output=[path]</varname></term>
- <listitem><para>Configures the output folder for writing
+ <listitem><para>Configures the output directory for writing
the graphs. By default, bootchart writes the graphs to
<filename>/run/log</filename>.</para></listitem>
</varlistentry>
@@ -124,7 +124,7 @@
<varlistentry>
<term><varname>PlotMemoryUsage=no</varname></term>
<listitem><para>If set to yes, enables logging and graphing
- of processes PSS memory consumption.</para></listitem>
+ of processes' PSS memory consumption.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/man/bootup.7 b/man/bootup.7
new file mode 100644
index 0000000000..3d5f87ae80
--- /dev/null
+++ b/man/bootup.7
@@ -0,0 +1,251 @@
+'\" t
+.TH "BOOTUP" "7" "" "systemd 208" "bootup"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+bootup \- System bootup process
+.SH "DESCRIPTION"
+.PP
+A number of different components are involved in the system boot\&. Immediately after power\-up, the system BIOS will do minimal hardware initialization, and hand control over to a boot loader stored on a persistent storage device\&. This boot loader will then invoke an OS kernel from disk (or the network)\&. In the Linux case, this kernel (optionally) extracts and executes an initial RAM disk image (initrd), such as generated by
+\fBdracut\fR(8), which looks for the root file system (possibly using
+\fBsystemd\fR(1)
+for this)\&. After the root file system is found and mounted, the initrd hands over control to the host\*(Aqs system manager (such as
+\fBsystemd\fR(1)) stored on the OS image, which is then responsible for probing all remaining hardware, mounting all necessary file systems and spawning all configured services\&.
+.PP
+On shutdown, the system manager stops all services, unmounts all file systems (detaching the storage technologies backing them), and then (optionally) jumps back into the initrd code which unmounts/detaches the root file system and the storage it resides on\&. As a last step, the system is powered down\&.
+.PP
+Additional information about the system boot process may be found in
+\fBboot\fR(7)\&.
+.SH "SYSTEM MANAGER BOOTUP"
+.PP
+At boot, the system manager on the OS image is responsible for initializing the required file systems, services and drivers that are necessary for operation of the system\&. On
+\fBsystemd\fR(1)
+systems, this process is split up in various discrete steps which are exposed as target units\&. (See
+\fBsystemd.target\fR(5)
+for detailed information about target units\&.) The boot\-up process is highly parallelized so that the order in which specific target units are reached is not deterministic, but still adheres to a limited amount of ordering structure\&.
+.PP
+When systemd starts up the system, it will activate all units that are dependencies of
+default\&.target
+(as well as recursively all dependencies of these dependencies)\&. Usually,
+default\&.target
+is simply an alias of
+graphical\&.target
+or
+multi\-user\&.target, depending on whether the system is configured for a graphical UI or only for a text console\&. To enforce minimal ordering between the units pulled in, a number of well\-known target units are available, as listed on
+\fBsystemd.special\fR(7)\&.
+.PP
+The following chart is a structural overview of these well\-known units and their position in the boot\-up logic\&. The arrows describe which units are pulled in and ordered before which other units\&. Units near the top are started before units nearer to the bottom of the chart\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+local\-fs\-pre\&.target
+ |
+ v
+(various mounts and (various swap (various cryptsetup
+ fsck services\&.\&.\&.) devices\&.\&.\&.) devices\&.\&.\&.) (various low\-level (various low\-level
+ | | | services: udevd, API VFS mounts:
+ v v v tmpfiles, random mqueue, configfs,
+ local\-fs\&.target swap\&.target cryptsetup\&.target seed, sysctl, \&.\&.\&.) debugfs, \&.\&.\&.)
+ | | | | |
+ \e__________________|_________________ | ___________________|____________________/
+ \e|/
+ v
+ sysinit\&.target
+ |
+ ____________________________________/|\e________________________________________
+ / | | | \e
+ | | | | |
+ v v | v v
+ (various (various | (various rescue\&.service
+ timers\&.\&.\&.) paths\&.\&.\&.) | sockets\&.\&.\&.) |
+ | | | | v
+ v v | v \fIrescue\&.target\fR
+ timers\&.target paths\&.target | sockets\&.target
+ | | | |
+ \e__________________|_________________ | ___________________/
+ \e|/
+ v
+ basic\&.target
+ |
+ ____________________________________/| emergency\&.service
+ / | | |
+ | | | v
+ v v v \fIemergency\&.target\fR
+ display\- (various system (various system
+ manager\&.service services services)
+ | required for |
+ | graphical UIs) v
+ | | \fImulti\-user\&.target\fR
+ | | |
+ \e_________________ | _________________/
+ \e|/
+ v
+ \fIgraphical\&.target\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Target units that are commonly used as boot targets are
+\fIemphasized\fR\&. These units are good choices as goal targets, for example by passing them to the
+\fIsystemd\&.unit=\fR
+kernel command line option (see
+\fBsystemd\fR(1)) or by symlinking
+default\&.target
+to them\&.
+.SH "BOOTUP IN THE INITIAL RAM DISK (INITRD)"
+.PP
+The initial RAM disk implementation (initrd) can be set up using systemd as well\&. In this case, boot up inside the initrd follows the following structure\&.
+.PP
+The default target in the initrd is
+initrd\&.target\&. The bootup process begins identical to the system manager bootup (see above) until it reaches
+basic\&.target\&. From there, systemd approaches the special target
+initrd\&.target\&. If the root device can be mounted at
+/sysroot, the
+sysroot\&.mount
+unit becomes active and
+initrd\-root\-fs\&.target
+is reached\&. The service
+initrd\-parse\-etc\&.service
+scans
+/sysroot/etc/fstab
+for a possible
+/usr
+mount point and additional entries marked with the
+\fIx\-initrd\&.mount\fR
+option\&. All entries found are mounted below
+/sysroot, and
+initrd\-fs\&.target
+is reached\&. The service
+initrd\-cleanup\&.service
+isolates to the
+initrd\-switch\-root\&.target, where cleanup services can run\&. As the very last step, the
+initrd\-switch\-root\&.service
+is activated, which will cause the system to switch its root to
+/sysroot\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ : (beginning identical to above)
+ :
+ v
+ basic\&.target
+ | emergency\&.service
+ ______________________/| |
+ / | v
+ | sysroot\&.mount \fIemergency\&.target\fR
+ | |
+ | v
+ | initrd\-root\-fs\&.target
+ | |
+ | v
+ v initrd\-parse\-etc\&.service
+ (custom initrd |
+ services\&.\&.\&.) v
+ | (sysroot\-usr\&.mount and
+ | various mounts marked
+ | with fstab option
+ | x\-initrd\&.mount\&.\&.\&.)
+ | |
+ | v
+ | initrd\-fs\&.target
+ \e______________________ |
+ \e|
+ v
+ initrd\&.target
+ |
+ v
+ initrd\-cleanup\&.service
+ isolates to
+ initrd\-switch\-root\&.target
+ |
+ v
+ ______________________/|
+ / v
+ | initrd\-udevadm\-cleanup\-db\&.service
+ v |
+ (custom initrd |
+ services\&.\&.\&.) |
+ \e______________________ |
+ \e|
+ v
+ initrd\-switch\-root\&.target
+ |
+ v
+ initrd\-switch\-root\&.service
+ |
+ v
+ Transition to Host OS
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SYSTEM MANAGER SHUTDOWN"
+.PP
+System shutdown with systemd also consists of various target units with some minimal ordering structure applied:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ (conflicts with (conflicts with
+ all system all file system
+ services) mounts, swaps,
+ | cryptsetup
+ | devices, \&.\&.\&.)
+ | |
+ v v
+ shutdown\&.target umount\&.target
+ | |
+ \e_______ ______/
+ \e /
+ v
+ (various low\-level
+ services)
+ |
+ v
+ final\&.target
+ |
+ _____________________________________/ \e_________________________________
+ / | | \e
+ | | | |
+ v v v v
+systemd\-reboot\&.service systemd\-poweroff\&.service systemd\-halt\&.service systemd\-kexec\&.service
+ | | | |
+ v v v v
+ \fIreboot\&.target\fR \fIpoweroff\&.target\fR \fIhalt\&.target\fR \fIkexec\&.target\fR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Commonly used system shutdown targets are
+\fIemphasized\fR\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBboot\fR(7),
+\fBsystemd.special\fR(7),
+\fBsystemd.target\fR(5),
+\fBdracut\fR(8)
diff --git a/man/bootup.html b/man/bootup.html
index dda80b7ed9..480d82f2a6 100644
--- a/man/bootup.html
+++ b/man/bootup.html
@@ -19,54 +19,55 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="bootup"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>bootup — System bootup process</p></div><div class="refsect1"><a name="idm259799556448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A number of different components are involved in
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="bootup"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>bootup — System bootup process</p></div><div class="refsect1"><a name="idm274700304944"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A number of different components are involved in
the system boot. Immediately after power-up, the
system BIOS will do minimal hardware initialization,
and hand control over to a boot loader stored on a
persistent storage device. This boot loader will then
invoke an OS kernel from disk (or the network). In the
- Linux case this kernel (optionally) extracts and
- executes an initial RAM disk image (initrd) such as
- <a href="dracut.html"><span class="citerefentry"><span class="refentrytitle">dracut</span>(8)</span></a>
+ Linux case, this kernel (optionally) extracts and
+ executes an initial RAM disk image (initrd), such as
+ generated by
+ <a href="dracut.html"><span class="citerefentry"><span class="refentrytitle">dracut</span>(8)</span></a>,
which looks for the root file system (possibly using
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
for this). After the root file system is found and
- mounted the initrd hands over control to the host's
+ mounted, the initrd hands over control to the host's
system manager (such as
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>)
- stored on the OS image which is then responsible for
+ stored on the OS image, which is then responsible for
probing all remaining hardware, mounting all necessary
file systems and spawning all configured
- services.</p><p>On shutdown the system manager stops all
+ services.</p><p>On shutdown, the system manager stops all
services, unmounts all file systems (detaching the
storage technologies backing them), and then
(optionally) jumps back into the initrd code which
unmounts/detaches the root file system and the storage
- it resides on. As last step the system is powered down.</p><p>Additional information about the system boot
+ it resides on. As a last step, the system is powered down.</p><p>Additional information about the system boot
process may be found in
- <a href="boot.html"><span class="citerefentry"><span class="refentrytitle">boot</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm259795769488"></a><h2 id="System Manager Bootup">System Manager Bootup<a class="headerlink" title="Permalink to this headline" href="#System%20Manager%20Bootup">¶</a></h2><p>At boot, the system manager on the OS image is
+ <a href="boot.html"><span class="citerefentry"><span class="refentrytitle">boot</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm274696516160"></a><h2 id="System Manager Bootup">System Manager Bootup<a class="headerlink" title="Permalink to this headline" href="#System%20Manager%20Bootup">¶</a></h2><p>At boot, the system manager on the OS image is
responsible for initializing the required file
systems, services and drivers that are necessary for
operation of the system. On
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
- systems this process is split up in various discrete
+ systems, this process is split up in various discrete
steps which are exposed as target units. (See
<a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a>
for detailed information about target units.) The
boot-up process is highly parallelized so that the
order in which specific target units are reached is not
deterministic, but still adheres to a limited amount
- of ordering structure.</p><p>When systemd starts up the system it will
+ of ordering structure.</p><p>When systemd starts up the system, it will
activate all units that are dependencies of
<code class="filename">default.target</code> (as well as
recursively all dependencies of these
- dependencies). Usually
+ dependencies). Usually,
<code class="filename">default.target</code> is simply an alias
of <code class="filename">graphical.target</code> or
- <code class="filename">multi-user.target</code> depending on
+ <code class="filename">multi-user.target</code>, depending on
whether the system is configured for a graphical UI or
only for a text console. To enforce minimal ordering
- between the units pulled in a number of well-known
+ between the units pulled in, a number of well-known
target units are available, as listed on
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>.</p><p>The following chart is a structural overview of
these well-known units and their position in the
@@ -123,8 +124,8 @@
option (see
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>)
or by symlinking <code class="filename">default.target</code>
- to them.</p></div><div class="refsect1"><a name="idm259799649264"></a><h2 id="Bootup in the Initial RAM Disk (initrd)">Bootup in the Initial RAM Disk (initrd)<a class="headerlink" title="Permalink to this headline" href="#Bootup%20in%20the%20Initial%20RAM%20Disk%20(initrd)">¶</a></h2><p>The initial RAM disk implementation (initrd) can
- be set up using systemd as well. In this case boot up
+ to them.</p></div><div class="refsect1"><a name="idm274700399104"></a><h2 id="Bootup in the Initial RAM Disk (initrd)">Bootup in the Initial RAM Disk (initrd)<a class="headerlink" title="Permalink to this headline" href="#Bootup%20in%20the%20Initial%20RAM%20Disk%20(initrd)">¶</a></h2><p>The initial RAM disk implementation (initrd) can
+ be set up using systemd as well. In this case, boot up
inside the initrd follows the following
structure.</p><p>The default target in the initrd is
<code class="filename">initrd.target</code>. The bootup process
@@ -201,7 +202,7 @@
initrd-switch-root.service
|
v
- Transition to Host OS</pre></div><div class="refsect1"><a name="idm259799624480"></a><h2 id="System Manager Shutdown">System Manager Shutdown<a class="headerlink" title="Permalink to this headline" href="#System%20Manager%20Shutdown">¶</a></h2><p>System shutdown with systemd also consists of
+ Transition to Host OS</pre></div><div class="refsect1"><a name="idm274700374144"></a><h2 id="System Manager Shutdown">System Manager Shutdown<a class="headerlink" title="Permalink to this headline" href="#System%20Manager%20Shutdown">¶</a></h2><p>System shutdown with systemd also consists of
various target units with some minimal ordering
structure applied:</p><pre class="programlisting"> (conflicts with (conflicts with
all system all file system
@@ -228,7 +229,7 @@
systemd-reboot.service systemd-poweroff.service systemd-halt.service systemd-kexec.service
| | | |
v v v v
- <span class="emphasis"><em>reboot.target</em></span> <span class="emphasis"><em>poweroff.target</em></span> <span class="emphasis"><em>halt.target</em></span> <span class="emphasis"><em>kexec.target</em></span></pre><p>Commonly used system shutdown targets are <span class="emphasis"><em>emphasized</em></span>.</p></div><div class="refsect1"><a name="idm259799616688"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <span class="emphasis"><em>reboot.target</em></span> <span class="emphasis"><em>poweroff.target</em></span> <span class="emphasis"><em>halt.target</em></span> <span class="emphasis"><em>kexec.target</em></span></pre><p>Commonly used system shutdown targets are <span class="emphasis"><em>emphasized</em></span>.</p></div><div class="refsect1"><a name="idm274700366304"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="boot.html"><span class="citerefentry"><span class="refentrytitle">boot</span>(7)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
diff --git a/man/bootup.xml b/man/bootup.xml
index a596e85b70..65c2cee70e 100644
--- a/man/bootup.xml
+++ b/man/bootup.xml
@@ -56,26 +56,27 @@
and hand control over to a boot loader stored on a
persistent storage device. This boot loader will then
invoke an OS kernel from disk (or the network). In the
- Linux case this kernel (optionally) extracts and
- executes an initial RAM disk image (initrd) such as
- <citerefentry><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ Linux case, this kernel (optionally) extracts and
+ executes an initial RAM disk image (initrd), such as
+ generated by
+ <citerefentry><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
which looks for the root file system (possibly using
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
for this). After the root file system is found and
- mounted the initrd hands over control to the host's
+ mounted, the initrd hands over control to the host's
system manager (such as
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>)
- stored on the OS image which is then responsible for
+ stored on the OS image, which is then responsible for
probing all remaining hardware, mounting all necessary
file systems and spawning all configured
services.</para>
- <para>On shutdown the system manager stops all
+ <para>On shutdown, the system manager stops all
services, unmounts all file systems (detaching the
storage technologies backing them), and then
(optionally) jumps back into the initrd code which
unmounts/detaches the root file system and the storage
- it resides on. As last step the system is powered down.</para>
+ it resides on. As a last step, the system is powered down.</para>
<para>Additional information about the system boot
process may be found in
@@ -90,7 +91,7 @@
systems, services and drivers that are necessary for
operation of the system. On
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
- systems this process is split up in various discrete
+ systems, this process is split up in various discrete
steps which are exposed as target units. (See
<citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for detailed information about target units.) The
@@ -99,17 +100,17 @@
deterministic, but still adheres to a limited amount
of ordering structure.</para>
- <para>When systemd starts up the system it will
+ <para>When systemd starts up the system, it will
activate all units that are dependencies of
<filename>default.target</filename> (as well as
recursively all dependencies of these
- dependencies). Usually
+ dependencies). Usually,
<filename>default.target</filename> is simply an alias
of <filename>graphical.target</filename> or
- <filename>multi-user.target</filename> depending on
+ <filename>multi-user.target</filename>, depending on
whether the system is configured for a graphical UI or
only for a text console. To enforce minimal ordering
- between the units pulled in a number of well-known
+ between the units pulled in, a number of well-known
target units are available, as listed on
<citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
@@ -178,7 +179,7 @@
<refsect1>
<title>Bootup in the Initial RAM Disk (initrd)</title>
<para>The initial RAM disk implementation (initrd) can
- be set up using systemd as well. In this case boot up
+ be set up using systemd as well. In this case, boot up
inside the initrd follows the following
structure.</para>
diff --git a/man/crypttab.5 b/man/crypttab.5
new file mode 100644
index 0000000000..d67884b26a
--- /dev/null
+++ b/man/crypttab.5
@@ -0,0 +1,246 @@
+'\" t
+.TH "CRYPTTAB" "5" "" "systemd 208" "crypttab"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+crypttab \- Configuration for encrypted block devices
+.SH "SYNOPSIS"
+.PP
+/etc/crypttab
+.SH "DESCRIPTION"
+.PP
+The
+/etc/crypttab
+file describes encrypted block devices that are set up during system boot\&.
+.PP
+Empty lines and lines starting with the
+"#"
+character are ignored\&. Each of the remaining lines describes one encrypted block device, fields on the line are delimited by white space\&. The first two fields are mandatory, the remaining two are optional\&.
+.PP
+Setting up encrypted block devices using this file supports three encryption modes: LUKS, TrueCrypt and plain\&. See
+\fBcryptsetup\fR(8)
+for more information about each mode\&. When no mode is specified in the options field and the block device contains a LUKS signature, it is opened as a LUKS device; otherwise, it is assumed to be in raw dm\-crypt (plain mode) format\&.
+.PP
+The first field contains the name of the resulting encrypted block device; the device is set up within
+/dev/mapper/\&.
+.PP
+The second field contains a path to the underlying block device or file, or a specification of a block device via
+"UUID="
+followed by the UUID\&.
+.PP
+The third field specifies the encryption password\&. If the field is not present or the password is set to
+"none"
+or
+"\-", the password has to be manually entered during system boot\&. Otherwise, the field is interpreted as a absolute path to a file containing the encryption password\&. For swap encryption,
+/dev/urandom
+or the hardware device
+/dev/hw_random
+can be used as the password file; using
+/dev/random
+may prevent boot completion if the system does not have enough entropy to generate a truly random encryption key\&.
+.PP
+The fourth field, if present, is a comma\-delimited list of options\&. The following options are recognized:
+.PP
+\fIdiscard\fR
+.RS 4
+Allow discard requests to be passed through the encrypted block device\&. This improves performance on SSD storage but has security implications\&.
+.RE
+.PP
+\fIcipher=\fR
+.RS 4
+Specifies the cipher to use\&. See
+\fBcryptsetup\fR(8)
+for possible values and the default value of this option\&. A cipher with unpredictable IV values, such as
+"aes\-cbc\-essiv:sha256", is recommended\&.
+.RE
+.PP
+\fIhash=\fR
+.RS 4
+Specifies the hash to use for password hashing\&. See
+\fBcryptsetup\fR(8)
+for possible values and the default value of this option\&.
+.RE
+.PP
+\fIkeyfile\-offset=\fR
+.RS 4
+Specifies the number of bytes to skip at the start of the key file\&. See
+\fBcryptsetup\fR(8)
+for possible values and the default value of this option\&.
+.RE
+.PP
+\fIkeyfile\-size=\fR
+.RS 4
+Specifies the maximum number of bytes to read from the key file\&. See
+\fBcryptsetup\fR(8)
+for possible values and the default value of this option\&. This option is ignored in plain encryption mode, as the key file size is then given by the key size\&.
+.RE
+.PP
+\fIluks\fR
+.RS 4
+Force LUKS mode\&. When this mode is used, the following options are ignored since they are provided by the LUKS header on the device:
+\fIcipher=\fR,
+\fIhash=\fR,
+\fIsize=\fR\&.
+.RE
+.PP
+\fInoauto\fR
+.RS 4
+This device will not be automatically unlocked on boot\&.
+.RE
+.PP
+\fInofail\fR
+.RS 4
+The system will not wait for the device to show up and be unlocked at boot, and not fail the boot if it does not show up\&.
+.RE
+.PP
+\fIplain\fR
+.RS 4
+Force plain encryption mode\&.
+.RE
+.PP
+\fIread\-only\fR, \fIreadonly\fR
+.RS 4
+Set up the encrypted block device in read\-only mode\&.
+.RE
+.PP
+\fIsize=\fR
+.RS 4
+Specifies the key size in bits\&. See
+\fBcryptsetup\fR(8)
+for possible values and the default value of this option\&.
+.RE
+.PP
+\fIswap\fR
+.RS 4
+The encrypted block device will be used as a swap device, and will be formatted accordingly after setting up the encrypted block device, with
+\fBmkswap\fR(8)\&. This option implies
+\fIplain\fR\&.
+.sp
+WARNING: Using the
+\fIswap\fR
+option will destroy the contents of the named partition during every boot, so make sure the underlying block device is specified correctly\&.
+.RE
+.PP
+\fItcrypt\fR
+.RS 4
+Use TrueCrypt encryption mode\&. When this mode is used, the following options are ignored since they are provided by the TrueCrypt header on the device or do not apply:
+\fIcipher=\fR,
+\fIhash=\fR,
+\fIkeyfile\-offset=\fR,
+\fIkeyfile\-size=\fR,
+\fIsize=\fR\&.
+.sp
+When this mode is used, the passphrase is read from the key file given in the third field\&. Only the first line of this file is read, excluding the new line character\&.
+.sp
+Note that the TrueCrypt format uses both passphrase and key files to derive a password for the volume\&. Therefore, the passphrase and all key files need to be provided\&. Use
+\fItcrypt\-keyfile=\fR
+to provide the absolute path to all key files\&. When using an empty passphrase in combination with one or more key files, use
+"/dev/null"
+as the password file in the third field\&.
+.RE
+.PP
+\fItcrypt\-hidden\fR
+.RS 4
+Use the hidden TrueCrypt volume\&. This implies
+\fItcrypt\fR\&.
+.sp
+This will map the hidden volume that is inside of the volume provided in the second field\&. Please note that there is no protection for the hidden volume if the outer volume is mounted instead\&. See
+\fBcryptsetup\fR(8)
+for more information on this limitation\&.
+.RE
+.PP
+\fItcrypt\-keyfile=\fR
+.RS 4
+Specifies the absolute path to a key file to use for a TrueCrypt volume\&. This implies
+\fItcrypt\fR
+and can be used more than once to provide several key files\&.
+.sp
+See the entry for
+\fItcrypt\fR
+on the behavior of the passphrase and key files when using TrueCrypt encryption mode\&.
+.RE
+.PP
+\fItcrypt\-system\fR
+.RS 4
+Use TrueCrypt in system encryption mode\&. This implies
+\fItcrypt\fR\&.
+.sp
+Please note that when using this mode, the whole device needs to be given in the second field instead of the partition\&. For example: if
+"/dev/sda2"
+is the system encrypted TrueCrypt patition,
+"/dev/sda"
+has to be given\&.
+.RE
+.PP
+\fItimeout=\fR
+.RS 4
+Specifies the timeout for querying for a password\&. If no unit is specified, seconds is used\&. Supported units are s, ms, us, min, h, d\&. A timeout of 0 waits indefinitely (which is the default)\&.
+.RE
+.PP
+\fItmp\fR
+.RS 4
+The encrypted block device will be prepared for using it as
+/tmp; it will be formatted using
+\fBmke2fs\fR(8)\&. This option implies
+\fIplain\fR\&.
+.sp
+WARNING: Using the
+\fItmp\fR
+option will destroy the contents of the named partition during every boot, so make sure the underlying block device is specified correctly\&.
+.RE
+.PP
+\fItries=\fR
+.RS 4
+Specifies the maximum number of times the user is queried for a password\&. The default is 3\&. If set to 0, the user is queried for a password indefinitely\&.
+.RE
+.PP
+\fIverify\fR
+.RS 4
+If the encryption password is read from console, it has to be entered twice to prevent typos\&.
+.RE
+.PP
+At early boot and when the system manager configuration is reloaded, this file is translated into native systemd units by
+\fBsystemd-cryptsetup-generator\fR(8)\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&/etc/crypttab example\fR
+.PP
+Set up four encrypted block devices\&. One using LUKS for normal storage, another one for usage as a swap device and two TrueCrypt volumes\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+luks UUID=2505567a\-9e27\-4efe\-a4d5\-15ad146c258b
+swap /dev/sda7 /dev/urandom swap
+truecrypt /dev/sda2 /etc/container_password tcrypt
+hidden /mnt/tc_hidden /null tcrypt\-hidden,tcrypt\-keyfile=/etc/keyfile
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-cryptsetup@.service\fR(8),
+\fBsystemd-cryptsetup-generator\fR(8),
+\fBcryptsetup\fR(8),
+\fBmkswap\fR(8),
+\fBmke2fs\fR(8)
diff --git a/man/crypttab.html b/man/crypttab.html
index c9848c71b2..039e02a8cc 100644
--- a/man/crypttab.html
+++ b/man/crypttab.html
@@ -19,26 +19,30 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="crypttab"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>crypttab — Configuration for encrypted block devices</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/crypttab</code></p></div><div class="refsect1"><a name="idm259801426064"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/crypttab</code> file
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="crypttab"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>crypttab — Configuration for encrypted block devices</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/crypttab</code></p></div><div class="refsect1"><a name="idm274704570816"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/crypttab</code> file
describes encrypted block devices that are set up
- during system boot.</p><p>Empty lines and lines starting with the #
+ during system boot.</p><p>Empty lines and lines starting with the "<code class="literal">#</code>"
character are ignored. Each of the remaining lines
describes one encrypted block device, fields on the
line are delimited by white space. The first two
fields are mandatory, the remaining two are
- optional.</p><p>The first field contains the name of the
+ optional.</p><p>Setting up encrypted block devices using this file
+ supports three encryption modes: LUKS, TrueCrypt and plain.
+ See <a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
+ for more information about each mode. When no mode is specified
+ in the options field and the block device contains a LUKS
+ signature, it is opened as a LUKS device; otherwise, it is
+ assumed to be in raw dm-crypt (plain mode) format.</p><p>The first field contains the name of the
resulting encrypted block device; the device is set up
within <code class="filename">/dev/mapper/</code>.</p><p>The second field contains a path to the
- underlying block device, or a specification of a block
- device via <code class="literal">UUID=</code> followed by the
- UUID. If the block device contains a LUKS signature,
- it is opened as a LUKS encrypted partition; otherwise
- it is assumed to be a raw dm-crypt partition.</p><p>The third field specifies the encryption
+ underlying block device or file, or a specification of a block
+ device via "<code class="literal">UUID=</code>" followed by the
+ UUID.</p><p>The third field specifies the encryption
password. If the field is not present or the password
- is set to none, the password has to be manually
- entered during system boot. Otherwise the field is
- interpreted as a path to a file containing the
- encryption password. For swap encryption
+ is set to "<code class="literal">none</code>" or "<code class="literal">-</code>",
+ the password has to be manually entered during system boot.
+ Otherwise, the field is interpreted as a absolute path to
+ a file containing the encryption password. For swap encryption,
<code class="filename">/dev/urandom</code> or the hardware
device <code class="filename">/dev/hw_random</code> can be used
as the password file; using
@@ -46,85 +50,113 @@
completion if the system does not have enough entropy
to generate a truly random encryption key.</p><p>The fourth field, if present, is a
comma-delimited list of options. The following
- options are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="cipher="><span class="term"><code class="varname">cipher=</code></span><a class="headerlink" title="Permalink to this term" href="#cipher=">¶</a></dt><dd><p>Specifies the cipher
- to use; see
+ options are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="discard"><span class="term"><code class="varname">discard</code></span><a class="headerlink" title="Permalink to this term" href="#discard">¶</a></dt><dd><p>Allow discard requests to be
+ passed through the encrypted block device. This
+ improves performance on SSD storage but has
+ security implications.</p></dd><dt id="cipher="><span class="term"><code class="varname">cipher=</code></span><a class="headerlink" title="Permalink to this term" href="#cipher=">¶</a></dt><dd><p>Specifies the cipher to use. See
<a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
- for possible values and the default
- value of this option. A cipher with
- unpredictable IV values, such as
- <code class="literal">aes-cbc-essiv:sha256</code>,
- is recommended. </p></dd><dt id="size="><span class="term"><code class="varname">size=</code></span><a class="headerlink" title="Permalink to this term" href="#size=">¶</a></dt><dd><p>Specifies the key size
- in bits; see
+ for possible values and the default value of
+ this option. A cipher with unpredictable IV
+ values, such as "<code class="literal">aes-cbc-essiv:sha256</code>",
+ is recommended.</p></dd><dt id="hash="><span class="term"><code class="varname">hash=</code></span><a class="headerlink" title="Permalink to this term" href="#hash=">¶</a></dt><dd><p>Specifies the hash to use for
+ password hashing. See
<a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
- for possible values and the default
- value of this
- option. </p></dd><dt id="keyfile-size="><span class="term"><code class="varname">keyfile-size=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-size=">¶</a></dt><dd><p>Specifies the maximum number
- of bytes to read from the keyfile; see
+ for possible values and the default value of
+ this option.</p></dd><dt id="keyfile-offset="><span class="term"><code class="varname">keyfile-offset=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-offset=">¶</a></dt><dd><p>Specifies the number of bytes to
+ skip at the start of the key file. See
<a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
- for possible values and the default
- value of this option. This option is ignored
- in plain encryption mode, as the keyfile-size is then given by the key size.</p></dd><dt id="keyfile-offset="><span class="term"><code class="varname">keyfile-offset=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-offset=">¶</a></dt><dd><p>Specifies the number
- of bytes to skip at the start of
- the keyfile; see
+ for possible values and the default value of
+ this option.</p></dd><dt id="keyfile-size="><span class="term"><code class="varname">keyfile-size=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-size=">¶</a></dt><dd><p>Specifies the maximum number
+ of bytes to read from the key file. See
<a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
- for possible values and the default
- value of this option.</p></dd><dt id="hash="><span class="term"><code class="varname">hash=</code></span><a class="headerlink" title="Permalink to this term" href="#hash=">¶</a></dt><dd><p>Specifies the hash to
- use for password hashing; see
- <a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a> for possible values and
- the default value of this
- option. </p></dd><dt id="tries="><span class="term"><code class="varname">tries=</code></span><a class="headerlink" title="Permalink to this term" href="#tries=">¶</a></dt><dd><p>Specifies the maximum
- number of times the user is queried
- for a password.</p></dd><dt id="verify"><span class="term"><code class="varname">verify</code></span><a class="headerlink" title="Permalink to this term" href="#verify">¶</a></dt><dd><p> If the encryption
- password is read from console, it has
- to be entered twice (to prevent
- typos). </p></dd><dt id="read-only"><span class="term"><code class="varname">read-only</code>, </span><span class="term"><code class="varname">readonly</code></span><a class="headerlink" title="Permalink to this term" href="#read-only">¶</a></dt><dd><p>Set up the encrypted
- block device in read-only
- mode.</p></dd><dt id="allow-discards"><span class="term"><code class="varname">allow-discards</code></span><a class="headerlink" title="Permalink to this term" href="#allow-discards">¶</a></dt><dd><p>Allow discard requests
- to be passed through the encrypted
- block device. This improves
- performance on SSD storage but has
- security
- implications.</p></dd><dt id="luks"><span class="term"><code class="varname">luks</code></span><a class="headerlink" title="Permalink to this term" href="#luks">¶</a></dt><dd><p>Force LUKS mode.</p></dd><dt id="plain"><span class="term"><code class="varname">plain</code></span><a class="headerlink" title="Permalink to this term" href="#plain">¶</a></dt><dd><p>Force plain encryption
- mode.</p></dd><dt id="timeout="><span class="term"><code class="varname">timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#timeout=">¶</a></dt><dd><p>Specify the timeout
- for querying for a password. If no
- unit is specified seconds is used.
- Supported units are s, ms, us, min, h,
- d. A timeout of 0 waits indefinitely
- (which is the
- default).</p></dd><dt id="noauto"><span class="term"><code class="varname">noauto</code></span><a class="headerlink" title="Permalink to this term" href="#noauto">¶</a></dt><dd><p> This device will not
- be automatically unlocked on
- boot. </p></dd><dt id="nofail"><span class="term"><code class="varname">nofail</code></span><a class="headerlink" title="Permalink to this term" href="#nofail">¶</a></dt><dd><p>The system will not
- wait for the device to show up and be
- unlocked at boot, and not fail the
- boot if it doesn't show
- up.</p></dd><dt id="swap"><span class="term"><code class="varname">swap</code></span><a class="headerlink" title="Permalink to this term" href="#swap">¶</a></dt><dd><p> The encrypted block
- device will be used as a swap
- partition, and will be formatted as a
- swap partition after setting up the
- encrypted block device, with
- <a href="mkswap.html"><span class="citerefentry"><span class="refentrytitle">mkswap</span>(8)</span></a>.</p><p>WARNING: Using the
- <code class="varname">swap</code> option will
- destroy the contents of the named
- partition during every boot, so make
- sure the underlying block device is
- specified
- correctly. </p></dd><dt id="tmp"><span class="term"><code class="varname">tmp</code></span><a class="headerlink" title="Permalink to this term" href="#tmp">¶</a></dt><dd><p>The encrypted block
- device will be prepared for using it
- as <code class="filename">/tmp</code>
- partition: it will be formatted using
- <a href="mke2fs.html"><span class="citerefentry"><span class="refentrytitle">mke2fs</span>(8)</span></a>.</p><p>WARNING: Using the
- <code class="varname">tmp</code> option will
- destroy the contents of the named
- partition during every boot, so make
- sure the underlying block device is
- specified
- correctly. </p></dd></dl></div><p>At early boot and when the system manager
- configuration is reloaded this file is translated into
+ for possible values and the default value of
+ this option. This option is ignored in plain
+ encryption mode, as the key file size is then
+ given by the key size.</p></dd><dt id="luks"><span class="term"><code class="varname">luks</code></span><a class="headerlink" title="Permalink to this term" href="#luks">¶</a></dt><dd><p>Force LUKS mode. When this mode
+ is used, the following options are ignored since
+ they are provided by the LUKS header on the
+ device: <code class="varname">cipher=</code>,
+ <code class="varname">hash=</code>,
+ <code class="varname">size=</code>.</p></dd><dt id="noauto"><span class="term"><code class="varname">noauto</code></span><a class="headerlink" title="Permalink to this term" href="#noauto">¶</a></dt><dd><p>This device will not be
+ automatically unlocked on boot.</p></dd><dt id="nofail"><span class="term"><code class="varname">nofail</code></span><a class="headerlink" title="Permalink to this term" href="#nofail">¶</a></dt><dd><p>The system will not wait for the
+ device to show up and be unlocked at boot, and
+ not fail the boot if it does not show up.</p></dd><dt id="plain"><span class="term"><code class="varname">plain</code></span><a class="headerlink" title="Permalink to this term" href="#plain">¶</a></dt><dd><p>Force plain encryption mode.</p></dd><dt id="read-only"><span class="term"><code class="varname">read-only</code>, </span><span class="term"><code class="varname">readonly</code></span><a class="headerlink" title="Permalink to this term" href="#read-only">¶</a></dt><dd><p>Set up the encrypted block
+ device in read-only mode.</p></dd><dt id="size="><span class="term"><code class="varname">size=</code></span><a class="headerlink" title="Permalink to this term" href="#size=">¶</a></dt><dd><p>Specifies the key size
+ in bits. See
+ <a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
+ for possible values and the default value of
+ this option.</p></dd><dt id="swap"><span class="term"><code class="varname">swap</code></span><a class="headerlink" title="Permalink to this term" href="#swap">¶</a></dt><dd><p>The encrypted block device will
+ be used as a swap device, and will be formatted
+ accordingly after setting up the encrypted
+ block device, with
+ <a href="mkswap.html"><span class="citerefentry"><span class="refentrytitle">mkswap</span>(8)</span></a>.
+ This option implies <code class="varname">plain</code>.</p><p>WARNING: Using the <code class="varname">swap</code>
+ option will destroy the contents of the named
+ partition during every boot, so make sure the
+ underlying block device is specified correctly.</p></dd><dt id="tcrypt"><span class="term"><code class="varname">tcrypt</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt">¶</a></dt><dd><p>Use TrueCrypt encryption mode.
+ When this mode is used, the following options are
+ ignored since they are provided by the TrueCrypt
+ header on the device or do not apply:
+ <code class="varname">cipher=</code>,
+ <code class="varname">hash=</code>,
+ <code class="varname">keyfile-offset=</code>,
+ <code class="varname">keyfile-size=</code>,
+ <code class="varname">size=</code>.</p><p>When this mode is used, the passphrase is
+ read from the key file given in the third field.
+ Only the first line of this file is read,
+ excluding the new line character.</p><p>Note that the TrueCrypt format uses both
+ passphrase and key files to derive a password
+ for the volume. Therefore, the passphrase and
+ all key files need to be provided. Use
+ <code class="varname">tcrypt-keyfile=</code> to provide
+ the absolute path to all key files. When using
+ an empty passphrase in combination with one or
+ more key files, use "<code class="literal">/dev/null</code>"
+ as the password file in the third field.</p></dd><dt id="tcrypt-hidden"><span class="term"><code class="varname">tcrypt-hidden</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt-hidden">¶</a></dt><dd><p>Use the hidden TrueCrypt volume.
+ This implies <code class="varname">tcrypt</code>.</p><p>This will map the hidden volume that is
+ inside of the volume provided in the second
+ field. Please note that there is no protection
+ for the hidden volume if the outer volume is
+ mounted instead. See
+ <a href="cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">cryptsetup</span>(8)</span></a>
+ for more information on this limitation.</p></dd><dt id="tcrypt-keyfile="><span class="term"><code class="varname">tcrypt-keyfile=</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt-keyfile=">¶</a></dt><dd><p>Specifies the absolute path to a
+ key file to use for a TrueCrypt volume. This
+ implies <code class="varname">tcrypt</code> and can be
+ used more than once to provide several key
+ files.</p><p>See the entry for <code class="varname">tcrypt</code>
+ on the behavior of the passphrase and key files
+ when using TrueCrypt encryption mode.</p></dd><dt id="tcrypt-system"><span class="term"><code class="varname">tcrypt-system</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt-system">¶</a></dt><dd><p>Use TrueCrypt in system
+ encryption mode. This implies
+ <code class="varname">tcrypt</code>.</p><p>Please note that when using this mode, the
+ whole device needs to be given in the second
+ field instead of the partition. For example: if
+ "<code class="literal">/dev/sda2</code>" is the system
+ encrypted TrueCrypt patition, "<code class="literal">/dev/sda</code>"
+ has to be given.</p></dd><dt id="timeout="><span class="term"><code class="varname">timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#timeout=">¶</a></dt><dd><p>Specifies the timeout for
+ querying for a password. If no unit is
+ specified, seconds is used. Supported units are
+ s, ms, us, min, h, d. A timeout of 0 waits
+ indefinitely (which is the default).</p></dd><dt id="tmp"><span class="term"><code class="varname">tmp</code></span><a class="headerlink" title="Permalink to this term" href="#tmp">¶</a></dt><dd><p>The encrypted block device will
+ be prepared for using it as <code class="filename">/tmp</code>;
+ it will be formatted using
+ <a href="mke2fs.html"><span class="citerefentry"><span class="refentrytitle">mke2fs</span>(8)</span></a>.
+ This option implies <code class="varname">plain</code>.</p><p>WARNING: Using the <code class="varname">tmp</code>
+ option will destroy the contents of the named
+ partition during every boot, so make sure the
+ underlying block device is specified correctly.</p></dd><dt id="tries="><span class="term"><code class="varname">tries=</code></span><a class="headerlink" title="Permalink to this term" href="#tries=">¶</a></dt><dd><p>Specifies the maximum number of
+ times the user is queried for a password.
+ The default is 3. If set to 0, the user is
+ queried for a password indefinitely.</p></dd><dt id="verify"><span class="term"><code class="varname">verify</code></span><a class="headerlink" title="Permalink to this term" href="#verify">¶</a></dt><dd><p> If the encryption password is
+ read from console, it has to be entered twice to
+ prevent typos.</p></dd></dl></div><p>At early boot and when the system manager
+ configuration is reloaded, this file is translated into
native systemd units
- by <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259801562096"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259801561424"></a><p class="title"><b>Example 1. /etc/crypttab example</b></p><div class="example-contents"><p>Set up two encrypted block devices with
- LUKS: one normal one for storage, and another
- one for usage as swap device.</p><pre class="programlisting">luks-2505567a-9e27-4efe-a4d5-15ad146c258b UUID=2505567a-9e27-4efe-a4d5-15ad146c258b - timeout=0
-swap /dev/sda7 /dev/urandom swap</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259801559136"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ by <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274705151904"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274702985200"></a><p class="title"><b>Example 1. /etc/crypttab example</b></p><div class="example-contents"><p>Set up four encrypted block devices. One using
+ LUKS for normal storage, another one for usage as a swap
+ device and two TrueCrypt volumes.</p><pre class="programlisting">luks UUID=2505567a-9e27-4efe-a4d5-15ad146c258b
+swap /dev/sda7 /dev/urandom swap
+truecrypt /dev/sda2 /etc/container_password tcrypt
+hidden /mnt/tc_hidden /null tcrypt-hidden,tcrypt-keyfile=/etc/keyfile</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274702530704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a>,
<a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>,
diff --git a/man/crypttab.xml b/man/crypttab.xml
index deb577b9de..90d8ce95fe 100644
--- a/man/crypttab.xml
+++ b/man/crypttab.xml
@@ -68,30 +68,36 @@
describes encrypted block devices that are set up
during system boot.</para>
- <para>Empty lines and lines starting with the #
+ <para>Empty lines and lines starting with the <literal>#</literal>
character are ignored. Each of the remaining lines
describes one encrypted block device, fields on the
line are delimited by white space. The first two
fields are mandatory, the remaining two are
optional.</para>
+ <para>Setting up encrypted block devices using this file
+ supports three encryption modes: LUKS, TrueCrypt and plain.
+ See <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ for more information about each mode. When no mode is specified
+ in the options field and the block device contains a LUKS
+ signature, it is opened as a LUKS device; otherwise, it is
+ assumed to be in raw dm-crypt (plain mode) format.</para>
+
<para>The first field contains the name of the
resulting encrypted block device; the device is set up
within <filename>/dev/mapper/</filename>.</para>
<para>The second field contains a path to the
- underlying block device, or a specification of a block
+ underlying block device or file, or a specification of a block
device via <literal>UUID=</literal> followed by the
- UUID. If the block device contains a LUKS signature,
- it is opened as a LUKS encrypted partition; otherwise
- it is assumed to be a raw dm-crypt partition.</para>
+ UUID.</para>
<para>The third field specifies the encryption
password. If the field is not present or the password
- is set to none, the password has to be manually
- entered during system boot. Otherwise the field is
- interpreted as a path to a file containing the
- encryption password. For swap encryption
+ is set to <literal>none</literal> or <literal>-</literal>,
+ the password has to be manually entered during system boot.
+ Otherwise, the field is interpreted as a absolute path to
+ a file containing the encryption password. For swap encryption,
<filename>/dev/urandom</filename> or the hardware
device <filename>/dev/hw_random</filename> can be used
as the password file; using
@@ -104,185 +110,243 @@
options are recognized:</para>
<variablelist class='crypttab-options'>
+
+ <varlistentry>
+ <term><varname>discard</varname></term>
+
+ <listitem><para>Allow discard requests to be
+ passed through the encrypted block device. This
+ improves performance on SSD storage but has
+ security implications.</para></listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>cipher=</varname></term>
- <listitem><para>Specifies the cipher
- to use; see
+ <listitem><para>Specifies the cipher to use. See
<citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- for possible values and the default
- value of this option. A cipher with
- unpredictable IV values, such as
- <literal>aes-cbc-essiv:sha256</literal>,
- is recommended. </para></listitem>
+ for possible values and the default value of
+ this option. A cipher with unpredictable IV
+ values, such as <literal>aes-cbc-essiv:sha256</literal>,
+ is recommended.</para></listitem>
</varlistentry>
-
<varlistentry>
- <term><varname>size=</varname></term>
+ <term><varname>hash=</varname></term>
- <listitem><para>Specifies the key size
- in bits; see
+ <listitem><para>Specifies the hash to use for
+ password hashing. See
<citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- for possible values and the default
- value of this
- option. </para></listitem>
+ for possible values and the default value of
+ this option.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>keyfile-offset=</varname></term>
+
+ <listitem><para>Specifies the number of bytes to
+ skip at the start of the key file. See
+ <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ for possible values and the default value of
+ this option.</para></listitem>
+ </varlistentry>
<varlistentry>
<term><varname>keyfile-size=</varname></term>
<listitem><para>Specifies the maximum number
- of bytes to read from the keyfile; see
+ of bytes to read from the key file. See
<citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- for possible values and the default
- value of this option. This option is ignored
- in plain encryption mode, as the keyfile-size is then given by the key size.</para></listitem>
+ for possible values and the default value of
+ this option. This option is ignored in plain
+ encryption mode, as the key file size is then
+ given by the key size.</para></listitem>
</varlistentry>
-
<varlistentry>
- <term><varname>keyfile-offset=</varname></term>
+ <term><varname>luks</varname></term>
- <listitem><para>Specifies the number
- of bytes to skip at the start of
- the keyfile; see
- <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- for possible values and the default
- value of this option.</para></listitem>
+ <listitem><para>Force LUKS mode. When this mode
+ is used, the following options are ignored since
+ they are provided by the LUKS header on the
+ device: <varname>cipher=</varname>,
+ <varname>hash=</varname>,
+ <varname>size=</varname>.</para></listitem>
</varlistentry>
-
<varlistentry>
- <term><varname>hash=</varname></term>
+ <term><varname>noauto</varname></term>
- <listitem><para>Specifies the hash to
- use for password hashing; see
- <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry> for possible values and
- the default value of this
- option. </para></listitem>
+ <listitem><para>This device will not be
+ automatically unlocked on boot.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>tries=</varname></term>
+ <term><varname>nofail</varname></term>
- <listitem><para>Specifies the maximum
- number of times the user is queried
- for a password.</para></listitem>
+ <listitem><para>The system will not wait for the
+ device to show up and be unlocked at boot, and
+ not fail the boot if it does not show up.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>verify</varname></term>
+ <term><varname>plain</varname></term>
- <listitem><para> If the encryption
- password is read from console, it has
- to be entered twice (to prevent
- typos). </para></listitem>
+ <listitem><para>Force plain encryption mode.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>read-only</varname></term><term><varname>readonly</varname></term>
- <listitem><para>Set up the encrypted
- block device in read-only
- mode.</para></listitem>
+ <listitem><para>Set up the encrypted block
+ device in read-only mode.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>allow-discards</varname></term>
-
- <listitem><para>Allow discard requests
- to be passed through the encrypted
- block device. This improves
- performance on SSD storage but has
- security
- implications.</para></listitem>
+ <term><varname>size=</varname></term>
+
+ <listitem><para>Specifies the key size
+ in bits. See
+ <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ for possible values and the default value of
+ this option.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>luks</varname></term>
+ <term><varname>swap</varname></term>
- <listitem><para>Force LUKS mode.</para></listitem>
+ <listitem><para>The encrypted block device will
+ be used as a swap device, and will be formatted
+ accordingly after setting up the encrypted
+ block device, with
+ <citerefentry><refentrytitle>mkswap</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+ This option implies <varname>plain</varname>.</para>
+
+ <para>WARNING: Using the <varname>swap</varname>
+ option will destroy the contents of the named
+ partition during every boot, so make sure the
+ underlying block device is specified correctly.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>plain</varname></term>
+ <term><varname>tcrypt</varname></term>
+
+ <listitem><para>Use TrueCrypt encryption mode.
+ When this mode is used, the following options are
+ ignored since they are provided by the TrueCrypt
+ header on the device or do not apply:
+ <varname>cipher=</varname>,
+ <varname>hash=</varname>,
+ <varname>keyfile-offset=</varname>,
+ <varname>keyfile-size=</varname>,
+ <varname>size=</varname>.</para>
+
+ <para>When this mode is used, the passphrase is
+ read from the key file given in the third field.
+ Only the first line of this file is read,
+ excluding the new line character.</para>
+
+ <para>Note that the TrueCrypt format uses both
+ passphrase and key files to derive a password
+ for the volume. Therefore, the passphrase and
+ all key files need to be provided. Use
+ <varname>tcrypt-keyfile=</varname> to provide
+ the absolute path to all key files. When using
+ an empty passphrase in combination with one or
+ more key files, use <literal>/dev/null</literal>
+ as the password file in the third field.</para></listitem>
+ </varlistentry>
- <listitem><para>Force plain encryption
- mode.</para></listitem>
+ <varlistentry>
+ <term><varname>tcrypt-hidden</varname></term>
+
+ <listitem><para>Use the hidden TrueCrypt volume.
+ This implies <varname>tcrypt</varname>.</para>
+
+ <para>This will map the hidden volume that is
+ inside of the volume provided in the second
+ field. Please note that there is no protection
+ for the hidden volume if the outer volume is
+ mounted instead. See
+ <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ for more information on this limitation.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>timeout=</varname></term>
+ <term><varname>tcrypt-keyfile=</varname></term>
+
+ <listitem><para>Specifies the absolute path to a
+ key file to use for a TrueCrypt volume. This
+ implies <varname>tcrypt</varname> and can be
+ used more than once to provide several key
+ files.</para>
- <listitem><para>Specify the timeout
- for querying for a password. If no
- unit is specified seconds is used.
- Supported units are s, ms, us, min, h,
- d. A timeout of 0 waits indefinitely
- (which is the
- default).</para></listitem>
+ <para>See the entry for <varname>tcrypt</varname>
+ on the behavior of the passphrase and key files
+ when using TrueCrypt encryption mode.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>noauto</varname></term>
+ <term><varname>tcrypt-system</varname></term>
+
+ <listitem><para>Use TrueCrypt in system
+ encryption mode. This implies
+ <varname>tcrypt</varname>.</para>
+
+ <para>Please note that when using this mode, the
+ whole device needs to be given in the second
+ field instead of the partition. For example: if
+ <literal>/dev/sda2</literal> is the system
+ encrypted TrueCrypt patition, <literal>/dev/sda</literal>
+ has to be given.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>timeout=</varname></term>
- <listitem><para> This device will not
- be automatically unlocked on
- boot. </para></listitem>
+ <listitem><para>Specifies the timeout for
+ querying for a password. If no unit is
+ specified, seconds is used. Supported units are
+ s, ms, us, min, h, d. A timeout of 0 waits
+ indefinitely (which is the default).</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>nofail</varname></term>
+ <term><varname>tmp</varname></term>
+
+ <listitem><para>The encrypted block device will
+ be prepared for using it as <filename>/tmp</filename>;
+ it will be formatted using
+ <citerefentry><refentrytitle>mke2fs</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+ This option implies <varname>plain</varname>.</para>
- <listitem><para>The system will not
- wait for the device to show up and be
- unlocked at boot, and not fail the
- boot if it doesn't show
- up.</para></listitem>
+ <para>WARNING: Using the <varname>tmp</varname>
+ option will destroy the contents of the named
+ partition during every boot, so make sure the
+ underlying block device is specified correctly.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>swap</varname></term>
+ <term><varname>tries=</varname></term>
- <listitem><para> The encrypted block
- device will be used as a swap
- partition, and will be formatted as a
- swap partition after setting up the
- encrypted block device, with
- <citerefentry><refentrytitle>mkswap</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-
- <para>WARNING: Using the
- <varname>swap</varname> option will
- destroy the contents of the named
- partition during every boot, so make
- sure the underlying block device is
- specified
- correctly. </para></listitem>
+ <listitem><para>Specifies the maximum number of
+ times the user is queried for a password.
+ The default is 3. If set to 0, the user is
+ queried for a password indefinitely.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>tmp</varname></term>
+ <term><varname>verify</varname></term>
- <listitem><para>The encrypted block
- device will be prepared for using it
- as <filename>/tmp</filename>
- partition: it will be formatted using
- <citerefentry><refentrytitle>mke2fs</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
-
- <para>WARNING: Using the
- <varname>tmp</varname> option will
- destroy the contents of the named
- partition during every boot, so make
- sure the underlying block device is
- specified
- correctly. </para></listitem>
+ <listitem><para> If the encryption password is
+ read from console, it has to be entered twice to
+ prevent typos.</para></listitem>
</varlistentry>
+
</variablelist>
<para>At early boot and when the system manager
- configuration is reloaded this file is translated into
+ configuration is reloaded, this file is translated into
native systemd units
by <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</refsect1>
@@ -291,12 +355,14 @@
<title>Example</title>
<example>
<title>/etc/crypttab example</title>
- <para>Set up two encrypted block devices with
- LUKS: one normal one for storage, and another
- one for usage as swap device.</para>
-
- <programlisting>luks-2505567a-9e27-4efe-a4d5-15ad146c258b UUID=2505567a-9e27-4efe-a4d5-15ad146c258b - timeout=0
-swap /dev/sda7 /dev/urandom swap</programlisting>
+ <para>Set up four encrypted block devices. One using
+ LUKS for normal storage, another one for usage as a swap
+ device and two TrueCrypt volumes.</para>
+
+ <programlisting>luks UUID=2505567a-9e27-4efe-a4d5-15ad146c258b
+swap /dev/sda7 /dev/urandom swap
+truecrypt /dev/sda2 /etc/container_password tcrypt
+hidden /mnt/tc_hidden /null tcrypt-hidden,tcrypt-keyfile=/etc/keyfile</programlisting>
</example>
</refsect1>
diff --git a/man/custom-html.xsl b/man/custom-html.xsl
index dde9d7af0e..060af2e56a 100644
--- a/man/custom-html.xsl
+++ b/man/custom-html.xsl
@@ -172,6 +172,12 @@
<hr/>
</xsl:template>
+<xsl:template match="literal">
+ <xsl:text>"</xsl:text>
+ <xsl:call-template name="inline.monoseq"/>
+ <xsl:text>"</xsl:text>
+</xsl:template>
+
<!-- Switch things to UTF-8, ISO-8859-1 is soo yesteryear -->
<xsl:output method="html" encoding="UTF-8" indent="no"/>
diff --git a/man/custom-man.xsl b/man/custom-man.xsl
index 753e5715e3..e1b8d3618a 100644
--- a/man/custom-man.xsl
+++ b/man/custom-man.xsl
@@ -52,4 +52,13 @@
<xsl:call-template name="mark.subheading"/>
</xsl:template>
+<xsl:template match="literal">
+ <xsl:if test="$man.hyphenate.computer.inlines = 0">
+ <xsl:call-template name="suppress.hyphenation"/>
+ </xsl:if>
+ <xsl:text>"</xsl:text>
+ <xsl:call-template name="inline.monoseq"/>
+ <xsl:text>"</xsl:text>
+</xsl:template>
+
</xsl:stylesheet>
diff --git a/man/daemon.7 b/man/daemon.7
new file mode 100644
index 0000000000..0975acc87d
--- /dev/null
+++ b/man/daemon.7
@@ -0,0 +1,797 @@
+'\" t
+.TH "DAEMON" "7" "" "systemd 208" "daemon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+daemon \- Writing and packaging system daemons
+.SH "DESCRIPTION"
+.PP
+A daemon is a service process that runs in the background and supervises the system or provides functionality to other processes\&. Traditionally, daemons are implemented following a scheme originating in SysV Unix\&. Modern daemons should follow a simpler yet more powerful scheme (here called "new\-style" daemons), as implemented by
+\fBsystemd\fR(1)\&. This manual page covers both schemes, and in particular includes recommendations for daemons that shall be included in the systemd init system\&.
+.SS "SysV Daemons"
+.PP
+When a traditional SysV daemon starts, it should execute the following steps as part of the initialization\&. Note that these steps are unnecessary for new\-style daemons (see below), and should only be implemented if compatibility with SysV is essential\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+Close all open file descriptors except STDIN, STDOUT, STDERR (i\&.e\&. the first three file descriptors 0, 1, 2)\&. This ensures that no accidentally passed file descriptor stays around in the daemon process\&. On Linux, this is best implemented by iterating through
+/proc/self/fd, with a fallback of iterating from file descriptor 3 to the value returned by
+\fBgetrlimit()\fR
+for RLIMIT_NOFILE\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+Reset all signal handlers to their default\&. This is best done by iterating through the available signals up to the limit of _NSIG and resetting them to
+\fBSIG_DFL\fR\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 3.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 3." 4.2
+.\}
+Reset the signal mask using
+\fBsigprocmask()\fR\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 4.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 4." 4.2
+.\}
+Sanitize the environment block, removing or resetting environment variables that might negatively impact daemon runtime\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 5.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 5." 4.2
+.\}
+Call
+\fBfork()\fR, to create a background process\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 6.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 6." 4.2
+.\}
+In the child, call
+\fBsetsid()\fR
+to detach from any terminal and create an independent session\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 7.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 7." 4.2
+.\}
+In the child, call
+\fBfork()\fR
+again, to ensure that the daemon can never re\-acquire a terminal again\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 8.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 8." 4.2
+.\}
+Call
+\fBexit()\fR
+in the first child, so that only the second child (the actual daemon process) stays around\&. This ensures that the daemon process is re\-parented to init/PID 1, as all daemons should be\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 9.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 9." 4.2
+.\}
+In the daemon process, connect
+/dev/null
+to STDIN, STDOUT, STDERR\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'10.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "10." 4.2
+.\}
+In the daemon process, reset the umask to 0, so that the file modes passed to
+\fBopen()\fR,
+\fBmkdir()\fR
+and suchlike directly control the access mode of the created files and directories\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'11.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "11." 4.2
+.\}
+In the daemon process, change the current directory to the root directory (/), in order to avoid that the daemon involuntarily blocks mount points from being unmounted\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'12.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "12." 4.2
+.\}
+In the daemon process, write the daemon PID (as returned by
+\fBgetpid()\fR) to a PID file, for example
+/var/run/foobar\&.pid
+(for a hypothetical daemon "foobar") to ensure that the daemon cannot be started more than once\&. This must be implemented in race\-free fashion so that the PID file is only updated when it is verified at the same time that the PID previously stored in the PID file no longer exists or belongs to a foreign process\&. Commonly, some kind of file locking is employed to implement this logic\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'13.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "13." 4.2
+.\}
+In the daemon process, drop privileges, if possible and applicable\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'14.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "14." 4.2
+.\}
+From the daemon process, notify the original process started that initialization is complete\&. This can be implemented via an unnamed pipe or similar communication channel that is created before the first
+\fBfork()\fR
+and hence available in both the original and the daemon process\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'15.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "15." 4.2
+.\}
+Call
+\fBexit()\fR
+in the original process\&. The process that invoked the daemon must be able to rely on that this
+\fBexit()\fR
+happens after initialization is complete and all external communication channels are established and accessible\&.
+.RE
+.PP
+The BSD
+\fBdaemon()\fR
+function should not be used, as it implements only a subset of these steps\&.
+.PP
+A daemon that needs to provide compatibility with SysV systems should implement the scheme pointed out above\&. However, it is recommended to make this behavior optional and configurable via a command line argument to ease debugging as well as to simplify integration into systems using systemd\&.
+.SS "New\-Style Daemons"
+.PP
+Modern services for Linux should be implemented as new\-style daemons\&. This makes it easier to supervise and control them at runtime and simplifies their implementation\&.
+.PP
+For developing a new\-style daemon, none of the initialization steps recommended for SysV daemons need to be implemented\&. New\-style init systems such as systemd make all of them redundant\&. Moreover, since some of these steps interfere with process monitoring, file descriptor passing and other functionality of the init system, it is recommended not to execute them when run as new\-style service\&.
+.PP
+Note that new\-style init systems guarantee execution of daemon processes in a clean process context: it is guaranteed that the environment block is sanitized, that the signal handlers and mask is reset and that no left\-over file descriptors are passed\&. Daemons will be executed in their own session, and STDIN/STDOUT/STDERR connected to
+/dev/null
+unless otherwise configured\&. The umask is reset\&.
+.PP
+It is recommended for new\-style daemons to implement the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+If
+\fBSIGTERM\fR
+is received, shut down the daemon and exit cleanly\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+If
+\fBSIGHUP\fR
+is received, reload the configuration files, if this applies\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 3.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 3." 4.2
+.\}
+Provide a correct exit code from the main daemon process, as this is used by the init system to detect service errors and problems\&. It is recommended to follow the exit code scheme as defined in the
+\m[blue]\fBLSB recommendations for SysV init scripts\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 4.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 4." 4.2
+.\}
+If possible and applicable, expose the daemon\*(Aqs control interface via the D\-Bus IPC system and grab a bus name as last step of initialization\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 5.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 5." 4.2
+.\}
+For integration in systemd, provide a
+\&.service
+unit file that carries information about starting, stopping and otherwise maintaining the daemon\&. See
+\fBsystemd.service\fR(5)
+for details\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 6.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 6." 4.2
+.\}
+As much as possible, rely on the init system\*(Aqs functionality to limit the access of the daemon to files, services and other resources, i\&.e\&. in the case of systemd, rely on systemd\*(Aqs resource limit control instead of implementing your own, rely on systemd\*(Aqs privilege dropping code instead of implementing it in the daemon, and similar\&. See
+\fBsystemd.exec\fR(5)
+for the available controls\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 7.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 7." 4.2
+.\}
+If D\-Bus is used, make your daemon bus\-activatable by supplying a D\-Bus service activation configuration file\&. This has multiple advantages: your daemon may be started lazily on\-demand; it may be started in parallel to other daemons requiring it \-\- which maximizes parallelization and boot\-up speed; your daemon can be restarted on failure without losing any bus requests, as the bus queues requests for activatable services\&. See below for details\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 8.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 8." 4.2
+.\}
+If your daemon provides services to other local processes or remote clients via a socket, it should be made socket\-activatable following the scheme pointed out below\&. Like D\-Bus activation, this enables on\-demand starting of services as well as it allows improved parallelization of service start\-up\&. Also, for state\-less protocols (such as syslog, DNS), a daemon implementing socket\-based activation can be restarted without losing a single request\&. See below for details\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 9.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 9." 4.2
+.\}
+If applicable, a daemon should notify the init system about startup completion or status updates via the
+\fBsd_notify\fR(3)
+interface\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'10.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "10." 4.2
+.\}
+Instead of using the
+\fBsyslog()\fR
+call to log directly to the system syslog service, a new\-style daemon may choose to simply log to STDERR via
+\fBfprintf()\fR, which is then forwarded to syslog by the init system\&. If log priorities are necessary, these can be encoded by prefixing individual log lines with strings like "<4>" (for log priority 4 "WARNING" in the syslog priority scheme), following a similar style as the Linux kernel\*(Aqs
+\fBprintk()\fR
+priority system\&. In fact, using this style of logging also enables the init system to optionally direct all application logging to the kernel log buffer (kmsg), as accessible via
+\fBdmesg\fR(1)\&. This kind of logging may be enabled by setting
+\fIStandardError=syslog\fR
+in the service unit file\&. For details, see
+\fBsd-daemon\fR(3)
+and
+\fBsystemd.exec\fR(5)\&.
+.RE
+.PP
+These recommendations are similar but not identical to the
+\m[blue]\fBApple MacOS X Daemon Requirements\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.SH "ACTIVATION"
+.PP
+New\-style init systems provide multiple additional mechanisms to activate services, as detailed below\&. It is common that services are configured to be activated via more than one mechanism at the same time\&. An example for systemd:
+bluetoothd\&.service
+might get activated either when Bluetooth hardware is plugged in, or when an application accesses its programming interfaces via D\-Bus\&. Or, a print server daemon might get activated when traffic arrives at an IPP port, or when a printer is plugged in, or when a file is queued in the printer spool directory\&. Even for services that are intended to be started on system bootup unconditionally, it is a good idea to implement some of the various activation schemes outlined below, in order to maximize parallelization\&. If a daemon implements a D\-Bus service or listening socket, implementing the full bus and socket activation scheme allows starting of the daemon with its clients in parallel (which speeds up boot\-up), since all its communication channels are established already, and no request is lost because client requests will be queued by the bus system (in case of D\-Bus) or the kernel (in case of sockets) until the activation is completed\&.
+.SS "Activation on Boot"
+.PP
+Old\-style daemons are usually activated exclusively on boot (and manually by the administrator) via SysV init scripts, as detailed in the
+\m[blue]\fBLSB Linux Standard Base Core Specification\fR\m[]\&\s-2\u[1]\d\s+2\&. This method of activation is supported ubiquitously on Linux init systems, both old\-style and new\-style systems\&. Among other issues, SysV init scripts have the disadvantage of involving shell scripts in the boot process\&. New\-style init systems generally employ updated versions of activation, both during boot\-up and during runtime and using more minimal service description files\&.
+.PP
+In systemd, if the developer or administrator wants to make sure a service or other unit is activated automatically on boot, it is recommended to place a symlink to the unit file in the
+\&.wants/
+directory of either
+multi\-user\&.target
+or
+graphical\&.target, which are normally used as boot targets at system startup\&. See
+\fBsystemd.unit\fR(5)
+for details about the
+\&.wants/
+directories, and
+\fBsystemd.special\fR(7)
+for details about the two boot targets\&.
+.SS "Socket\-Based Activation"
+.PP
+In order to maximize the possible parallelization and robustness and simplify configuration and development, it is recommended for all new\-style daemons that communicate via listening sockets to employ socket\-based activation\&. In a socket\-based activation scheme, the creation and binding of the listening socket as primary communication channel of daemons to local (and sometimes remote) clients is moved out of the daemon code and into the init system\&. Based on per\-daemon configuration, the init system installs the sockets and then hands them off to the spawned process as soon as the respective daemon is to be started\&. Optionally, activation of the service can be delayed until the first inbound traffic arrives at the socket to implement on\-demand activation of daemons\&. However, the primary advantage of this scheme is that all providers and all consumers of the sockets can be started in parallel as soon as all sockets are established\&. In addition to that, daemons can be restarted with losing only a minimal number of client transactions, or even any client request at all (the latter is particularly true for state\-less protocols, such as DNS or syslog), because the socket stays bound and accessible during the restart, and all requests are queued while the daemon cannot process them\&.
+.PP
+New\-style daemons which support socket activation must be able to receive their sockets from the init system instead of creating and binding them themselves\&. For details about the programming interfaces for this scheme provided by systemd, see
+\fBsd_listen_fds\fR(3)
+and
+\fBsd-daemon\fR(3)\&. For details about porting existing daemons to socket\-based activation, see below\&. With minimal effort, it is possible to implement socket\-based activation in addition to traditional internal socket creation in the same codebase in order to support both new\-style and old\-style init systems from the same daemon binary\&.
+.PP
+systemd implements socket\-based activation via
+\&.socket
+units, which are described in
+\fBsystemd.socket\fR(5)\&. When configuring socket units for socket\-based activation, it is essential that all listening sockets are pulled in by the special target unit
+sockets\&.target\&. It is recommended to place a
+\fIWantedBy=sockets\&.target\fR
+directive in the
+"[Install]"
+section to automatically add such a dependency on installation of a socket unit\&. Unless
+\fIDefaultDependencies=no\fR
+is set, the necessary ordering dependencies are implicitly created for all socket units\&. For more information about
+sockets\&.target, see
+\fBsystemd.special\fR(7)\&. It is not necessary or recommended to place any additional dependencies on socket units (for example from
+multi\-user\&.target
+or suchlike) when one is installed in
+sockets\&.target\&.
+.SS "Bus\-Based Activation"
+.PP
+When the D\-Bus IPC system is used for communication with clients, new\-style daemons should employ bus activation so that they are automatically activated when a client application accesses their IPC interfaces\&. This is configured in D\-Bus service files (not to be confused with systemd service unit files!)\&. To ensure that D\-Bus uses systemd to start\-up and maintain the daemon, use the
+\fISystemdService=\fR
+directive in these service files to configure the matching systemd service for a D\-Bus service\&. e\&.g\&.: For a D\-Bus service whose D\-Bus activation file is named
+org\&.freedesktop\&.RealtimeKit\&.service, make sure to set
+\fISystemdService=rtkit\-daemon\&.service\fR
+in that file to bind it to the systemd service
+rtkit\-daemon\&.service\&. This is needed to make sure that the daemon is started in a race\-free fashion when activated via multiple mechanisms simultaneously\&.
+.SS "Device\-Based Activation"
+.PP
+Often, daemons that manage a particular type of hardware should be activated only when the hardware of the respective kind is plugged in or otherwise becomes available\&. In a new\-style init system, it is possible to bind activation to hardware plug/unplug events\&. In systemd, kernel devices appearing in the sysfs/udev device tree can be exposed as units if they are tagged with the string
+"systemd"\&. Like any other kind of unit, they may then pull in other units when activated (i\&.e\&. plugged in) and thus implement device\-based activation\&. systemd dependencies may be encoded in the udev database via the
+\fISYSTEMD_WANTS=\fR
+property\&. See
+\fBsystemd.device\fR(5)
+for details\&. Often, it is nicer to pull in services from devices only indirectly via dedicated targets\&. Example: Instead of pulling in
+bluetoothd\&.service
+from all the various bluetooth dongles and other hardware available, pull in bluetooth\&.target from them and
+bluetoothd\&.service
+from that target\&. This provides for nicer abstraction and gives administrators the option to enable
+bluetoothd\&.service
+via controlling a
+bluetooth\&.target\&.wants/
+symlink uniformly with a command like
+\fBenable\fR
+of
+\fBsystemctl\fR(1)
+instead of manipulating the udev ruleset\&.
+.SS "Path\-Based Activation"
+.PP
+Often, runtime of daemons processing spool files or directories (such as a printing system) can be delayed until these file system objects change state, or become non\-empty\&. New\-style init systems provide a way to bind service activation to file system changes\&. systemd implements this scheme via path\-based activation configured in
+\&.path
+units, as outlined in
+\fBsystemd.path\fR(5)\&.
+.SS "Timer\-Based Activation"
+.PP
+Some daemons that implement clean\-up jobs that are intended to be executed in regular intervals benefit from timer\-based activation\&. In systemd, this is implemented via
+\&.timer
+units, as described in
+\fBsystemd.timer\fR(5)\&.
+.SS "Other Forms of Activation"
+.PP
+Other forms of activation have been suggested and implemented in some systems\&. However, there are often simpler or better alternatives, or they can be put together of combinations of the schemes above\&. Example: Sometimes, it appears useful to start daemons or
+\&.socket
+units when a specific IP address is configured on a network interface, because network sockets shall be bound to the address\&. However, an alternative to implement this is by utilizing the Linux IP_FREEBIND socket option, as accessible via
+\fIFreeBind=yes\fR
+in systemd socket files (see
+\fBsystemd.socket\fR(5)
+for details)\&. This option, when enabled, allows sockets to be bound to a non\-local, not configured IP address, and hence allows bindings to a particular IP address before it actually becomes available, making such an explicit dependency to the configured address redundant\&. Another often suggested trigger for service activation is low system load\&. However, here too, a more convincing approach might be to make proper use of features of the operating system, in particular, the CPU or IO scheduler of Linux\&. Instead of scheduling jobs from userspace based on monitoring the OS scheduler, it is advisable to leave the scheduling of processes to the OS scheduler itself\&. systemd provides fine\-grained access to the CPU and IO schedulers\&. If a process executed by the init system shall not negatively impact the amount of CPU or IO bandwidth available to other processes, it should be configured with
+\fICPUSchedulingPolicy=idle\fR
+and/or
+\fIIOSchedulingClass=idle\fR\&. Optionally, this may be combined with timer\-based activation to schedule background jobs during runtime and with minimal impact on the system, and remove it from the boot phase itself\&.
+.SH "INTEGRATION WITH SYSTEMD"
+.SS "Writing Systemd Unit Files"
+.PP
+When writing systemd unit files, it is recommended to consider the following suggestions:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+If possible, do not use the
+\fIType=forking\fR
+setting in service files\&. But if you do, make sure to set the PID file path using
+\fIPIDFile=\fR\&. See
+\fBsystemd.service\fR(5)
+for details\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+If your daemon registers a D\-Bus name on the bus, make sure to use
+\fIType=dbus\fR
+in the service file if possible\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 3.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 3." 4.2
+.\}
+Make sure to set a good human\-readable description string with
+\fIDescription=\fR\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 4.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 4." 4.2
+.\}
+Do not disable
+\fIDefaultDependencies=\fR, unless you really know what you do and your unit is involved in early boot or late system shutdown\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 5.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 5." 4.2
+.\}
+Normally, little if any dependencies should need to be defined explicitly\&. However, if you do configure explicit dependencies, only refer to unit names listed on
+\fBsystemd.special\fR(7)
+or names introduced by your own package to keep the unit file operating system\-independent\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 6.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 6." 4.2
+.\}
+Make sure to include an
+"[Install]"
+section including installation information for the unit file\&. See
+\fBsystemd.unit\fR(5)
+for details\&. To activate your service on boot, make sure to add a
+\fIWantedBy=multi\-user\&.target\fR
+or
+\fIWantedBy=graphical\&.target\fR
+directive\&. To activate your socket on boot, make sure to add
+\fIWantedBy=sockets\&.target\fR\&. Usually, you also want to make sure that when your service is installed, your socket is installed too, hence add
+\fIAlso=foo\&.socket\fR
+in your service file
+foo\&.service, for a hypothetical program
+foo\&.
+.RE
+.SS "Installing Systemd Service Files"
+.PP
+At the build installation time (e\&.g\&.
+\fBmake install\fR
+during package build), packages are recommended to install their systemd unit files in the directory returned by
+\fBpkg\-config systemd \-\-variable=systemdsystemunitdir\fR
+(for system services) or
+\fBpkg\-config systemd \-\-variable=systemduserunitdir\fR
+(for user services)\&. This will make the services available in the system on explicit request but not activate them automatically during boot\&. Optionally, during package installation (e\&.g\&.
+\fBrpm \-i\fR
+by the administrator), symlinks should be created in the systemd configuration directories via the
+\fBenable\fR
+command of the
+\fBsystemctl\fR(1)
+tool to activate them automatically on boot\&.
+.PP
+Packages using
+\fBautoconf\fR(1)
+are recommended to use a configure script excerpt like the following to determine the unit installation path during source configuration:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+PKG_PROG_PKG_CONFIG
+AC_ARG_WITH([systemdsystemunitdir],
+ AS_HELP_STRING([\-\-with\-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+ [], [with_systemdsystemunitdir=$($PKG_CONFIG \-\-variable=systemdsystemunitdir systemd)])
+if test "x$with_systemdsystemunitdir" != xno; then
+ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test \-n "$with_systemdsystemunitdir" \-a "x$with_systemdsystemunitdir" != xno ])
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This snippet allows automatic installation of the unit files on systemd machines, and optionally allows their installation even on machines lacking systemd\&. (Modification of this snippet for the user unit directory is left as an exercise for the reader\&.)
+.PP
+Additionally, to ensure that
+\fBmake distcheck\fR
+continues to work, it is recommended to add the following to the top\-level
+Makefile\&.am
+file in
+\fBautomake\fR(1)\-based projects:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+DISTCHECK_CONFIGURE_FLAGS = \e
+ \-\-with\-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Finally, unit files should be installed in the system with an automake excerpt like the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = \e
+ foobar\&.socket \e
+ foobar\&.service
+endif
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+In the
+\fBrpm\fR(8)\&.spec
+file, use snippets like the following to enable/disable the service during installation/deinstallation\&. This makes use of the RPM macros shipped along systemd\&. Consult the packaging guidelines of your distribution for details and the equivalent for other package managers\&.
+.PP
+At the top of the file:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+BuildRequires: systemd
+%{?systemd_requires}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+And as scriptlets, further down:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+%post
+%systemd_post foobar\&.service foobar\&.socket
+
+%preun
+%systemd_preun foobar\&.service foobar\&.socket
+
+%postun
+%systemd_postun
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+If the service shall be restarted during upgrades, replace the
+"%postun"
+scriptlet above with the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+%postun
+%systemd_postun_with_restart foobar\&.service
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Note that
+"%systemd_post"
+and
+"%systemd_preun"
+expect the names of all units that are installed/removed as arguments, separated by spaces\&.
+"%systemd_postun"
+expects no arguments\&.
+"%systemd_postun_with_restart"
+expects the units to restart as arguments\&.
+.PP
+To facilitate upgrades from a package version that shipped only SysV init scripts to a package version that ships both a SysV init script and a native systemd service file, use a fragment like the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+%triggerun \-\- foobar < 0\&.47\&.11\-1
+if /sbin/chkconfig \-\-level 5 foobar ; then
+ /bin/systemctl \-\-no\-reload enable foobar\&.service foobar\&.socket >/dev/null 2>&1 || :
+fi
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where 0\&.47\&.11\-1 is the first package version that includes the native unit file\&. This fragment will ensure that the first time the unit file is installed, it will be enabled if and only if the SysV init script is enabled, thus making sure that the enable status is not changed\&. Note that
+\fBchkconfig\fR
+is a command specific to Fedora which can be used to check whether a SysV init script is enabled\&. Other operating systems will have to use different commands here\&.
+.SH "PORTING EXISTING DAEMONS"
+.PP
+Since new\-style init systems such as systemd are compatible with traditional SysV init systems, it is not strictly necessary to port existing daemons to the new style\&. However, doing so offers additional functionality to the daemons as well as simplifying integration into new\-style init systems\&.
+.PP
+To port an existing SysV compatible daemon, the following steps are recommended:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+If not already implemented, add an optional command line switch to the daemon to disable daemonization\&. This is useful not only for using the daemon in new\-style init systems, but also to ease debugging\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+If the daemon offers interfaces to other software running on the local system via local
+\fBAF_UNIX\fR
+sockets, consider implementing socket\-based activation (see above)\&. Usually, a minimal patch is sufficient to implement this: Extend the socket creation in the daemon code so that
+\fBsd_listen_fds\fR(3)
+is checked for already passed sockets first\&. If sockets are passed (i\&.e\&. when
+\fBsd_listen_fds()\fR
+returns a positive value), skip the socket creation step and use the passed sockets\&. Secondly, ensure that the file system socket nodes for local
+\fBAF_UNIX\fR
+sockets used in the socket\-based activation are not removed when the daemon shuts down, if sockets have been passed\&. Third, if the daemon normally closes all remaining open file descriptors as part of its initialization, the sockets passed from the init system must be spared\&. Since new\-style init systems guarantee that no left\-over file descriptors are passed to executed processes, it might be a good choice to simply skip the closing of all remaining open file descriptors if sockets are passed\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 3.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 3." 4.2
+.\}
+Write and install a systemd unit file for the service (and the sockets if socket\-based activation is used, as well as a path unit file, if the daemon processes a spool directory), see above for details\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 4.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 4." 4.2
+.\}
+If the daemon exposes interfaces via D\-Bus, write and install a D\-Bus activation file for the service, see above for details\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-daemon\fR(3),
+\fBsd_listen_fds\fR(3),
+\fBsd_notify\fR(3),
+\fBdaemon\fR(3),
+\fBsystemd.service\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+LSB recommendations for SysV init scripts
+.RS 4
+\%http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html
+.RE
+.IP " 2." 4
+Apple MacOS X Daemon Requirements
+.RS 4
+\%http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/LaunchOnDemandDaemons.html#//apple_ref/doc/uid/TP40001762-104738
+.RE
diff --git a/man/daemon.html b/man/daemon.html
index e4be3404c5..c44aa4003f 100644
--- a/man/daemon.html
+++ b/man/daemon.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>daemon — Writing and packaging system daemons</p></div><div class="refsect1"><a name="idm259771019600"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A daemon is a service process that runs in the
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>daemon — Writing and packaging system daemons</p></div><div class="refsect1"><a name="idm274686553024"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A daemon is a service process that runs in the
background and supervises the system or provides
functionality to other processes. Traditionally,
daemons are implemented following a scheme originating
@@ -29,7 +29,7 @@
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>. This
manual page covers both schemes, and in
particular includes recommendations for daemons that
- shall be included in the systemd init system.</p><div class="refsect2"><a name="idm259767236784"></a><h3 id="SysV Daemons">SysV Daemons<a class="headerlink" title="Permalink to this headline" href="#SysV%20Daemons">¶</a></h3><p>When a traditional SysV daemon
+ shall be included in the systemd init system.</p><div class="refsect2"><a name="idm274687502064"></a><h3 id="SysV Daemons">SysV Daemons<a class="headerlink" title="Permalink to this headline" href="#SysV%20Daemons">¶</a></h3><p>When a traditional SysV daemon
starts, it should execute the following steps
as part of the initialization. Note that these
steps are unnecessary for new-style daemons (see below),
@@ -40,7 +40,7 @@
descriptors 0, 1, 2). This ensures
that no accidentally passed file
descriptor stays around in the daemon
- process. On Linux this is best
+ process. On Linux, this is best
implemented by iterating through
<code class="filename">/proc/self/fd</code>,
with a fallback of iterating from file
@@ -51,7 +51,7 @@
best done by iterating through the
available signals up to the limit of
_NSIG and resetting them to
- SIG_DFL.</p></li><li class="listitem"><p>Reset the signal mask
+ <code class="constant">SIG_DFL</code>.</p></li><li class="listitem"><p>Reset the signal mask
using
<code class="function">sigprocmask()</code>.</p></li><li class="listitem"><p>Sanitize the
environment block, removing or
@@ -64,7 +64,7 @@
detach from any terminal and create an
independent session.</p></li><li class="listitem"><p>In the child, call
<code class="function">fork()</code> again, to
- ensure the daemon can never re-acquire
+ ensure that the daemon can never re-acquire
a terminal again.</p></li><li class="listitem"><p>Call <code class="function">exit()</code> in the
first child, so that only the second
child (the actual daemon process)
@@ -89,20 +89,20 @@
<code class="function">getpid()</code>) to a
PID file, for example
<code class="filename">/var/run/foobar.pid</code>
- (for a hypothetical daemon "foobar"),
+ (for a hypothetical daemon "foobar")
to ensure that the daemon cannot be
started more than once. This must be
implemented in race-free fashion so
that the PID file is only updated when
- at the same time it is verified that
+ it is verified at the same time that
the PID previously stored in the PID
file no longer exists or belongs to a
- foreign process. Commonly some kind of
+ foreign process. Commonly, some kind of
file locking is employed to implement
this logic.</p></li><li class="listitem"><p>In the daemon process,
drop privileges, if possible and
applicable.</p></li><li class="listitem"><p>From the daemon
- process notify the original process
+ process, notify the original process
started that initialization is
complete. This can be implemented via
an unnamed pipe or similar
@@ -125,24 +125,24 @@
implement the scheme pointed out
above. However, it is recommended to make this
behavior optional and configurable via a
- command line argument, to ease debugging as
+ command line argument to ease debugging as
well as to simplify integration into systems
- using systemd.</p></div><div class="refsect2"><a name="idm259771105552"></a><h3 id="New-Style Daemons">New-Style Daemons<a class="headerlink" title="Permalink to this headline" href="#New-Style%20Daemons">¶</a></h3><p>Modern services for Linux should be
+ using systemd.</p></div><div class="refsect2"><a name="idm274689046528"></a><h3 id="New-Style Daemons">New-Style Daemons<a class="headerlink" title="Permalink to this headline" href="#New-Style%20Daemons">¶</a></h3><p>Modern services for Linux should be
implemented as new-style daemons. This makes it
easier to supervise and control them at
runtime and simplifies their
- implementation.</p><p>For developing a new-style daemon none
+ implementation.</p><p>For developing a new-style daemon, none
of the initialization steps recommended for
SysV daemons need to be implemented. New-style
init systems such as systemd make all of them
redundant. Moreover, since some of these steps
interfere with process monitoring, file
descriptor passing and other functionality of
- the init system it is recommended not to
+ the init system, it is recommended not to
execute them when run as new-style
service.</p><p>Note that new-style init systems
guarantee execution of daemon processes in
- clean process contexts: it is guaranteed that
+ a clean process context: it is guaranteed that
the environment block is sanitized, that the
signal handlers and mask is reset and that no
left-over file descriptors are passed. Daemons
@@ -150,9 +150,9 @@
STDIN/STDOUT/STDERR connected to
<code class="filename">/dev/null</code> unless
otherwise configured. The umask is reset.</p><p>It is recommended for new-style daemons
- to implement the following:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If SIGTERM is
+ to implement the following:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If <code class="constant">SIGTERM</code> is
received, shut down the daemon and
- exit cleanly.</p></li><li class="listitem"><p>If SIGHUP is received,
+ exit cleanly.</p></li><li class="listitem"><p>If <code class="constant">SIGHUP</code> is received,
reload the configuration files, if
this applies.</p></li><li class="listitem"><p>Provide a correct exit
code from the main daemon process, as
@@ -162,7 +162,7 @@
scheme as defined in the <a class="ulink" href="http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html" target="_top">LSB
recommendations for SysV init
scripts</a>.</p></li><li class="listitem"><p>If possible and
- applicable expose the daemon's control
+ applicable, expose the daemon's control
interface via the D-Bus IPC system and
grab a bus name as last step of
initialization.</p></li><li class="listitem"><p>For integration in
@@ -176,7 +176,7 @@
rely on the init system's
functionality to limit the access of
the daemon to files, services and
- other resources. i.e. in the case of
+ other resources, i.e. in the case of
systemd, rely on systemd's resource
limit control instead of implementing
your own, rely on systemd's privilege
@@ -185,7 +185,7 @@
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
for the available
controls.</p></li><li class="listitem"><p>If D-Bus is used, make
- your daemon bus-activatable, via
+ your daemon bus-activatable by
supplying a D-Bus service activation
configuration file. This has multiple
advantages: your daemon may be started
@@ -193,7 +193,7 @@
parallel to other daemons requiring it
-- which maximizes parallelization and
boot-up speed; your daemon can be
- restarted on failure, without losing
+ restarted on failure without losing
any bus requests, as the bus queues
requests for activatable services. See
below for details.</p></li><li class="listitem"><p>If your daemon
@@ -202,15 +202,15 @@
socket, it should be made
socket-activatable following the
scheme pointed out below. Like D-Bus
- activation this enables on-demand
+ activation, this enables on-demand
starting of services as well as it
allows improved parallelization of
service start-up. Also, for state-less
- protocols (such as syslog, DNS) a
+ protocols (such as syslog, DNS), a
daemon implementing socket-based
activation can be restarted without
losing a single request. See below for
- details.</p></li><li class="listitem"><p>If applicable a daemon
+ details.</p></li><li class="listitem"><p>If applicable, a daemon
should notify the init system about
startup completion or status updates
via the
@@ -221,7 +221,7 @@
choose to simply log to STDERR via
<code class="function">fprintf()</code>, which is then forwarded to
syslog by the init system. If log
- priorities are necessary these can be
+ priorities are necessary, these can be
encoded by prefixing individual log
lines with strings like "&lt;4&gt;"
(for log priority 4 "WARNING" in the
@@ -237,13 +237,13 @@
kind of logging may be enabled by
setting
<code class="varname">StandardError=syslog</code>
- in the service unit file. For details
+ in the service unit file. For details,
see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>
and
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>.</p></li></ol></div><p>These recommendations are similar but
not identical to the <a class="ulink" href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/LaunchOnDemandDaemons.html#//apple_ref/doc/uid/TP40001762-104738" target="_top">Apple
- MacOS X Daemon Requirements</a>.</p></div></div><div class="refsect1"><a name="idm259766159040"></a><h2 id="Activation">Activation<a class="headerlink" title="Permalink to this headline" href="#Activation">¶</a></h2><p>New-style init systems provide multiple
+ MacOS X Daemon Requirements</a>.</p></div></div><div class="refsect1"><a name="idm274689010544"></a><h2 id="Activation">Activation<a class="headerlink" title="Permalink to this headline" href="#Activation">¶</a></h2><p>New-style init systems provide multiple
additional mechanisms to activate services, as
detailed below. It is common that services are
configured to be activated via more than one mechanism
@@ -256,9 +256,9 @@
when a printer is plugged in, or when a file is queued
in the printer spool directory. Even for services that
are intended to be started on system bootup
- unconditionally it is a good idea to implement some of
+ unconditionally, it is a good idea to implement some of
the various activation schemes outlined below, in
- order to maximize parallelization: if a daemon
+ order to maximize parallelization. If a daemon
implements a D-Bus service or listening socket,
implementing the full bus and socket activation scheme
allows starting of the daemon with its clients in
@@ -266,8 +266,8 @@
communication channels are established already, and no
request is lost because client requests will be queued
by the bus system (in case of D-Bus) or the kernel (in
- case of sockets), until the activation is
- completed.</p><div class="refsect2"><a name="idm259766155808"></a><h3 id="Activation on Boot">Activation on Boot<a class="headerlink" title="Permalink to this headline" href="#Activation%20on%20Boot">¶</a></h3><p>Old-style daemons are usually activated
+ case of sockets) until the activation is
+ completed.</p><div class="refsect2"><a name="idm274689007216"></a><h3 id="Activation on Boot">Activation on Boot<a class="headerlink" title="Permalink to this headline" href="#Activation%20on%20Boot">¶</a></h3><p>Old-style daemons are usually activated
exclusively on boot (and manually by the
administrator) via SysV init scripts, as
detailed in the <a class="ulink" href="http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html" target="_top">LSB
@@ -275,7 +275,7 @@
Specification</a>. This method of
activation is supported ubiquitously on Linux
init systems, both old-style and new-style
- systems. Among other issues SysV init scripts
+ systems. Among other issues, SysV init scripts
have the disadvantage of involving shell
scripts in the boot process. New-style init
systems generally employ updated versions of
@@ -283,7 +283,7 @@
runtime and using more minimal service
description files.</p><p>In systemd, if the developer or
administrator wants to make sure a service or
- other unit is activated automatically on boot
+ other unit is activated automatically on boot,
it is recommended to place a symlink to the
unit file in the <code class="filename">.wants/</code>
directory of either
@@ -295,31 +295,31 @@
for details about the
<code class="filename">.wants/</code> directories, and
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>
- for details about the two boot targets.</p></div><div class="refsect2"><a name="idm259766148096"></a><h3 id="Socket-Based Activation">Socket-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Socket-Based%20Activation">¶</a></h3><p>In order to maximize the possible
+ for details about the two boot targets.</p></div><div class="refsect2"><a name="idm274684370608"></a><h3 id="Socket-Based Activation">Socket-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Socket-Based%20Activation">¶</a></h3><p>In order to maximize the possible
parallelization and robustness and simplify
configuration and development, it is
recommended for all new-style daemons that
communicate via listening sockets to employ
socket-based activation. In a socket-based
- activation scheme the creation and binding of
+ activation scheme, the creation and binding of
the listening socket as primary communication
channel of daemons to local (and sometimes
remote) clients is moved out of the daemon
code and into the init system. Based on
- per-daemon configuration the init system
+ per-daemon configuration, the init system
installs the sockets and then hands them off
to the spawned process as soon as the
respective daemon is to be started.
- Optionally activation of the service can be
+ Optionally, activation of the service can be
delayed until the first inbound traffic
- arrives at the socket, to implement on-demand
+ arrives at the socket to implement on-demand
activation of daemons. However, the primary
advantage of this scheme is that all providers
and all consumers of the sockets can be
started in parallel as soon as all sockets
- are established. In addition to that daemons
+ are established. In addition to that, daemons
can be restarted with losing only a minimal
- number of client transactions or even any
+ number of client transactions, or even any
client request at all (the latter is
particularly true for state-less protocols,
such as DNS or syslog), because the socket
@@ -327,16 +327,16 @@
and all requests are queued while the daemon
cannot process them.</p><p>New-style daemons which support socket
activation must be able to receive their
- sockets from the init system, instead of
+ sockets from the init system instead of
creating and binding them themselves. For
details about the programming interfaces for
- this scheme provided by systemd see
+ this scheme provided by systemd, see
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>
and
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>. For
details about porting existing daemons to
- socket-based activation see below. With
- minimal effort it is possible to implement
+ socket-based activation, see below. With
+ minimal effort, it is possible to implement
socket-based activation in addition to
traditional internal socket creation in the
same codebase in order to support both
@@ -346,27 +346,27 @@
units, which are described in
<a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>. When
configuring socket units for socket-based
- activation it is essential that all listening
+ activation, it is essential that all listening
sockets are pulled in by the special target
unit <code class="filename">sockets.target</code>. It
is recommended to place a
<code class="varname">WantedBy=sockets.target</code>
- directive in the <code class="literal">[Install]</code>
- section, to automatically add such a
+ directive in the "<code class="literal">[Install]</code>"
+ section to automatically add such a
dependency on installation of a socket
unit. Unless
<code class="varname">DefaultDependencies=no</code> is
- set the necessary ordering dependencies are
+ set, the necessary ordering dependencies are
implicitly created for all socket units. For
more information about
- <code class="filename">sockets.target</code> see
+ <code class="filename">sockets.target</code>, see
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>. It
is not necessary or recommended to place any
additional dependencies on socket units (for
example from
<code class="filename">multi-user.target</code> or
suchlike) when one is installed in
- <code class="filename">sockets.target</code>.</p></div><div class="refsect2"><a name="idm259766134624"></a><h3 id="Bus-Based Activation">Bus-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Bus-Based%20Activation">¶</a></h3><p>When the D-Bus IPC system is used for
+ <code class="filename">sockets.target</code>.</p></div><div class="refsect2"><a name="idm274684357232"></a><h3 id="Bus-Based Activation">Bus-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Bus-Based%20Activation">¶</a></h3><p>When the D-Bus IPC system is used for
communication with clients, new-style daemons
should employ bus activation so that they are
automatically activated when a client
@@ -375,41 +375,41 @@
service files (not to be confused with systemd
service unit files!). To ensure that D-Bus
uses systemd to start-up and maintain the
- daemon use the
+ daemon, use the
<code class="varname">SystemdService=</code> directive
- in these service files, to configure the
+ in these service files to configure the
matching systemd service for a D-Bus
- service. e.g.: for a D-Bus service whose D-Bus
+ service. e.g.: For a D-Bus service whose D-Bus
activation file is named
<code class="filename">org.freedesktop.RealtimeKit.service</code>,
make sure to set
<code class="varname">SystemdService=rtkit-daemon.service</code>
- in that file, to bind it to the systemd
+ in that file to bind it to the systemd
service
<code class="filename">rtkit-daemon.service</code>. This
is needed to make sure that the daemon is
started in a race-free fashion when activated
- via multiple mechanisms simultaneously.</p></div><div class="refsect2"><a name="idm259766130144"></a><h3 id="Device-Based Activation">Device-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Device-Based%20Activation">¶</a></h3><p>Often, daemons that manage a particular
+ via multiple mechanisms simultaneously.</p></div><div class="refsect2"><a name="idm274684352752"></a><h3 id="Device-Based Activation">Device-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Device-Based%20Activation">¶</a></h3><p>Often, daemons that manage a particular
type of hardware should be activated only when
the hardware of the respective kind is plugged
in or otherwise becomes available. In a
- new-style init system it is possible to bind
+ new-style init system, it is possible to bind
activation to hardware plug/unplug events. In
systemd, kernel devices appearing in the
sysfs/udev device tree can be exposed as units
if they are tagged with the string
"<code class="literal">systemd</code>". Like any other
- kind of unit they may then pull in other units
- when activated (i.e. Plugged in) and thus
- implement device-based activation. Systemd
+ kind of unit, they may then pull in other units
+ when activated (i.e. plugged in) and thus
+ implement device-based activation. systemd
dependencies may be encoded in the udev
database via the
<code class="varname">SYSTEMD_WANTS=</code>
property. See
<a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>
- for details. Often it is nicer to pull in
+ for details. Often, it is nicer to pull in
services from devices only indirectly via
- dedicated targets. Example: instead of pulling
+ dedicated targets. Example: Instead of pulling
in <code class="filename">bluetoothd.service</code>
from all the various bluetooth dongles and
other hardware available, pull in
@@ -425,7 +425,7 @@
<span class="command"><strong>enable</strong></span> of
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
instead of manipulating the udev
- ruleset.</p></div><div class="refsect2"><a name="idm259771178096"></a><h3 id="Path-Based Activation">Path-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Path-Based%20Activation">¶</a></h3><p>Often, runtime of daemons processing
+ ruleset.</p></div><div class="refsect2"><a name="idm274684343888"></a><h3 id="Path-Based Activation">Path-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Path-Based%20Activation">¶</a></h3><p>Often, runtime of daemons processing
spool files or directories (such as a printing
system) can be delayed until these file system
objects change state, or become
@@ -435,18 +435,18 @@
path-based activation configured in
<code class="filename">.path</code> units, as outlined
in
- <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>.</p></div><div class="refsect2"><a name="idm259766109408"></a><h3 id="Timer-Based Activation">Timer-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Timer-Based%20Activation">¶</a></h3><p>Some daemons that implement clean-up
+ <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>.</p></div><div class="refsect2"><a name="idm274684340720"></a><h3 id="Timer-Based Activation">Timer-Based Activation<a class="headerlink" title="Permalink to this headline" href="#Timer-Based%20Activation">¶</a></h3><p>Some daemons that implement clean-up
jobs that are intended to be executed in
regular intervals benefit from timer-based
activation. In systemd, this is implemented
via <code class="filename">.timer</code> units, as
described in
- <a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>.</p></div><div class="refsect2"><a name="idm259766106480"></a><h3 id="Other Forms of Activation">Other Forms of Activation<a class="headerlink" title="Permalink to this headline" href="#Other%20Forms%20of%20Activation">¶</a></h3><p>Other forms of activation have been
+ <a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>.</p></div><div class="refsect2"><a name="idm274684337792"></a><h3 id="Other Forms of Activation">Other Forms of Activation<a class="headerlink" title="Permalink to this headline" href="#Other%20Forms%20of%20Activation">¶</a></h3><p>Other forms of activation have been
suggested and implemented in some
- systems. However, often there are simpler or
+ systems. However, there are often simpler or
better alternatives, or they can be put
together of combinations of the schemes
- above. Example: sometimes it appears useful to
+ above. Example: Sometimes, it appears useful to
start daemons or <code class="filename">.socket</code>
units when a specific IP address is configured
on a network interface, because network
@@ -467,7 +467,7 @@
service activation is low system
load. However, here too, a more convincing
approach might be to make proper use of
- features of the operating system: in
+ features of the operating system, in
particular, the CPU or IO scheduler of
Linux. Instead of scheduling jobs from
userspace based on monitoring the OS
@@ -486,9 +486,9 @@
activation to schedule background jobs during
runtime and with minimal impact on the system,
and remove it from the boot phase
- itself.</p></div></div><div class="refsect1"><a name="idm259766099840"></a><h2 id="Integration with Systemd">Integration with Systemd<a class="headerlink" title="Permalink to this headline" href="#Integration%20with%20Systemd">¶</a></h2><div class="refsect2"><a name="idm259766099200"></a><h3 id="Writing Systemd Unit Files">Writing Systemd Unit Files<a class="headerlink" title="Permalink to this headline" href="#Writing%20Systemd%20Unit%20Files">¶</a></h3><p>When writing systemd unit files, it is
+ itself.</p></div></div><div class="refsect1"><a name="idm274689114736"></a><h2 id="Integration with Systemd">Integration with Systemd<a class="headerlink" title="Permalink to this headline" href="#Integration%20with%20Systemd">¶</a></h2><div class="refsect2"><a name="idm274689114048"></a><h3 id="Writing Systemd Unit Files">Writing Systemd Unit Files<a class="headerlink" title="Permalink to this headline" href="#Writing%20Systemd%20Unit%20Files">¶</a></h3><p>When writing systemd unit files, it is
recommended to consider the following
- suggestions:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If possible do not use
+ suggestions:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If possible, do not use
the <code class="varname">Type=forking</code>
setting in service files. But if you
do, make sure to set the PID file path
@@ -516,28 +516,28 @@
package to keep the unit file
operating
system-independent.</p></li><li class="listitem"><p>Make sure to include
- an <code class="literal">[Install]</code>
+ an "<code class="literal">[Install]</code>"
section including installation
information for the unit file. See
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
for details. To activate your service
- on boot make sure to add a
+ on boot, make sure to add a
<code class="varname">WantedBy=multi-user.target</code>
or
<code class="varname">WantedBy=graphical.target</code>
directive. To activate your socket on
boot, make sure to add
- <code class="varname">WantedBy=sockets.target</code>. Usually
+ <code class="varname">WantedBy=sockets.target</code>. Usually,
you also want to make sure that when
- your service is installed your socket
+ your service is installed, your socket
is installed too, hence add
<code class="varname">Also=foo.socket</code> in
your service file
<code class="filename">foo.service</code>, for
a hypothetical program
- <code class="filename">foo</code>.</p></li></ol></div></div><div class="refsect2"><a name="idm259766083648"></a><h3 id="Installing Systemd Service Files">Installing Systemd Service Files<a class="headerlink" title="Permalink to this headline" href="#Installing%20Systemd%20Service%20Files">¶</a></h3><p>At the build installation time
+ <code class="filename">foo</code>.</p></li></ol></div></div><div class="refsect2"><a name="idm274684306432"></a><h3 id="Installing Systemd Service Files">Installing Systemd Service Files<a class="headerlink" title="Permalink to this headline" href="#Installing%20Systemd%20Service%20Files">¶</a></h3><p>At the build installation time
(e.g. <span class="command"><strong>make install</strong></span> during
- package build) packages are recommended to
+ package build), packages are recommended to
install their systemd unit files in the
directory returned by <span class="command"><strong>pkg-config
systemd
@@ -550,12 +550,12 @@
request but not activate them automatically
during boot. Optionally, during package
installation (e.g. <span class="command"><strong>rpm -i</strong></span>
- by the administrator) symlinks should be
+ by the administrator), symlinks should be
created in the systemd configuration
directories via the <span class="command"><strong>enable</strong></span>
command of the
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
- tool, to activate them automatically on
+ tool to activate them automatically on
boot.</p><p>Packages using
<a href="autoconf.html"><span class="citerefentry"><span class="refentrytitle">autoconf</span>(1)</span></a>
are recommended to use a configure script
@@ -587,7 +587,7 @@ systemdsystemunit_DATA = \
foobar.service
endif</pre><p>In the
<a href="rpm.html"><span class="citerefentry"><span class="refentrytitle">rpm</span>(8)</span></a>
- <code class="filename">.spec</code> file use snippets
+ <code class="filename">.spec</code> file, use snippets
like the following to enable/disable the
service during
installation/deinstallation. This makes use of
@@ -603,17 +603,17 @@ endif</pre><p>In the
%postun
%systemd_postun</pre><p>If the service shall be restarted during
- upgrades replace the
- <code class="literal">%postun</code> scriptlet above
+ upgrades, replace the
+ "<code class="literal">%postun</code>" scriptlet above
with the following:</p><pre class="programlisting">%postun
%systemd_postun_with_restart foobar.service</pre><p>Note that
- <code class="literal">%systemd_post</code> and
- <code class="literal">%systemd_preun</code> expect the
+ "<code class="literal">%systemd_post</code>" and
+ "<code class="literal">%systemd_preun</code>" expect the
names of all units that are installed/removed
as arguments, separated by
- spaces. <code class="literal">%systemd_postun</code>
+ spaces. "<code class="literal">%systemd_postun</code>"
expects no
- arguments. <code class="literal">%systemd_postun_with_restart</code>
+ arguments. "<code class="literal">%systemd_postun_with_restart</code>"
expects the units to restart as
arguments.</p><p>To facilitate upgrades from a package
version that shipped only SysV init scripts to
@@ -625,7 +625,7 @@ if /sbin/chkconfig --level 5 foobar ; then
fi</pre><p>Where 0.47.11-1 is the first package
version that includes the native unit
file. This fragment will ensure that the first
- time the unit file is installed it will be
+ time the unit file is installed, it will be
enabled if and only if the SysV init script is
enabled, thus making sure that the enable
status is not changed. Note that
@@ -633,12 +633,12 @@ fi</pre><p>Where 0.47.11-1 is the first package
specific to Fedora which can be used to check
whether a SysV init script is enabled. Other
operating systems will have to use different
- commands here.</p></div></div><div class="refsect1"><a name="idm259766056384"></a><h2 id="Porting Existing Daemons">Porting Existing Daemons<a class="headerlink" title="Permalink to this headline" href="#Porting%20Existing%20Daemons">¶</a></h2><p>Since new-style init systems such as systemd are
- compatible with traditional SysV init systems it is
+ commands here.</p></div></div><div class="refsect1"><a name="idm274684279152"></a><h2 id="Porting Existing Daemons">Porting Existing Daemons<a class="headerlink" title="Permalink to this headline" href="#Porting%20Existing%20Daemons">¶</a></h2><p>Since new-style init systems such as systemd are
+ compatible with traditional SysV init systems, it is
not strictly necessary to port existing daemons to the
- new style. However doing so offers additional
+ new style. However, doing so offers additional
functionality to the daemons as well as simplifying
- integration into new-style init systems.</p><p>To port an existing SysV compatible daemon the
+ integration into new-style init systems.</p><p>To port an existing SysV compatible daemon, the
following steps are recommended:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If not already implemented,
add an optional command line switch to the
daemon to disable daemonization. This is
@@ -646,9 +646,9 @@ fi</pre><p>Where 0.47.11-1 is the first package
new-style init systems, but also to ease
debugging.</p></li><li class="listitem"><p>If the daemon offers
interfaces to other software running on the
- local system via local AF_UNIX sockets,
+ local system via local <code class="constant">AF_UNIX</code> sockets,
consider implementing socket-based activation
- (see above). Usually a minimal patch is
+ (see above). Usually, a minimal patch is
sufficient to implement this: Extend the
socket creation in the daemon code so that
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>
@@ -657,8 +657,8 @@ fi</pre><p>Where 0.47.11-1 is the first package
<code class="function">sd_listen_fds()</code> returns a
positive value), skip the socket creation step
and use the passed sockets. Secondly, ensure
- that the file-system socket nodes for local
- AF_UNIX sockets used in the socket-based
+ that the file system socket nodes for local
+ <code class="constant">AF_UNIX</code> sockets used in the socket-based
activation are not removed when the daemon
shuts down, if sockets have been
passed. Third, if the daemon normally closes
@@ -678,7 +678,7 @@ fi</pre><p>Where 0.47.11-1 is the first package
details.</p></li><li class="listitem"><p>If the daemon exposes
interfaces via D-Bus, write and install a
D-Bus activation file for the service, see
- above for details.</p></li></ol></div></div><div class="refsect1"><a name="idm259766046448"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ above for details.</p></li></ol></div></div><div class="refsect1"><a name="idm274684268656"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
diff --git a/man/daemon.xml b/man/daemon.xml
index 0d29e7aa1c..7790420c6e 100644
--- a/man/daemon.xml
+++ b/man/daemon.xml
@@ -79,7 +79,7 @@
descriptors 0, 1, 2). This ensures
that no accidentally passed file
descriptor stays around in the daemon
- process. On Linux this is best
+ process. On Linux, this is best
implemented by iterating through
<filename>/proc/self/fd</filename>,
with a fallback of iterating from file
@@ -92,7 +92,7 @@
best done by iterating through the
available signals up to the limit of
_NSIG and resetting them to
- SIG_DFL.</para></listitem>
+ <constant>SIG_DFL</constant>.</para></listitem>
<listitem><para>Reset the signal mask
using
@@ -115,7 +115,7 @@
<listitem><para>In the child, call
<function>fork()</function> again, to
- ensure the daemon can never re-acquire
+ ensure that the daemon can never re-acquire
a terminal again.</para></listitem>
<listitem><para>Call <function>exit()</function> in the
@@ -150,15 +150,15 @@
<function>getpid()</function>) to a
PID file, for example
<filename>/var/run/foobar.pid</filename>
- (for a hypothetical daemon "foobar"),
+ (for a hypothetical daemon "foobar")
to ensure that the daemon cannot be
started more than once. This must be
implemented in race-free fashion so
that the PID file is only updated when
- at the same time it is verified that
+ it is verified at the same time that
the PID previously stored in the PID
file no longer exists or belongs to a
- foreign process. Commonly some kind of
+ foreign process. Commonly, some kind of
file locking is employed to implement
this logic.</para></listitem>
@@ -167,7 +167,7 @@
applicable.</para></listitem>
<listitem><para>From the daemon
- process notify the original process
+ process, notify the original process
started that initialization is
complete. This can be implemented via
an unnamed pipe or similar
@@ -197,7 +197,7 @@
implement the scheme pointed out
above. However, it is recommended to make this
behavior optional and configurable via a
- command line argument, to ease debugging as
+ command line argument to ease debugging as
well as to simplify integration into systems
using systemd.</para>
</refsect2>
@@ -211,20 +211,20 @@
runtime and simplifies their
implementation.</para>
- <para>For developing a new-style daemon none
+ <para>For developing a new-style daemon, none
of the initialization steps recommended for
SysV daemons need to be implemented. New-style
init systems such as systemd make all of them
redundant. Moreover, since some of these steps
interfere with process monitoring, file
descriptor passing and other functionality of
- the init system it is recommended not to
+ the init system, it is recommended not to
execute them when run as new-style
service.</para>
<para>Note that new-style init systems
guarantee execution of daemon processes in
- clean process contexts: it is guaranteed that
+ a clean process context: it is guaranteed that
the environment block is sanitized, that the
signal handlers and mask is reset and that no
left-over file descriptors are passed. Daemons
@@ -237,11 +237,11 @@
to implement the following:</para>
<orderedlist>
- <listitem><para>If SIGTERM is
+ <listitem><para>If <constant>SIGTERM</constant> is
received, shut down the daemon and
exit cleanly.</para></listitem>
- <listitem><para>If SIGHUP is received,
+ <listitem><para>If <constant>SIGHUP</constant> is received,
reload the configuration files, if
this applies.</para></listitem>
@@ -256,7 +256,7 @@
scripts</ulink>.</para></listitem>
<listitem><para>If possible and
- applicable expose the daemon's control
+ applicable, expose the daemon's control
interface via the D-Bus IPC system and
grab a bus name as last step of
initialization.</para></listitem>
@@ -274,7 +274,7 @@
rely on the init system's
functionality to limit the access of
the daemon to files, services and
- other resources. i.e. in the case of
+ other resources, i.e. in the case of
systemd, rely on systemd's resource
limit control instead of implementing
your own, rely on systemd's privilege
@@ -285,7 +285,7 @@
controls.</para></listitem>
<listitem><para>If D-Bus is used, make
- your daemon bus-activatable, via
+ your daemon bus-activatable by
supplying a D-Bus service activation
configuration file. This has multiple
advantages: your daemon may be started
@@ -293,7 +293,7 @@
parallel to other daemons requiring it
-- which maximizes parallelization and
boot-up speed; your daemon can be
- restarted on failure, without losing
+ restarted on failure without losing
any bus requests, as the bus queues
requests for activatable services. See
below for details.</para></listitem>
@@ -304,17 +304,17 @@
socket, it should be made
socket-activatable following the
scheme pointed out below. Like D-Bus
- activation this enables on-demand
+ activation, this enables on-demand
starting of services as well as it
allows improved parallelization of
service start-up. Also, for state-less
- protocols (such as syslog, DNS) a
+ protocols (such as syslog, DNS), a
daemon implementing socket-based
activation can be restarted without
losing a single request. See below for
details.</para></listitem>
- <listitem><para>If applicable a daemon
+ <listitem><para>If applicable, a daemon
should notify the init system about
startup completion or status updates
via the
@@ -327,7 +327,7 @@
choose to simply log to STDERR via
<function>fprintf()</function>, which is then forwarded to
syslog by the init system. If log
- priorities are necessary these can be
+ priorities are necessary, these can be
encoded by prefixing individual log
lines with strings like "&lt;4&gt;"
(for log priority 4 "WARNING" in the
@@ -343,7 +343,7 @@
kind of logging may be enabled by
setting
<varname>StandardError=syslog</varname>
- in the service unit file. For details
+ in the service unit file. For details,
see
<citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
and
@@ -374,9 +374,9 @@
when a printer is plugged in, or when a file is queued
in the printer spool directory. Even for services that
are intended to be started on system bootup
- unconditionally it is a good idea to implement some of
+ unconditionally, it is a good idea to implement some of
the various activation schemes outlined below, in
- order to maximize parallelization: if a daemon
+ order to maximize parallelization. If a daemon
implements a D-Bus service or listening socket,
implementing the full bus and socket activation scheme
allows starting of the daemon with its clients in
@@ -384,7 +384,7 @@
communication channels are established already, and no
request is lost because client requests will be queued
by the bus system (in case of D-Bus) or the kernel (in
- case of sockets), until the activation is
+ case of sockets) until the activation is
completed.</para>
<refsect2>
@@ -399,7 +399,7 @@
Specification</ulink>. This method of
activation is supported ubiquitously on Linux
init systems, both old-style and new-style
- systems. Among other issues SysV init scripts
+ systems. Among other issues, SysV init scripts
have the disadvantage of involving shell
scripts in the boot process. New-style init
systems generally employ updated versions of
@@ -409,7 +409,7 @@
<para>In systemd, if the developer or
administrator wants to make sure a service or
- other unit is activated automatically on boot
+ other unit is activated automatically on boot,
it is recommended to place a symlink to the
unit file in the <filename>.wants/</filename>
directory of either
@@ -434,25 +434,25 @@
recommended for all new-style daemons that
communicate via listening sockets to employ
socket-based activation. In a socket-based
- activation scheme the creation and binding of
+ activation scheme, the creation and binding of
the listening socket as primary communication
channel of daemons to local (and sometimes
remote) clients is moved out of the daemon
code and into the init system. Based on
- per-daemon configuration the init system
+ per-daemon configuration, the init system
installs the sockets and then hands them off
to the spawned process as soon as the
respective daemon is to be started.
- Optionally activation of the service can be
+ Optionally, activation of the service can be
delayed until the first inbound traffic
- arrives at the socket, to implement on-demand
+ arrives at the socket to implement on-demand
activation of daemons. However, the primary
advantage of this scheme is that all providers
and all consumers of the sockets can be
started in parallel as soon as all sockets
- are established. In addition to that daemons
+ are established. In addition to that, daemons
can be restarted with losing only a minimal
- number of client transactions or even any
+ number of client transactions, or even any
client request at all (the latter is
particularly true for state-less protocols,
such as DNS or syslog), because the socket
@@ -462,16 +462,16 @@
<para>New-style daemons which support socket
activation must be able to receive their
- sockets from the init system, instead of
+ sockets from the init system instead of
creating and binding them themselves. For
details about the programming interfaces for
- this scheme provided by systemd see
+ this scheme provided by systemd, see
<citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
and
<citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>. For
details about porting existing daemons to
- socket-based activation see below. With
- minimal effort it is possible to implement
+ socket-based activation, see below. With
+ minimal effort, it is possible to implement
socket-based activation in addition to
traditional internal socket creation in the
same codebase in order to support both
@@ -483,20 +483,20 @@
units, which are described in
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>. When
configuring socket units for socket-based
- activation it is essential that all listening
+ activation, it is essential that all listening
sockets are pulled in by the special target
unit <filename>sockets.target</filename>. It
is recommended to place a
<varname>WantedBy=sockets.target</varname>
directive in the <literal>[Install]</literal>
- section, to automatically add such a
+ section to automatically add such a
dependency on installation of a socket
unit. Unless
<varname>DefaultDependencies=no</varname> is
- set the necessary ordering dependencies are
+ set, the necessary ordering dependencies are
implicitly created for all socket units. For
more information about
- <filename>sockets.target</filename> see
+ <filename>sockets.target</filename>, see
<citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>. It
is not necessary or recommended to place any
additional dependencies on socket units (for
@@ -518,16 +518,16 @@
service files (not to be confused with systemd
service unit files!). To ensure that D-Bus
uses systemd to start-up and maintain the
- daemon use the
+ daemon, use the
<varname>SystemdService=</varname> directive
- in these service files, to configure the
+ in these service files to configure the
matching systemd service for a D-Bus
- service. e.g.: for a D-Bus service whose D-Bus
+ service. e.g.: For a D-Bus service whose D-Bus
activation file is named
<filename>org.freedesktop.RealtimeKit.service</filename>,
make sure to set
<varname>SystemdService=rtkit-daemon.service</varname>
- in that file, to bind it to the systemd
+ in that file to bind it to the systemd
service
<filename>rtkit-daemon.service</filename>. This
is needed to make sure that the daemon is
@@ -542,23 +542,23 @@
type of hardware should be activated only when
the hardware of the respective kind is plugged
in or otherwise becomes available. In a
- new-style init system it is possible to bind
+ new-style init system, it is possible to bind
activation to hardware plug/unplug events. In
systemd, kernel devices appearing in the
sysfs/udev device tree can be exposed as units
if they are tagged with the string
- "<literal>systemd</literal>". Like any other
- kind of unit they may then pull in other units
- when activated (i.e. Plugged in) and thus
- implement device-based activation. Systemd
+ <literal>systemd</literal>. Like any other
+ kind of unit, they may then pull in other units
+ when activated (i.e. plugged in) and thus
+ implement device-based activation. systemd
dependencies may be encoded in the udev
database via the
<varname>SYSTEMD_WANTS=</varname>
property. See
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details. Often it is nicer to pull in
+ for details. Often, it is nicer to pull in
services from devices only indirectly via
- dedicated targets. Example: instead of pulling
+ dedicated targets. Example: Instead of pulling
in <filename>bluetoothd.service</filename>
from all the various bluetooth dongles and
other hardware available, pull in
@@ -610,10 +610,10 @@
<para>Other forms of activation have been
suggested and implemented in some
- systems. However, often there are simpler or
+ systems. However, there are often simpler or
better alternatives, or they can be put
together of combinations of the schemes
- above. Example: sometimes it appears useful to
+ above. Example: Sometimes, it appears useful to
start daemons or <filename>.socket</filename>
units when a specific IP address is configured
on a network interface, because network
@@ -634,7 +634,7 @@
service activation is low system
load. However, here too, a more convincing
approach might be to make proper use of
- features of the operating system: in
+ features of the operating system, in
particular, the CPU or IO scheduler of
Linux. Instead of scheduling jobs from
userspace based on monitoring the OS
@@ -668,7 +668,7 @@
suggestions:</para>
<orderedlist>
- <listitem><para>If possible do not use
+ <listitem><para>If possible, do not use
the <varname>Type=forking</varname>
setting in service files. But if you
do, make sure to set the PID file path
@@ -711,15 +711,15 @@
information for the unit file. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. To activate your service
- on boot make sure to add a
+ on boot, make sure to add a
<varname>WantedBy=multi-user.target</varname>
or
<varname>WantedBy=graphical.target</varname>
directive. To activate your socket on
boot, make sure to add
- <varname>WantedBy=sockets.target</varname>. Usually
+ <varname>WantedBy=sockets.target</varname>. Usually,
you also want to make sure that when
- your service is installed your socket
+ your service is installed, your socket
is installed too, hence add
<varname>Also=foo.socket</varname> in
your service file
@@ -735,7 +735,7 @@
<para>At the build installation time
(e.g. <command>make install</command> during
- package build) packages are recommended to
+ package build), packages are recommended to
install their systemd unit files in the
directory returned by <command>pkg-config
systemd
@@ -748,12 +748,12 @@
request but not activate them automatically
during boot. Optionally, during package
installation (e.g. <command>rpm -i</command>
- by the administrator) symlinks should be
+ by the administrator), symlinks should be
created in the systemd configuration
directories via the <command>enable</command>
command of the
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
- tool, to activate them automatically on
+ tool to activate them automatically on
boot.</para>
<para>Packages using
@@ -801,7 +801,7 @@ endif</programlisting>
<para>In the
<citerefentry><refentrytitle>rpm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- <filename>.spec</filename> file use snippets
+ <filename>.spec</filename> file, use snippets
like the following to enable/disable the
service during
installation/deinstallation. This makes use of
@@ -827,7 +827,7 @@ endif</programlisting>
%systemd_postun</programlisting>
<para>If the service shall be restarted during
- upgrades replace the
+ upgrades, replace the
<literal>%postun</literal> scriptlet above
with the following:</para>
@@ -859,7 +859,7 @@ fi</programlisting>
<para>Where 0.47.11-1 is the first package
version that includes the native unit
file. This fragment will ensure that the first
- time the unit file is installed it will be
+ time the unit file is installed, it will be
enabled if and only if the SysV init script is
enabled, thus making sure that the enable
status is not changed. Note that
@@ -875,13 +875,13 @@ fi</programlisting>
<title>Porting Existing Daemons</title>
<para>Since new-style init systems such as systemd are
- compatible with traditional SysV init systems it is
+ compatible with traditional SysV init systems, it is
not strictly necessary to port existing daemons to the
- new style. However doing so offers additional
+ new style. However, doing so offers additional
functionality to the daemons as well as simplifying
integration into new-style init systems.</para>
- <para>To port an existing SysV compatible daemon the
+ <para>To port an existing SysV compatible daemon, the
following steps are recommended:</para>
<orderedlist>
@@ -894,9 +894,9 @@ fi</programlisting>
<listitem><para>If the daemon offers
interfaces to other software running on the
- local system via local AF_UNIX sockets,
+ local system via local <constant>AF_UNIX</constant> sockets,
consider implementing socket-based activation
- (see above). Usually a minimal patch is
+ (see above). Usually, a minimal patch is
sufficient to implement this: Extend the
socket creation in the daemon code so that
<citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
@@ -905,8 +905,8 @@ fi</programlisting>
<function>sd_listen_fds()</function> returns a
positive value), skip the socket creation step
and use the passed sockets. Secondly, ensure
- that the file-system socket nodes for local
- AF_UNIX sockets used in the socket-based
+ that the file system socket nodes for local
+ <constant>AF_UNIX</constant> sockets used in the socket-based
activation are not removed when the daemon
shuts down, if sockets have been
passed. Third, if the daemon normally closes
diff --git a/man/halt.8 b/man/halt.8
new file mode 100644
index 0000000000..660da639a8
--- /dev/null
+++ b/man/halt.8
@@ -0,0 +1,91 @@
+'\" t
+.TH "HALT" "8" "" "systemd 208" "halt"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+halt, poweroff, reboot \- Halt, power\-off or reboot the machine
+.SH "SYNOPSIS"
+.HP \w'\fBhalt\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBhalt \fR\fB[OPTIONS...]\fR
+.HP \w'\fBpoweroff\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBpoweroff \fR\fB[OPTIONS...]\fR
+.HP \w'\fBreboot\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBreboot \fR\fB[OPTIONS...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBhalt\fR,
+\fBpoweroff\fR,
+\fBreboot\fR
+may be used to halt, power\-off or reboot the machine\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-halt\fR
+.RS 4
+Halt the machine, regardless of which one of the three commands is invoked\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-poweroff\fR
+.RS 4
+Power\-off the machine, regardless of which one of the three commands is invoked\&.
+.RE
+.PP
+\fB\-\-reboot\fR
+.RS 4
+Reboot the machine, regardless of which one of the three commands is invoked\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Force immediate halt, power\-off, reboot\&. Do not contact the init system\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-wtmp\-only\fR
+.RS 4
+Only write wtmp shutdown entry, do not actually halt, power\-off, reboot\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-no\-wtmp\fR
+.RS 4
+Do not write wtmp shutdown entry\&.
+.RE
+.PP
+\fB\-\-no\-wall\fR
+.RS 4
+Do not send wall message before halt, power\-off, reboot\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "NOTES"
+.PP
+These are legacy commands available for compatibility only\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBshutdown\fR(8),
+\fBwall\fR(1)
diff --git a/man/halt.html b/man/halt.html
index 196aded96c..c7402a951f 100644
--- a/man/halt.html
+++ b/man/halt.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="halt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>halt, poweroff, reboot — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">halt [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">poweroff [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">reboot [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm259768280352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>halt</strong></span>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="halt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>halt, poweroff, reboot — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">halt [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">poweroff [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">reboot [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm274696062512"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>halt</strong></span>,
<span class="command"><strong>poweroff</strong></span>, <span class="command"><strong>reboot</strong></span>
may be used to halt, power-off or reboot the
- machine.</p></div><div class="refsect1"><a name="idm259768277152"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ machine.</p></div><div class="refsect1"><a name="idm274696059360"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--halt"><span class="term"><code class="option">--halt</code></span><a class="headerlink" title="Permalink to this term" href="#--halt">¶</a></dt><dd><p>Halt the machine,
regardless of which one of the three
commands is invoked.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--poweroff</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>Power-off the machine,
@@ -30,15 +30,15 @@
commands is invoked.</p></dd><dt id="--reboot"><span class="term"><code class="option">--reboot</code></span><a class="headerlink" title="Permalink to this term" href="#--reboot">¶</a></dt><dd><p>Reboot the machine,
regardless of which one of the three
commands is invoked.</p></dd><dt id="-f"><span class="term"><code class="option">-f</code>, </span><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#-f">¶</a></dt><dd><p>Force immediate halt,
- power-off, reboot. Don't contact the
+ power-off, reboot. Do not contact the
init system.</p></dd><dt id="-w"><span class="term"><code class="option">-w</code>, </span><span class="term"><code class="option">--wtmp-only</code></span><a class="headerlink" title="Permalink to this term" href="#-w">¶</a></dt><dd><p>Only write wtmp
- shutdown entry, don't actually halt,
- power-off, reboot.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Don't write wtmp
- shutdown entry.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Don't send wall
+ shutdown entry, do not actually halt,
+ power-off, reboot.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Do not write wtmp
+ shutdown entry.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Do not send wall
message before
- halt, power-off, reboot.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772158320"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259772157136"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These are legacy commands available for
- compatibility only.</p></div><div class="refsect1"><a name="idm259772155952"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ halt, power-off, reboot.</p></dd></dl></div></div><div class="refsect1"><a name="idm274696223392"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274696222208"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These are legacy commands available for
+ compatibility only.</p></div><div class="refsect1"><a name="idm274696221024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>,
diff --git a/man/halt.xml b/man/halt.xml
index 8473965194..2a13d3c635 100644
--- a/man/halt.xml
+++ b/man/halt.xml
@@ -114,7 +114,7 @@
<term><option>--force</option></term>
<listitem><para>Force immediate halt,
- power-off, reboot. Don't contact the
+ power-off, reboot. Do not contact the
init system.</para></listitem>
</varlistentry>
@@ -123,7 +123,7 @@
<term><option>--wtmp-only</option></term>
<listitem><para>Only write wtmp
- shutdown entry, don't actually halt,
+ shutdown entry, do not actually halt,
power-off, reboot.</para></listitem>
</varlistentry>
@@ -131,14 +131,14 @@
<term><option>-d</option></term>
<term><option>--no-wtmp</option></term>
- <listitem><para>Don't write wtmp
+ <listitem><para>Do not write wtmp
shutdown entry.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--no-wall</option></term>
- <listitem><para>Don't send wall
+ <listitem><para>Do not send wall
message before
halt, power-off, reboot.</para></listitem>
</varlistentry>
diff --git a/man/hostname.5 b/man/hostname.5
new file mode 100644
index 0000000000..cdb1a45f0f
--- /dev/null
+++ b/man/hostname.5
@@ -0,0 +1,54 @@
+'\" t
+.TH "HOSTNAME" "5" "" "systemd 208" "hostname"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+hostname \- Local hostname configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/hostname
+.SH "DESCRIPTION"
+.PP
+The
+/etc/hostname
+file configures the name of the local system that is set during boot using the
+\fBsethostname\fR(2)
+system call\&. It should contain a single newline\-terminated hostname string\&. The hostname may be a free\-form string up to 64 characters in length; however, it is recommended that it consists only of 7\-bit ASCII lower\-case characters and no spaces or dots, and limits itself to the format allowed for DNS domain name labels, even though this is not a strict requirement\&.
+.PP
+Depending on the operating system, other configuration files might be checked for configuration of the hostname as well, however only as fallback\&.
+.PP
+You may use
+\fBhostnamectl\fR(1)
+to change the value of this file from the command line\&.
+.SH "HISTORY"
+.PP
+The simple configuration file format of
+/etc/hostname
+originates from Debian GNU/Linux\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsethostname\fR(2),
+\fBhostname\fR(1),
+\fBhostname\fR(7),
+\fBmachine-id\fR(5),
+\fBmachine-info\fR(5),
+\fBhostnamectl\fR(1),
+\fBsystemd-hostnamed.service\fR(8)
diff --git a/man/hostname.html b/man/hostname.html
index b82948937a..57b30f1df6 100644
--- a/man/hostname.html
+++ b/man/hostname.html
@@ -19,25 +19,25 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="hostname"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>hostname — Local host name configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/hostname</code></p></div><div class="refsect1"><a name="idm259774262400"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/hostname</code> file
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="hostname"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>hostname — Local hostname configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/hostname</code></p></div><div class="refsect1"><a name="idm274691741120"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/hostname</code> file
configures the name of the local system that is set
- during boot, with the
+ during boot using the
<a href="sethostname.html"><span class="citerefentry"><span class="refentrytitle">sethostname</span>(2)</span></a>
system call. It should contain a single
- newline-terminated host name string. The
- host name may be a free-form string up to 64 characters
- in length, however it is recommended that it consists
- only of 7bit ASCII lower-case characters and no spaces or dots,
+ newline-terminated hostname string. The
+ hostname may be a free-form string up to 64 characters
+ in length; however, it is recommended that it consists
+ only of 7-bit ASCII lower-case characters and no spaces or dots,
and limits itself to the format allowed for DNS domain
name labels, even though this is not a
- strict requirement.</p><p>Depending on the operating system other
+ strict requirement.</p><p>Depending on the operating system, other
configuration files might be checked for configuration
- of the host name as well, however only as fallback.</p><p>You may use
+ of the hostname as well, however only as fallback.</p><p>You may use
<a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>
to change the value of this file from the command
- line.</p></div><div class="refsect1"><a name="idm259774257136"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p>The simple configuration file format of
+ line.</p></div><div class="refsect1"><a name="idm274694569968"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p>The simple configuration file format of
<code class="filename">/etc/hostname</code> originates from
- Debian GNU/Linux.</p></div><div class="refsect1"><a name="idm259774255264"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ Debian GNU/Linux.</p></div><div class="refsect1"><a name="idm274694568096"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sethostname.html"><span class="citerefentry"><span class="refentrytitle">sethostname</span>(2)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(1)</span></a>,
diff --git a/man/hostname.xml b/man/hostname.xml
index f89332e983..a8648c5291 100644
--- a/man/hostname.xml
+++ b/man/hostname.xml
@@ -44,7 +44,7 @@
<refnamediv>
<refname>hostname</refname>
- <refpurpose>Local host name configuration file</refpurpose>
+ <refpurpose>Local hostname configuration file</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -56,20 +56,20 @@
<para>The <filename>/etc/hostname</filename> file
configures the name of the local system that is set
- during boot, with the
+ during boot using the
<citerefentry><refentrytitle>sethostname</refentrytitle><manvolnum>2</manvolnum></citerefentry>
system call. It should contain a single
- newline-terminated host name string. The
- host name may be a free-form string up to 64 characters
- in length, however it is recommended that it consists
- only of 7bit ASCII lower-case characters and no spaces or dots,
+ newline-terminated hostname string. The
+ hostname may be a free-form string up to 64 characters
+ in length; however, it is recommended that it consists
+ only of 7-bit ASCII lower-case characters and no spaces or dots,
and limits itself to the format allowed for DNS domain
name labels, even though this is not a
strict requirement.</para>
- <para>Depending on the operating system other
+ <para>Depending on the operating system, other
configuration files might be checked for configuration
- of the host name as well, however only as fallback.</para>
+ of the hostname as well, however only as fallback.</para>
<para>You may use
<citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
diff --git a/man/hostnamectl.1 b/man/hostnamectl.1
new file mode 100644
index 0000000000..1b10c42cb9
--- /dev/null
+++ b/man/hostnamectl.1
@@ -0,0 +1,140 @@
+'\" t
+.TH "HOSTNAMECTL" "1" "" "systemd 208" "hostnamectl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+hostnamectl \- Control the system hostname
+.SH "SYNOPSIS"
+.HP \w'\fBhostnamectl\fR\ 'u
+\fBhostnamectl\fR [OPTIONS...] {COMMAND}
+.SH "DESCRIPTION"
+.PP
+\fBhostnamectl\fR
+may be used to query and change the system hostname and related settings\&.
+.PP
+This tool distinguishes three different hostnames: the high\-level "pretty" hostname which might include all kinds of special characters (e\&.g\&. "Lennart\*(Aqs Laptop"), the static hostname which is used to initialize the kernel hostname at boot (e\&.g\&. "lennarts\-laptop"), and the transient hostname which might be assigned temporarily due to network configuration and might revert back to the static hostname if network connectivity is lost and is only temporarily written to the kernel hostname (e\&.g\&. "dhcp\-47\-11")\&.
+.PP
+Note that the pretty hostname has little restrictions on the characters used, while the static and transient hostnames are limited to the usually accepted characters of Internet domain names\&.
+.PP
+The static hostname is stored in
+/etc/hostname, see
+\fBhostname\fR(5)
+for more information\&. The pretty hostname, chassis type, and icon name are stored in
+/etc/machine\-info, see
+\fBmachine-id\fR(5)\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+Do not query the user for authentication for privileged operations\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-privileged\fR
+.RS 4
+Acquire privileges via PolicyKit before executing the operation\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-host\fR
+.RS 4
+Execute the operation remotely\&. Specify a hostname, or username and hostname separated by
+"@", to connect to\&. This will use SSH to talk to a remote system\&.
+.RE
+.PP
+\fB\-\-static\fR, \fB\-\-transient\fR, \fB\-\-pretty\fR
+.RS 4
+If
+\fBstatus\fR
+is used (or no explicit command is given) and one of those fields is given,
+\fBhostnamectl\fR
+will print out just this selected hostname\&.
+.sp
+If used with
+\fBset\-hostname\fR, only the selected hostname(s) will be updated\&. When more than one of those options is used, all the specified hostnames will be updated\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fBstatus\fR
+.RS 4
+Show current system hostname and related information\&.
+.RE
+.PP
+\fBset\-hostname [NAME]\fR
+.RS 4
+Set the system hostname\&. By default, this will alter the pretty, the static, and the transient hostname alike; however, if one or more of
+\fB\-\-static\fR,
+\fB\-\-transient\fR,
+\fB\-\-pretty\fR
+are used, only the selected hostnames are changed\&. If the pretty hostname is being set, and static or transient are being set as well, the specified hostname will be simplified in regards to the character set used before the latter are updated\&. This is done by replacing spaces with
+"\-"
+and removing special characters\&. This ensures that the pretty and the static hostname are always closely related while still following the validity rules of the specific name\&. This simplification of the hostname string is not done if only the transient and/or static host names are set, and the pretty host name is left untouched\&. Pass the empty string
+""
+as the hostname to reset the selected hostnames to their default (usually
+"localhost")\&.
+.RE
+.PP
+\fBset\-icon\-name [NAME]\fR
+.RS 4
+Set the system icon name\&. The icon name is used by some graphical applications to visualize this host\&. The icon name should follow the
+\m[blue]\fBIcon Naming Specification\fR\m[]\&\s-2\u[1]\d\s+2\&. Pass an empty string to this operation to reset the icon name to the default value, which is determined from chassis type (see below) and possibly other parameters\&.
+.RE
+.PP
+\fBset\-chassis [TYPE]\fR
+.RS 4
+Set the chassis type\&. The chassis type is used by some graphical applications to visualize the host or alter user interaction\&. Currently, the following chassis types are defined:
+"desktop",
+"laptop",
+"server",
+"tablet",
+"handset", as well as the special chassis types
+"vm"
+and
+"container"
+for virtualized systems that lack an immediate physical chassis\&. Pass an empty string to this operation to reset the chassis type to the default value which is determined from the firmware and possibly other parameters\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBhostname\fR(1),
+\fBhostname\fR(5),
+\fBmachine-info\fR(5),
+\fBsystemctl\fR(1),
+\fBsystemd-hostnamed.service\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+Icon Naming Specification
+.RS 4
+\%http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
+.RE
diff --git a/man/hostnamectl.html b/man/hostnamectl.html
index 96c55a25f3..c8de860c3c 100644
--- a/man/hostnamectl.html
+++ b/man/hostnamectl.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="hostnamectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>hostnamectl — Control the system hostname</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">hostnamectl [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm259793979248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>hostnamectl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="hostnamectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>hostnamectl — Control the system hostname</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">hostnamectl</code> [OPTIONS...] {COMMAND}</p></div></div><div class="refsect1"><a name="idm274699518528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>hostnamectl</strong></span> may be used to
query and change the system hostname and related
- settings.</p><p>This tool distinguishes three different host
- names: the high-level "pretty" hostname which might
- include all kinds of special characters
+ settings.</p><p>This tool distinguishes three different
+ hostnames: the high-level "pretty" hostname which
+ might include all kinds of special characters
(e.g. "Lennart's Laptop"), the static hostname which
is used to initialize the kernel hostname at boot
(e.g. "lennarts-laptop"), and the transient hostname
@@ -34,57 +34,66 @@
(e.g. "dhcp-47-11").</p><p>Note that the pretty hostname has little
restrictions on the characters used, while the static
and transient hostnames are limited to the usually
- accepted characters of internet domain names.</p><p>The static host name is stored in
+ accepted characters of Internet domain names.</p><p>The static hostname is stored in
<code class="filename">/etc/hostname</code>, see
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>
- for more information. The pretty host name, chassis
- type and icon name are stored in
+ for more information. The pretty hostname, chassis
+ type, and icon name are stored in
<code class="filename">/etc/machine-info</code>, see
- <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>.</p></div><div class="refsect1"><a name="idm259793972096"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>.</p></div><div class="refsect1"><a name="idm274699440976"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
- string and exits.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Don't query the user
+ string and exits.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Do not query the user
for authentication for privileged
- operations.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute the operation
+ operations.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Acquire privileges via PolicyKit
+ before executing the operation.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute the operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by "<code class="literal">@</code>",
to connect to. This will use SSH to
talk to a remote
system.</p></dd><dt id="--static"><span class="term"><code class="option">--static</code>, </span><span class="term"><code class="option">--transient</code>, </span><span class="term"><code class="option">--pretty</code></span><a class="headerlink" title="Permalink to this term" href="#--static">¶</a></dt><dd><p>If
- <span class="command"><strong>set-hostname</strong></span> is
- invoked and one or more of these
- options are passed only the selected
- hostnames is
- updated.</p></dd></dl></div><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="status"><span class="term"><span class="command"><strong>status</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status">¶</a></dt><dd><p>Show current system
+ <span class="command"><strong>status</strong></span> is used (or
+ no explicit command is given) and one
+ of those fields is given,
+ <span class="command"><strong>hostnamectl</strong></span> will
+ print out just this selected
+ hostname.</p><p>If used with
+ <span class="command"><strong>set-hostname</strong></span>, only
+ the selected hostname(s) will be
+ updated. When more than one of those
+ options is used, all the specified
+ hostnames will be updated.
+ </p></dd></dl></div><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="status"><span class="term"><span class="command"><strong>status</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status">¶</a></dt><dd><p>Show current system
hostname and related
information.</p></dd><dt id="set-hostname [NAME]"><span class="term"><span class="command"><strong>set-hostname [NAME]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-hostname%20%5BNAME%5D">¶</a></dt><dd><p>Set the system
- hostname. By default this will alter
+ hostname. By default, this will alter
the pretty, the static, and the
- transient hostname alike, however if
+ transient hostname alike; however, if
one or more of
<code class="option">--static</code>,
<code class="option">--transient</code>,
- <code class="option">--pretty</code> are used
+ <code class="option">--pretty</code> are used,
only the selected hostnames are
changed. If the pretty hostname is
being set, and static or transient are
- being set as well the specified host
- name will be simplified in regards to
- the character set used before the
+ being set as well, the specified
+ hostname will be simplified in regards
+ to the character set used before the
latter are updated. This is done by
- replacing spaces by "-" and removing
+ replacing spaces with
+ "<code class="literal">-</code>" and removing
special characters. This ensures that
- the pretty and the static hostname
- are always closely related while still
+ the pretty and the static hostname are
+ always closely related while still
following the validity rules of the
specific name. This simplification of
the hostname string is not done if
only the transient and/or static host
names are set, and the pretty host
name is left untouched. Pass the empty
- string "" as hostname to reset the
- selected hostnames to their default
- (usually
- "localhost").</p></dd><dt id="set-icon-name [NAME]"><span class="term"><span class="command"><strong>set-icon-name [NAME]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-icon-name%20%5BNAME%5D">¶</a></dt><dd><p>Set the system icon
+ string "<code class="literal"></code>" as the
+ hostname to reset the selected
+ hostnames to their default (usually
+ "<code class="literal">localhost</code>").</p></dd><dt id="set-icon-name [NAME]"><span class="term"><span class="command"><strong>set-icon-name [NAME]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-icon-name%20%5BNAME%5D">¶</a></dt><dd><p>Set the system icon
name. The icon name is used by some
graphical applications to visualize
this host. The icon name should follow
@@ -92,7 +101,7 @@
Naming Specification</a>. Pass an
empty string to this operation to
reset the icon name to the default
- value which is determined from chassis
+ value, which is determined from chassis
type (see below) and possibly other
parameters.</p></dd><dt id="set-chassis [TYPE]"><span class="term"><span class="command"><strong>set-chassis [TYPE]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-chassis%20%5BTYPE%5D">¶</a></dt><dd><p>Set the chassis
type. The chassis type is used by some
@@ -100,22 +109,22 @@
the host or alter user
interaction. Currently, the following
chassis types are defined:
- <code class="literal">desktop</code>,
- <code class="literal">laptop</code>,
- <code class="literal">server</code>,
- <code class="literal">tablet</code>,
- <code class="literal">handset</code>, as well as
+ "<code class="literal">desktop</code>",
+ "<code class="literal">laptop</code>",
+ "<code class="literal">server</code>",
+ "<code class="literal">tablet</code>",
+ "<code class="literal">handset</code>", as well as
the special chassis types
- <code class="literal">vm</code> and
- <code class="literal">container</code> for
+ "<code class="literal">vm</code>" and
+ "<code class="literal">container</code>" for
virtualized systems that lack an
immediate physical chassis. Pass an
empty string to this operation to
reset the chassis type to the default
value which is determined from the
firmware and possibly other
- parameters.</p></dd></dl></div></div><div class="refsect1"><a name="idm259797884656"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259797883472"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ parameters.</p></dd></dl></div></div><div class="refsect1"><a name="idm274699542496"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274699541312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(1)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>,
diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
index 9efe220119..b39fb5502b 100644
--- a/man/hostnamectl.xml
+++ b/man/hostnamectl.xml
@@ -49,7 +49,9 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>hostnamectl <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="req">COMMAND</arg></command>
+ <command>hostnamectl</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="req">COMMAND</arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -60,9 +62,9 @@
query and change the system hostname and related
settings.</para>
- <para>This tool distinguishes three different host
- names: the high-level "pretty" hostname which might
- include all kinds of special characters
+ <para>This tool distinguishes three different
+ hostnames: the high-level "pretty" hostname which
+ might include all kinds of special characters
(e.g. "Lennart's Laptop"), the static hostname which
is used to initialize the kernel hostname at boot
(e.g. "lennarts-laptop"), and the transient hostname
@@ -75,13 +77,13 @@
<para>Note that the pretty hostname has little
restrictions on the characters used, while the static
and transient hostnames are limited to the usually
- accepted characters of internet domain names.</para>
+ accepted characters of Internet domain names.</para>
- <para>The static host name is stored in
+ <para>The static hostname is stored in
<filename>/etc/hostname</filename>, see
<citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for more information. The pretty host name, chassis
- type and icon name are stored in
+ for more information. The pretty hostname, chassis
+ type, and icon name are stored in
<filename>/etc/machine-info</filename>, see
<citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
</refsect1>
@@ -110,18 +112,26 @@
<varlistentry>
<term><option>--no-ask-password</option></term>
- <listitem><para>Don't query the user
+ <listitem><para>Do not query the user
for authentication for privileged
operations.</para></listitem>
</varlistentry>
<varlistentry>
+ <term><option>-P</option></term>
+ <term><option>--privileged</option></term>
+
+ <listitem><para>Acquire privileges via PolicyKit
+ before executing the operation.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>-H</option></term>
<term><option>--host</option></term>
<listitem><para>Execute the operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by <literal>@</literal>,
to connect to. This will use SSH to
talk to a remote
system.</para></listitem>
@@ -133,11 +143,20 @@
<term><option>--pretty</option></term>
<listitem><para>If
- <command>set-hostname</command> is
- invoked and one or more of these
- options are passed only the selected
- hostnames is
- updated.</para></listitem>
+ <command>status</command> is used (or
+ no explicit command is given) and one
+ of those fields is given,
+ <command>hostnamectl</command> will
+ print out just this selected
+ hostname.</para>
+
+ <para>If used with
+ <command>set-hostname</command>, only
+ the selected hostname(s) will be
+ updated. When more than one of those
+ options is used, all the specified
+ hostnames will be updated.
+ </para></listitem>
</varlistentry>
</variablelist>
@@ -156,34 +175,35 @@
<term><command>set-hostname [NAME]</command></term>
<listitem><para>Set the system
- hostname. By default this will alter
+ hostname. By default, this will alter
the pretty, the static, and the
- transient hostname alike, however if
+ transient hostname alike; however, if
one or more of
<option>--static</option>,
<option>--transient</option>,
- <option>--pretty</option> are used
+ <option>--pretty</option> are used,
only the selected hostnames are
changed. If the pretty hostname is
being set, and static or transient are
- being set as well the specified host
- name will be simplified in regards to
- the character set used before the
+ being set as well, the specified
+ hostname will be simplified in regards
+ to the character set used before the
latter are updated. This is done by
- replacing spaces by "-" and removing
+ replacing spaces with
+ <literal>-</literal> and removing
special characters. This ensures that
- the pretty and the static hostname
- are always closely related while still
+ the pretty and the static hostname are
+ always closely related while still
following the validity rules of the
specific name. This simplification of
the hostname string is not done if
only the transient and/or static host
names are set, and the pretty host
name is left untouched. Pass the empty
- string "" as hostname to reset the
- selected hostnames to their default
- (usually
- "localhost").</para></listitem>
+ string <literal></literal> as the
+ hostname to reset the selected
+ hostnames to their default (usually
+ <literal>localhost</literal>).</para></listitem>
</varlistentry>
<varlistentry>
@@ -198,7 +218,7 @@
Naming Specification</ulink>. Pass an
empty string to this operation to
reset the icon name to the default
- value which is determined from chassis
+ value, which is determined from chassis
type (see below) and possibly other
parameters.</para></listitem>
</varlistentry>
diff --git a/man/index.html b/man/index.html
index 62e5f7764c..29597f4949 100644
--- a/man/index.html
+++ b/man/index.html
@@ -19,6 +19,6 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.index"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.index — List all manpages from the systemd project</p></div><div class="refsect1"><a name="idm259777493920"></a><h2 id="B">B<a class="headerlink" title="Permalink to this headline" href="#B">¶</a></h2><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a> -- Configure additional binary formats for executables at boot<br><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a> -- Boot performance analysis graphing tool configuration file<br><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a> -- System bootup process<br></p></div><div class="refsect1"><a name="idm259777490720"></a><h2 id="C">C<a class="headerlink" title="Permalink to this headline" href="#C">¶</a></h2><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a> -- Configuration for encrypted block devices<br></p></div><div class="refsect1"><a name="idm259777489312"></a><h2 id="D">D<a class="headerlink" title="Permalink to this headline" href="#D">¶</a></h2><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a> -- Writing and packaging system daemons<br></p></div><div class="refsect1"><a name="idm259777487904"></a><h2 id="H">H<a class="headerlink" title="Permalink to this headline" href="#H">¶</a></h2><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a> -- Local host name configuration file<br><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a> -- Control the system hostname<br></p></div><div class="refsect1"><a name="idm259777484704"></a><h2 id="I">I<a class="headerlink" title="Permalink to this headline" href="#I">¶</a></h2><p><a href="init.html"><span class="citerefentry"><span class="refentrytitle">init</span>(1)</span></a> -- systemd system and service manager<br></p></div><div class="refsect1"><a name="idm259777483296"></a><h2 id="J">J<a class="headerlink" title="Permalink to this headline" href="#J">¶</a></h2><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a> -- Query the systemd journal<br><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a> -- Journal service configuration file<br></p></div><div class="refsect1"><a name="idm259777480992"></a><h2 id="K">K<a class="headerlink" title="Permalink to this headline" href="#K">¶</a></h2><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a> -- Kernel command line parameters<br><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a> -- Add and remove kernel and initramfs images to and from /boot<br></p></div><div class="refsect1"><a name="idm259777478688"></a><h2 id="L">L<a class="headerlink" title="Permalink to this headline" href="#L">¶</a></h2><p><a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a> -- Configuration file for locale settings<br><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a> -- Control the system locale and keyboard layout settings<br><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a> -- Local time zone configuration file<br><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a> -- Control the systemd login manager<br><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a> -- Login manager configuration file<br></p></div><div class="refsect1"><a name="idm259777453200"></a><h2 id="M">M<a class="headerlink" title="Permalink to this headline" href="#M">¶</a></h2><p><a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> -- Local machine ID configuration file<br><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a> -- Local machine information file<br><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a> -- Configure kernel modules to load at boot<br></p></div><div class="refsect1"><a name="idm259777450000"></a><h2 id="N">N<a class="headerlink" title="Permalink to this headline" href="#N">¶</a></h2><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a> -- Provide host name resolution for the locally configured system hostname.<br></p></div><div class="refsect1"><a name="idm259777448592"></a><h2 id="O">O<a class="headerlink" title="Permalink to this headline" href="#O">¶</a></h2><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a> -- Operating system identification<br></p></div><div class="refsect1"><a name="idm259777447184"></a><h2 id="P">P<a class="headerlink" title="Permalink to this headline" href="#P">¶</a></h2><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a> -- Register user sessions in the systemd login manager<br><a href="poweroff.html"><span class="citerefentry"><span class="refentrytitle">poweroff</span>(8)</span></a> -- Halt, power-off or reboot the machine<br></p></div><div class="refsect1"><a name="idm259777444880"></a><h2 id="R">R<a class="headerlink" title="Permalink to this headline" href="#R">¶</a></h2><p><a href="reboot.html"><span class="citerefentry"><span class="refentrytitle">reboot</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a> -- Print previous and current SysV runlevel<br></p></div><div class="refsect1"><a name="idm259777442576"></a><h2 id="S">S<a class="headerlink" title="Permalink to this headline" href="#S">¶</a></h2><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a> -- APIs for submitting and querying log entries to and from the journal<br><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a> -- APIs for tracking logins<br><a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a> -- Reference implementation of APIs for controlling boot-time read-ahead<br><a href="SD_ALERT.html"><span class="citerefentry"><span class="refentrytitle">SD_ALERT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a> -- Test whether the system is running the systemd init system<br><a href="SD_CRIT.html"><span class="citerefentry"><span class="refentrytitle">SD_CRIT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_DEBUG.html"><span class="citerefentry"><span class="refentrytitle">SD_DEBUG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_EMERG.html"><span class="citerefentry"><span class="refentrytitle">SD_EMERG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_ERR.html"><span class="citerefentry"><span class="refentrytitle">SD_ERR</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_get_machine_names.html"><span class="citerefentry"><span class="refentrytitle">sd_get_machine_names</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_get_sessions</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_uids.html"><span class="citerefentry"><span class="refentrytitle">sd_get_uids</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="SD_ID128_CONST_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_CONST_STR</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_equal.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_equal</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="SD_ID128_FORMAT_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_STR</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="SD_ID128_FORMAT_VAL.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_VAL</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_from_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_from_string</span>(3)</span></a> -- Format or parse 128 bit IDs as strings<br><a href="sd_id128_get_boot.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_boot</span>(3)</span></a> -- Retrieve 128 bit IDs<br><a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a> -- Retrieve 128 bit IDs<br><a href="SD_ID128_MAKE.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_MAKE</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> -- Generate 128 bit IDs<br><a href="sd_id128_t.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_t</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a> -- Format or parse 128 bit IDs as strings<br><a href="SD_INFO.html"><span class="citerefentry"><span class="refentrytitle">SD_INFO</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_mq.html"><span class="citerefentry"><span class="refentrytitle">sd_is_mq</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_inet.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_inet</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_unix.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_unix</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_journal.html"><span class="citerefentry"><span class="refentrytitle">sd_journal</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_add_conjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_conjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_disjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_disjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_match.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_match</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_APPEND.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_APPEND</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_close.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_close</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_enumerate_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_enumerate_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_flush_matches.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_flush_matches</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_FOREACH.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_BACKWARDS.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_BACKWARDS</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_DATA.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_DATA</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="SD_JOURNAL_FOREACH_UNIQUE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_UNIQUE</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_get_catalog.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_catalog_for_message_id.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog_for_message_id</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_get_cutoff_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_monotonic_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_events</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_monotonic_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_timeout</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_usage.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_usage</span>(3)</span></a> -- Journal disk usage<br><a href="SD_JOURNAL_INVALIDATE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_INVALIDATE</span>(3)</span></a> -- Journal change notification interface<br><a href="SD_JOURNAL_LOCAL_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_LOCAL_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_next_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_NOP.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_NOP</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_open_directory.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open_directory</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_perror.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_perror</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_previous_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_printv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_printv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_process.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_process</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_query_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_query_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_reliable_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_reliable_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_restart_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_restart_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="SD_JOURNAL_RUNTIME_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_RUNTIME_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_monotonic_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_realtime_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_tail.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_tail</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_send.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_send</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_sendv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_sendv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_set_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_set_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a> -- Create log stream file descriptor to the journal<br><a href="SD_JOURNAL_SUPPRESS_LOCATION.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SUPPRESS_LOCATION</span>(3)</span></a> -- Submit log entries to the journal<br><a href="SD_JOURNAL_SYSTEM_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SYSTEM_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_wait.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_wait</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="SD_LISTEN_FDS_START.html"><span class="citerefentry"><span class="refentrytitle">SD_LISTEN_FDS_START</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="sd_login_monitor.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_flush.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_flush</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_events</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_fd</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_timeout</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_unref.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_unref</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="SD_NOTICE.html"><span class="citerefentry"><span class="refentrytitle">SD_NOTICE</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_notifyf.html"><span class="citerefentry"><span class="refentrytitle">sd_notifyf</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_pid_get_machine_name.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_machine_name</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_unit</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_user_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_user_unit</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a> -- Control ongoing disk boot-time read-ahead operations<br><a href="sd_seat_can_multi_session.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_can_multi_session</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_active.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_active</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_sessions</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_session_get_class.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_class</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_display.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_display</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_service.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_service</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_state</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_tty.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_tty</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_type.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_type</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_uid</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_uid_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_seats</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_sessions</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_is_on_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_is_on_seat</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="SD_WARNING.html"><span class="citerefentry"><span class="refentrytitle">SD_WARNING</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a> -- Configure kernel parameters at boot<br><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a> -- Control the systemd system and service manager<br><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a> -- systemd system and service manager<br><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a> -- Test socket activation of daemons<br><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a> -- Analyze system boot-up performance<br><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a> -- Query the user for a system password<br><a href="systemd-ask-password-console.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-binfmt.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a> -- Boot performance graphing tool<br><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a> -- Connect a pipeline or program's output with the journal<br><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a> -- Recursively show control group contents<br><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a> -- Show top control groups by their resource usage<br><a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a> -- Retrieve coredumps from the journal<br><a href="systemd-cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a> -- Unit generator for<br><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a> -- Find overridden configuration files<br><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a> -- Detect execution in a virtualized environment<br><a href="systemd-fsck.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck-root.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck-root.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a> -- Unit generator for /etc/fstab<br><a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a> -- Generator for enabling getty instances on the console<br><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-hibernate.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hibernate.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-hostnamed.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed</span>(8)</span></a> -- Hostname bus mechanism<br><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a> -- Hostname bus mechanism<br><a href="systemd-hybrid-sleep.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hybrid-sleep.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a> -- Execute a program with an inhibition lock taken<br><a href="systemd-initctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.socket</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-journal-gatewayd.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.socket</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journald.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.socket</span>(8)</span></a> -- Journal service<br><a href="systemd-kexec.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-kexec.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-localed.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-logind.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind</span>(8)</span></a> -- Login manager<br><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a> -- Login manager<br><a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a> -- Initialize the machine ID in /etc/machine-id<br><a href="systemd-modules-load.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a> -- Spawn a namespace container for debugging, testing and building<br><a href="systemd-poweroff.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-poweroff.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-quotacheck.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-random-seed.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-random-seed-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-load.service</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-random-seed-save.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-save.service</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-readahead.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-collect.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-collect.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.timer</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-reboot.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-reboot.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-remount-fs.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-shutdown.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdown</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-shutdownd.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.socket</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-sleep.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a> -- Suspend and hibernation configuration file<br><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sysctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a> -- Generator for redirecting boot to offline update mode<br><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-timedated.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.timer</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup-dev.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup-dev.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a> -- List or process pending systemd password requests<br><a href="systemd-udevd.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-control.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-control.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-kernel.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-kernel.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-update-utmp.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp</span>(8)</span></a> -- Write audit and utmp updates at runlevel changes and shutdown<br><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a> -- Write audit and utmp updates at runlevel changes and shutdown<br><a href="systemd-update-utmp-shutdown.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-shutdown.service</span>(8)</span></a> -- Write audit and utmp updates at runlevel changes and shutdown<br><a href="systemd-user-sessions.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-user.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-vconsole-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a> -- Automount unit configuration<br><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a> -- Device unit configuration<br><a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a> -- Index of configuration directives<br><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a> -- Execution environment configuration<br><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a> -- Special journal fields<br><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a> -- Kill environment configuration<br><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a> -- Mount unit configuration<br><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a> -- Path unit configuration<br><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a> -- Service enablement presets<br><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a> -- Service unit configuration<br><a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a> -- Snapshot unit configuration<br><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a> -- Socket unit configuration<br><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a> -- Special systemd units<br><a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a> -- Swap unit configuration<br><a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a> -- Target unit configuration<br><a href="systemd.time.html"><span class="citerefentry"><span class="refentrytitle">systemd.time</span>(7)</span></a> -- Time and date specifications<br><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a> -- Timer unit configuration<br><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> -- Unit configuration<br></p></div><div class="refsect1"><a name="idm259777214096"></a><h2 id="T">T<a class="headerlink" title="Permalink to this headline" href="#T">¶</a></h2><p><a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a> -- Change SysV runlevel<br><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a> -- Control the system time and date<br><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> -- Configuration for creation, deletion and cleaning of volatile and temporary files<br></p></div><div class="refsect1"><a name="idm259777210704"></a><h2 id="U">U<a class="headerlink" title="Permalink to this headline" href="#U">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a> -- Linux dynamic device management<br><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a> -- udev management tool<br></p></div><div class="refsect1"><a name="idm259777208304"></a><h2 id="V">V<a class="headerlink" title="Permalink to this headline" href="#V">¶</a></h2><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a> -- Configuration file for the virtual console<br></p></div><div class="refsect1"><a name="idm259777206832"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.index"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.index — List all manpages from the systemd project</p></div><div class="refsect1"><a name="idm274688048512"></a><h2 id="B">B<a class="headerlink" title="Permalink to this headline" href="#B">¶</a></h2><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a> -- Configure additional binary formats for executables at boot<br><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a> -- Boot performance analysis graphing tool configuration file<br><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a> -- System bootup process<br></p></div><div class="refsect1"><a name="idm274688045312"></a><h2 id="C">C<a class="headerlink" title="Permalink to this headline" href="#C">¶</a></h2><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a> -- Configuration for encrypted block devices<br></p></div><div class="refsect1"><a name="idm274688043904"></a><h2 id="D">D<a class="headerlink" title="Permalink to this headline" href="#D">¶</a></h2><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a> -- Writing and packaging system daemons<br></p></div><div class="refsect1"><a name="idm274688042496"></a><h2 id="H">H<a class="headerlink" title="Permalink to this headline" href="#H">¶</a></h2><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a> -- Local hostname configuration file<br><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a> -- Control the system hostname<br></p></div><div class="refsect1"><a name="idm274688039296"></a><h2 id="I">I<a class="headerlink" title="Permalink to this headline" href="#I">¶</a></h2><p><a href="init.html"><span class="citerefentry"><span class="refentrytitle">init</span>(1)</span></a> -- systemd system and service manager<br></p></div><div class="refsect1"><a name="idm274688037888"></a><h2 id="J">J<a class="headerlink" title="Permalink to this headline" href="#J">¶</a></h2><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a> -- Query the systemd journal<br><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a> -- Journal service configuration file<br></p></div><div class="refsect1"><a name="idm274688035584"></a><h2 id="K">K<a class="headerlink" title="Permalink to this headline" href="#K">¶</a></h2><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a> -- Kernel command line parameters<br><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a> -- Add and remove kernel and initramfs images to and from /boot<br></p></div><div class="refsect1"><a name="idm274688033280"></a><h2 id="L">L<a class="headerlink" title="Permalink to this headline" href="#L">¶</a></h2><p><a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a> -- Configuration file for locale settings<br><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a> -- Control the system locale and keyboard layout settings<br><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a> -- Local timezone configuration file<br><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a> -- Control the systemd login manager<br><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a> -- Login manager configuration file<br></p></div><div class="refsect1"><a name="idm274688007664"></a><h2 id="M">M<a class="headerlink" title="Permalink to this headline" href="#M">¶</a></h2><p><a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> -- Local machine ID configuration file<br><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a> -- Local machine information file<br><a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a> -- Control the systemd machine manager<br><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a> -- Configure kernel modules to load at boot<br></p></div><div class="refsect1"><a name="idm274688003568"></a><h2 id="N">N<a class="headerlink" title="Permalink to this headline" href="#N">¶</a></h2><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a> -- Provide hostname resolution for the locally configured system hostname.<br></p></div><div class="refsect1"><a name="idm274688002160"></a><h2 id="O">O<a class="headerlink" title="Permalink to this headline" href="#O">¶</a></h2><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a> -- Operating system identification<br></p></div><div class="refsect1"><a name="idm274688000752"></a><h2 id="P">P<a class="headerlink" title="Permalink to this headline" href="#P">¶</a></h2><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a> -- Register user sessions in the systemd login manager<br><a href="poweroff.html"><span class="citerefentry"><span class="refentrytitle">poweroff</span>(8)</span></a> -- Halt, power-off or reboot the machine<br></p></div><div class="refsect1"><a name="idm274687998448"></a><h2 id="R">R<a class="headerlink" title="Permalink to this headline" href="#R">¶</a></h2><p><a href="reboot.html"><span class="citerefentry"><span class="refentrytitle">reboot</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a> -- Print previous and current SysV runlevel<br></p></div><div class="refsect1"><a name="idm274687996144"></a><h2 id="S">S<a class="headerlink" title="Permalink to this headline" href="#S">¶</a></h2><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a> -- APIs for submitting and querying log entries to and from the journal<br><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a> -- APIs for tracking logins<br><a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a> -- Reference implementation of APIs for controlling boot-time read-ahead<br><a href="SD_ALERT.html"><span class="citerefentry"><span class="refentrytitle">SD_ALERT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a> -- Test whether the system is running the systemd init system<br><a href="SD_CRIT.html"><span class="citerefentry"><span class="refentrytitle">SD_CRIT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_DEBUG.html"><span class="citerefentry"><span class="refentrytitle">SD_DEBUG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_EMERG.html"><span class="citerefentry"><span class="refentrytitle">SD_EMERG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_ERR.html"><span class="citerefentry"><span class="refentrytitle">SD_ERR</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_get_machine_names.html"><span class="citerefentry"><span class="refentrytitle">sd_get_machine_names</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_get_sessions</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_uids.html"><span class="citerefentry"><span class="refentrytitle">sd_get_uids</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="SD_ID128_CONST_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_CONST_STR</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_equal.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_equal</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="SD_ID128_FORMAT_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_STR</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="SD_ID128_FORMAT_VAL.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_VAL</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_from_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_from_string</span>(3)</span></a> -- Format or parse 128-bit IDs as strings<br><a href="sd_id128_get_boot.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_boot</span>(3)</span></a> -- Retrieve 128-bit IDs<br><a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a> -- Retrieve 128-bit IDs<br><a href="SD_ID128_MAKE.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_MAKE</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> -- Generate 128-bit IDs<br><a href="sd_id128_t.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_t</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a> -- Format or parse 128-bit IDs as strings<br><a href="SD_INFO.html"><span class="citerefentry"><span class="refentrytitle">SD_INFO</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_mq.html"><span class="citerefentry"><span class="refentrytitle">sd_is_mq</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_inet.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_inet</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_unix.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_unix</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_journal.html"><span class="citerefentry"><span class="refentrytitle">sd_journal</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_add_conjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_conjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_disjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_disjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_match.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_match</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_APPEND.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_APPEND</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_close.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_close</span>(3)</span></a> -- Open the system journal for reading<br><a href="SD_JOURNAL_CURRENT_USER.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_CURRENT_USER</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_enumerate_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_enumerate_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_flush_matches.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_flush_matches</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_FOREACH.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_BACKWARDS.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_BACKWARDS</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_DATA.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_DATA</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="SD_JOURNAL_FOREACH_UNIQUE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_UNIQUE</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_get_catalog.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_catalog_for_message_id.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog_for_message_id</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_get_cutoff_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_monotonic_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_events</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_monotonic_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_timeout</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_usage.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_usage</span>(3)</span></a> -- Journal disk usage<br><a href="SD_JOURNAL_INVALIDATE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_INVALIDATE</span>(3)</span></a> -- Journal change notification interface<br><a href="SD_JOURNAL_LOCAL_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_LOCAL_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_next_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_NOP.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_NOP</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_open_directory.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open_directory</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_open_files.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open_files</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_perror.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_perror</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_previous_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_printv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_printv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_process.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_process</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_query_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_query_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_reliable_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_reliable_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_restart_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_restart_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="SD_JOURNAL_RUNTIME_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_RUNTIME_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_monotonic_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_realtime_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_tail.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_tail</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_send.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_send</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_sendv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_sendv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_set_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_set_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a> -- Create log stream file descriptor to the journal<br><a href="SD_JOURNAL_SUPPRESS_LOCATION.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SUPPRESS_LOCATION</span>(3)</span></a> -- Submit log entries to the journal<br><a href="SD_JOURNAL_SYSTEM.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SYSTEM</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_wait.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_wait</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="SD_LISTEN_FDS_START.html"><span class="citerefentry"><span class="refentrytitle">SD_LISTEN_FDS_START</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="sd_login_monitor.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_flush.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_flush</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_events</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_fd</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_timeout</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_unref.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_unref</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="SD_NOTICE.html"><span class="citerefentry"><span class="refentrytitle">SD_NOTICE</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_notifyf.html"><span class="citerefentry"><span class="refentrytitle">sd_notifyf</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_pid_get_machine_name.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_machine_name</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_slice.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_slice</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_unit</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_user_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_user_unit</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a> -- Control ongoing disk boot-time read-ahead operations<br><a href="sd_seat_can_multi_session.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_can_multi_session</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_active.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_active</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_sessions</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_session_get_class.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_class</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_display.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_display</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_service.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_service</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_state</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_tty.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_tty</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_type.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_type</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_uid</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_vt.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_vt</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_uid_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_seats</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_sessions</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_is_on_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_is_on_seat</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="SD_WARNING.html"><span class="citerefentry"><span class="refentrytitle">SD_WARNING</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a> -- Configure kernel parameters at boot<br><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a> -- Control the systemd system and service manager<br><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a> -- systemd system and service manager<br><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a> -- Test socket activation of daemons<br><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a> -- Analyze system boot-up performance<br><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a> -- Query the user for a system password<br><a href="systemd-ask-password-console.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-backlight.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight</span>(8)</span></a> -- Load and save the display backlight brightness at boot and shutdown<br><a href="systemd-backlight@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight@.service</span>(8)</span></a> -- Load and save the display backlight brightness at boot and shutdown<br><a href="systemd-binfmt.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a> -- Boot performance graphing tool<br><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a> -- Connect a pipeline or program's output with the journal<br><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a> -- Recursively show control group contents<br><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a> -- Show top control groups by their resource usage<br><a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a> -- Retrieve coredumps from the journal<br><a href="systemd-cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a> -- Unit generator for<br><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a> -- Find overridden configuration files<br><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a> -- Detect execution in a virtualized environment<br><a href="systemd-efi-boot-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-efi-boot-generator</span>(8)</span></a> -- Generator for automatically mounting the EFI System Partition used by the current boot to<br><a href="systemd-fsck.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck-root.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck-root.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a> -- Unit generator for /etc/fstab<br><a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a> -- Generator for enabling getty instances on the console<br><a href="systemd-gpt-auto-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a> -- Generator for automatically discovering and mounting<br><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-hibernate.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hibernate.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-hostnamed.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed</span>(8)</span></a> -- Host name bus mechanism<br><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a> -- Host name bus mechanism<br><a href="systemd-hybrid-sleep.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hybrid-sleep.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a> -- Execute a program with an inhibition lock taken<br><a href="systemd-initctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.socket</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-journal-gatewayd.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.socket</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journald.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.socket</span>(8)</span></a> -- Journal service<br><a href="systemd-kexec.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-kexec.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-localed.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-logind.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind</span>(8)</span></a> -- Login manager<br><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a> -- Login manager<br><a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a> -- Initialize the machine ID in /etc/machine-id<br><a href="systemd-machined.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined</span>(8)</span></a> -- Virtual machine and container registration manager<br><a href="systemd-machined.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a> -- Virtual machine and container registration manager<br><a href="systemd-modules-load.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a> -- Spawn a namespace container for debugging, testing and building<br><a href="systemd-poweroff.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-poweroff.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-quotacheck.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-random-seed.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-random-seed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed.service</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-readahead.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-collect.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-collect.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.timer</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-reboot.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-reboot.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-remount-fs.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a> -- Run programs in transient scope or service units<br><a href="systemd-shutdown.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdown</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-shutdownd.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.socket</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-sleep.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a> -- Suspend and hibernation configuration file<br><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sysctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a> -- Generator for redirecting boot to offline update mode<br><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-timedated.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.timer</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup-dev.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup-dev.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a> -- List or process pending systemd password requests<br><a href="systemd-udevd.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-control.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-control.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-kernel.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-kernel.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-update-utmp.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp</span>(8)</span></a> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<br><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<br><a href="systemd-update-utmp.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp.service</span>(8)</span></a> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<br><a href="systemd-user-sessions.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-user.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-vconsole-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a> -- Automount unit configuration<br><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a> -- Device unit configuration<br><a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a> -- Index of configuration directives<br><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a> -- Execution environment configuration<br><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a> -- Special journal fields<br><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a> -- Kill environment configuration<br><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a> -- Mount unit configuration<br><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a> -- Path unit configuration<br><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a> -- Service enablement presets<br><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a> -- Resource control unit settings<br><a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a> -- Scope unit configuration<br><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a> -- Service unit configuration<br><a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a> -- Slice unit configuration<br><a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a> -- Snapshot unit configuration<br><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a> -- Socket unit configuration<br><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a> -- Special systemd units<br><a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a> -- Swap unit configuration<br><a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a> -- Target unit configuration<br><a href="systemd.time.html"><span class="citerefentry"><span class="refentrytitle">systemd.time</span>(7)</span></a> -- Time and date specifications<br><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a> -- Timer unit configuration<br><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> -- Unit configuration<br></p></div><div class="refsect1"><a name="idm274687754912"></a><h2 id="T">T<a class="headerlink" title="Permalink to this headline" href="#T">¶</a></h2><p><a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a> -- Change SysV runlevel<br><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a> -- Control the system time and date<br><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> -- Configuration for creation, deletion and cleaning of volatile and temporary files<br></p></div><div class="refsect1"><a name="idm274687751520"></a><h2 id="U">U<a class="headerlink" title="Permalink to this headline" href="#U">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a> -- Dynamic device management<br><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a> -- udev management tool<br></p></div><div class="refsect1"><a name="idm274687749120"></a><h2 id="V">V<a class="headerlink" title="Permalink to this headline" href="#V">¶</a></h2><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a> -- Configuration file for the virtual console<br></p></div><div class="refsect1"><a name="idm274687747648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
- </p><p><a name="counts"></a>This index contains 273 entries, referring to 131 individual manual pages.</p></div></div></body></html>
+ </p><p><a name="counts"></a>This index contains 287 entries, referring to 140 individual manual pages.</p></div></div></body></html>
diff --git a/man/init.1 b/man/init.1
new file mode 100644
index 0000000000..166bbc21af
--- /dev/null
+++ b/man/init.1
@@ -0,0 +1 @@
+.so man1/systemd.1
diff --git a/man/init.html b/man/init.html
index ee8081c776..1c2486f3e3 100644
--- a/man/init.html
+++ b/man/init.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd, init — systemd system and service manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">init [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm259794898000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>systemd is a system and service manager for
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd, init — systemd system and service manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">init [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm274698355472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>systemd is a system and service manager for
Linux operating systems. When run as first process on
boot (as PID 1), it acts as init system that brings
up and maintains userspace services.</p><p>For compatibility with SysV, if systemd is called
@@ -34,7 +34,7 @@
<code class="filename">system.conf</code>, otherwise
<code class="filename">user.conf</code>. See
<a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>
- for more information.</p></div><div class="refsect1"><a name="idm259794889520"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ for more information.</p></div><div class="refsect1"><a name="idm274698220992"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a systemd version
identifier and exits.</p></dd><dt id="--test"><span class="term"><code class="option">--test</code></span><a class="headerlink" title="Permalink to this term" href="#--test">¶</a></dt><dd><p>Determine startup
sequence, dump it and exit. This is an
@@ -53,7 +53,7 @@
specified. If omitted, the
introspection data for all interfaces
is dumped.</p></dd><dt id="--unit="><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--unit=">¶</a></dt><dd><p>Set default unit to
- activate on startup. If not specified
+ activate on startup. If not specified,
defaults to
<code class="filename">default.target</code>.</p></dd><dt id="--system"><span class="term"><code class="option">--system</code>, </span><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--system">¶</a></dt><dd><p>For <code class="option">--system</code>,
tell systemd to run a
@@ -109,7 +109,7 @@
<code class="option">info</code>,
<code class="option">debug</code>.</p></dd><dt id="--log-color="><span class="term"><code class="option">--log-color=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-color=">¶</a></dt><dd><p>Highlight important
log messages. Argument is a boolean
- value. If the argument is omitted it
+ value. If the argument is omitted, it
defaults to
<code class="option">true</code>.</p></dd><dt id="--log-location="><span class="term"><code class="option">--log-location=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-location=">¶</a></dt><dd><p>Include code location
in log messages. This is mostly
@@ -141,30 +141,32 @@
and
<code class="option">--default-standard-error=</code>
to
- <code class="option">inherit</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793821904"></a><h2 id="Concepts">Concepts<a class="headerlink" title="Permalink to this headline" href="#Concepts">¶</a></h2><p>systemd provides a dependency system between
- various entities called "units". Units encapsulate
- various objects that are relevant for system boot-up
- and maintenance. The majority of units are configured
- in unit configuration files, whose syntax and basic
- set of options is described in
+ <code class="option">inherit</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693401328"></a><h2 id="Concepts">Concepts<a class="headerlink" title="Permalink to this headline" href="#Concepts">¶</a></h2><p>systemd provides a dependency system between
+ various entities called "units" of 12 different
+ types. Units encapsulate various objects that are
+ relevant for system boot-up and maintenance. The
+ majority of units are configured in unit configuration
+ files, whose syntax and basic set of options is
+ described in
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
however some are created automatically from other
- configuration or dynamically from system state. Units
- may be 'active' (meaning started, bound, plugged in,
- ... depending on the unit type, see below), or
- 'inactive' (meaning stopped, unbound, unplugged, ...),
- as well as in the process of being activated or
- deactivated, i.e. between the two states (these states
- are called 'activating', 'deactivating'). A special
- 'failed' state is available as well which is very
- similar to 'inactive' and is entered when the service
- failed in some way (process returned error code on
- exit, or crashed, or an operation timed out). If this
- state is entered the cause will be logged, for later
+ configuration, dynamically from system state or
+ programmatically at runtime. Units may be "active"
+ (meaning started, bound, plugged in, ..., depending on
+ the unit type, see below), or "inactive" (meaning
+ stopped, unbound, unplugged, ...), as well as in the
+ process of being activated or deactivated,
+ i.e. between the two states (these states are called
+ "activating", "deactivating"). A special "failed"
+ state is available as well, which is very similar to
+ "inactive" and is entered when the service failed in
+ some way (process returned error code on exit, or
+ crashed, or an operation timed out). If this state is
+ entered, the cause will be logged, for later
reference. Note that the various unit types may have a
number of additional substates, which are mapped to
the five generalized unit states described
- here.</p><p>The following unit types are available:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Service units, which control
+ here.</p><p>The following unit types are available:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Service units, which start and control
daemons and the processes they consist of. For
details see
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>.</p></li><li class="listitem"><p>Socket units, which
@@ -201,7 +203,15 @@
system. They are described in <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>.</p></li><li class="listitem"><p>Path units may be used
to activate other services when file system
objects change or are modified. See
- <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>.</p></li></ol></div><p>Units are named as their configuration
+ <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>.</p></li><li class="listitem"><p>Slice units may be used to
+ group units which manage system processes
+ (such as service and scope units) in a
+ hierarchical tree for resource management
+ purposes. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>.</p></li><li class="listitem"><p>Scope units are similar to
+ service units, but manage foreign processes
+ instead of starting them as well. See
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>.</p></li></ol></div><p>Units are named as their configuration
files. Some units have special semantics. A detailed
list is available in
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>.</p><p>systemd knows various kinds of dependencies,
@@ -239,14 +249,14 @@
<code class="filename">multi-user.target</code> (for limited
console-only boots for use in embedded or server
environments, or similar; a subset of
- graphical.target). However it is at the discretion of
+ graphical.target). However, it is at the discretion of
the administrator to configure it as an alias to any
other target unit. See
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>
for details about these target units.</p><p>Processes systemd spawns are placed in
individual Linux control groups named after the unit
which they belong to in the private systemd
- hierarchy. (see <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>
+ hierarchy. (see <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>
for more information about control groups, or short
"cgroups"). systemd uses this to effectively keep
track of processes. Control group information is
@@ -288,7 +298,7 @@
sense, fixing it if possible, and only failing if it
really cannot work.</p><p>Systemd contains native implementations of
various tasks that need to be executed as part of the
- boot process. For example, it sets the host name or
+ boot process. For example, it sets the hostname or
configures the loopback network device. It also sets
up and mounts various API file systems, such as
<code class="filename">/sys</code> or
@@ -304,7 +314,7 @@
or initrd environment should implement the
<a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface" target="_top">Container
Interface</a> or <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/InitrdInterface" target="_top">initrd
- Interface</a> specifications, respectively.</p></div><div class="refsect1"><a name="idm259793773696"></a><h2 id="Directories">Directories<a class="headerlink" title="Permalink to this headline" href="#Directories">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="System unit directories"><span class="term">System unit directories</span><a class="headerlink" title="Permalink to this term" href="#System%20unit%20directories">¶</a></dt><dd><p>The systemd system
+ Interface</a> specifications, respectively.</p></div><div class="refsect1"><a name="idm274693349824"></a><h2 id="Directories">Directories<a class="headerlink" title="Permalink to this headline" href="#Directories">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="System unit directories"><span class="term">System unit directories</span><a class="headerlink" title="Permalink to this term" href="#System%20unit%20directories">¶</a></dt><dd><p>The systemd system
manager reads unit configuration from
various directories. Packages that
want to install unit files shall place
@@ -368,7 +378,7 @@
unit with a native unit configuration
file cannot be started by activating it
in the SysV runlevel link
- farm.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793751904"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGTERM"><span class="term">SIGTERM</span><a class="headerlink" title="Permalink to this term" href="#SIGTERM">¶</a></dt><dd><p>Upon receiving this
+ farm.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693328032"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGTERM"><span class="term"><code class="constant">SIGTERM</code></span><a class="headerlink" title="Permalink to this term" href="#SIGTERM">¶</a></dt><dd><p>Upon receiving this
signal the systemd system manager
serializes its state, reexecutes
itself and deserializes the saved
@@ -380,7 +390,7 @@
when this signal is received. This is
mostly equivalent to
<span class="command"><strong>systemctl --user start
- exit.target</strong></span>.</p></dd><dt id="SIGINT"><span class="term">SIGINT</span><a class="headerlink" title="Permalink to this term" href="#SIGINT">¶</a></dt><dd><p>Upon receiving this
+ exit.target</strong></span>.</p></dd><dt id="SIGINT"><span class="term"><code class="constant">SIGINT</code></span><a class="headerlink" title="Permalink to this term" href="#SIGINT">¶</a></dt><dd><p>Upon receiving this
signal the systemd system manager will
start the
<code class="filename">ctrl-alt-del.target</code> unit. This
@@ -388,7 +398,7 @@
<span class="command"><strong>systemctl start
ctl-alt-del.target</strong></span>.</p><p>systemd user managers
treat this signal the same way as
- SIGTERM.</p></dd><dt id="SIGWINCH"><span class="term">SIGWINCH</span><a class="headerlink" title="Permalink to this term" href="#SIGWINCH">¶</a></dt><dd><p>When this signal is
+ <code class="constant">SIGTERM</code>.</p></dd><dt id="SIGWINCH"><span class="term"><code class="constant">SIGWINCH</code></span><a class="headerlink" title="Permalink to this term" href="#SIGWINCH">¶</a></dt><dd><p>When this signal is
received the systemd system manager
will start the
<code class="filename">kbrequest.target</code>
@@ -396,97 +406,97 @@
<span class="command"><strong>systemctl start
kbrequest.target</strong></span>.</p><p>This signal is ignored by
systemd user
- managers.</p></dd><dt id="SIGPWR"><span class="term">SIGPWR</span><a class="headerlink" title="Permalink to this term" href="#SIGPWR">¶</a></dt><dd><p>When this signal is
+ managers.</p></dd><dt id="SIGPWR"><span class="term"><code class="constant">SIGPWR</code></span><a class="headerlink" title="Permalink to this term" href="#SIGPWR">¶</a></dt><dd><p>When this signal is
received the systemd manager
will start the
<code class="filename">sigpwr.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- sigpwr.target</strong></span>.</p></dd><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>When this signal is
+ sigpwr.target</strong></span>.</p></dd><dt id="SIGUSR1"><span class="term"><code class="constant">SIGUSR1</code></span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>When this signal is
received the systemd manager will try
to reconnect to the D-Bus
- bus.</p></dd><dt id="SIGUSR2"><span class="term">SIGUSR2</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>When this signal is
+ bus.</p></dd><dt id="SIGUSR2"><span class="term"><code class="constant">SIGUSR2</code></span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>When this signal is
received the systemd manager will log
its complete state in human readable
form. The data logged is the same as
printed by <span class="command"><strong>systemctl
- dump</strong></span>.</p></dd><dt id="SIGHUP"><span class="term">SIGHUP</span><a class="headerlink" title="Permalink to this term" href="#SIGHUP">¶</a></dt><dd><p>Reloads the complete
+ dump</strong></span>.</p></dd><dt id="SIGHUP"><span class="term"><code class="constant">SIGHUP</code></span><a class="headerlink" title="Permalink to this term" href="#SIGHUP">¶</a></dt><dd><p>Reloads the complete
daemon configuration. This is mostly
equivalent to <span class="command"><strong>systemctl
- daemon-reload</strong></span>.</p></dd><dt id="SIGRTMIN+0"><span class="term">SIGRTMIN+0</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+0">¶</a></dt><dd><p>Enters default mode, starts the
+ daemon-reload</strong></span>.</p></dd><dt id="SIGRTMIN+0"><span class="term"><code class="constant">SIGRTMIN+0</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+0">¶</a></dt><dd><p>Enters default mode, starts the
<code class="filename">default.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- default.target</strong></span>.</p></dd><dt id="SIGRTMIN+1"><span class="term">SIGRTMIN+1</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+1">¶</a></dt><dd><p>Enters rescue mode,
+ default.target</strong></span>.</p></dd><dt id="SIGRTMIN+1"><span class="term"><code class="constant">SIGRTMIN+1</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+1">¶</a></dt><dd><p>Enters rescue mode,
starts the
<code class="filename">rescue.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl isolate
- rescue.target</strong></span>.</p></dd><dt id="SIGRTMIN+2"><span class="term">SIGRTMIN+2</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+2">¶</a></dt><dd><p>Enters emergency mode,
+ rescue.target</strong></span>.</p></dd><dt id="SIGRTMIN+2"><span class="term"><code class="constant">SIGRTMIN+2</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+2">¶</a></dt><dd><p>Enters emergency mode,
starts the
<code class="filename">emergency.service</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl isolate
- emergency.service</strong></span>.</p></dd><dt id="SIGRTMIN+3"><span class="term">SIGRTMIN+3</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+3">¶</a></dt><dd><p>Halts the machine,
+ emergency.service</strong></span>.</p></dd><dt id="SIGRTMIN+3"><span class="term"><code class="constant">SIGRTMIN+3</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+3">¶</a></dt><dd><p>Halts the machine,
starts the
<code class="filename">halt.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- halt.target</strong></span>.</p></dd><dt id="SIGRTMIN+4"><span class="term">SIGRTMIN+4</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+4">¶</a></dt><dd><p>Powers off the machine,
+ halt.target</strong></span>.</p></dd><dt id="SIGRTMIN+4"><span class="term"><code class="constant">SIGRTMIN+4</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+4">¶</a></dt><dd><p>Powers off the machine,
starts the
<code class="filename">poweroff.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- poweroff.target</strong></span>.</p></dd><dt id="SIGRTMIN+5"><span class="term">SIGRTMIN+5</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+5">¶</a></dt><dd><p>Reboots the machine,
+ poweroff.target</strong></span>.</p></dd><dt id="SIGRTMIN+5"><span class="term"><code class="constant">SIGRTMIN+5</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+5">¶</a></dt><dd><p>Reboots the machine,
starts the
<code class="filename">reboot.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- reboot.target</strong></span>.</p></dd><dt id="SIGRTMIN+6"><span class="term">SIGRTMIN+6</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+6">¶</a></dt><dd><p>Reboots the machine via kexec,
+ reboot.target</strong></span>.</p></dd><dt id="SIGRTMIN+6"><span class="term"><code class="constant">SIGRTMIN+6</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+6">¶</a></dt><dd><p>Reboots the machine via kexec,
starts the
<code class="filename">kexec.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- kexec.target</strong></span>.</p></dd><dt id="SIGRTMIN+13"><span class="term">SIGRTMIN+13</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+13">¶</a></dt><dd><p>Immediately halts the machine.</p></dd><dt id="SIGRTMIN+14"><span class="term">SIGRTMIN+14</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+14">¶</a></dt><dd><p>Immediately powers off the machine.</p></dd><dt id="SIGRTMIN+15"><span class="term">SIGRTMIN+15</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+15">¶</a></dt><dd><p>Immediately reboots the machine.</p></dd><dt id="SIGRTMIN+16"><span class="term">SIGRTMIN+16</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+16">¶</a></dt><dd><p>Immediately reboots the machine with kexec.</p></dd><dt id="SIGRTMIN+20"><span class="term">SIGRTMIN+20</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+20">¶</a></dt><dd><p>Enables display of
+ kexec.target</strong></span>.</p></dd><dt id="SIGRTMIN+13"><span class="term"><code class="constant">SIGRTMIN+13</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+13">¶</a></dt><dd><p>Immediately halts the machine.</p></dd><dt id="SIGRTMIN+14"><span class="term"><code class="constant">SIGRTMIN+14</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+14">¶</a></dt><dd><p>Immediately powers off the machine.</p></dd><dt id="SIGRTMIN+15"><span class="term"><code class="constant">SIGRTMIN+15</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+15">¶</a></dt><dd><p>Immediately reboots the machine.</p></dd><dt id="SIGRTMIN+16"><span class="term"><code class="constant">SIGRTMIN+16</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+16">¶</a></dt><dd><p>Immediately reboots the machine with kexec.</p></dd><dt id="SIGRTMIN+20"><span class="term"><code class="constant">SIGRTMIN+20</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+20">¶</a></dt><dd><p>Enables display of
status messages on the console, as
controlled via
<code class="varname">systemd.show_status=1</code>
on the kernel command
- line.</p></dd><dt id="SIGRTMIN+21"><span class="term">SIGRTMIN+21</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+21">¶</a></dt><dd><p>Disables display of
+ line.</p></dd><dt id="SIGRTMIN+21"><span class="term"><code class="constant">SIGRTMIN+21</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+21">¶</a></dt><dd><p>Disables display of
status messages on the console, as
controlled via
<code class="varname">systemd.show_status=0</code>
on the kernel command
- line.</p></dd><dt id="SIGRTMIN+22"><span class="term">SIGRTMIN+22, </span><span class="term">SIGRTMIN+23</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+22">¶</a></dt><dd><p>Sets the log level to
- <code class="literal">debug</code>
- (or <code class="literal">info</code> on
- <code class="literal">SIGRTMIN+23</code>), as
+ line.</p></dd><dt id="SIGRTMIN+22"><span class="term"><code class="constant">SIGRTMIN+22</code>, </span><span class="term"><code class="constant">SIGRTMIN+23</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+22">¶</a></dt><dd><p>Sets the log level to
+ "<code class="literal">debug</code>"
+ (or "<code class="literal">info</code>" on
+ <code class="constant">SIGRTMIN+23</code>), as
controlled via
<code class="varname">systemd.log_level=debug</code>
(or <code class="varname">systemd.log_level=info</code>
- on <code class="literal">SIGRTMIN+23</code>) on
+ on <code class="constant">SIGRTMIN+23</code>) on
the kernel command
- line.</p></dd><dt id="SIGRTMIN+24"><span class="term">SIGRTMIN+24</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+24">¶</a></dt><dd><p>Immediately exits the
+ line.</p></dd><dt id="SIGRTMIN+24"><span class="term"><code class="constant">SIGRTMIN+24</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+24">¶</a></dt><dd><p>Immediately exits the
manager (only available for --user
- instances).</p></dd><dt id="SIGRTMIN+26"><span class="term">SIGRTMIN+26, </span><span class="term">SIGRTMIN+27, </span><span class="term">SIGRTMIN+28, </span><span class="term">SIGRTMIN+29</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+26">¶</a></dt><dd><p>Sets the log level to
- <code class="literal">journal-or-kmsg</code>
- (or <code class="literal">console</code> on
- <code class="literal">SIGRTMIN+27</code>,
- <code class="literal">kmsg</code> on
- <code class="literal">SIGRTMIN+28</code>,
- or <code class="literal">syslog-or-kmsg</code>
- on <code class="literal">SIGRTMIN+29</code>), as
+ instances).</p></dd><dt id="SIGRTMIN+26"><span class="term"><code class="constant">SIGRTMIN+26</code>, </span><span class="term"><code class="constant">SIGRTMIN+27</code>, </span><span class="term"><code class="constant">SIGRTMIN+28</code>, </span><span class="term"><code class="constant">SIGRTMIN+29</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+26">¶</a></dt><dd><p>Sets the log level to
+ "<code class="literal">journal-or-kmsg</code>"
+ (or "<code class="literal">console</code>" on
+ <code class="constant">SIGRTMIN+27</code>,
+ "<code class="literal">kmsg</code>" on
+ <code class="constant">SIGRTMIN+28</code>,
+ or "<code class="literal">syslog-or-kmsg</code>"
+ on <code class="constant">SIGRTMIN+29</code>), as
controlled via
<code class="varname">systemd.log_target=journal-or-kmsg</code>
(or <code class="varname">systemd.log_target=console</code>
- on <code class="literal">SIGRTMIN+27</code>,
+ on <code class="constant">SIGRTMIN+27</code>,
<code class="varname">systemd.log_target=kmsg</code>
- on <code class="literal">SIGRTMIN+28</code>,
+ on <code class="constant">SIGRTMIN+28</code>,
or
<code class="varname">systemd.log_target=syslog-or-kmsg</code>
- on <code class="literal">SIGRTMIN+29</code>) on
+ on <code class="constant">SIGRTMIN+29</code>) on
the kernel command
- line.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793685152"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_LOG_LEVEL"><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LEVEL">¶</a></dt><dd><p>systemd reads the
+ line.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693259360"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_LOG_LEVEL"><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LEVEL">¶</a></dt><dd><p>systemd reads the
log level from this environment
variable. This can be overridden with
<code class="option">--log-level=</code>.</p></dd><dt id="$SYSTEMD_LOG_TARGET"><span class="term"><code class="varname">$SYSTEMD_LOG_TARGET</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_TARGET">¶</a></dt><dd><p>systemd reads the
@@ -518,9 +528,9 @@
start-up completion notification. See
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>
for more information.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259793661728"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>When run as system instance systemd parses a
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274693235936"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>When run as system instance systemd parses a
number of kernel command line
- arguments<a href="#ftn.idm259793660704" class="footnote" name="idm259793660704"><sup class="footnote">[1]</sup></a>:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code>, </span><span class="term"><code class="varname">rd.systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p>Overrides the unit to
+ arguments<a href="#ftn.idm274693234912" class="footnote" name="idm274693234912"><sup class="footnote">[1]</sup></a>:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code>, </span><span class="term"><code class="varname">rd.systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p>Overrides the unit to
activate on boot. Defaults to
<code class="filename">default.target</code>. This
may be used to temporarily boot into a
@@ -530,18 +540,18 @@
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>
for details about these units. The
option prefixed with
- <code class="literal">rd.</code> is honored
+ "<code class="literal">rd.</code>" is honored
only in the initial RAM disk (initrd),
- while the one that isn't prefixed only
+ while the one that is not prefixed only
in the main system.</p></dd><dt id="systemd.dump_core="><span class="term"><code class="varname">systemd.dump_core=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.dump_core=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
systemd dumps core when it
- crashes. Otherwise no core dump is
+ crashes. Otherwise, no core dump is
created. Defaults to
<code class="option">true</code>.</p></dd><dt id="systemd.crash_shell="><span class="term"><code class="varname">systemd.crash_shell=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.crash_shell=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
systemd spawns a shell when it
- crashes. Otherwise no shell is
+ crashes. Otherwise, no shell is
spawned. Defaults to
<code class="option">false</code>, for security
reasons, as the shell is not protected
@@ -550,12 +560,12 @@
argument. If positive systemd
activates the specified virtual
terminal when it crashes. Defaults to
- <code class="literal">-1</code>.</p></dd><dt id="systemd.confirm_spawn="><span class="term"><code class="varname">systemd.confirm_spawn=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.confirm_spawn=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ <code class="constant">-1</code>.</p></dd><dt id="systemd.confirm_spawn="><span class="term"><code class="varname">systemd.confirm_spawn=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.confirm_spawn=">¶</a></dt><dd><p>Takes a boolean
+ argument. If <code class="option">true</code>,
asks for confirmation when spawning
processes. Defaults to
<code class="option">false</code>.</p></dd><dt id="systemd.show_status="><span class="term"><code class="varname">systemd.show_status=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.show_status=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
shows terse service status updates on
the console during bootup. Defaults to
<code class="option">true</code>, unless
@@ -572,24 +582,26 @@
and <code class="option">--default-standard-error=</code>
command line arguments described
above, respectively.</p></dd><dt id="systemd.setenv="><span class="term"><code class="varname">systemd.setenv=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.setenv=">¶</a></dt><dd><p>Takes a string
- argument in the form
- VARIABLE=VALUE. May be used to set
- environment variables for the init
- process and all its children at boot
- time. May be used more than once to
- set multiple variables. If the equal
- sign and variable are missing it unsets
- an environment variable which might be
- passed in from the initial ram
- disk.</p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p>If passed turns off
+ argument in the form VARIABLE=VALUE.
+ May be used to set default environment
+ variables to add to forked child processes.
+ May be used more than once to set multiple
+ variables.</p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p>Turn off
status output at boot, much like
<code class="varname">systemd.show_status=false</code>
would. Note that this option is also
read by the kernel itself and disables
- kernel log output to the
- kernel. Passing this option hence
- turns off the usual output from both
- the system manager and the
+ kernel log output. Passing this option
+ hence turns off the usual output from
+ both the system manager and the kernel.
+ </p></dd><dt id="debug"><span class="term"><code class="varname">debug</code></span><a class="headerlink" title="Permalink to this term" href="#debug">¶</a></dt><dd><p>Turn on debugging
+ output. This is equivalent to
+ <code class="varname">systemd.log_level=debug</code>.
+ Note that this option is also read by
+ the kernel itself and enables kernel
+ debug output. Passing this option
+ hence turns on the debug output from
+ both the system manager and the
kernel.</p></dd><dt id="emergency"><span class="term"><code class="varname">emergency</code></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p>Boot into emergency
mode. This is equivalent to
<code class="varname">systemd.unit=emergency.target</code>
@@ -618,20 +630,20 @@
</p></dd></dl></div><p>For other kernel command line parameters
understood by components of the core OS, please refer
to
- <a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm259793596048"></a><h2 id="Sockets and FIFOs">Sockets and FIFOs<a class="headerlink" title="Permalink to this headline" href="#Sockets%20and%20FIFOs">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/run/systemd/notify"><span class="term"><code class="filename">/run/systemd/notify</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/notify">¶</a></dt><dd><p>Daemon status
+ <a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm274693177056"></a><h2 id="Sockets and FIFOs">Sockets and FIFOs<a class="headerlink" title="Permalink to this headline" href="#Sockets%20and%20FIFOs">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/run/systemd/notify"><span class="term"><code class="filename">/run/systemd/notify</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/notify">¶</a></dt><dd><p>Daemon status
notification socket. This is an
- AF_UNIX datagram socket and is used to
+ <code class="constant">AF_UNIX</code> datagram socket and is used to
implement the daemon notification
logic as implemented by
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>.</p></dd><dt id="/run/systemd/shutdownd"><span class="term"><code class="filename">/run/systemd/shutdownd</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/shutdownd">¶</a></dt><dd><p>Used internally by the
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>
tool to implement delayed
- shutdowns. This is an AF_UNIX datagram
+ shutdowns. This is an <code class="constant">AF_UNIX</code> datagram
socket.</p></dd><dt id="/run/systemd/private"><span class="term"><code class="filename">/run/systemd/private</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/private">¶</a></dt><dd><p>Used internally as
communication channel between
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
and the systemd process. This is an
- AF_UNIX stream socket. This interface
+ <code class="constant">AF_UNIX</code> stream socket. This interface
is private to systemd and should not
be used in external
projects.</p></dd><dt id="/dev/initctl"><span class="term"><code class="filename">/dev/initctl</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/initctl">¶</a></dt><dd><p>Limited compatibility
@@ -641,7 +653,8 @@
unit. This is a named pipe in the file
system. This interface is obsolete and
should not be used in new
- applications.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793583968"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ applications.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693163872"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ The <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/" target="_top">systemd Homepage</a>,
<a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>,
<a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
@@ -655,7 +668,7 @@
<a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>,
<a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a>,
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
- </p></div><div class="footnotes"><br><hr style="width:100; text-align:left;margin-left: 0"><div id="ftn.idm259793660704" class="footnote"><p><a href="#idm259793660704" class="para"><sup class="para">[1] </sup></a>If run inside a Linux
+ </p></div><div class="footnotes"><br><hr style="width:100; text-align:left;margin-left: 0"><div id="ftn.idm274693234912" class="footnote"><p><a href="#idm274693234912" class="para"><sup class="para">[1] </sup></a>If run inside a Linux
container these arguments may be passed as command
line arguments to systemd itself, next to any of the
command line options listed in the Options section
diff --git a/man/journalctl.1 b/man/journalctl.1
new file mode 100644
index 0000000000..85294bdf8c
--- /dev/null
+++ b/man/journalctl.1
@@ -0,0 +1,574 @@
+'\" t
+.TH "JOURNALCTL" "1" "" "systemd 208" "journalctl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+journalctl \- Query the systemd journal
+.SH "SYNOPSIS"
+.HP \w'\fBjournalctl\fR\ 'u
+\fBjournalctl\fR [OPTIONS...] [MATCHES...]
+.SH "DESCRIPTION"
+.PP
+\fBjournalctl\fR
+may be used to query the contents of the
+\fBsystemd\fR(1)
+journal as written by
+\fBsystemd-journald.service\fR(8)\&.
+.PP
+If called without parameters, it will show the full contents of the journal, starting with the oldest entry collected\&.
+.PP
+If one or more match arguments are passed, the output is filtered accordingly\&. A match is in the format
+"FIELD=VALUE", e\&.g\&.
+"_SYSTEMD_UNIT=httpd\&.service", referring to the components of a structured journal entry\&. See
+\fBsystemd.journal-fields\fR(7)
+for a list of well\-known fields\&. If multiple matches are specified matching different fields, the log entries are filtered by both, i\&.e\&. the resulting output will show only entries matching all the specified matches of this kind\&. If two matches apply to the same field, then they are automatically matched as alternatives, i\&.e\&. the resulting output will show entries matching any of the specified matches for the same field\&. Finally, if the character
+"+"
+appears as separate word on the command line, all matches before and after are combined in a disjunction (i\&.e\&. logical OR)\&.
+.PP
+As shortcuts for a few types of field/value matches, file paths may be specified\&. If a file path refers to an executable file, this is equivalent to an
+"_EXE="
+match for the canonicalized binary path\&. Similarly, if a path refers to a device node, this is equivalent to a
+"_KERNEL_DEVICE="
+match for the device\&.
+.PP
+Output is interleaved from all accessible journal files, whether they are rotated or currently being written, and regardless of whether they belong to the system itself or are accessible user journals\&.
+.PP
+All users are granted access to their private per\-user journals\&. However, by default, only root and users who are members of the
+"systemd\-journal"
+group get access to the system journal and the journals of other users\&.
+.PP
+The output is paged through
+\fBless\fR
+by default, and long lines are "truncated" to screen width\&. The hidden part can be viewed by using the left\-arrow and right\-arrow keys\&. Paging can be disabled, see
+\fB\-\-no\-pager\fR
+and section Environment below\&.
+.PP
+When outputing to a tty, lines are colored according to priority: lines of level ERROR and higher are colored red, lines of level NOTICE and higher are highlighted, and other lines are displayed normally\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-full\fR
+.RS 4
+Show all (printable) fields in full\&.
+.RE
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Show all fields in full, even if they include unprintable characters or are very long\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-follow\fR
+.RS 4
+Show only the most recent journal entries, and continuously print new entries as they are appended to the journal\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-pager\-end\fR
+.RS 4
+Immediately jump to the end of the journal inside the implied pager tool\&. This implies
+\fB\-n1000\fR
+to guarantee that the pager will not buffer logs of unbounded size\&. This may be overridden with an explicit
+\fB\-n\fR
+with some other numeric value on the command line\&. Note that this option is only supported for the
+\fBless\fR(1)
+pager\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-lines=\fR
+.RS 4
+Show the most recent journal events and limit the number of events shown\&. If
+\fB\-\-follow\fR
+is used, this option is implied\&. The argument, a positive integer, is optional, and defaults to 10\&.
+.RE
+.PP
+\fB\-\-no\-tail\fR
+.RS 4
+Show all stored output lines, even in follow mode\&. Undoes the effect of
+\fB\-\-lines=\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reverse\fR
+.RS 4
+Reverse output, so the newest entries are displayed first\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-output=\fR
+.RS 4
+Controls the formatting of the journal entries that are shown\&. Takes one of the following options:
+.PP
+\fBshort\fR
+.RS 4
+is the default and generates an output that is mostly identical to the formatting of classic syslog files, showing one line per journal entry\&.
+.RE
+.PP
+\fBshort\-iso\fR
+.RS 4
+is very similar, but shows ISO 8601 wallclock timestamps\&.
+.RE
+.PP
+\fBshort\-precise\fR
+.RS 4
+is very similar, but shows timestamps with full microsecond precision\&.
+.RE
+.PP
+\fBshort\-monotonic\fR
+.RS 4
+is very similar, but shows monotonic timestamps instead of wallclock timestamps\&.
+.RE
+.PP
+\fBverbose\fR
+.RS 4
+shows the full\-structured entry items with all fields\&.
+.RE
+.PP
+\fBexport\fR
+.RS 4
+serializes the journal into a binary (but mostly text\-based) stream suitable for backups and network transfer (see
+\m[blue]\fBJournal Export Format\fR\m[]\&\s-2\u[1]\d\s+2
+for more information)\&.
+.RE
+.PP
+\fBjson\fR
+.RS 4
+formats entries as JSON data structures, one per line (see
+\m[blue]\fBJournal JSON Format\fR\m[]\&\s-2\u[2]\d\s+2
+for more information)\&.
+.RE
+.PP
+\fBjson\-pretty\fR
+.RS 4
+formats entries as JSON data structures, but formats them in multiple lines in order to make them more readable for humans\&.
+.RE
+.PP
+\fBjson\-sse\fR
+.RS 4
+formats entries as JSON data structures, but wraps them in a format suitable for
+\m[blue]\fBServer\-Sent Events\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.RE
+.PP
+\fBcat\fR
+.RS 4
+generates a very terse output only showing the actual message of each journal entry with no meta data, not even a timestamp\&.
+.RE
+.RE
+.PP
+\fB\-x\fR, \fB\-\-catalog\fR
+.RS 4
+Augment log lines with explanation texts from the message catalog\&. This will add explanatory help texts to log messages in the output where this is available\&. These short help texts will explain the context of an error or log event, possible solutions, as well as pointers to support forums, developer documentation, and any other relevant manuals\&. Note that help texts are not available for all messages, but only for selected ones\&. For more information on the message catalog, please refer to the
+\m[blue]\fBMessage Catalog Developer Documentation\fR\m[]\&\s-2\u[4]\d\s+2\&.
+.sp
+Note: when attaching
+\fBjournalctl\fR
+output to bug reports, please do
+\fInot\fR
+use
+\fB\-x\fR\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Suppresses any warning message regarding inaccessible system journals when run as normal user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-merge\fR
+.RS 4
+Show entries interleaved from all available journals, including remote ones\&.
+.RE
+.PP
+\fB\-b \fR\fB[\fIID\fR]\fR\fB[\fI\(+-offset\fR]\fR, \fB\-\-boot=\fR\fB[\fIID\fR]\fR\fB[\fI\(+-offset\fR]\fR
+.RS 4
+Show messages from a specific boot\&. This will add a match for
+"_BOOT_ID="\&.
+.sp
+The argument may be empty, in which case logs for the current boot will be shown\&.
+.sp
+If the boot ID is omitted, a positive
+\fIoffset\fR
+will look up the boots starting from the beginning of the journal, and a equal\-or\-less\-than zero
+\fIoffset\fR
+will look up boots starting from the end of the journal\&. Thus,
+\fB1\fR
+means the first boot found in the journal in the chronological order,
+\fB2\fR
+the second and so on; while
+\fB\-0\fR
+is the last boot,
+\fB\-1\fR
+the boot before that, and so on\&. An empty
+\fIoffset\fR
+is equivalent to specifying
+\fB\-0\fR, except when the current boot is not the last boot (e\&.g\&. because
+\fB\-\-directory\fR
+was specified to look at logs from a different machine)\&.
+.sp
+If the 32 character
+\fIID\fR
+is specified, it may optionally be followed by
+\fIoffset\fR
+which identifies the boot relative to the one given by boot
+\fIID\fR\&. Negative values mean earlier boots and a positive values mean later boots\&. If
+\fIoffset\fR
+is not specified, a value of zero is assumed and the logs for the boot given by
+\fIID\fR
+are shown\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-dmesg\fR
+.RS 4
+Show only kernel messages\&. This implies
+\fB\-b\fR
+and adds the match
+"_TRANSPORT=kernel"\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unit=\fR
+.RS 4
+Show messages for the specified systemd unit\&. This will add a match for messages from the unit ("_SYSTEMD_UNIT=") and additional matches for messages from systemd and messages about coredumps for the specified unit\&.
+.sp
+This parameter can be specified multiple times\&.
+.RE
+.PP
+\fB\-\-user\-unit=\fR
+.RS 4
+Show messages for the specified user session unit\&. This will add a match for messages from the unit ("_SYSTEMD_USER_UNIT="
+and
+"_UID=") and additional matches for messages from session systemd and messages about coredumps for the specified unit\&.
+.sp
+This parameter can be specified multiple times\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-priority=\fR
+.RS 4
+Filter output by message priorities or priority ranges\&. Takes either a single numeric or textual log level (i\&.e\&. between 0/"emerg"
+and 7/"debug"), or a range of numeric/text log levels in the form FROM\&.\&.TO\&. The log levels are the usual syslog log levels as documented in
+\fBsyslog\fR(3), i\&.e\&.
+"emerg"
+(0),
+"alert"
+(1),
+"crit"
+(2),
+"err"
+(3),
+"warning"
+(4),
+"notice"
+(5),
+"info"
+(6),
+"debug"
+(7)\&. If a single log level is specified, all messages with this log level or a lower (hence more important) log level are shown\&. If a range is specified, all messages within the range are shown, including both the start and the end value of the range\&. This will add
+"PRIORITY="
+matches for the specified priorities\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-cursor=\fR
+.RS 4
+Start showing entries from the location in the journal specified by the passed cursor\&.
+.RE
+.PP
+\fB\-\-after\-cursor=\fR
+.RS 4
+Start showing entries from the location in the journal
+\fIafter\fR
+the location specified by the this cursor\&.
+.RE
+.PP
+\fB\-\-since=\fR, \fB\-\-until=\fR
+.RS 4
+Start showing entries on or newer than the specified date, or on or older than the specified date, respectively\&. Date specifications should be of the format
+"2012\-10\-30 18:17:16"\&. If the time part is omitted,
+"00:00:00"
+is assumed\&. If only the seconds component is omitted,
+":00"
+is assumed\&. If the date component is omitted, the current day is assumed\&. Alternatively the strings
+"yesterday",
+"today",
+"tomorrow"
+are understood, which refer to 00:00:00 of the day before the current day, the current day, or the day after the current day, respectively\&.
+"now"
+refers to the current time\&. Finally, relative times may be specified, prefixed with
+"\-"
+or
+"+", referring to times before or after the current time, respectively\&.
+.RE
+.PP
+\fB\-F\fR, \fB\-\-field=\fR
+.RS 4
+Print all possible data values the specified field can take in all entries of the journal\&.
+.RE
+.PP
+\fB\-\-system\fR, \fB\-\-user\fR
+.RS 4
+Show messages from system services and the kernel (with
+\fB\-\-system\fR)\&. Show messages from service of current user (with
+\fB\-\-user\fR)\&. If neither is specified, show all messages that the user can see\&.
+.RE
+.PP
+\fB\-D \fR\fB\fIDIR\fR\fR, \fB\-\-directory=\fR\fB\fIDIR\fR\fR
+.RS 4
+Takes a directory path as argument\&. If specified, journalctl will operate on the specified journal directory
+\fIDIR\fR
+instead of the default runtime and system journal paths\&.
+.RE
+.PP
+\fB\-\-file=\fR\fB\fIGLOB\fR\fR
+.RS 4
+Takes a file glob as argument\&. If specified, journalctl will operate on the specified journal files matching
+\fIGLOB\fR
+instead of the default runtime and system journal paths\&. May be specified multiple times, in which case files will be suitably interleaved\&.
+.RE
+.PP
+\fB\-\-root=\fR\fB\fIROOT\fR\fR
+.RS 4
+Takes a directory path as argument\&. If specified, journalctl will operate on catalog file hierarchy underneath the specified directory instead of the root directory (e\&.g\&.
+\fB\-\-update\-catalog\fR
+will create
+\fIROOT\fR/var/lib/systemd/catalog/database)\&.
+.RE
+.PP
+\fB\-\-new\-id128\fR
+.RS 4
+Instead of showing journal contents, generate a new 128 bit ID suitable for identifying messages\&. This is intended for usage by developers who need a new identifier for a new message they introduce and want to make recognizable\&. This will print the new ID in three different formats which can be copied into source code or similar\&.
+.RE
+.PP
+\fB\-\-header\fR
+.RS 4
+Instead of showing journal contents, show internal header information of the journal fields accessed\&.
+.RE
+.PP
+\fB\-\-disk\-usage\fR
+.RS 4
+Shows the current disk usage of all journal files\&.
+.RE
+.PP
+\fB\-\-list\-catalog \fR\fB[\fIID128\&.\&.\&.\fR]\fR\fB \fR
+.RS 4
+List the contents of the message catalog, as table of message IDs plus their short description strings\&.
+.sp
+If any
+\fIID128\fRs are specified, only those entries are shown\&.
+.RE
+.PP
+\fB\-\-dump\-catalog \fR\fB[\fIID128\&.\&.\&.\fR]\fR\fB \fR
+.RS 4
+Show the contents of the message catalog, with entries separated by a line consisting of two dashes and the id (the format is the same as
+\&.catalog
+files\&.
+.sp
+If any
+\fIID128\fRs are specified, only those entries are shown\&.
+.RE
+.PP
+\fB\-\-update\-catalog\fR
+.RS 4
+Update the message catalog index\&. This command needs to be executed each time new catalog files are installed, removed or updated to rebuild the binary catalog index\&.
+.RE
+.PP
+\fB\-\-setup\-keys\fR
+.RS 4
+Instead of showing journal contents, generate a new key pair for Forward Secure Sealing (FSS)\&. This will generate a sealing key and a verification key\&. The sealing key is stored in the journal data directory and shall remain on the host\&. The verification key should be stored externally\&. Also see the
+\fBSeal=\fR
+option in
+\fBjournald.conf\fR(5)
+for details\&.
+.RE
+.PP
+\fB\-\-force\fR
+.RS 4
+When \-\-setup\-keys is passed and Forward Secure Sealing has already been set up, recreate FSS keys\&.
+.RE
+.PP
+\fB\-\-interval=\fR
+.RS 4
+Specifies the change interval for the sealing key when generating an FSS key pair with
+\fB\-\-setup\-keys\fR\&. Shorter intervals increase CPU consumption but shorten the time range of undetectable journal alterations\&. Defaults to 15min\&.
+.RE
+.PP
+\fB\-\-verify\fR
+.RS 4
+Check the journal file for internal consistency\&. If the file has been generated with FSS enabled and the FSS verification key has been specified with
+\fB\-\-verify\-key=\fR, authenticity of the journal file is verified\&.
+.RE
+.PP
+\fB\-\-verify\-key=\fR
+.RS 4
+Specifies the FSS verification key to use for the
+\fB\-\-verify\fR
+operation\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "EXAMPLES"
+.PP
+Without arguments, all collected logs are shown unfiltered:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+With one match specified, all entries with a field matching the expression are shown:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl _SYSTEMD_UNIT=avahi\-daemon\&.service
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+If two different fields are matched, only entries matching both expressions at the same time are shown:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl _SYSTEMD_UNIT=avahi\-daemon\&.service _PID=28097
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+If two matches refer to the same field, all entries matching either expression are shown:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl _SYSTEMD_UNIT=avahi\-daemon\&.service _SYSTEMD_UNIT=dbus\&.service
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+If the separator
+"+"
+is used, two expressions may be combined in a logical OR\&. The following will show all messages from the Avahi service process with the PID 28097 plus all messages from the D\-Bus service (from any of its processes):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl _SYSTEMD_UNIT=avahi\-daemon\&.service _PID=28097 + _SYSTEMD_UNIT=dbus\&.service
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Show all logs generated by the D\-Bus executable:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl /usr/bin/dbus\-daemon
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Show all logs of the kernel device node
+/dev/sda:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl /dev/sda
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Show all kernel logs from previous boot:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+journalctl \-k \-b \-1
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-journald.service\fR(8),
+\fBsystemctl\fR(1),
+\fBsystemd.journal-fields\fR(7),
+\fBjournald.conf\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+Journal Export Format
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/export
+.RE
+.IP " 2." 4
+Journal JSON Format
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/json
+.RE
+.IP " 3." 4
+Server-Sent Events
+.RS 4
+\%https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
+.RE
+.IP " 4." 4
+Message Catalog Developer Documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/catalog
+.RE
diff --git a/man/journalctl.html b/man/journalctl.html
index 03302d6069..5ed11662eb 100644
--- a/man/journalctl.html
+++ b/man/journalctl.html
@@ -19,21 +19,21 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="journalctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>journalctl — Query the systemd journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">journalctl</code> [OPTIONS...] [MATCHES...]</p></div></div><div class="refsect1"><a name="idm259766678784"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>journalctl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="journalctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>journalctl — Query the systemd journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">journalctl</code> [OPTIONS...] [MATCHES...]</p></div></div><div class="refsect1"><a name="idm274678752256"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>journalctl</strong></span> may be used to
query the contents of the
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
journal as written by
- <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>.</p><p>If called without parameter it will show the full
+ <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>.</p><p>If called without parameters, it will show the full
contents of the journal, starting with the oldest
- entry collected.</p><p>If one or more match arguments are passed the
+ entry collected.</p><p>If one or more match arguments are passed, the
output is filtered accordingly. A match is in the
- format <code class="literal">FIELD=VALUE</code>,
- e.g. <code class="literal">_SYSTEMD_UNIT=httpd.service</code>,
+ format "<code class="literal">FIELD=VALUE</code>",
+ e.g. "<code class="literal">_SYSTEMD_UNIT=httpd.service</code>",
referring to the components of a structured journal
entry. See
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for a list of well-known fields. If multiple matches
- are specified matching different fields the log
+ are specified matching different fields, the log
entries are filtered by both, i.e. the resulting output
will show only entries matching all the specified
matches of this kind. If two matches apply to the same
@@ -42,25 +42,35 @@
entries matching any of the specified matches for the
same field. Finally, if the character
"<code class="literal">+</code>" appears as separate word on the
- command line all matches before and after are combined
+ command line, all matches before and after are combined
in a disjunction (i.e. logical OR).</p><p>As shortcuts for a few types of field/value
- matches file paths may be specified. If a file path
+ matches, file paths may be specified. If a file path
refers to an executable file, this is equivalent to an
- <code class="literal">_EXE=</code> match for the canonicalized
- binary path. Similar, if a path refers to a device
+ "<code class="literal">_EXE=</code>" match for the canonicalized
+ binary path. Similarly, if a path refers to a device
node, this is equivalent to a
- <code class="literal">_KERNEL_DEVICE=</code> match for the
+ "<code class="literal">_KERNEL_DEVICE=</code>" match for the
device.</p><p>Output is interleaved from all accessible
journal files, whether they are rotated or currently
- being written, and regardless whether they belong to the
+ being written, and regardless of whether they belong to the
system itself or are accessible user journals.</p><p>All users are granted access to their private
- per-user journals. However, by default only root and
- users who are members of the <code class="literal">adm</code>
+ per-user journals. However, by default, only root and
+ users who are members of the "<code class="literal">systemd-journal</code>"
group get access to the system journal and the
- journals of other users.</p></div><div class="refsect1"><a name="idm259766666320"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ journals of other users.</p><p>The output is paged through
+ <span class="command"><strong>less</strong></span> by default, and long lines are
+ "truncated" to screen width. The hidden part can be
+ viewed by using the left-arrow and right-arrow
+ keys. Paging can be disabled, see
+ <code class="option">--no-pager</code> and section Environment
+ below.</p><p>When outputing to a tty, lines are colored
+ according to priority: lines of level ERROR and higher
+ are colored red, lines of level NOTICE and higher are
+ highlighted, and other lines are displayed normally.
+ </p></div><div class="refsect1"><a name="idm274680130496"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
- pager.</p></dd><dt id="--full"><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#--full">¶</a></dt><dd><p>Show all (printable) fields in
+ pager.</p></dd><dt id="-l"><span class="term"><code class="option">-l</code>, </span><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p>Show all (printable) fields in
full.</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p>Show all fields in
full, even if they include unprintable
characters or are very
@@ -71,7 +81,7 @@
the end of the journal inside the
implied pager tool. This implies
<code class="option">-n1000</code> to guarantee
- that the pager won't buffer logs of
+ that the pager will not buffer logs of
unbounded size. This may be overridden
with an explicit <code class="option">-n</code>
with some other numeric value on the
@@ -90,50 +100,95 @@
<code class="option">--lines=</code>.</p></dd><dt id="-r"><span class="term"><code class="option">-r</code>, </span><span class="term"><code class="option">--reverse</code></span><a class="headerlink" title="Permalink to this term" href="#-r">¶</a></dt><dd><p>Reverse output, so the newest
entries are displayed first.</p></dd><dt id="-o"><span class="term"><code class="option">-o</code>, </span><span class="term"><code class="option">--output=</code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p>Controls the
formatting of the journal entries that
- are shown. Takes one of
- <code class="literal">short</code>,
- <code class="literal">short-monotonic</code>,
- <code class="literal">verbose</code>,
- <code class="literal">export</code>,
- <code class="literal">json</code>,
- <code class="literal">json-pretty</code>,
- <code class="literal">json-sse</code>,
- <code class="literal">cat</code>. <code class="literal">short</code>
- is the default and generates an output
- that is mostly identical to the
- formatting of classic syslog log
- files, showing one line per journal
- entry. <code class="literal">short-monotonic</code>
- is very similar but shows monotonic
- timestamps instead of wallclock
- timestamps. <code class="literal">verbose</code>
- shows the full structured entry items
- with all
- fields. <code class="literal">export</code>
- serializes the journal into a binary
- (but mostly text-based) stream
- suitable for backups and network
- transfer (see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
- Export Format</a> for more
- information). <code class="literal">json</code>
- formats entries as JSON data
- structures, one per
- line (see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/json" target="_top">Journal
- JSON Format</a> for more
- information). <code class="literal">json-pretty</code>
- also formats entries as JSON data
- structures, but formats them in
- multiple lines in order to make them
- more readable for
- humans. <code class="literal">json-sse</code>
- also formats entries as JSON data
- structures, but wraps them in a format
- suitable for <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events" target="_top">Server-Sent
- Events</a>. <code class="literal">cat</code>
- generates a very terse output only
- showing the actual message of each
- journal entry with no meta data, not
- even a timestamp.</p></dd><dt id="-x"><span class="term"><code class="option">-x</code>, </span><span class="term"><code class="option">--catalog</code></span><a class="headerlink" title="Permalink to this term" href="#-x">¶</a></dt><dd><p>Augment log lines with
+ are shown. Takes one of the following options:
+ </p><div class="variablelist"><dl class="variablelist"><dt id="
+ short
+ "><span class="term">
+ <code class="option">short</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20short%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>is the default
+ and generates an output
+ that is mostly identical
+ to the formatting of
+ classic syslog files,
+ showing one line per
+ journal entry.</p></dd><dt id="
+ short-iso
+ "><span class="term">
+ <code class="option">short-iso</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20short-iso%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>is very similar,
+ but shows ISO 8601
+ wallclock timestamps.
+ </p></dd><dt id="
+ short-precise
+ "><span class="term">
+ <code class="option">short-precise</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20short-precise%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>is very similar,
+ but shows timestamps
+ with full microsecond
+ precision.
+ </p></dd><dt id="
+ short-monotonic
+ "><span class="term">
+ <code class="option">short-monotonic</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20short-monotonic%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>is very similar,
+ but shows monotonic
+ timestamps instead of
+ wallclock timestamps.
+ </p></dd><dt id="
+ verbose
+ "><span class="term">
+ <code class="option">verbose</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20verbose%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>shows the
+ full-structured entry
+ items with all fields.
+ </p></dd><dt id="
+ export
+ "><span class="term">
+ <code class="option">export</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20export%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>serializes the
+ journal into a binary
+ (but mostly text-based)
+ stream suitable for
+ backups and network
+ transfer (see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
+ Export Format</a>
+ for more
+ information).</p></dd><dt id="
+ json
+ "><span class="term">
+ <code class="option">json</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20json%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>formats entries
+ as JSON data structures,
+ one per line (see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/json" target="_top">Journal
+ JSON Format</a> for
+ more information).</p></dd><dt id="
+ json-pretty
+ "><span class="term">
+ <code class="option">json-pretty</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20json-pretty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>formats entries as
+ JSON data structures,
+ but formats them in
+ multiple lines in order
+ to make them more
+ readable for humans.</p></dd><dt id="
+ json-sse
+ "><span class="term">
+ <code class="option">json-sse</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20json-sse%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>formats entries as
+ JSON data structures,
+ but wraps them in a
+ format suitable for <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events" target="_top">Server-Sent
+ Events</a>.</p></dd><dt id="
+ cat
+ "><span class="term">
+ <code class="option">cat</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cat%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>generates a very
+ terse output only
+ showing the actual
+ message of each journal
+ entry with no meta data,
+ not even a timestamp.
+ </p></dd></dl></div></dd><dt id="-x"><span class="term"><code class="option">-x</code>, </span><span class="term"><code class="option">--catalog</code></span><a class="headerlink" title="Permalink to this term" href="#-x">¶</a></dt><dd><p>Augment log lines with
explanation texts from the message
catalog. This will add explanatory
help texts to log messages in the
@@ -142,35 +197,70 @@
context of an error or log event,
possible solutions, as well as
pointers to support forums, developer
- documentation and any other relevant
+ documentation, and any other relevant
manuals. Note that help texts are not
available for all messages, but only
for selected ones. For more
- information on the message catalog
+ information on the message catalog,
please refer to the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/catalog" target="_top">Message
Catalog Developer
- Documentation</a>.</p></dd><dt id="-q"><span class="term"><code class="option">-q</code>, </span><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#-q">¶</a></dt><dd><p>Suppresses any warning
+ Documentation</a>.</p><p>Note: when attaching
+ <span class="command"><strong>journalctl</strong></span> output
+ to bug reports, please do
+ <span class="emphasis"><em>not</em></span> use
+ <code class="option">-x</code>.</p></dd><dt id="-q"><span class="term"><code class="option">-q</code>, </span><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#-q">¶</a></dt><dd><p>Suppresses any warning
message regarding inaccessible system
journals when run as normal
user.</p></dd><dt id="-m"><span class="term"><code class="option">-m</code>, </span><span class="term"><code class="option">--merge</code></span><a class="headerlink" title="Permalink to this term" href="#-m">¶</a></dt><dd><p>Show entries
interleaved from all available
journals, including remote
- ones.</p></dd><dt id="-b"><span class="term"><code class="option">-b</code>, </span><span class="term"><code class="option">--this-boot</code></span><a class="headerlink" title="Permalink to this term" href="#-b">¶</a></dt><dd><p>Show data only from
- current boot. This will add a match
- for <code class="literal">_BOOT_ID=</code> for
- the current boot ID of the
- kernel.</p></dd><dt id="-u"><span class="term"><code class="option">-u</code>, </span><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#-u">¶</a></dt><dd><p>Show messages for the
+ ones.</p></dd><dt id="-b ID±offset"><span class="term"><code class="option">-b [<span class="optional"><em class="replaceable"><code>ID</code></em></span>][<span class="optional"><em class="replaceable"><code>±offset</code></em></span>]</code>, </span><span class="term"><code class="option">--boot=[<span class="optional"><em class="replaceable"><code>ID</code></em></span>][<span class="optional"><em class="replaceable"><code>±offset</code></em></span>]</code></span><a class="headerlink" title="Permalink to this term" href="#-b%20ID%C2%B1offset">¶</a></dt><dd><p>Show messages from a specific
+ boot. This will add a match for
+ "<code class="literal">_BOOT_ID=</code>".</p><p>The argument may be empty, in which case
+ logs for the current boot will be shown.</p><p>If the boot ID is omitted, a positive
+ <em class="replaceable"><code>offset</code></em> will look up
+ the boots starting from the beginning of the
+ journal, and a equal-or-less-than zero
+ <em class="replaceable"><code>offset</code></em> will look up
+ boots starting from the end of the
+ journal. Thus, <code class="constant">1</code> means the
+ first boot found in the journal in the
+ chronological order, <code class="constant">2</code> the
+ second and so on; while <code class="constant">-0</code>
+ is the last boot, <code class="constant">-1</code> the
+ boot before that, and so on. An empty
+ <em class="replaceable"><code>offset</code></em> is equivalent
+ to specifying <code class="constant">-0</code>, except
+ when the current boot is not the last boot
+ (e.g. because <code class="option">--directory</code> was
+ specified to look at logs from a different
+ machine).</p><p>If the 32 character
+ <em class="replaceable"><code>ID</code></em> is specified, it
+ may optionally be followed by
+ <em class="replaceable"><code>offset</code></em> which
+ identifies the boot relative to the one given by
+ boot <em class="replaceable"><code>ID</code></em>. Negative
+ values mean earlier boots and a positive values
+ mean later boots. If
+ <em class="replaceable"><code>offset</code></em> is not
+ specified, a value of zero is assumed and the
+ logs for the boot given by
+ <em class="replaceable"><code>ID</code></em> are shown.
+ </p></dd><dt id="-k"><span class="term"><code class="option">-k</code>, </span><span class="term"><code class="option">--dmesg</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p>Show only kernel messages. This
+ implies <code class="option">-b</code> and adds the match
+ "<code class="literal">_TRANSPORT=kernel</code>".
+ </p></dd><dt id="-u"><span class="term"><code class="option">-u</code>, </span><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#-u">¶</a></dt><dd><p>Show messages for the
specified systemd unit. This will add
a match for messages from the unit
- (<code class="literal">_SYSTEMD_UNIT=</code>)
+ ("<code class="literal">_SYSTEMD_UNIT=</code>")
and additional matches for messages
from systemd and messages about
coredumps for the specified unit.</p><p>This parameter can be specified multiple times.
</p></dd><dt id="--user-unit="><span class="term"><code class="option">--user-unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--user-unit=">¶</a></dt><dd><p>Show messages for the
specified user session unit. This will
add a match for messages from the unit
- (<code class="literal">_SYSTEMD_USER_UNIT=</code>
- and <code class="literal">_UID=</code>) and
+ ("<code class="literal">_SYSTEMD_USER_UNIT=</code>"
+ and "<code class="literal">_UID=</code>") and
additional matches for messages from
session systemd and messages about
coredumps for the specified unit.</p><p>This parameter can be specified multiple times.
@@ -178,66 +268,86 @@
message priorities or priority
ranges. Takes either a single numeric
or textual log level (i.e. between
- 0/<code class="literal">emerg</code> and
- 7/<code class="literal">debug</code>), or a
+ 0/"<code class="literal">emerg</code>" and
+ 7/"<code class="literal">debug</code>"), or a
range of numeric/text log levels in
the form FROM..TO. The log levels are
the usual syslog log levels as
documented in
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>,
- i.e. <code class="literal">emerg</code> (0),
- <code class="literal">alert</code> (1),
- <code class="literal">crit</code> (2),
- <code class="literal">err</code> (3),
- <code class="literal">warning</code> (4),
- <code class="literal">notice</code> (5),
- <code class="literal">info</code> (6),
- <code class="literal">debug</code> (7). If a
- single log level is specified all
+ i.e. "<code class="literal">emerg</code>" (0),
+ "<code class="literal">alert</code>" (1),
+ "<code class="literal">crit</code>" (2),
+ "<code class="literal">err</code>" (3),
+ "<code class="literal">warning</code>" (4),
+ "<code class="literal">notice</code>" (5),
+ "<code class="literal">info</code>" (6),
+ "<code class="literal">debug</code>" (7). If a
+ single log level is specified, all
messages with this log level or a
lower (hence more important) log level
- are shown. If a range is specified all
+ are shown. If a range is specified, all
messages within the range are shown,
including both the start and the end
value of the range. This will add
- <code class="literal">PRIORITY=</code> matches
+ "<code class="literal">PRIORITY=</code>" matches
for the specified
priorities.</p></dd><dt id="-c"><span class="term"><code class="option">-c</code>, </span><span class="term"><code class="option">--cursor=</code></span><a class="headerlink" title="Permalink to this term" href="#-c">¶</a></dt><dd><p>Start showing entries
from the location in the journal
specified by the passed
- cursor.</p></dd><dt id="--since="><span class="term"><code class="option">--since=</code>, </span><span class="term"><code class="option">--until=</code></span><a class="headerlink" title="Permalink to this term" href="#--since=">¶</a></dt><dd><p>Start showing entries
+ cursor.</p></dd><dt id="--after-cursor="><span class="term"><code class="option">--after-cursor=</code></span><a class="headerlink" title="Permalink to this term" href="#--after-cursor=">¶</a></dt><dd><p>Start showing entries from the
+ location in the journal
+ <span class="emphasis"><em>after</em></span> the location
+ specified by the this cursor.
+ </p></dd><dt id="--since="><span class="term"><code class="option">--since=</code>, </span><span class="term"><code class="option">--until=</code></span><a class="headerlink" title="Permalink to this term" href="#--since=">¶</a></dt><dd><p>Start showing entries
on or newer than the specified date,
or on or older than the specified
- date, respectively. Date specifications should be of
- the format "2012-10-30 18:17:16". If
- the time part is omitted, 00:00:00 is
- assumed. If only the seconds component
- is omitted, :00 is assumed. If the
- date component is omitted, the
- current day is assumed. Alternatively
- the strings
- <code class="literal">yesterday</code>,
- <code class="literal">today</code>,
- <code class="literal">tomorrow</code> are
+ date, respectively. Date specifications
+ should be of the format
+ "<code class="literal">2012-10-30 18:17:16</code>".
+ If the time part is omitted,
+ "<code class="literal">00:00:00</code>" is assumed.
+ If only the seconds component is omitted,
+ "<code class="literal">:00</code>" is assumed. If the
+ date component is omitted, the current
+ day is assumed. Alternatively the strings
+ "<code class="literal">yesterday</code>",
+ "<code class="literal">today</code>",
+ "<code class="literal">tomorrow</code>" are
understood, which refer to 00:00:00 of
the day before the current day, the
current day, or the day after the
- current day, respectively. <code class="literal">now</code>
+ current day, respectively. "<code class="literal">now</code>"
refers to the current time. Finally,
relative times may be specified,
- prefixed with <code class="literal">-</code> or
- <code class="literal">+</code>, referring to
+ prefixed with "<code class="literal">-</code>" or
+ "<code class="literal">+</code>", referring to
times before or after the current
time, respectively.</p></dd><dt id="-F"><span class="term"><code class="option">-F</code>, </span><span class="term"><code class="option">--field=</code></span><a class="headerlink" title="Permalink to this term" href="#-F">¶</a></dt><dd><p>Print all possible
data values the specified field can
take in all entries of the
- journal.</p></dd><dt id="-D"><span class="term"><code class="option">-D</code>, </span><span class="term"><code class="option">--directory=</code></span><a class="headerlink" title="Permalink to this term" href="#-D">¶</a></dt><dd><p>Takes a
- directory path as argument. If
- specified journalctl will operate on the
- specified journal directory instead of
- the default runtime and system journal
- paths.</p></dd><dt id="--root=ROOT"><span class="term"><code class="option">--root=<em class="replaceable"><code>ROOT</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--root=ROOT">¶</a></dt><dd><p>Takes a directory path
- as argument. If specified journalctl
+ journal.</p></dd><dt id="--system"><span class="term"><code class="option">--system</code>, </span><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--system">¶</a></dt><dd><p>Show messages from
+ system services and the kernel (with
+ <code class="option">--system</code>). Show
+ messages from service of current user
+ (with <code class="option">--user</code>).
+ If neither is specified, show all
+ messages that the user can see.
+ </p></dd><dt id="-D DIR"><span class="term"><code class="option">-D <em class="replaceable"><code>DIR</code></em></code>, </span><span class="term"><code class="option">--directory=<em class="replaceable"><code>DIR</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-D%20DIR">¶</a></dt><dd><p>Takes a directory path
+ as argument. If specified, journalctl
+ will operate on the specified journal
+ directory
+ <em class="replaceable"><code>DIR</code></em> instead
+ of the default runtime and system
+ journal paths.</p></dd><dt id="--file=GLOB"><span class="term"><code class="option">--file=<em class="replaceable"><code>GLOB</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--file=GLOB">¶</a></dt><dd><p>Takes a file glob as
+ argument. If specified, journalctl will
+ operate on the specified journal files
+ matching <em class="replaceable"><code>GLOB</code></em>
+ instead of the default runtime and
+ system journal paths. May be specified
+ multiple times, in which case files will
+ be suitably interleaved.</p></dd><dt id="--root=ROOT"><span class="term"><code class="option">--root=<em class="replaceable"><code>ROOT</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--root=ROOT">¶</a></dt><dd><p>Takes a directory path
+ as argument. If specified, journalctl
will operate on catalog file hierarchy
underneath the specified directory
instead of the root directory
@@ -245,17 +355,17 @@
will create
<code class="filename"><em class="replaceable"><code>ROOT</code></em>/var/lib/systemd/catalog/database</code>).
</p></dd><dt id="--new-id128"><span class="term"><code class="option">--new-id128</code></span><a class="headerlink" title="Permalink to this term" href="#--new-id128">¶</a></dt><dd><p>Instead of showing
- journal contents generate a new 128
+ journal contents, generate a new 128
bit ID suitable for identifying
messages. This is intended for usage
by developers who need a new
identifier for a new message they
introduce and want to make
- recognizable. Will print the new ID in
+ recognizable. This will print the new ID in
three different formats which can be
copied into source code or
similar.</p></dd><dt id="--header"><span class="term"><code class="option">--header</code></span><a class="headerlink" title="Permalink to this term" href="#--header">¶</a></dt><dd><p>Instead of showing
- journal contents show internal header
+ journal contents, show internal header
information of the journal fields
accessed.</p></dd><dt id="--disk-usage"><span class="term"><code class="option">--disk-usage</code></span><a class="headerlink" title="Permalink to this term" href="#--disk-usage">¶</a></dt><dd><p>Shows the current disk
usage of all
@@ -287,15 +397,20 @@
files are installed, removed or
updated to rebuild the binary catalog
index.</p></dd><dt id="--setup-keys"><span class="term"><code class="option">--setup-keys</code></span><a class="headerlink" title="Permalink to this term" href="#--setup-keys">¶</a></dt><dd><p>Instead of showing
- journal contents generate a new key
+ journal contents, generate a new key
pair for Forward Secure Sealing
(FSS). This will generate a sealing
key and a verification key. The
sealing key is stored in the journal
data directory and shall remain on the
host. The verification key should be
- stored externally.</p></dd><dt id="--interval="><span class="term"><code class="option">--interval=</code></span><a class="headerlink" title="Permalink to this term" href="#--interval=">¶</a></dt><dd><p>Specifies the change
- interval for the sealing key, when
+ stored externally. Also see the
+ <code class="option">Seal=</code> option in
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
+ for details.</p></dd><dt id="--force"><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#--force">¶</a></dt><dd><p>When --setup-keys is passed and
+ Forward Secure Sealing has already been set up,
+ recreate FSS keys.</p></dd><dt id="--interval="><span class="term"><code class="option">--interval=</code></span><a class="headerlink" title="Permalink to this term" href="#--interval=">¶</a></dt><dd><p>Specifies the change
+ interval for the sealing key when
generating an FSS key pair with
<code class="option">--setup-keys</code>. Shorter
intervals increase CPU consumption but
@@ -305,26 +420,26 @@
15min.</p></dd><dt id="--verify"><span class="term"><code class="option">--verify</code></span><a class="headerlink" title="Permalink to this term" href="#--verify">¶</a></dt><dd><p>Check the journal file
for internal consistency. If the
file has been generated with FSS
- enabled, and the FSS verification key
+ enabled and the FSS verification key
has been specified with
- <code class="option">--verify-key=</code>
+ <code class="option">--verify-key=</code>,
authenticity of the journal file is
verified.</p></dd><dt id="--verify-key="><span class="term"><code class="option">--verify-key=</code></span><a class="headerlink" title="Permalink to this term" href="#--verify-key=">¶</a></dt><dd><p>Specifies the FSS
verification key to use for the
<code class="option">--verify</code>
- operation.</p></dd></dl></div></div><div class="refsect1"><a name="idm259765527728"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259765526480"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
+ operation.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675525648"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success, 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274675524400"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
<code class="option">--no-pager</code> is not given;
overrides <code class="varname">$PAGER</code>. Setting
this to an empty string or the value
- <code class="literal">cat</code> is equivalent to passing
- <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259765521696"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Without arguments all collected logs are shown
- unfiltered:</p><pre class="programlisting">journalctl</pre><p>With one match specified all entries with a field matching the expression are shown:</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service</pre><p>If two different fields are matched only entries matching both expressions at the same time are shown:</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097</pre><p>If two matches refer to the same field all entries matching either expression are shown:</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service</pre><p>If the separator "<code class="literal">+</code>" is used
+ "<code class="literal">cat</code>" is equivalent to passing
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675519536"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Without arguments, all collected logs are shown
+ unfiltered:</p><pre class="programlisting">journalctl</pre><p>With one match specified, all entries with a field matching the expression are shown:</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service</pre><p>If two different fields are matched, only entries matching both expressions at the same time are shown:</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097</pre><p>If two matches refer to the same field, all entries matching either expression are shown:</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service</pre><p>If the separator "<code class="literal">+</code>" is used,
two expressions may be combined in a logical OR. The
following will show all messages from the Avahi
service process with the PID 28097 plus all messages
from the D-Bus service (from any of its
- processes):</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service</pre><p>Show all logs generated by the D-Bus executable:</p><pre class="programlisting">journalctl /usr/bin/dbus-daemon</pre><p>Show all logs of the kernel device node <code class="filename">/dev/sda</code>:</p><pre class="programlisting">journalctl /dev/sda</pre></div><div class="refsect1"><a name="idm259765511392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ processes):</p><pre class="programlisting">journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service</pre><p>Show all logs generated by the D-Bus executable:</p><pre class="programlisting">journalctl /usr/bin/dbus-daemon</pre><p>Show all logs of the kernel device node <code class="filename">/dev/sda</code>:</p><pre class="programlisting">journalctl /dev/sda</pre><p>Show all kernel logs from previous boot:</p><pre class="programlisting">journalctl -k -b -1</pre></div><div class="refsect1"><a name="idm274675508224"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
diff --git a/man/journalctl.xml b/man/journalctl.xml
index cc7d1a0533..b5a0c539ca 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -64,11 +64,11 @@
journal as written by
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
- <para>If called without parameter it will show the full
+ <para>If called without parameters, it will show the full
contents of the journal, starting with the oldest
entry collected.</para>
- <para>If one or more match arguments are passed the
+ <para>If one or more match arguments are passed, the
output is filtered accordingly. A match is in the
format <literal>FIELD=VALUE</literal>,
e.g. <literal>_SYSTEMD_UNIT=httpd.service</literal>,
@@ -76,7 +76,7 @@
entry. See
<citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for a list of well-known fields. If multiple matches
- are specified matching different fields the log
+ are specified matching different fields, the log
entries are filtered by both, i.e. the resulting output
will show only entries matching all the specified
matches of this kind. If two matches apply to the same
@@ -84,29 +84,43 @@
alternatives, i.e. the resulting output will show
entries matching any of the specified matches for the
same field. Finally, if the character
- "<literal>+</literal>" appears as separate word on the
- command line all matches before and after are combined
+ <literal>+</literal> appears as separate word on the
+ command line, all matches before and after are combined
in a disjunction (i.e. logical OR).</para>
<para>As shortcuts for a few types of field/value
- matches file paths may be specified. If a file path
+ matches, file paths may be specified. If a file path
refers to an executable file, this is equivalent to an
<literal>_EXE=</literal> match for the canonicalized
- binary path. Similar, if a path refers to a device
+ binary path. Similarly, if a path refers to a device
node, this is equivalent to a
<literal>_KERNEL_DEVICE=</literal> match for the
device.</para>
<para>Output is interleaved from all accessible
journal files, whether they are rotated or currently
- being written, and regardless whether they belong to the
+ being written, and regardless of whether they belong to the
system itself or are accessible user journals.</para>
<para>All users are granted access to their private
- per-user journals. However, by default only root and
- users who are members of the <literal>adm</literal>
+ per-user journals. However, by default, only root and
+ users who are members of the <literal>systemd-journal</literal>
group get access to the system journal and the
journals of other users.</para>
+
+ <para>The output is paged through
+ <command>less</command> by default, and long lines are
+ "truncated" to screen width. The hidden part can be
+ viewed by using the left-arrow and right-arrow
+ keys. Paging can be disabled, see
+ <option>--no-pager</option> and section Environment
+ below.</para>
+
+ <para>When outputing to a tty, lines are colored
+ according to priority: lines of level ERROR and higher
+ are colored red, lines of level NOTICE and higher are
+ highlighted, and other lines are displayed normally.
+ </para>
</refsect1>
<refsect1>
@@ -138,6 +152,7 @@
</varlistentry>
<varlistentry>
+ <term><option>-l</option></term>
<term><option>--full</option></term>
<listitem><para>Show all (printable) fields in
@@ -172,7 +187,7 @@
the end of the journal inside the
implied pager tool. This implies
<option>-n1000</option> to guarantee
- that the pager won't buffer logs of
+ that the pager will not buffer logs of
unbounded size. This may be overridden
with an explicit <option>-n</option>
with some other numeric value on the
@@ -218,53 +233,150 @@
<listitem><para>Controls the
formatting of the journal entries that
- are shown. Takes one of
- <literal>short</literal>,
- <literal>short-monotonic</literal>,
- <literal>verbose</literal>,
- <literal>export</literal>,
- <literal>json</literal>,
- <literal>json-pretty</literal>,
- <literal>json-sse</literal>,
- <literal>cat</literal>. <literal>short</literal>
- is the default and generates an output
- that is mostly identical to the
- formatting of classic syslog log
- files, showing one line per journal
- entry. <literal>short-monotonic</literal>
- is very similar but shows monotonic
- timestamps instead of wallclock
- timestamps. <literal>verbose</literal>
- shows the full structured entry items
- with all
- fields. <literal>export</literal>
- serializes the journal into a binary
- (but mostly text-based) stream
- suitable for backups and network
- transfer (see <ulink
- url="http://www.freedesktop.org/wiki/Software/systemd/export">Journal
- Export Format</ulink> for more
- information). <literal>json</literal>
- formats entries as JSON data
- structures, one per
- line (see <ulink
- url="http://www.freedesktop.org/wiki/Software/systemd/json">Journal
- JSON Format</ulink> for more
- information). <literal>json-pretty</literal>
- also formats entries as JSON data
- structures, but formats them in
- multiple lines in order to make them
- more readable for
- humans. <literal>json-sse</literal>
- also formats entries as JSON data
- structures, but wraps them in a format
- suitable for <ulink
- url="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events">Server-Sent
- Events</ulink>. <literal>cat</literal>
- generates a very terse output only
- showing the actual message of each
- journal entry with no meta data, not
- even a timestamp.</para></listitem>
+ are shown. Takes one of the following options:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>short</option>
+ </term>
+ <listitem>
+ <para>is the default
+ and generates an output
+ that is mostly identical
+ to the formatting of
+ classic syslog files,
+ showing one line per
+ journal entry.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>short-iso</option>
+ </term>
+ <listitem>
+ <para>is very similar,
+ but shows ISO 8601
+ wallclock timestamps.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>short-precise</option>
+ </term>
+ <listitem>
+ <para>is very similar,
+ but shows timestamps
+ with full microsecond
+ precision.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>short-monotonic</option>
+ </term>
+ <listitem>
+ <para>is very similar,
+ but shows monotonic
+ timestamps instead of
+ wallclock timestamps.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>verbose</option>
+ </term>
+ <listitem>
+ <para>shows the
+ full-structured entry
+ items with all fields.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>export</option>
+ </term>
+ <listitem>
+ <para>serializes the
+ journal into a binary
+ (but mostly text-based)
+ stream suitable for
+ backups and network
+ transfer (see <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/export">Journal
+ Export Format</ulink>
+ for more
+ information).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>json</option>
+ </term>
+ <listitem>
+ <para>formats entries
+ as JSON data structures,
+ one per line (see <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/json">Journal
+ JSON Format</ulink> for
+ more information).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>json-pretty</option>
+ </term>
+ <listitem>
+ <para>formats entries as
+ JSON data structures,
+ but formats them in
+ multiple lines in order
+ to make them more
+ readable for humans.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>json-sse</option>
+ </term>
+ <listitem>
+ <para>formats entries as
+ JSON data structures,
+ but wraps them in a
+ format suitable for <ulink
+ url="https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events">Server-Sent
+ Events</ulink>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>cat</option>
+ </term>
+ <listitem>
+ <para>generates a very
+ terse output only
+ showing the actual
+ message of each journal
+ entry with no meta data,
+ not even a timestamp.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
</varlistentry>
<varlistentry>
@@ -280,15 +392,22 @@
context of an error or log event,
possible solutions, as well as
pointers to support forums, developer
- documentation and any other relevant
+ documentation, and any other relevant
manuals. Note that help texts are not
available for all messages, but only
for selected ones. For more
- information on the message catalog
+ information on the message catalog,
please refer to the <ulink
url="http://www.freedesktop.org/wiki/Software/systemd/catalog">Message
Catalog Developer
- Documentation</ulink>.</para></listitem>
+ Documentation</ulink>.</para>
+
+ <para>Note: when attaching
+ <command>journalctl</command> output
+ to bug reports, please do
+ <emphasis>not</emphasis> use
+ <option>-x</option>.</para>
+ </listitem>
</varlistentry>
<varlistentry>
@@ -312,14 +431,60 @@
</varlistentry>
<varlistentry>
- <term><option>-b</option></term>
- <term><option>--this-boot</option></term>
+ <term><option>-b <optional><replaceable>ID</replaceable></optional><optional><replaceable>±offset</replaceable></optional></option></term>
+ <term><option>--boot=<optional><replaceable>ID</replaceable></optional><optional><replaceable>±offset</replaceable></optional></option></term>
+
+ <listitem><para>Show messages from a specific
+ boot. This will add a match for
+ <literal>_BOOT_ID=</literal>.</para>
+
+ <para>The argument may be empty, in which case
+ logs for the current boot will be shown.</para>
+
+ <para>If the boot ID is omitted, a positive
+ <replaceable>offset</replaceable> will look up
+ the boots starting from the beginning of the
+ journal, and a equal-or-less-than zero
+ <replaceable>offset</replaceable> will look up
+ boots starting from the end of the
+ journal. Thus, <constant>1</constant> means the
+ first boot found in the journal in the
+ chronological order, <constant>2</constant> the
+ second and so on; while <constant>-0</constant>
+ is the last boot, <constant>-1</constant> the
+ boot before that, and so on. An empty
+ <replaceable>offset</replaceable> is equivalent
+ to specifying <constant>-0</constant>, except
+ when the current boot is not the last boot
+ (e.g. because <option>--directory</option> was
+ specified to look at logs from a different
+ machine).</para>
+
+ <para>If the 32 character
+ <replaceable>ID</replaceable> is specified, it
+ may optionally be followed by
+ <replaceable>offset</replaceable> which
+ identifies the boot relative to the one given by
+ boot <replaceable>ID</replaceable>. Negative
+ values mean earlier boots and a positive values
+ mean later boots. If
+ <replaceable>offset</replaceable> is not
+ specified, a value of zero is assumed and the
+ logs for the boot given by
+ <replaceable>ID</replaceable> are shown.
+ </para>
- <listitem><para>Show data only from
- current boot. This will add a match
- for <literal>_BOOT_ID=</literal> for
- the current boot ID of the
- kernel.</para></listitem>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-k</option></term>
+ <term><option>--dmesg</option></term>
+
+ <listitem><para>Show only kernel messages. This
+ implies <option>-b</option> and adds the match
+ <literal>_TRANSPORT=kernel</literal>.
+ </para></listitem>
</varlistentry>
<varlistentry>
@@ -375,10 +540,10 @@
<literal>notice</literal> (5),
<literal>info</literal> (6),
<literal>debug</literal> (7). If a
- single log level is specified all
+ single log level is specified, all
messages with this log level or a
lower (hence more important) log level
- are shown. If a range is specified all
+ are shown. If a range is specified, all
messages within the range are shown,
including both the start and the end
value of the range. This will add
@@ -398,20 +563,31 @@
</varlistentry>
<varlistentry>
+ <term><option>--after-cursor=</option></term>
+
+ <listitem><para>Start showing entries from the
+ location in the journal
+ <emphasis>after</emphasis> the location
+ specified by the this cursor.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>--since=</option></term>
<term><option>--until=</option></term>
<listitem><para>Start showing entries
on or newer than the specified date,
or on or older than the specified
- date, respectively. Date specifications should be of
- the format "2012-10-30 18:17:16". If
- the time part is omitted, 00:00:00 is
- assumed. If only the seconds component
- is omitted, :00 is assumed. If the
- date component is omitted, the
- current day is assumed. Alternatively
- the strings
+ date, respectively. Date specifications
+ should be of the format
+ <literal>2012-10-30 18:17:16</literal>.
+ If the time part is omitted,
+ <literal>00:00:00</literal> is assumed.
+ If only the seconds component is omitted,
+ <literal>:00</literal> is assumed. If the
+ date component is omitted, the current
+ day is assumed. Alternatively the strings
<literal>yesterday</literal>,
<literal>today</literal>,
<literal>tomorrow</literal> are
@@ -438,22 +614,50 @@
</varlistentry>
<varlistentry>
- <term><option>-D</option></term>
- <term><option>--directory=</option></term>
+ <term><option>--system</option></term>
+ <term><option>--user</option></term>
- <listitem><para>Takes a
- directory path as argument. If
- specified journalctl will operate on the
- specified journal directory instead of
- the default runtime and system journal
- paths.</para></listitem>
+ <listitem><para>Show messages from
+ system services and the kernel (with
+ <option>--system</option>). Show
+ messages from service of current user
+ (with <option>--user</option>).
+ If neither is specified, show all
+ messages that the user can see.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-D <replaceable>DIR</replaceable></option></term>
+ <term><option>--directory=<replaceable>DIR</replaceable></option></term>
+
+ <listitem><para>Takes a directory path
+ as argument. If specified, journalctl
+ will operate on the specified journal
+ directory
+ <replaceable>DIR</replaceable> instead
+ of the default runtime and system
+ journal paths.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--file=<replaceable>GLOB</replaceable></option></term>
+
+ <listitem><para>Takes a file glob as
+ argument. If specified, journalctl will
+ operate on the specified journal files
+ matching <replaceable>GLOB</replaceable>
+ instead of the default runtime and
+ system journal paths. May be specified
+ multiple times, in which case files will
+ be suitably interleaved.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--root=<replaceable>ROOT</replaceable></option></term>
<listitem><para>Takes a directory path
- as argument. If specified journalctl
+ as argument. If specified, journalctl
will operate on catalog file hierarchy
underneath the specified directory
instead of the root directory
@@ -467,13 +671,13 @@
<term><option>--new-id128</option></term>
<listitem><para>Instead of showing
- journal contents generate a new 128
+ journal contents, generate a new 128
bit ID suitable for identifying
messages. This is intended for usage
by developers who need a new
identifier for a new message they
introduce and want to make
- recognizable. Will print the new ID in
+ recognizable. This will print the new ID in
three different formats which can be
copied into source code or
similar.</para></listitem>
@@ -483,7 +687,7 @@
<term><option>--header</option></term>
<listitem><para>Instead of showing
- journal contents show internal header
+ journal contents, show internal header
information of the journal fields
accessed.</para></listitem>
</varlistentry>
@@ -547,21 +751,32 @@
<term><option>--setup-keys</option></term>
<listitem><para>Instead of showing
- journal contents generate a new key
+ journal contents, generate a new key
pair for Forward Secure Sealing
(FSS). This will generate a sealing
key and a verification key. The
sealing key is stored in the journal
data directory and shall remain on the
host. The verification key should be
- stored externally.</para></listitem>
+ stored externally. Also see the
+ <option>Seal=</option> option in
+ <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for details.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--force</option></term>
+
+ <listitem><para>When --setup-keys is passed and
+ Forward Secure Sealing has already been set up,
+ recreate FSS keys.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--interval=</option></term>
<listitem><para>Specifies the change
- interval for the sealing key, when
+ interval for the sealing key when
generating an FSS key pair with
<option>--setup-keys</option>. Shorter
intervals increase CPU consumption but
@@ -577,9 +792,9 @@
<listitem><para>Check the journal file
for internal consistency. If the
file has been generated with FSS
- enabled, and the FSS verification key
+ enabled and the FSS verification key
has been specified with
- <option>--verify-key=</option>
+ <option>--verify-key=</option>,
authenticity of the journal file is
verified.</para></listitem>
</varlistentry>
@@ -599,7 +814,7 @@
<refsect1>
<title>Exit status</title>
- <para>On success 0 is returned, a non-zero failure
+ <para>On success, 0 is returned, a non-zero failure
code otherwise.</para>
</refsect1>
@@ -622,24 +837,24 @@
<refsect1>
<title>Examples</title>
- <para>Without arguments all collected logs are shown
+ <para>Without arguments, all collected logs are shown
unfiltered:</para>
<programlisting>journalctl</programlisting>
- <para>With one match specified all entries with a field matching the expression are shown:</para>
+ <para>With one match specified, all entries with a field matching the expression are shown:</para>
<programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service</programlisting>
- <para>If two different fields are matched only entries matching both expressions at the same time are shown:</para>
+ <para>If two different fields are matched, only entries matching both expressions at the same time are shown:</para>
<programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097</programlisting>
- <para>If two matches refer to the same field all entries matching either expression are shown:</para>
+ <para>If two matches refer to the same field, all entries matching either expression are shown:</para>
<programlisting>journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service</programlisting>
- <para>If the separator "<literal>+</literal>" is used
+ <para>If the separator <literal>+</literal> is used,
two expressions may be combined in a logical OR. The
following will show all messages from the Avahi
service process with the PID 28097 plus all messages
@@ -656,6 +871,10 @@
<programlisting>journalctl /dev/sda</programlisting>
+ <para>Show all kernel logs from previous boot:</para>
+
+ <programlisting>journalctl -k -b -1</programlisting>
+
</refsect1>
<refsect1>
diff --git a/man/journald.conf.5 b/man/journald.conf.5
new file mode 100644
index 0000000000..50dae73c65
--- /dev/null
+++ b/man/journald.conf.5
@@ -0,0 +1,234 @@
+'\" t
+.TH "JOURNALD\&.CONF" "5" "" "systemd 208" "journald.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+journald.conf \- Journal service configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/systemd/journald\&.conf
+.SH "DESCRIPTION"
+.PP
+This file configures various parameters of the systemd journal service,
+\fBsystemd-journald.service\fR(8)\&.
+.SH "OPTIONS"
+.PP
+All options are configured in the
+"[Journal]"
+section:
+.PP
+\fIStorage=\fR
+.RS 4
+Controls where to store journal data\&. One of
+"volatile",
+"persistent",
+"auto"
+and
+"none"\&. If
+"volatile", journal log data will be stored only in memory, i\&.e\&. below the
+/run/log/journal
+hierarchy (which is created if needed)\&. If
+"persistent", data will be stored preferably on disk, i\&.e\&. below the
+/var/log/journal
+hierarchy (which is created if needed), with a fallback to
+/run/log/journal
+(which is created if needed), during early boot and if the disk is not writable\&.
+"auto"
+is similar to
+"persistent"
+but the directory
+/var/log/journal
+is not created if needed, so that its existence controls where log data goes\&.
+"none"
+turns off all storage, all log data received will be dropped\&. Forwarding to other targets, such as the console, the kernel log buffer or a syslog daemon will still work however\&. Defaults to
+"auto"\&.
+.RE
+.PP
+\fICompress=\fR
+.RS 4
+Takes a boolean value\&. If enabled (the default), data objects that shall be stored in the journal and are larger than a certain threshold are compressed with the XZ compression algorithm before they are written to the file system\&.
+.RE
+.PP
+\fISeal=\fR
+.RS 4
+Takes a boolean value\&. If enabled (the default), and a sealing key is available (as created by
+\fBjournalctl\fR(1)\*(Aqs
+\fB\-\-setup\-keys\fR
+command), forward secure sealing (FSS) for all persistent journal files is enabled\&. FSS is based on
+\m[blue]\fBSeekable Sequential Key Generators\fR\m[]\&\s-2\u[1]\d\s+2
+by G\&. A\&. Marson and B\&. Poettering and may be used to protect journal files from unnoticed alteration\&.
+.RE
+.PP
+\fISplitMode=\fR
+.RS 4
+Controls whether to split up journal files per user\&. One of
+"login",
+"uid"
+and
+"none"\&. If
+"login", each logged\-in user will get his own journal files, but systemd user IDs will log into the system journal\&. If
+"uid", any user ID will get his own journal files regardless whether it belongs to a system service or refers to a real logged in user\&. If
+"none", journal files are not split up by user and all messages are instead stored in the single system journal\&. Note that splitting up journal files by user is only available for journals stored persistently\&. If journals are stored on volatile storage (see above), only a single journal file for all user IDs is kept\&. Defaults to
+"login"\&.
+.RE
+.PP
+\fIRateLimitInterval=\fR, \fIRateLimitBurst=\fR
+.RS 4
+Configures the rate limiting that is applied to all messages generated on the system\&. If, in the time interval defined by
+\fIRateLimitInterval=\fR, more messages than specified in
+\fIRateLimitBurst=\fR
+are logged by a service, all further messages within the interval are dropped until the interval is over\&. A message about the number of dropped messages is generated\&. This rate limiting is applied per\-service, so that two services which log do not interfere with each other\*(Aqs limits\&. Defaults to 200 messages in 10s\&. The time specification for
+\fIRateLimitInterval=\fR
+may be specified in the following units:
+"s",
+"min",
+"h",
+"ms",
+"us"\&. To turn off any kind of rate limiting, set either value to 0\&.
+.RE
+.PP
+\fISystemMaxUse=\fR, \fISystemKeepFree=\fR, \fISystemMaxFileSize=\fR, \fIRuntimeMaxUse=\fR, \fIRuntimeKeepFree=\fR, \fIRuntimeMaxFileSize=\fR
+.RS 4
+Enforce size limits on the journal files stored\&. The options prefixed with
+"System"
+apply to the journal files when stored on a persistent file system, more specifically
+/var/log/journal\&. The options prefixed with
+"Runtime"
+apply to the journal files when stored on a volatile in\-memory file system, more specifically
+/run/log/journal\&. The former is used only when
+/var
+is mounted, writable, and the directory
+/var/log/journal
+exists\&. Otherwise, only the latter applies\&. Note that this means that during early boot and if the administrator disabled persistent logging, only the latter options apply, while the former apply if persistent logging is enabled and the system is fully booted up\&.
+\fBjournalctl\fR
+and
+\fBsystemd\-journald\fR
+ignore all files with names not ending with
+"\&.journal"
+or
+"\&.journal~", so only such files, located in the appropriate directories, are taken into account when calculating current disk usage\&.
+.sp
+\fISystemMaxUse=\fR
+and
+\fIRuntimeMaxUse=\fR
+control how much disk space the journal may use up at maximum\&. Defaults to 10% of the size of the respective file system\&.
+\fISystemKeepFree=\fR
+and
+\fIRuntimeKeepFree=\fR
+control how much disk space systemd\-journald shall always leave free for other uses\&. Defaults to 15% of the size of the respective file system\&. systemd\-journald will respect both limits, i\&.e\&. use the smaller of the two values\&.
+\fISystemMaxFileSize=\fR
+and
+\fIRuntimeMaxFileSize=\fR
+control how large individual journal files may grow at maximum\&. This influences the granularity in which disk space is made available through rotation, i\&.e\&. deletion of historic data\&. Defaults to one eighth of the values configured with
+\fISystemMaxUse=\fR
+and
+\fIRuntimeMaxUse=\fR, so that usually seven rotated journal files are kept as history\&. Specify values in bytes or use K, M, G, T, P, E as units for the specified sizes (equal to 1024, 1024\(S2,\&.\&.\&. bytes)\&. Note that size limits are enforced synchronously when journal files are extended, and no explicit rotation step triggered by time is needed\&.
+.RE
+.PP
+\fIMaxFileSec=\fR
+.RS 4
+The maximum time to store entries in a single journal file before rotating to the next one\&. Normally, time\-based rotation should not be required as size\-based rotation with options such as
+\fISystemMaxFileSize=\fR
+should be sufficient to ensure that journal files do not grow without bounds\&. However, to ensure that not too much data is lost at once when old journal files are deleted, it might make sense to change this value from the default of one month\&. Set to 0 to turn off this feature\&. This setting takes time values which may be suffixed with the units
+"year",
+"month",
+"week",
+"day",
+"h"
+or
+"m"
+to override the default time unit of seconds\&.
+.RE
+.PP
+\fIMaxRetentionSec=\fR
+.RS 4
+The maximum time to store journal entries\&. This controls whether journal files containing entries older then the specified time span are deleted\&. Normally, time\-based deletion of old journal files should not be required as size\-based deletion with options such as
+\fISystemMaxUse=\fR
+should be sufficient to ensure that journal files do not grow without bounds\&. However, to enforce data retention policies, it might make sense to change this value from the default of 0 (which turns off this feature)\&. This setting also takes time values which may be suffixed with the units
+"year",
+"month",
+"week",
+"day",
+"h"
+or
+" m"
+to override the default time unit of seconds\&.
+.RE
+.PP
+\fISyncIntervalSec=\fR
+.RS 4
+The timeout before synchronizing journal files to disk\&. After syncing, journal files are placed in the OFFLINE state\&. Note that syncing is unconditionally done immediately after a log message of priority CRIT, ALERT or EMERG has been logged\&. This setting hence applies only to messages of the levels ERR, WARNING, NOTICE, INFO, DEBUG\&. The default timeout is 5 minutes\&.
+.RE
+.PP
+\fIForwardToSyslog=\fR, \fIForwardToKMsg=\fR, \fIForwardToConsole=\fR
+.RS 4
+Control whether log messages received by the journal daemon shall be forwarded to a traditional syslog daemon, to the kernel log buffer (kmsg), or to the system console\&. These options take boolean arguments\&. If forwarding to syslog is enabled but no syslog daemon is running, the respective option has no effect\&. By default, only forwarding to syslog is enabled\&. These settings may be overridden at boot time with the kernel command line options
+"systemd\&.journald\&.forward_to_syslog=",
+"systemd\&.journald\&.forward_to_kmsg="
+and
+"systemd\&.journald\&.forward_to_console="\&.
+.RE
+.PP
+\fIMaxLevelStore=\fR, \fIMaxLevelSyslog=\fR, \fIMaxLevelKMsg=\fR, \fIMaxLevelConsole=\fR
+.RS 4
+Controls the maximum log level of messages that are stored on disk, forwarded to syslog, kmsg or the console (if that is enabled, see above)\&. As argument, takes one of
+"emerg",
+"alert",
+"crit",
+"err",
+"warning",
+"notice",
+"info",
+"debug"
+or integer values in the range of 0\&.\&.7 (corresponding to the same levels)\&. Messages equal or below the log level specified are stored/forwarded, messages above are dropped\&. Defaults to
+"debug"
+for
+\fIMaxLevelStore=\fR
+and
+\fIMaxLevelSyslog=\fR, to ensure that the all messages are written to disk and forwarded to syslog\&. Defaults to
+"notice"
+for
+\fIMaxLevelKMsg=\fR
+and
+"info"
+for
+\fIMaxLevelConsole=\fR\&.
+.RE
+.PP
+\fITTYPath=\fR
+.RS 4
+Change the console TTY to use if
+\fIForwardToConsole=yes\fR
+is used\&. Defaults to
+/dev/console\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-journald.service\fR(8),
+\fBjournalctl\fR(1),
+\fBsystemd.journal-fields\fR(7),
+\fBsystemd-system.conf\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+Seekable Sequential Key Generators
+.RS 4
+\%https://eprint.iacr.org/2013/397
+.RE
diff --git a/man/journald.conf.html b/man/journald.conf.html
index 8a1096c778..cb51819859 100644
--- a/man/journald.conf.html
+++ b/man/journald.conf.html
@@ -19,22 +19,22 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="journald.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>journald.conf — Journal service configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/journald.conf</code></p></div><div class="refsect1"><a name="idm259765722224"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>This files configures various parameters of the
- systemd journal service
- <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259765720048"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
- <code class="literal">[Journal]</code> section:</p><div class="variablelist"><dl class="variablelist"><dt id="Storage="><span class="term"><code class="varname">Storage=</code></span><a class="headerlink" title="Permalink to this term" href="#Storage=">¶</a></dt><dd><p>Controls where to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="journald.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>journald.conf — Journal service configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/journald.conf</code></p></div><div class="refsect1"><a name="idm274703230400"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>This file configures various parameters of the
+ systemd journal service,
+ <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274704607408"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
+ "<code class="literal">[Journal]</code>" section:</p><div class="variablelist"><dl class="variablelist"><dt id="Storage="><span class="term"><code class="varname">Storage=</code></span><a class="headerlink" title="Permalink to this term" href="#Storage=">¶</a></dt><dd><p>Controls where to
store journal data. One of
- <code class="literal">volatile</code>,
- <code class="literal">persistent</code>,
- <code class="literal">auto</code> and
- <code class="literal">none</code>. If
- <code class="literal">volatile</code> journal
+ "<code class="literal">volatile</code>",
+ "<code class="literal">persistent</code>",
+ "<code class="literal">auto</code>" and
+ "<code class="literal">none</code>". If
+ "<code class="literal">volatile</code>", journal
log data will be stored only in
memory, i.e. below the
<code class="filename">/run/log/journal</code>
hierarchy (which is created if
needed). If
- <code class="literal">persistent</code> data will
+ "<code class="literal">persistent</code>", data will
be stored preferably on disk,
i.e. below the
<code class="filename">/var/log/journal</code>
@@ -43,68 +43,73 @@
<code class="filename">/run/log/journal</code>
(which is created if needed), during
early boot and if the disk is not
- writable. <code class="literal">auto</code> is
+ writable. "<code class="literal">auto</code>" is
similar to
- <code class="literal">persistent</code> but the
+ "<code class="literal">persistent</code>" but the
directory
<code class="filename">/var/log/journal</code>
is not created if needed, so that its
existence controls where log data
- goes. <code class="literal">none</code> turns
+ goes. "<code class="literal">none</code>" turns
off all storage, all log data received
will be dropped. Forwarding to other
targets, such as the console, the
kernel log buffer or a syslog daemon
will still work however. Defaults to
- <code class="literal">auto</code>.</p></dd><dt id="Compress="><span class="term"><code class="varname">Compress=</code></span><a class="headerlink" title="Permalink to this term" href="#Compress=">¶</a></dt><dd><p>Takes a boolean
- value. If enabled (the default) data
+ "<code class="literal">auto</code>".</p></dd><dt id="Compress="><span class="term"><code class="varname">Compress=</code></span><a class="headerlink" title="Permalink to this term" href="#Compress=">¶</a></dt><dd><p>Takes a boolean
+ value. If enabled (the default), data
objects that shall be stored in the
journal and are larger than a certain
threshold are compressed with the XZ
compression algorithm before they are
written to the file
system.</p></dd><dt id="Seal="><span class="term"><code class="varname">Seal=</code></span><a class="headerlink" title="Permalink to this term" href="#Seal=">¶</a></dt><dd><p>Takes a boolean
- value. If enabled (the default) and a
+ value. If enabled (the default), and a
sealing key is available (as created
by
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
<code class="option">--setup-keys</code>
- command), forward secure sealing (FSS) for
- all persistent journal files is
- enabled.</p></dd><dt id="SplitMode="><span class="term"><code class="varname">SplitMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SplitMode=">¶</a></dt><dd><p>Controls whether to
+ command), forward secure sealing (FSS)
+ for all persistent journal files is
+ enabled. FSS is based on <a class="ulink" href="https://eprint.iacr.org/2013/397" target="_top">Seekable
+ Sequential Key Generators</a> by
+ G. A. Marson and B. Poettering and
+ may be used to protect journal files
+ from unnoticed
+ alteration.</p></dd><dt id="SplitMode="><span class="term"><code class="varname">SplitMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SplitMode=">¶</a></dt><dd><p>Controls whether to
split up journal files per user. One
- of <code class="literal">login</code>,
- <code class="literal">uid</code> and
- <code class="literal">none</code>. If
- <code class="literal">login</code> each logged
- in user will get his own journal
+ of "<code class="literal">login</code>",
+ "<code class="literal">uid</code>" and
+ "<code class="literal">none</code>". If
+ "<code class="literal">login</code>", each logged-in
+ user will get his own journal
files, but systemd user IDs will log
into the system journal. If
- <code class="literal">uid</code> any user ID
+ "<code class="literal">uid</code>", any user ID
will get his own journal files
regardless whether it belongs to a
system service or refers to a real
logged in user. If
- <code class="literal">none</code> journal files
- are not split up per-user and all
- messages are stored in the single
+ "<code class="literal">none</code>", journal files
+ are not split up by user and all
+ messages are instead stored in the single
system journal. Note that splitting
- up journal files per-user is only
- available of journals are stored
+ up journal files by user is only
+ available for journals stored
persistently. If journals are stored
- on volatile storage (see above) only a
+ on volatile storage (see above), only a
single journal file for all user IDs
is kept. Defaults to
- <code class="literal">login</code>.</p></dd><dt id="RateLimitInterval="><span class="term"><code class="varname">RateLimitInterval=</code>, </span><span class="term"><code class="varname">RateLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#RateLimitInterval=">¶</a></dt><dd><p>Configures the rate
+ "<code class="literal">login</code>".</p></dd><dt id="RateLimitInterval="><span class="term"><code class="varname">RateLimitInterval=</code>, </span><span class="term"><code class="varname">RateLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#RateLimitInterval=">¶</a></dt><dd><p>Configures the rate
limiting that is applied to all
- messages generated on the system. If
+ messages generated on the system. If,
in the time interval defined by
- <code class="varname">RateLimitInterval=</code>
+ <code class="varname">RateLimitInterval=</code>,
more messages than specified in
<code class="varname">RateLimitBurst=</code> are
- logged by a service all further
+ logged by a service, all further
messages within the interval are
- dropped, until the interval is over. A
+ dropped until the interval is over. A
message about the number of dropped
messages is generated. This rate
limiting is applied per-service, so
@@ -114,39 +119,47 @@
10s. The time specification for
<code class="varname">RateLimitInterval=</code>
may be specified in the following
- units: <code class="literal">s</code>,
- <code class="literal">min</code>,
- <code class="literal">h</code>,
- <code class="literal">ms</code>,
- <code class="literal">us</code>. To turn off any
+ units: "<code class="literal">s</code>",
+ "<code class="literal">min</code>",
+ "<code class="literal">h</code>",
+ "<code class="literal">ms</code>",
+ "<code class="literal">us</code>". To turn off any
kind of rate limiting, set either
value to 0.</p></dd><dt id="SystemMaxUse="><span class="term"><code class="varname">SystemMaxUse=</code>, </span><span class="term"><code class="varname">SystemKeepFree=</code>, </span><span class="term"><code class="varname">SystemMaxFileSize=</code>, </span><span class="term"><code class="varname">RuntimeMaxUse=</code>, </span><span class="term"><code class="varname">RuntimeKeepFree=</code>, </span><span class="term"><code class="varname">RuntimeMaxFileSize=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemMaxUse=">¶</a></dt><dd><p>Enforce size limits on
the journal files stored. The options
prefixed with
- <code class="literal">System</code> apply to the
+ "<code class="literal">System</code>" apply to the
journal files when stored on a
persistent file system, more
specifically
<code class="filename">/var/log/journal</code>. The
options prefixed with
- <code class="literal">Runtime</code> apply to
+ "<code class="literal">Runtime</code>" apply to
the journal files when stored on a
volatile in-memory file system, more
specifically
<code class="filename">/run/log/journal</code>. The
former is used only when
<code class="filename">/var</code> is mounted,
- writable and the directory
+ writable, and the directory
<code class="filename">/var/log/journal</code>
- exists. Otherwise only the latter
+ exists. Otherwise, only the latter
applies. Note that this means that
during early boot and if the
administrator disabled persistent
- logging only the latter options apply,
+ logging, only the latter options apply,
while the former apply if persistent
logging is enabled and the system is
fully booted
- up. <code class="varname">SystemMaxUse=</code>
+ up. <span class="command"><strong>journalctl</strong></span> and
+ <span class="command"><strong>systemd-journald</strong></span>
+ ignore all files with names not ending
+ with "<code class="literal">.journal</code>" or
+ "<code class="literal">.journal~</code>", so only
+ such files, located in the appropriate
+ directories, are taken into account
+ when calculating current disk usage.
+ </p><p><code class="varname">SystemMaxUse=</code>
and <code class="varname">RuntimeMaxUse=</code>
control how much disk space the
journal may use up at
@@ -155,15 +168,14 @@
system. <code class="varname">SystemKeepFree=</code>
and
<code class="varname">RuntimeKeepFree=</code>
- control how much disk space the
- journal shall always leave free for
- other uses if less than the disk space
- configured in
- <code class="varname">SystemMaxUse=</code> and
- <code class="varname">RuntimeMaxUse=</code> is
- available. Defaults to 15% of the size
- of the respective file
- system. <code class="varname">SystemMaxFileSize=</code>
+ control how much disk space
+ systemd-journald shall always leave
+ free for other uses. Defaults to 15%
+ of the size of the respective file
+ system. systemd-journald will respect
+ both limits, i.e. use the smaller of
+ the two values.
+ <code class="varname">SystemMaxFileSize=</code>
and
<code class="varname">RuntimeMaxFileSize=</code>
control how large individual journal
@@ -178,53 +190,68 @@
that usually seven rotated journal
files are kept as history. Specify
values in bytes or use K, M, G, T, P,
- E as units for the specified
- sizes. Note that size limits are
- enforced synchronously to journal
- files as they are extended, and need
- no explicit rotation step triggered by
- time.</p></dd><dt id="MaxFileSec="><span class="term"><code class="varname">MaxFileSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxFileSec=">¶</a></dt><dd><p>The maximum time to
+ E as units for the specified sizes
+ (equal to 1024, 1024²,... bytes).
+ Note that size limits are enforced
+ synchronously when journal files are
+ extended, and no explicit rotation
+ step triggered by time is
+ needed.</p></dd><dt id="MaxFileSec="><span class="term"><code class="varname">MaxFileSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxFileSec=">¶</a></dt><dd><p>The maximum time to
store entries in a single journal
- file, before rotating to the next
- one. Normally time-based rotation
+ file before rotating to the next
+ one. Normally, time-based rotation
should not be required as size-based
rotation with options such as
<code class="varname">SystemMaxFileSize=</code>
should be sufficient to ensure that
- journal files don't grow without
+ journal files do not grow without
bounds. However, to ensure that not
too much data is lost at once when old
- journal files are deleted it might
+ journal files are deleted, it might
make sense to change this value from
the default of one month. Set to 0 to
turn off this feature. This setting
takes time values which may be
- suffixed with the units year, month,
- week, day, h, m to override the
- default time unit of
+ suffixed with the units
+ "<code class="literal">year</code>",
+ "<code class="literal">month</code>",
+ "<code class="literal">week</code>", "<code class="literal">day</code>",
+ "<code class="literal">h</code>" or "<code class="literal">m</code>"
+ to override the default time unit of
seconds.</p></dd><dt id="MaxRetentionSec="><span class="term"><code class="varname">MaxRetentionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxRetentionSec=">¶</a></dt><dd><p>The maximum time to
store journal entries. This
controls whether journal files
containing entries older then the
specified time span are
- deleted. Normally time-based deletion
+ deleted. Normally, time-based deletion
of old journal files should not be
required as size-based deletion with
options such as
<code class="varname">SystemMaxUse=</code>
should be sufficient to ensure that
- journal files don't grow without
+ journal files do not grow without
bounds. However, to enforce data
- retention policies it might make sense
+ retention policies, it might make sense
to change this value from the
default of 0 (which turns off this
feature). This setting also takes
time values which may be suffixed with
- the units year, month, week, day, h, m
+ the units "<code class="literal">year</code>",
+ "<code class="literal">month</code>",
+ "<code class="literal">week</code>", "<code class="literal">day</code>",
+ "<code class="literal">h</code>" or "<code class="literal"> m</code>"
to override the default time unit of
- seconds. </p></dd><dt id="SyncIntervalSec="><span class="term"><code class="varname">SyncIntervalSec=</code></span><a class="headerlink" title="Permalink to this term" href="#SyncIntervalSec=">¶</a></dt><dd><p>The timeout before syncing journal
- data to disk. After syncing journal files have
- OFFLINE state. Default timeout is 5 minutes.
+ seconds.</p></dd><dt id="SyncIntervalSec="><span class="term"><code class="varname">SyncIntervalSec=</code></span><a class="headerlink" title="Permalink to this term" href="#SyncIntervalSec=">¶</a></dt><dd><p>The timeout before
+ synchronizing journal files to
+ disk. After syncing, journal files are
+ placed in the OFFLINE state. Note that
+ syncing is unconditionally done
+ immediately after a log message of
+ priority CRIT, ALERT or EMERG has been
+ logged. This setting hence applies
+ only to messages of the levels ERR,
+ WARNING, NOTICE, INFO, DEBUG. The
+ default timeout is 5 minutes.
</p></dd><dt id="ForwardToSyslog="><span class="term"><code class="varname">ForwardToSyslog=</code>, </span><span class="term"><code class="varname">ForwardToKMsg=</code>, </span><span class="term"><code class="varname">ForwardToConsole=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToSyslog=">¶</a></dt><dd><p>Control whether log
messages received by the journal
daemon shall be forwarded to a
@@ -233,47 +260,47 @@
system console. These options take
boolean arguments. If forwarding to
syslog is enabled but no syslog daemon
- is running the respective option has
- no effect. By default only forwarding
+ is running, the respective option has
+ no effect. By default, only forwarding
to syslog is enabled. These settings
may be overridden at boot time with
the kernel command line options
- <code class="literal">systemd.journald.forward_to_syslog=</code>,
- <code class="literal">systemd.journald.forward_to_kmsg=</code>
+ "<code class="literal">systemd.journald.forward_to_syslog=</code>",
+ "<code class="literal">systemd.journald.forward_to_kmsg=</code>"
and
- <code class="literal">systemd.journald.forward_to_console=</code>.
+ "<code class="literal">systemd.journald.forward_to_console=</code>".
</p></dd><dt id="MaxLevelStore="><span class="term"><code class="varname">MaxLevelStore=</code>, </span><span class="term"><code class="varname">MaxLevelSyslog=</code>, </span><span class="term"><code class="varname">MaxLevelKMsg=</code>, </span><span class="term"><code class="varname">MaxLevelConsole=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelStore=">¶</a></dt><dd><p>Controls the maximum
log level of messages that are stored
on disk, forwarded to syslog, kmsg or
the console (if that is enabled, see
above). As argument, takes one of
- <code class="literal">emerg</code>,
- <code class="literal">alert</code>,
- <code class="literal">crit</code>,
- <code class="literal">err</code>,
- <code class="literal">warning</code>,
- <code class="literal">notice</code>,
- <code class="literal">info</code>,
- <code class="literal">debug</code> or integer
+ "<code class="literal">emerg</code>",
+ "<code class="literal">alert</code>",
+ "<code class="literal">crit</code>",
+ "<code class="literal">err</code>",
+ "<code class="literal">warning</code>",
+ "<code class="literal">notice</code>",
+ "<code class="literal">info</code>",
+ "<code class="literal">debug</code>" or integer
values in the range of 0..7 (corresponding
to the same levels). Messages equal or below
the log level specified are
stored/forwarded, messages above are
dropped. Defaults to
- <code class="literal">debug</code> for
+ "<code class="literal">debug</code>" for
<code class="varname">MaxLevelStore=</code> and
<code class="varname">MaxLevelSyslog=</code>, to
ensure that the all messages are
written to disk and forwarded to
syslog. Defaults to
- <code class="literal">notice</code> for
+ "<code class="literal">notice</code>" for
<code class="varname">MaxLevelKMsg=</code> and
- <code class="literal">info</code> for
+ "<code class="literal">info</code>" for
<code class="varname">MaxLevelConsole=</code>.</p></dd><dt id="TTYPath="><span class="term"><code class="varname">TTYPath=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYPath=">¶</a></dt><dd><p>Change the console TTY
to use if
<code class="varname">ForwardToConsole=yes</code>
is used. Defaults to
- <code class="filename">/dev/console</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259764617328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="filename">/dev/console</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274701451040"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
diff --git a/man/journald.conf.xml b/man/journald.conf.xml
index 6d54c94b57..7aa2e78ed3 100644
--- a/man/journald.conf.xml
+++ b/man/journald.conf.xml
@@ -54,8 +54,8 @@
<refsect1>
<title>Description</title>
- <para>This files configures various parameters of the
- systemd journal service
+ <para>This file configures various parameters of the
+ systemd journal service,
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</refsect1>
@@ -77,13 +77,13 @@
<literal>persistent</literal>,
<literal>auto</literal> and
<literal>none</literal>. If
- <literal>volatile</literal> journal
+ <literal>volatile</literal>, journal
log data will be stored only in
memory, i.e. below the
<filename>/run/log/journal</filename>
hierarchy (which is created if
needed). If
- <literal>persistent</literal> data will
+ <literal>persistent</literal>, data will
be stored preferably on disk,
i.e. below the
<filename>/var/log/journal</filename>
@@ -112,7 +112,7 @@
<term><varname>Compress=</varname></term>
<listitem><para>Takes a boolean
- value. If enabled (the default) data
+ value. If enabled (the default), data
objects that shall be stored in the
journal and are larger than a certain
threshold are compressed with the XZ
@@ -125,14 +125,20 @@
<term><varname>Seal=</varname></term>
<listitem><para>Takes a boolean
- value. If enabled (the default) and a
+ value. If enabled (the default), and a
sealing key is available (as created
by
<citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
<option>--setup-keys</option>
- command), forward secure sealing (FSS) for
- all persistent journal files is
- enabled.</para></listitem>
+ command), forward secure sealing (FSS)
+ for all persistent journal files is
+ enabled. FSS is based on <ulink
+ url="https://eprint.iacr.org/2013/397">Seekable
+ Sequential Key Generators</ulink> by
+ G. A. Marson and B. Poettering and
+ may be used to protect journal files
+ from unnoticed
+ alteration.</para></listitem>
</varlistentry>
<varlistentry>
@@ -143,23 +149,23 @@
of <literal>login</literal>,
<literal>uid</literal> and
<literal>none</literal>. If
- <literal>login</literal> each logged
- in user will get his own journal
+ <literal>login</literal>, each logged-in
+ user will get his own journal
files, but systemd user IDs will log
into the system journal. If
- <literal>uid</literal> any user ID
+ <literal>uid</literal>, any user ID
will get his own journal files
regardless whether it belongs to a
system service or refers to a real
logged in user. If
- <literal>none</literal> journal files
- are not split up per-user and all
- messages are stored in the single
+ <literal>none</literal>, journal files
+ are not split up by user and all
+ messages are instead stored in the single
system journal. Note that splitting
- up journal files per-user is only
- available of journals are stored
+ up journal files by user is only
+ available for journals stored
persistently. If journals are stored
- on volatile storage (see above) only a
+ on volatile storage (see above), only a
single journal file for all user IDs
is kept. Defaults to
<literal>login</literal>.</para></listitem>
@@ -171,14 +177,14 @@
<listitem><para>Configures the rate
limiting that is applied to all
- messages generated on the system. If
+ messages generated on the system. If,
in the time interval defined by
- <varname>RateLimitInterval=</varname>
+ <varname>RateLimitInterval=</varname>,
more messages than specified in
<varname>RateLimitBurst=</varname> are
- logged by a service all further
+ logged by a service, all further
messages within the interval are
- dropped, until the interval is over. A
+ dropped until the interval is over. A
message about the number of dropped
messages is generated. This rate
limiting is applied per-service, so
@@ -221,17 +227,27 @@
<filename>/run/log/journal</filename>. The
former is used only when
<filename>/var</filename> is mounted,
- writable and the directory
+ writable, and the directory
<filename>/var/log/journal</filename>
- exists. Otherwise only the latter
+ exists. Otherwise, only the latter
applies. Note that this means that
during early boot and if the
administrator disabled persistent
- logging only the latter options apply,
+ logging, only the latter options apply,
while the former apply if persistent
logging is enabled and the system is
fully booted
- up. <varname>SystemMaxUse=</varname>
+ up. <command>journalctl</command> and
+ <command>systemd-journald</command>
+ ignore all files with names not ending
+ with <literal>.journal</literal> or
+ <literal>.journal~</literal>, so only
+ such files, located in the appropriate
+ directories, are taken into account
+ when calculating current disk usage.
+ </para>
+
+ <para><varname>SystemMaxUse=</varname>
and <varname>RuntimeMaxUse=</varname>
control how much disk space the
journal may use up at
@@ -240,15 +256,14 @@
system. <varname>SystemKeepFree=</varname>
and
<varname>RuntimeKeepFree=</varname>
- control how much disk space the
- journal shall always leave free for
- other uses if less than the disk space
- configured in
- <varname>SystemMaxUse=</varname> and
- <varname>RuntimeMaxUse=</varname> is
- available. Defaults to 15% of the size
- of the respective file
- system. <varname>SystemMaxFileSize=</varname>
+ control how much disk space
+ systemd-journald shall always leave
+ free for other uses. Defaults to 15%
+ of the size of the respective file
+ system. systemd-journald will respect
+ both limits, i.e. use the smaller of
+ the two values.
+ <varname>SystemMaxFileSize=</varname>
and
<varname>RuntimeMaxFileSize=</varname>
control how large individual journal
@@ -263,12 +278,13 @@
that usually seven rotated journal
files are kept as history. Specify
values in bytes or use K, M, G, T, P,
- E as units for the specified
- sizes. Note that size limits are
- enforced synchronously to journal
- files as they are extended, and need
- no explicit rotation step triggered by
- time.</para></listitem>
+ E as units for the specified sizes
+ (equal to 1024, 1024²,... bytes).
+ Note that size limits are enforced
+ synchronously when journal files are
+ extended, and no explicit rotation
+ step triggered by time is
+ needed.</para></listitem>
</varlistentry>
<varlistentry>
@@ -276,23 +292,26 @@
<listitem><para>The maximum time to
store entries in a single journal
- file, before rotating to the next
- one. Normally time-based rotation
+ file before rotating to the next
+ one. Normally, time-based rotation
should not be required as size-based
rotation with options such as
<varname>SystemMaxFileSize=</varname>
should be sufficient to ensure that
- journal files don't grow without
+ journal files do not grow without
bounds. However, to ensure that not
too much data is lost at once when old
- journal files are deleted it might
+ journal files are deleted, it might
make sense to change this value from
the default of one month. Set to 0 to
turn off this feature. This setting
takes time values which may be
- suffixed with the units year, month,
- week, day, h, m to override the
- default time unit of
+ suffixed with the units
+ <literal>year</literal>,
+ <literal>month</literal>,
+ <literal>week</literal>, <literal>day</literal>,
+ <literal>h</literal> or <literal>m</literal>
+ to override the default time unit of
seconds.</para></listitem>
</varlistentry>
@@ -304,31 +323,42 @@
controls whether journal files
containing entries older then the
specified time span are
- deleted. Normally time-based deletion
+ deleted. Normally, time-based deletion
of old journal files should not be
required as size-based deletion with
options such as
<varname>SystemMaxUse=</varname>
should be sufficient to ensure that
- journal files don't grow without
+ journal files do not grow without
bounds. However, to enforce data
- retention policies it might make sense
+ retention policies, it might make sense
to change this value from the
default of 0 (which turns off this
feature). This setting also takes
time values which may be suffixed with
- the units year, month, week, day, h, m
+ the units <literal>year</literal>,
+ <literal>month</literal>,
+ <literal>week</literal>, <literal>day</literal>,
+ <literal>h</literal> or <literal> m</literal>
to override the default time unit of
- seconds. </para></listitem>
+ seconds.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>SyncIntervalSec=</varname></term>
- <listitem><para>The timeout before syncing journal
- data to disk. After syncing journal files have
- OFFLINE state. Default timeout is 5 minutes.
+ <listitem><para>The timeout before
+ synchronizing journal files to
+ disk. After syncing, journal files are
+ placed in the OFFLINE state. Note that
+ syncing is unconditionally done
+ immediately after a log message of
+ priority CRIT, ALERT or EMERG has been
+ logged. This setting hence applies
+ only to messages of the levels ERR,
+ WARNING, NOTICE, INFO, DEBUG. The
+ default timeout is 5 minutes.
</para></listitem>
</varlistentry>
@@ -345,8 +375,8 @@
system console. These options take
boolean arguments. If forwarding to
syslog is enabled but no syslog daemon
- is running the respective option has
- no effect. By default only forwarding
+ is running, the respective option has
+ no effect. By default, only forwarding
to syslog is enabled. These settings
may be overridden at boot time with
the kernel command line options
diff --git a/man/kernel-command-line.7 b/man/kernel-command-line.7
new file mode 100644
index 0000000000..46134a6cb3
--- /dev/null
+++ b/man/kernel-command-line.7
@@ -0,0 +1,144 @@
+'\" t
+.TH "KERNEL\-COMMAND\-LINE" "7" "" "systemd 208" "kernel-command-line"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+kernel-command-line \- Kernel command line parameters
+.SH "SYNOPSIS"
+.PP
+/proc/cmdline
+.SH "DESCRIPTION"
+.PP
+The kernel, the initial RAM disk (initrd) and basic userspace functionality may be configured at boot via kernel command line arguments\&.
+.PP
+For command line parameters understood by the kernel, please see
+\m[blue]\fBkernel\-parameters\&.txt\fR\m[]\&\s-2\u[1]\d\s+2
+and
+\fBbootparam\fR(7)\&.
+.PP
+For command line parameters understood by the initial RAM disk, please see
+\fBdracut.cmdline\fR(7), or the documentation of the specific initrd implementation of your installation\&.
+.SH "CORE OS COMMAND LINE ARGUMENTS"
+.PP
+\fIsystemd\&.unit=\fR, \fIrd\&.systemd\&.unit=\fR, \fIsystemd\&.dump_core=\fR, \fIsystemd\&.crash_shell=\fR, \fIsystemd\&.crash_chvt=\fR, \fIsystemd\&.confirm_spawn=\fR, \fIsystemd\&.show_status=\fR, \fIsystemd\&.log_target=\fR, \fIsystemd\&.log_level=\fR, \fIsystemd\&.log_color=\fR, \fIsystemd\&.log_location=\fR, \fIsystemd\&.default_standard_output=\fR, \fIsystemd\&.default_standard_error=\fR, \fIsystemd\&.setenv=\fR
+.RS 4
+Parameters understood by the system and service manager to control system behavior\&. For details, see
+\fBsystemd\fR(1)\&.
+.RE
+.PP
+\fIquiet\fR
+.RS 4
+Parameter understood by both the kernel and the system and service manager to control console log verbosity\&. For details, see
+\fBsystemd\fR(1)\&.
+.RE
+.PP
+\fIdebug\fR
+.RS 4
+Parameter understood by both the kernel and the system and service manager to control console log verbosity\&. For details, see
+\fBsystemd\fR(1)\&.
+.RE
+.PP
+\fIemergency\fR, \fIsingle\fR, \fIs\fR, \fIS\fR, \fI1\fR, \fI2\fR, \fI3\fR, \fI4\fR, \fI5\fR
+.RS 4
+Parameters understood by the system and service manager, as compatibility options\&. For details, see
+\fBsystemd\fR(1)\&.
+.RE
+.PP
+\fIlocale\&.LANG=\fR, \fIlocale\&.LANGUAGE=\fR, \fIlocale\&.LC_CTYPE=\fR, \fIlocale\&.LC_NUMERIC=\fR, \fIlocale\&.LC_TIME=\fR, \fIlocale\&.LC_COLLATE=\fR, \fIlocale\&.LC_MONETARY=\fR, \fIlocale\&.LC_MESSAGES=\fR, \fIlocale\&.LC_PAPER=\fR, \fIlocale\&.LC_NAME=\fR, \fIlocale\&.LC_ADDRESS=\fR, \fIlocale\&.LC_TELEPHONE=\fR, \fIlocale\&.LC_MEASUREMENT=\fR, \fIlocale\&.LC_IDENTIFICATION=\fR
+.RS 4
+Parameters understood by the system and service manager to control locale and language settings\&. For details, see
+\fBsystemd\fR(1)\&.
+.RE
+.PP
+\fIfsck\&.mode=\fR
+.RS 4
+Parameter understood by the file system checker services\&. For details, see
+\fBsystemd-fsck@.service\fR(8)\&.
+.RE
+.PP
+\fIquotacheck\&.mode=\fR
+.RS 4
+Parameter understood by the file quota checker service\&. For details, see
+\fBsystemd-quotacheck.service\fR(8)\&.
+.RE
+.PP
+\fIsystemd\&.journald\&.forward_to_syslog=\fR, \fIsystemd\&.journald\&.forward_to_kmsg=\fR, \fIsystemd\&.journald\&.forward_to_console=\fR
+.RS 4
+Parameters understood by the journal service\&. For details, see
+\fBsystemd-journald.service\fR(8)\&.
+.RE
+.PP
+\fIvconsole\&.keymap=\fR, \fIvconsole\&.keymap\&.toggle=\fR, \fIvconsole\&.font=\fR, \fIvconsole\&.font\&.map=\fR, \fIvconsole\&.font\&.unimap=\fR
+.RS 4
+Parameters understood by the virtual console setup logic\&. For details, see
+\fBsystemd-vconsole-setup.service\fR(8)\&.
+.RE
+.PP
+\fIudev\&.log\-priority=\fR, \fIrd\&.udev\&.log\-priority=\fR, \fIudev\&.children\-max=\fR, \fIrd\&.udev\&.children\-max=\fR, \fIudev\&.exec\-delay=\fR, \fIrd\&.udev\&.exec\-delay=\fR, \fInet\&.ifnames=\fR
+.RS 4
+Parameters understood by the device event managing daemon\&. For details, see
+\fBsystemd-udevd.service\fR(8)\&.
+.RE
+.PP
+\fIplymouth\&.enable=\fR
+.RS 4
+May be used to disable the Plymouth boot splash\&. For details, see
+\fBplymouth\fR(8)\&.
+.RE
+.PP
+\fIluks=\fR, \fIrd\&.luks=\fR, \fIluks\&.crypttab=\fR, \fIrd\&.luks\&.crypttab=\fR, \fIluks\&.uuid=\fR, \fIrd\&.luks\&.uuid=\fR, \fIluks\&.options=\fR, \fIrd\&.luks\&.options=\fR, \fIluks\&.key=\fR, \fIrd\&.luks\&.key=\fR
+.RS 4
+Configures the LUKS full\-disk encryption logic at boot\&. For details, see
+\fBsystemd-cryptsetup-generator\fR(8)\&.
+.RE
+.PP
+\fIfstab=\fR, \fIrd\&.fstab=\fR
+.RS 4
+Configures the
+/etc/fstab
+logic at boot\&. For details, see
+\fBsystemd-fstab-generator\fR(8)\&.
+.RE
+.PP
+\fImodules\-load=\fR, \fIrd\&.modules\-load=\fR
+.RS 4
+Load a specific kernel module early at boot\&. For details, see
+\fBsystemd-modules-load.service\fR(8)\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBbootparam\fR(7),
+\fBdracut.cmdline\fR(7),
+\fBsystemd-fsck@.service\fR(8),
+\fBsystemd-quotacheck.service\fR(8),
+\fBsystemd-journald.service\fR(8),
+\fBsystemd-vconsole-setup.service\fR(8),
+\fBsystemd-udevd.service\fR(8),
+\fBplymouth\fR(8),
+\fBsystemd-cryptsetup-generator\fR(8),
+\fBsystemd-fstab-generator\fR(8),
+\fBsystemd-modules-load.service\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+kernel-parameters.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/kernel-parameters.txt
+.RE
diff --git a/man/kernel-command-line.html b/man/kernel-command-line.html
index 72a321341a..f334f4e230 100644
--- a/man/kernel-command-line.html
+++ b/man/kernel-command-line.html
@@ -19,59 +19,64 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="kernel-command-line"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>kernel-command-line — Kernel command line parameters</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/proc/cmdline</code></p></div><div class="refsect1"><a name="idm259785017712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The kernel, the initial RAM disk (initrd) and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="kernel-command-line"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>kernel-command-line — Kernel command line parameters</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/proc/cmdline</code></p></div><div class="refsect1"><a name="idm274683406784"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The kernel, the initial RAM disk (initrd) and
basic userspace functionality may be configured at boot via
kernel command line arguments.</p><p>For command line parameters understood by the
- kernel please see <a class="ulink" href="https://www.kernel.org/doc/Documentation/kernel-parameters.txt" target="_top"><code class="filename">kernel-parameters.txt</code></a>
+ kernel, please see <a class="ulink" href="https://www.kernel.org/doc/Documentation/kernel-parameters.txt" target="_top"><code class="filename">kernel-parameters.txt</code></a>
and
<a href="bootparam.html"><span class="citerefentry"><span class="refentrytitle">bootparam</span>(7)</span></a>.</p><p>For command line parameters understood by the
initial RAM disk, please see
<a href="dracut.cmdline.html"><span class="citerefentry"><span class="refentrytitle">dracut.cmdline</span>(7)</span></a>,
or the documentation of the specific initrd
- implementation of your installation.</p></div><div class="refsect1"><a name="idm259785012768"></a><h2 id="Core OS Command Line Arguments">Core OS Command Line Arguments<a class="headerlink" title="Permalink to this headline" href="#Core%20OS%20Command%20Line%20Arguments">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code>, </span><span class="term"><code class="varname">rd.systemd.unit=</code>, </span><span class="term"><code class="varname">systemd.dump_core=</code>, </span><span class="term"><code class="varname">systemd.crash_shell=</code>, </span><span class="term"><code class="varname">systemd.crash_chvt=</code>, </span><span class="term"><code class="varname">systemd.confirm_spawn=</code>, </span><span class="term"><code class="varname">systemd.show_status=</code>, </span><span class="term"><code class="varname">systemd.log_target=</code>, </span><span class="term"><code class="varname">systemd.log_level=</code>, </span><span class="term"><code class="varname">systemd.log_color=</code>, </span><span class="term"><code class="varname">systemd.log_location=</code>, </span><span class="term"><code class="varname">systemd.default_standard_output=</code>, </span><span class="term"><code class="varname">systemd.default_standard_error=</code>, </span><span class="term"><code class="varname">systemd.setenv=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p>Parameters understood by
+ implementation of your installation.</p></div><div class="refsect1"><a name="idm274683401792"></a><h2 id="Core OS Command Line Arguments">Core OS Command Line Arguments<a class="headerlink" title="Permalink to this headline" href="#Core%20OS%20Command%20Line%20Arguments">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code>, </span><span class="term"><code class="varname">rd.systemd.unit=</code>, </span><span class="term"><code class="varname">systemd.dump_core=</code>, </span><span class="term"><code class="varname">systemd.crash_shell=</code>, </span><span class="term"><code class="varname">systemd.crash_chvt=</code>, </span><span class="term"><code class="varname">systemd.confirm_spawn=</code>, </span><span class="term"><code class="varname">systemd.show_status=</code>, </span><span class="term"><code class="varname">systemd.log_target=</code>, </span><span class="term"><code class="varname">systemd.log_level=</code>, </span><span class="term"><code class="varname">systemd.log_color=</code>, </span><span class="term"><code class="varname">systemd.log_location=</code>, </span><span class="term"><code class="varname">systemd.default_standard_output=</code>, </span><span class="term"><code class="varname">systemd.default_standard_error=</code>, </span><span class="term"><code class="varname">systemd.setenv=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p>Parameters understood by
the system and service manager
- to control system behavior. For details see
+ to control system behavior. For details, see
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p>Parameter understood by
both the kernel and the system
and service manager to control
console log verbosity. For
- details see
+ details, see
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd><dt id="debug"><span class="term"><code class="varname">debug</code></span><a class="headerlink" title="Permalink to this term" href="#debug">¶</a></dt><dd><p>Parameter understood by
+ both the kernel and the system
+ and service manager to control
+ console log verbosity. For
+ details, see
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd><dt id="emergency"><span class="term"><code class="varname">emergency</code>, </span><span class="term"><code class="varname">single</code>, </span><span class="term"><code class="varname">s</code>, </span><span class="term"><code class="varname">S</code>, </span><span class="term"><code class="varname">1</code>, </span><span class="term"><code class="varname">2</code>, </span><span class="term"><code class="varname">3</code>, </span><span class="term"><code class="varname">4</code>, </span><span class="term"><code class="varname">5</code></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p>Parameters understood by
the system and service
manager, as compatibility
- options. For details see
+ options. For details, see
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd><dt id="locale.LANG="><span class="term"><code class="varname">locale.LANG=</code>, </span><span class="term"><code class="varname">locale.LANGUAGE=</code>, </span><span class="term"><code class="varname">locale.LC_CTYPE=</code>, </span><span class="term"><code class="varname">locale.LC_NUMERIC=</code>, </span><span class="term"><code class="varname">locale.LC_TIME=</code>, </span><span class="term"><code class="varname">locale.LC_COLLATE=</code>, </span><span class="term"><code class="varname">locale.LC_MONETARY=</code>, </span><span class="term"><code class="varname">locale.LC_MESSAGES=</code>, </span><span class="term"><code class="varname">locale.LC_PAPER=</code>, </span><span class="term"><code class="varname">locale.LC_NAME=</code>, </span><span class="term"><code class="varname">locale.LC_ADDRESS=</code>, </span><span class="term"><code class="varname">locale.LC_TELEPHONE=</code>, </span><span class="term"><code class="varname">locale.LC_MEASUREMENT=</code>, </span><span class="term"><code class="varname">locale.LC_IDENTIFICATION=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LANG=">¶</a></dt><dd><p>Parameters understood by
the system and service manager
to control locale and language
- settings. For details see
+ settings. For details, see
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd><dt id="fsck.mode="><span class="term"><code class="varname">fsck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#fsck.mode=">¶</a></dt><dd><p>Parameter understood by
the file system checker
- services. For details see
+ services. For details, see
<a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a>.</p></dd><dt id="quotacheck.mode="><span class="term"><code class="varname">quotacheck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#quotacheck.mode=">¶</a></dt><dd><p>Parameter understood by
the file quota checker
- service. For details see
+ service. For details, see
<a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a>.</p></dd><dt id="systemd.journald.forward_to_syslog="><span class="term"><code class="varname">systemd.journald.forward_to_syslog=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_kmsg=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_console=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_syslog=">¶</a></dt><dd><p>Parameters understood by
the journal service. For
- details see
+ details, see
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>.</p></dd><dt id="vconsole.keymap="><span class="term"><code class="varname">vconsole.keymap=</code>, </span><span class="term"><code class="varname">vconsole.keymap.toggle=</code>, </span><span class="term"><code class="varname">vconsole.font=</code>, </span><span class="term"><code class="varname">vconsole.font.map=</code>, </span><span class="term"><code class="varname">vconsole.font.unimap=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap=">¶</a></dt><dd><p>Parameters understood by
the virtual console setup logic. For
- details see
- <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a>.</p></dd><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code>, </span><span class="term"><code class="varname">rd.udev.log-priority=</code>, </span><span class="term"><code class="varname">udev.children-max=</code>, </span><span class="term"><code class="varname">rd.udev.children-max=</code>, </span><span class="term"><code class="varname">udev.exec-delay=</code>, </span><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p>Parameters understood by
+ details, see
+ <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a>.</p></dd><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code>, </span><span class="term"><code class="varname">rd.udev.log-priority=</code>, </span><span class="term"><code class="varname">udev.children-max=</code>, </span><span class="term"><code class="varname">rd.udev.children-max=</code>, </span><span class="term"><code class="varname">udev.exec-delay=</code>, </span><span class="term"><code class="varname">rd.udev.exec-delay=</code>, </span><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p>Parameters understood by
the device event managing daemon. For
- details see
+ details, see
<a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>.</p></dd><dt id="plymouth.enable="><span class="term"><code class="varname">plymouth.enable=</code></span><a class="headerlink" title="Permalink to this term" href="#plymouth.enable=">¶</a></dt><dd><p>May be used to disable
the Plymouth boot splash. For
- details see
- <a href="plymouth.html"><span class="citerefentry"><span class="refentrytitle">plymouth</span>(8)</span></a>.</p></dd><dt id="luks="><span class="term"><code class="varname">luks=</code>, </span><span class="term"><code class="varname">rd.luks=</code>, </span><span class="term"><code class="varname">luks.crypttab=</code>, </span><span class="term"><code class="varname">rd.luks.crypttab=</code>, </span><span class="term"><code class="varname">luks.uuid=</code>, </span><span class="term"><code class="varname">rd.luks.uuid=</code>, </span><span class="term"><code class="varname">luks.key=</code>, </span><span class="term"><code class="varname">rd.luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#luks=">¶</a></dt><dd><p>Configures the LUKS
+ details, see
+ <a href="plymouth.html"><span class="citerefentry"><span class="refentrytitle">plymouth</span>(8)</span></a>.</p></dd><dt id="luks="><span class="term"><code class="varname">luks=</code>, </span><span class="term"><code class="varname">rd.luks=</code>, </span><span class="term"><code class="varname">luks.crypttab=</code>, </span><span class="term"><code class="varname">rd.luks.crypttab=</code>, </span><span class="term"><code class="varname">luks.uuid=</code>, </span><span class="term"><code class="varname">rd.luks.uuid=</code>, </span><span class="term"><code class="varname">luks.options=</code>, </span><span class="term"><code class="varname">rd.luks.options=</code>, </span><span class="term"><code class="varname">luks.key=</code>, </span><span class="term"><code class="varname">rd.luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#luks=">¶</a></dt><dd><p>Configures the LUKS
full-disk encryption logic at
- boot. For details see
+ boot. For details, see
<a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></dd><dt id="fstab="><span class="term"><code class="varname">fstab=</code>, </span><span class="term"><code class="varname">rd.fstab=</code></span><a class="headerlink" title="Permalink to this term" href="#fstab=">¶</a></dt><dd><p>Configures the
<code class="filename">/etc/fstab</code>
- logic at boot. For details see
+ logic at boot. For details, see
<a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a>.</p></dd><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code>, </span><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p>Load a specific kernel
module early at boot. For
- details see
- <a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259783924848"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ details, see
+ <a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682311248"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="bootparam.html"><span class="citerefentry"><span class="refentrytitle">bootparam</span>(7)</span></a>,
<a href="dracut.cmdline.html"><span class="citerefentry"><span class="refentrytitle">dracut.cmdline</span>(7)</span></a>,
diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
index 6d064f6373..cc267a3ecc 100644
--- a/man/kernel-command-line.xml
+++ b/man/kernel-command-line.xml
@@ -59,7 +59,7 @@
kernel command line arguments.</para>
<para>For command line parameters understood by the
- kernel please see <ulink
+ kernel, please see <ulink
url="https://www.kernel.org/doc/Documentation/kernel-parameters.txt"><filename>kernel-parameters.txt</filename></ulink>
and
<citerefentry><refentrytitle>bootparam</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
@@ -93,7 +93,7 @@
<listitem>
<para>Parameters understood by
the system and service manager
- to control system behavior. For details see
+ to control system behavior. For details, see
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -105,7 +105,19 @@
both the kernel and the system
and service manager to control
console log verbosity. For
- details see
+ details, see
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>debug</varname></term>
+ <listitem>
+ <para>Parameter understood by
+ both the kernel and the system
+ and service manager to control
+ console log verbosity. For
+ details, see
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -124,7 +136,7 @@
<para>Parameters understood by
the system and service
manager, as compatibility
- options. For details see
+ options. For details, see
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -148,7 +160,7 @@
<para>Parameters understood by
the system and service manager
to control locale and language
- settings. For details see
+ settings. For details, see
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -159,7 +171,7 @@
<listitem>
<para>Parameter understood by
the file system checker
- services. For details see
+ services. For details, see
<citerefentry><refentrytitle>systemd-fsck@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -170,7 +182,7 @@
<listitem>
<para>Parameter understood by
the file quota checker
- service. For details see
+ service. For details, see
<citerefentry><refentrytitle>systemd-quotacheck.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -183,7 +195,7 @@
<listitem>
<para>Parameters understood by
the journal service. For
- details see
+ details, see
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -198,7 +210,7 @@
<listitem>
<para>Parameters understood by
the virtual console setup logic. For
- details see
+ details, see
<citerefentry><refentrytitle>systemd-vconsole-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -210,11 +222,12 @@
<term><varname>rd.udev.children-max=</varname></term>
<term><varname>udev.exec-delay=</varname></term>
<term><varname>rd.udev.exec-delay=</varname></term>
+ <term><varname>net.ifnames=</varname></term>
<listitem>
<para>Parameters understood by
the device event managing daemon. For
- details see
+ details, see
<citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -225,7 +238,7 @@
<listitem>
<para>May be used to disable
the Plymouth boot splash. For
- details see
+ details, see
<citerefentry><refentrytitle>plymouth</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -237,13 +250,15 @@
<term><varname>rd.luks.crypttab=</varname></term>
<term><varname>luks.uuid=</varname></term>
<term><varname>rd.luks.uuid=</varname></term>
+ <term><varname>luks.options=</varname></term>
+ <term><varname>rd.luks.options=</varname></term>
<term><varname>luks.key=</varname></term>
<term><varname>rd.luks.key=</varname></term>
<listitem>
<para>Configures the LUKS
full-disk encryption logic at
- boot. For details see
+ boot. For details, see
<citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -255,7 +270,7 @@
<listitem>
<para>Configures the
<filename>/etc/fstab</filename>
- logic at boot. For details see
+ logic at boot. For details, see
<citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
@@ -267,7 +282,7 @@
<listitem>
<para>Load a specific kernel
module early at boot. For
- details see
+ details, see
<citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</listitem>
</varlistentry>
diff --git a/man/kernel-install.8 b/man/kernel-install.8
new file mode 100644
index 0000000000..e73e96afed
--- /dev/null
+++ b/man/kernel-install.8
@@ -0,0 +1,162 @@
+'\" t
+.TH "KERNEL\-INSTALL" "8" "" "systemd 208" "kernel-install"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+kernel-install \- Add and remove kernel and initramfs images to and from /boot
+.SH "SYNOPSIS"
+.HP \w'\fBkernel\-install\fR\ 'u
+\fBkernel\-install\fR COMMAND \fIKERNEL\-VERSION\fR [\fIKERNEL\-IMAGE\fR]
+.SH "DESCRIPTION"
+.PP
+\fBkernel\-install\fR
+is used to install and remove kernel and initramfs images to and from
+/boot\&.
+.PP
+\fBkernel\-install\fR
+will execute the files located in the directory
+/usr/lib/kernel/install\&.d/
+and the local administration directory
+/etc/kernel/install\&.d/\&. All files are collectively sorted and executed in lexical order, regardless of the directory in which they live\&. However, files with identical filenames replace each other\&. Files in
+/etc/kernel/install\&.d/
+take precedence over files with the same name in
+/usr/lib/kernel/install\&.d/\&. This can be used to override a system\-supplied executables with a local file if needed; a symbolic link in
+/etc/kernel/install\&.d/
+with the same name as an executable in
+/usr/lib/kernel/install\&.d/, pointing to /dev/null, disables the executable entirely\&. Executables must have the extension
+"\&.install"; other extensions are ignored\&.
+.SH "COMMANDS"
+.PP
+The following commands are understood:
+.PP
+\fBadd \fR\fB\fIKERNEL\-VERSION\fR\fR\fB \fR\fB\fIKERNEL\-IMAGE\fR\fR
+.RS 4
+\fBkernel\-install\fR
+creates the directory
+/boot/\fIMACHINE\-ID\fR/\fIKERNEL\-VERSION\fR/
+and calls every executable
+/usr/lib/kernel/install\&.d/*\&.install
+and
+/etc/kernel/install\&.d/*\&.install
+with the arguments
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+add \fIKERNEL\-VERSION\fR /boot/\fIMACHINE\-ID\fR/\fIKERNEL\-VERSION\fR/
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+The kernel\-install plugin
+50\-depmod\&.install
+runs depmod for the
+\fIKERNEL\-VERSION\fR\&.
+.sp
+The kernel\-install plugin
+90\-loaderentry\&.install
+copies
+\fIKERNEL\-IMAGE\fR
+to
+/boot/\fIMACHINE\-ID\fR/\fIKERNEL\-VERSION\fR/linux\&. It also creates a boot loader entry according to the boot loader specification in
+/boot/loader/entries/\fIMACHINE\-ID\fR\-\fIKERNEL\-VERSION\fR\&.conf\&. The title of the entry is the
+\fIPRETTY_NAME\fR
+parameter specified in
+/etc/os\-release, or "Linux
+\fIKERNEL\-VERSION\fR", if unset\&. If the file
+initrd
+is found next to the
+linux
+file, the initrd will be added to the configuration\&.
+.RE
+.PP
+\fBremove \fR\fB\fIKERNEL\-VERSION\fR\fR
+.RS 4
+Calls every executable
+/usr/lib/kernel/install\&.d/*\&.install
+and
+/etc/kernel/install\&.d/*\&.install
+with the arguments
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+remove \fIKERNEL\-VERSION\fR /boot/\fIMACHINE\-ID\fR/\fIKERNEL\-VERSION\fR/
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+\fBkernel\-install\fR
+removes the entire directory
+/boot/\fIMACHINE\-ID\fR/\fIKERNEL\-VERSION\fR/
+afterwards\&.
+.sp
+The kernel\-install plugin
+90\-loaderentry\&.install
+removes the file
+/boot/loader/entries/\fIMACHINE\-ID\fR\-\fIKERNEL\-VERSION\fR\&.conf\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+If every executable returns with 0, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "FILES"
+.PP
+/usr/lib/kernel/install\&.d/*\&.install /etc/kernel/install\&.d/*\&.install
+.RS 4
+Drop\-in files which are executed by kernel\-install\&.
+.RE
+.PP
+/etc/kernel/cmdline /proc/cmdline
+.RS 4
+The content of the file
+/etc/kernel/cmdline
+specifies the kernel command line to use\&. If that file does not exist,
+/proc/cmdline
+is used\&.
+.RE
+.PP
+/etc/machine\-id
+.RS 4
+The content of the file specifies the machine identification
+\fIMACHINE\-ID\fR\&.
+.RE
+.PP
+/etc/os\-release
+.RS 4
+The content of the file specifies the operating system title
+\fIPRETTY_NAME\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBmachine-id\fR(5),
+\fBos-release\fR(5),
+\m[blue]\fBBoot loader specification\fR\m[]\&\s-2\u[1]\d\s+2
+.SH "NOTES"
+.IP " 1." 4
+Boot loader specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec
+.RE
diff --git a/man/kernel-install.html b/man/kernel-install.html
index 70471cfc12..09398ef7b3 100644
--- a/man/kernel-install.html
+++ b/man/kernel-install.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="kernel-install"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>kernel-install — Add and remove kernel and initramfs images to and from /boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">kernel-install</code> COMMAND <em class="replaceable"><code>KERNEL-VERSION</code></em> [<em class="replaceable"><code>KERNEL-IMAGE</code></em>]</p></div></div><div class="refsect1"><a name="idm259793025056"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="kernel-install"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>kernel-install — Add and remove kernel and initramfs images to and from /boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">kernel-install</code> COMMAND <em class="replaceable"><code>KERNEL-VERSION</code></em> [<em class="replaceable"><code>KERNEL-IMAGE</code></em>]</p></div></div><div class="refsect1"><a name="idm274686218864"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>
<span class="command"><strong>kernel-install</strong></span> is used to install and remove kernel and
initramfs images to and from <code class="filename">/boot</code>.
</p><p><span class="command"><strong>kernel-install</strong></span> will execute the files
located in the directory <code class="filename">/usr/lib/kernel/install.d/</code>
and the local administration directory <code class="filename">/etc/kernel/install.d/</code>.
All files are collectively sorted and executed in lexical order, regardless of the directory in
- which they live. However, files with identical file names replace each other.
+ which they live. However, files with identical filenames replace each other.
Files in <code class="filename">/etc/kernel/install.d/</code> take precedence over files with the same name
in <code class="filename">/usr/lib/kernel/install.d/</code>. This can be used to override a system-supplied
executables with a local file if needed; a symbolic link in <code class="filename">/etc/kernel/install.d/</code>
with the same name as an executable in <code class="filename">/usr/lib/kernel/install.d/</code>,
pointing to /dev/null, disables the executable entirely. Executables must have the
- extension .install; other extensions are ignored.</p></div><div class="refsect1"><a name="idm259793016848"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="add KERNEL-VERSION KERNEL-IMAGE"><span class="term"><span class="command"><strong>add <em class="replaceable"><code>KERNEL-VERSION</code></em> <em class="replaceable"><code>KERNEL-IMAGE</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#add%20KERNEL-VERSION%20KERNEL-IMAGE">¶</a></dt><dd><p><span class="command"><strong>kernel-install</strong></span> creates the directory
+ extension "<code class="literal">.install</code>"; other extensions are ignored.</p></div><div class="refsect1"><a name="idm274686209968"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="add KERNEL-VERSION KERNEL-IMAGE"><span class="term"><span class="command"><strong>add <em class="replaceable"><code>KERNEL-VERSION</code></em> <em class="replaceable"><code>KERNEL-IMAGE</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#add%20KERNEL-VERSION%20KERNEL-IMAGE">¶</a></dt><dd><p><span class="command"><strong>kernel-install</strong></span> creates the directory
<code class="filename">/boot/<em class="replaceable"><code>MACHINE-ID</code></em>/<em class="replaceable"><code>KERNEL-VERSION</code></em>/</code>
and calls every executable
<code class="filename">/usr/lib/kernel/install.d/*.install</code> and
@@ -50,20 +50,20 @@ add <em class="replaceable"><code>KERNEL-VERSION</code></em> <code class="filena
or "Linux <em class="replaceable"><code>KERNEL-VERSION</code></em>", if unset.
If the file <code class="filename">initrd</code> is found next to the
<code class="filename">linux</code> file, the initrd will be added to
- the configuration.</p></dd><dt id="remove KERNEL-VERSION"><span class="term"><span class="command"><strong>remove <em class="replaceable"><code>KERNEL-VERSION</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#remove%20KERNEL-VERSION">¶</a></dt><dd><p>calls every executable <code class="filename">/usr/lib/kernel/install.d/*.install</code>
+ the configuration.</p></dd><dt id="remove KERNEL-VERSION"><span class="term"><span class="command"><strong>remove <em class="replaceable"><code>KERNEL-VERSION</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#remove%20KERNEL-VERSION">¶</a></dt><dd><p>Calls every executable <code class="filename">/usr/lib/kernel/install.d/*.install</code>
and <code class="filename">/etc/kernel/install.d/*.install</code> with the arguments
</p><pre class="programlisting">
remove <em class="replaceable"><code>KERNEL-VERSION</code></em> <code class="filename">/boot/<em class="replaceable"><code>MACHINE-ID</code></em>/<em class="replaceable"><code>KERNEL-VERSION</code></em>/</code>
</pre><p>
</p><p><span class="command"><strong>kernel-install</strong></span> removes the entire directory
<code class="filename">/boot/<em class="replaceable"><code>MACHINE-ID</code></em>/<em class="replaceable"><code>KERNEL-VERSION</code></em>/</code> afterwards.</p><p>The kernel-install plugin <code class="filename">90-loaderentry.install</code> removes the file
- <code class="filename">/boot/loader/entries/<em class="replaceable"><code>MACHINE-ID</code></em>-<em class="replaceable"><code>KERNEL-VERSION</code></em>.conf</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259796931488"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>If every executable returns with 0, 0 is returned, a non-zero failure code otherwise.</p></div><div class="refsect1"><a name="idm259796930304"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="
+ <code class="filename">/boot/loader/entries/<em class="replaceable"><code>MACHINE-ID</code></em>-<em class="replaceable"><code>KERNEL-VERSION</code></em>.conf</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274690070800"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>If every executable returns with 0, 0 is returned, a non-zero failure code otherwise.</p></div><div class="refsect1"><a name="idm274690069616"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="
/usr/lib/kernel/install.d/*.install
/etc/kernel/install.d/*.install
"><span class="term">
<code class="filename">/usr/lib/kernel/install.d/*.install</code>
<code class="filename">/etc/kernel/install.d/*.install</code>
- </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20/usr/lib/kernel/install.d/*.install%0A%20%20%20%20%20%20%20%20%20%20/etc/kernel/install.d/*.install%0A%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>Drop-in files, which are executed by kernel-install.</p></dd><dt id="
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20/usr/lib/kernel/install.d/*.install%0A%20%20%20%20%20%20%20%20%20%20/etc/kernel/install.d/*.install%0A%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>Drop-in files which are executed by kernel-install.</p></dd><dt id="
/etc/kernel/cmdline
/proc/cmdline
"><span class="term">
@@ -78,7 +78,7 @@ remove <em class="replaceable"><code>KERNEL-VERSION</code></em> <code class="fil
/etc/os-release
"><span class="term">
<code class="filename">/etc/os-release</code>
- </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20/etc/os-release%0A%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>The content of the file specifies the operating system title <em class="replaceable"><code>PRETTY_NAME</code></em>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259791948832"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20/etc/os-release%0A%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>The content of the file specifies the operating system title <em class="replaceable"><code>PRETTY_NAME</code></em>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274685143760"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>,
<a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a>,
<a class="ulink" href="http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec" target="_top">Boot loader specification</a>
diff --git a/man/kernel-install.xml b/man/kernel-install.xml
index 8c2abc747c..929ceef4af 100644
--- a/man/kernel-install.xml
+++ b/man/kernel-install.xml
@@ -67,13 +67,13 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
located in the directory <filename>/usr/lib/kernel/install.d/</filename>
and the local administration directory <filename>/etc/kernel/install.d/</filename>.
All files are collectively sorted and executed in lexical order, regardless of the directory in
- which they live. However, files with identical file names replace each other.
+ which they live. However, files with identical filenames replace each other.
Files in <filename>/etc/kernel/install.d/</filename> take precedence over files with the same name
in <filename>/usr/lib/kernel/install.d/</filename>. This can be used to override a system-supplied
executables with a local file if needed; a symbolic link in <filename>/etc/kernel/install.d/</filename>
with the same name as an executable in <filename>/usr/lib/kernel/install.d/</filename>,
pointing to /dev/null, disables the executable entirely. Executables must have the
- extension .install; other extensions are ignored.</para>
+ extension <literal>.install</literal>; other extensions are ignored.</para>
</refsect1>
@@ -112,7 +112,7 @@ add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHI
<varlistentry>
<term><command>remove <replaceable>KERNEL-VERSION</replaceable></command></term>
<listitem>
- <para>calls every executable <filename>/usr/lib/kernel/install.d/*.install</filename>
+ <para>Calls every executable <filename>/usr/lib/kernel/install.d/*.install</filename>
and <filename>/etc/kernel/install.d/*.install</filename> with the arguments
<programlisting>
remove <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
@@ -145,7 +145,7 @@ remove <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MA
<filename>/etc/kernel/install.d/*.install</filename>
</term>
<listitem>
- <para>Drop-in files, which are executed by kernel-install.</para>
+ <para>Drop-in files which are executed by kernel-install.</para>
</listitem>
</varlistentry>
<varlistentry>
diff --git a/man/locale.conf.5 b/man/locale.conf.5
new file mode 100644
index 0000000000..38f34d64fd
--- /dev/null
+++ b/man/locale.conf.5
@@ -0,0 +1,101 @@
+'\" t
+.TH "LOCALE\&.CONF" "5" "" "systemd 208" "locale.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+locale.conf \- Configuration file for locale settings
+.SH "SYNOPSIS"
+.PP
+/etc/locale\&.conf
+.SH "DESCRIPTION"
+.PP
+The
+/etc/locale\&.conf
+file configures system\-wide locale settings\&. It is read at early\-boot by
+\fBsystemd\fR(1)\&.
+.PP
+The basic file format of
+locale\&.conf
+is a newline\-separated list of environment\-like shell\-compatible variable assignments\&. It is possible to source the configuration from shell scripts, however, beyond mere variable assignments, no shell features are supported, allowing applications to read the file without implementing a shell compatible execution engine\&.
+.PP
+Note that the kernel command line options
+\fIlocale\&.LANG=\fR,
+\fIlocale\&.LANGUAGE=\fR,
+\fIlocale\&.LC_CTYPE=\fR,
+\fIlocale\&.LC_NUMERIC=\fR,
+\fIlocale\&.LC_TIME=\fR,
+\fIlocale\&.LC_COLLATE=\fR,
+\fIlocale\&.LC_MONETARY=\fR,
+\fIlocale\&.LC_MESSAGES=\fR,
+\fIlocale\&.LC_PAPER=\fR,
+\fIlocale\&.LC_NAME=\fR,
+\fIlocale\&.LC_ADDRESS=\fR,
+\fIlocale\&.LC_TELEPHONE=\fR,
+\fIlocale\&.LC_MEASUREMENT=\fR,
+\fIlocale\&.LC_IDENTIFICATION=\fR
+may be used to override the locale settings at boot\&.
+.PP
+The locale settings configured in
+/etc/locale\&.conf
+are system\-wide and are inherited by every service or user, unless overridden or unset by individual programs or individual users\&.
+.PP
+Depending on the operating system, other configuration files might be checked for locale configuration as well, however only as fallback\&.
+.SH "OPTIONS"
+.PP
+The following locale settings may be set using
+/etc/locale\&.conf:
+\fILANG=\fR,
+\fILANGUAGE=\fR,
+\fILC_CTYPE=\fR,
+\fILC_NUMERIC=\fR,
+\fILC_TIME=\fR,
+\fILC_COLLATE=\fR,
+\fILC_MONETARY=\fR,
+\fILC_MESSAGES=\fR,
+\fILC_PAPER=\fR,
+\fILC_NAME=\fR,
+\fILC_ADDRESS=\fR,
+\fILC_TELEPHONE=\fR,
+\fILC_MEASUREMENT=\fR,
+\fILC_IDENTIFICATION=\fR\&. Note that
+\fILC_ALL\fR
+may not be configured in this file\&. For details about the meaning and semantics of these settings, refer to
+\fBlocale\fR(7)\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&German locale with English messages\fR
+.PP
+/etc/locale\&.conf:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+LANG=de_DE\&.UTF\-8
+LC_MESSAGES=en_US\&.UTF\-8
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBlocale\fR(7),
+\fBsystemd-localed.service\fR(8)
diff --git a/man/locale.conf.html b/man/locale.conf.html
index bb2acaeca7..025ac56d79 100644
--- a/man/locale.conf.html
+++ b/man/locale.conf.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="locale.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>locale.conf — Configuration file for locale settings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/locale.conf</code></p></div><div class="refsect1"><a name="idm259776656784"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/locale.conf</code> file
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="locale.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>locale.conf — Configuration file for locale settings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/locale.conf</code></p></div><div class="refsect1"><a name="idm274680295024"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/locale.conf</code> file
configures system-wide locale settings. It is read at
early-boot by
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p><p>The basic file format of
@@ -27,7 +27,7 @@
newline-separated list of environment-like
shell-compatible variable assignments. It is possible
to source the configuration from shell scripts,
- however, beyond mere variable assignments no shell
+ however, beyond mere variable assignments, no shell
features are supported, allowing applications to read
the file without implementing a shell compatible
execution engine.</p><p>Note that the kernel command line options
@@ -49,10 +49,10 @@
<code class="filename">/etc/locale.conf</code> are system-wide
and are inherited by every service or user, unless
overridden or unset by individual programs or
- individual users.</p><p>Depending on the operating system other
+ individual users.</p><p>Depending on the operating system, other
configuration files might be checked for locale
configuration as well, however only as
- fallback.</p></div><div class="refsect1"><a name="idm259776643984"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following locale settings may be set using
+ fallback.</p></div><div class="refsect1"><a name="idm274680282448"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following locale settings may be set using
<code class="filename">/etc/locale.conf</code>:
<code class="varname">LANG=</code>,
<code class="varname">LANGUAGE=</code>,
@@ -71,8 +71,8 @@
<code class="varname">LC_ALL</code> may not be configured in
this file. For details about the meaning and semantics
of these settings, refer to
- <a href="locale.html"><span class="citerefentry"><span class="refentrytitle">locale</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm259780588048"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259780587376"></a><p class="title"><b>Example 1. German locale with English messages</b></p><div class="example-contents"><p><code class="filename">/etc/locale.conf</code>:</p><pre class="programlisting">LANG=de_DE.UTF-8
-LC_MESSAGES=C</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259780584736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="locale.html"><span class="citerefentry"><span class="refentrytitle">locale</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm274684172960"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274684172288"></a><p class="title"><b>Example 1. German locale with English messages</b></p><div class="example-contents"><p><code class="filename">/etc/locale.conf</code>:</p><pre class="programlisting">LANG=de_DE.UTF-8
+LC_MESSAGES=en_US.UTF-8</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274684169696"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="locale.html"><span class="citerefentry"><span class="refentrytitle">locale</span>(7)</span></a>,
<a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a>
diff --git a/man/locale.conf.xml b/man/locale.conf.xml
index 42634febac..e97092102c 100644
--- a/man/locale.conf.xml
+++ b/man/locale.conf.xml
@@ -64,7 +64,7 @@
newline-separated list of environment-like
shell-compatible variable assignments. It is possible
to source the configuration from shell scripts,
- however, beyond mere variable assignments no shell
+ however, beyond mere variable assignments, no shell
features are supported, allowing applications to read
the file without implementing a shell compatible
execution engine.</para>
@@ -92,7 +92,7 @@
overridden or unset by individual programs or
individual users.</para>
- <para>Depending on the operating system other
+ <para>Depending on the operating system, other
configuration files might be checked for locale
configuration as well, however only as
fallback.</para>
@@ -132,7 +132,7 @@
<para><filename>/etc/locale.conf</filename>:</para>
<programlisting>LANG=de_DE.UTF-8
-LC_MESSAGES=C</programlisting>
+LC_MESSAGES=en_US.UTF-8</programlisting>
</example>
</refsect1>
diff --git a/man/localectl.1 b/man/localectl.1
new file mode 100644
index 0000000000..e1406708a7
--- /dev/null
+++ b/man/localectl.1
@@ -0,0 +1,163 @@
+'\" t
+.TH "LOCALECTL" "1" "" "systemd 208" "localectl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+localectl \- Control the system locale and keyboard layout settings
+.SH "SYNOPSIS"
+.HP \w'\fBlocalectl\fR\ 'u
+\fBlocalectl\fR [OPTIONS...] {COMMAND}
+.SH "DESCRIPTION"
+.PP
+\fBlocalectl\fR
+may be used to query and change the system locale and keyboard layout settings\&.
+.PP
+The system locale controls the language settings of system services and of the UI before the user logs in, such as the display manager, as well as the default for users after login\&.
+.PP
+The keyboard settings control the keyboard layout used on the text console and of the graphical UI before the user logs in, such as the display manager, as well as the default for users after login\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+Do not query the user for authentication for privileged operations\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-privileged\fR
+.RS 4
+Acquire privileges via PolicyKit before executing the operation\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-host\fR
+.RS 4
+Execute the operation remotely\&. Specify a hostname, or username and hostname separated by
+"@", to connect to\&. This will use SSH to talk to a remote system\&.
+.RE
+.PP
+\fB\-\-no\-convert\fR
+.RS 4
+If
+\fBset\-keymap\fR
+or
+\fBset\-x11\-keymap\fR
+is invoked and this option is passed, then the keymap will not be converted from the console to X11, or X11 to console, respectively\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fBstatus\fR
+.RS 4
+Show current settings of the system locale and keyboard mapping\&.
+.RE
+.PP
+\fBset\-locale LOCALE\&.\&.\&.\fR
+.RS 4
+Set the system locale\&. This takes one or more assignments such as "LANG=de_DE\&.utf8", "LC_MESSAGES=en_GB\&.utf8", and so on\&. See
+\fBlocale\fR(7)
+for details on the available settings and their meanings\&. Use
+\fBlist\-locales\fR
+for a list of available locales (see below)\&.
+.RE
+.PP
+\fBlist\-locales\fR
+.RS 4
+List available locales useful for configuration with
+\fBset\-locale\fR\&.
+.RE
+.PP
+\fBset\-keymap MAP [TOGGLEMAP]\fR
+.RS 4
+Set the system keyboard mapping for the console\&. This takes a keyboard mapping name (such as "de" or "us"), and possibly a second one to define a toggle keyboard mapping\&. Unless
+\fB\-\-no\-convert\fR
+is passed, the selected setting is also applied to the default keyboard mapping of X11, after converting it to the closest matching X11 keyboard mapping\&. Use
+\fBlist\-keymaps\fR
+for a list of available keyboard mappings (see below)\&.
+.RE
+.PP
+\fBlist\-keymaps\fR
+.RS 4
+List available keyboard mappings for the console, useful for configuration with
+\fBset\-keymap\fR\&.
+.RE
+.PP
+\fBset\-x11\-keymap LAYOUT [MODEL] [VARIANT] [OPTIONS]\fR
+.RS 4
+Set the system default keyboard mapping for X11\&. This takes a keyboard mapping name (such as "de" or "us"), and possibly a model, variant and options, see
+\fBkbd\fR(4)
+for details\&. Unless
+\fB\-\-no\-convert\fR
+is passed, the selected setting is also applied to the system console keyboard mapping, after converting it to the closest matching console keyboard mapping\&.
+.RE
+.PP
+\fBlist\-x11\-keymap\-models\fR, \fBlist\-x11\-keymap\-layouts\fR, \fBlist\-x11\-keymap\-variants [LAYOUT]\fR, \fBlist\-x11\-keymap\-options\fR
+.RS 4
+List available X11 keymap models, layouts, variants and options, useful for configuration with
+\fBset\-keymap\fR\&. The command
+\fBlist\-x11\-keymap\-variants\fR
+optionally takes a layout parameter to limit the output to the variants suitable for the specific layout\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBlocale\fR(7),
+\fBlocale.conf\fR(5),
+\fBvconsole.conf\fR(5),
+\fBloadkeys\fR(1),
+\fBkbd\fR(4),
+\m[blue]\fBThe XKB Configuration Guide\fR\m[]\&\s-2\u[1]\d\s+2,
+\fBsystemctl\fR(1),
+\fBsystemd-localed.service\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+The XKB Configuration Guide
+.RS 4
+\%http://www.x.org/releases/current/doc/xorg-docs/input/XKB-Config.html
+.RE
diff --git a/man/localectl.html b/man/localectl.html
index 7e5b066bdf..7559661dec 100644
--- a/man/localectl.html
+++ b/man/localectl.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="localectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>localectl — Control the system locale and keyboard layout settings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">localectl [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm259772991344"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>localectl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="localectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>localectl — Control the system locale and keyboard layout settings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">localectl</code> [OPTIONS...] {COMMAND}</p></div></div><div class="refsect1"><a name="idm274685772400"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>localectl</strong></span> may be used to
query and change the system locale and keyboard layout
settings.</p><p>The system locale controls the language settings
of system services and of the UI before the user logs
@@ -28,20 +28,21 @@
layout used on the text console and of the graphical
UI before the user logs in, such as the display
manager, as well as the default for users after
- login.</p></div><div class="refsect1"><a name="idm259772988192"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ login.</p></div><div class="refsect1"><a name="idm274685769248"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
- pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Don't query the user
+ pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Do not query the user
for authentication for privileged
- operations.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute the operation
+ operations.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Acquire privileges via PolicyKit
+ before executing the operation.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute the operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by "<code class="literal">@</code>",
to connect to. This will use SSH to
talk to a remote
system.</p></dd><dt id="--no-convert"><span class="term"><code class="option">--no-convert</code></span><a class="headerlink" title="Permalink to this term" href="#--no-convert">¶</a></dt><dd><p>If
<span class="command"><strong>set-keymap</strong></span> or
<span class="command"><strong>set-x11-keymap</strong></span> is
- invoked and this option is passed then
+ invoked and this option is passed, then
the keymap will not be converted from
the console to X11, or X11 to console,
respectively.</p></dd></dl></div><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="status"><span class="term"><span class="command"><strong>status</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status">¶</a></dt><dd><p>Show current settings
@@ -65,7 +66,7 @@
one to define a toggle keyboard
mapping. Unless
<code class="option">--no-convert</code> is
- passed the selected setting is also
+ passed, the selected setting is also
applied to the default keyboard
mapping of X11, after converting it to
the closest matching X11 keyboard
@@ -83,7 +84,7 @@
<a href="kbd.html"><span class="citerefentry"><span class="refentrytitle">kbd</span>(4)</span></a>
for details. Unless
<code class="option">--no-convert</code> is
- passed the selected setting is also
+ passed, the selected setting is also
applied to the system console keyboard
mapping, after converting it to the
closest matching console keyboard
@@ -96,19 +97,22 @@
optionally takes a layout parameter to
limit the output to the variants
suitable for the specific
- layout.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776989968"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259776988784"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
+ layout.</p></dd></dl></div></div><div class="refsect1"><a name="idm274685796928"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success, 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274685795744"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
<code class="option">--no-pager</code> is not given;
overrides <code class="varname">$PAGER</code>. Setting
this to an empty string or the value
- <code class="literal">cat</code> is equivalent to passing
- <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259771917840"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">cat</code>" is equivalent to passing
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274685790816"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="locale.html"><span class="citerefentry"><span class="refentrytitle">locale</span>(7)</span></a>,
<a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>,
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>,
<a href="loadkeys.html"><span class="citerefentry"><span class="refentrytitle">loadkeys</span>(1)</span></a>,
<a href="kbd.html"><span class="citerefentry"><span class="refentrytitle">kbd</span>(4)</span></a>,
+ <a class="ulink" href="http://www.x.org/releases/current/doc/xorg-docs/input/XKB-Config.html" target="_top">
+ The XKB Configuration Guide
+ </a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/localectl.xml b/man/localectl.xml
index 0b13c111a5..ad4f3d41f0 100644
--- a/man/localectl.xml
+++ b/man/localectl.xml
@@ -49,7 +49,9 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>localectl <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="req">COMMAND</arg></command>
+ <command>localectl</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="req">COMMAND</arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -103,18 +105,26 @@
<varlistentry>
<term><option>--no-ask-password</option></term>
- <listitem><para>Don't query the user
+ <listitem><para>Do not query the user
for authentication for privileged
operations.</para></listitem>
</varlistentry>
<varlistentry>
+ <term><option>-P</option></term>
+ <term><option>--privileged</option></term>
+
+ <listitem><para>Acquire privileges via PolicyKit
+ before executing the operation.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>-H</option></term>
<term><option>--host</option></term>
<listitem><para>Execute the operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by <literal>@</literal>,
to connect to. This will use SSH to
talk to a remote
system.</para></listitem>
@@ -126,7 +136,7 @@
<listitem><para>If
<command>set-keymap</command> or
<command>set-x11-keymap</command> is
- invoked and this option is passed then
+ invoked and this option is passed, then
the keymap will not be converted from
the console to X11, or X11 to console,
respectively.</para></listitem>
@@ -178,7 +188,7 @@
one to define a toggle keyboard
mapping. Unless
<option>--no-convert</option> is
- passed the selected setting is also
+ passed, the selected setting is also
applied to the default keyboard
mapping of X11, after converting it to
the closest matching X11 keyboard
@@ -208,7 +218,7 @@
<citerefentry><refentrytitle>kbd</refentrytitle><manvolnum>4</manvolnum></citerefentry>
for details. Unless
<option>--no-convert</option> is
- passed the selected setting is also
+ passed, the selected setting is also
applied to the system console keyboard
mapping, after converting it to the
closest matching console keyboard
@@ -239,7 +249,7 @@
<refsect1>
<title>Exit status</title>
- <para>On success 0 is returned, a non-zero failure
+ <para>On success, 0 is returned, a non-zero failure
code otherwise.</para>
</refsect1>
@@ -268,6 +278,9 @@
<citerefentry><refentrytitle>vconsole.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>loadkeys</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>kbd</refentrytitle><manvolnum>4</manvolnum></citerefentry>,
+ <ulink url="http://www.x.org/releases/current/doc/xorg-docs/input/XKB-Config.html">
+ The XKB Configuration Guide
+ </ulink>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
diff --git a/man/localtime.5 b/man/localtime.5
new file mode 100644
index 0000000000..dcbf1657a5
--- /dev/null
+++ b/man/localtime.5
@@ -0,0 +1,56 @@
+'\" t
+.TH "LOCALTIME" "5" "" "systemd 208" "localtime"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+localtime \- Local timezone configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/localtime
+\->
+\&.\&./usr/share/zoneinfo/\&...
+.SH "DESCRIPTION"
+.PP
+The
+/etc/localtime
+file configures the system\-wide timezone of the local system that is used by applications for presentation to the user\&. It should be an absolute or relative symbolic link pointing to
+/usr/share/zoneinfo/, followed by a timezone identifier such as
+"Europe/Berlin"
+or
+"Etc/UTC"\&. The resulting link should lead to the corresponding binary
+\fBtzfile\fR(5)
+timezone data for the configured timezone\&.
+.PP
+Because the timezone identifier is extracted from the symlink target name of
+/etc/localtime, this file may not be a normal file or hardlink\&.
+.PP
+The timezone may be overridden for individual programs by using the TZ environment variable\&. See
+\fBenviron\fR(7)\&.
+.PP
+You may use
+\fBtimedatectl\fR(1)
+to change the settings of this file from the command line\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBtzset\fR(3),
+\fBlocaltime\fR(3),
+\fBtimedatectl\fR(1),
+\fBsystemd-timedated.service\fR(8)
diff --git a/man/localtime.html b/man/localtime.html
index 9d4826cfb8..340f789482 100644
--- a/man/localtime.html
+++ b/man/localtime.html
@@ -19,26 +19,26 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="localtime"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>localtime — Local time zone configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/localtime</code> -&gt; <code class="filename">../usr/share/zoneinfo/…</code></p></div><div class="refsect1"><a name="idm259775744672"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/localtime</code> file
- configures the system-wide time zone of the local
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="localtime"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>localtime — Local timezone configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/localtime</code> -&gt; <code class="filename">../usr/share/zoneinfo/…</code></p></div><div class="refsect1"><a name="idm274674590848"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/localtime</code> file
+ configures the system-wide timezone of the local
system that is used by applications for presentation
to the user. It should be an absolute or relative
symbolic link pointing to
<code class="filename">/usr/share/zoneinfo/</code>, followed by
- a time zone identifier such as
- <code class="literal">Europe/Berlin</code> or
- <code class="literal">Etc/UTC</code>. The resulting link should
+ a timezone identifier such as
+ "<code class="literal">Europe/Berlin</code>" or
+ "<code class="literal">Etc/UTC</code>". The resulting link should
lead to the corresponding binary
<a href="tzfile.html"><span class="citerefentry"><span class="refentrytitle">tzfile</span>(5)</span></a>
- time zone data for the configured time zone.</p><p>As the time zone identifier is extracted from
+ timezone data for the configured timezone.</p><p>Because the timezone identifier is extracted from
the symlink target name of
- <code class="filename">/etc/localtime</code> this file may not
- be a normal file or hardlink.</p><p>The time zone may be overridden for individual
+ <code class="filename">/etc/localtime</code>, this file may not
+ be a normal file or hardlink.</p><p>The timezone may be overridden for individual
programs by using the TZ environment variable. See
<a href="environ.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>.</p><p>You may use
<a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>
to change the settings of this file from the command
- line.</p></div><div class="refsect1"><a name="idm259775735504"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ line.</p></div><div class="refsect1"><a name="idm274674581840"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="tzset.html"><span class="citerefentry"><span class="refentrytitle">tzset</span>(3)</span></a>,
<a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(3)</span></a>,
diff --git a/man/localtime.xml b/man/localtime.xml
index d3da4ed277..b7fd1ba15d 100644
--- a/man/localtime.xml
+++ b/man/localtime.xml
@@ -51,7 +51,7 @@
<refnamediv>
<refname>localtime</refname>
- <refpurpose>Local time zone configuration file</refpurpose>
+ <refpurpose>Local timezone configuration file</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -62,24 +62,24 @@
<title>Description</title>
<para>The <filename>/etc/localtime</filename> file
- configures the system-wide time zone of the local
+ configures the system-wide timezone of the local
system that is used by applications for presentation
to the user. It should be an absolute or relative
symbolic link pointing to
<filename>/usr/share/zoneinfo/</filename>, followed by
- a time zone identifier such as
+ a timezone identifier such as
<literal>Europe/Berlin</literal> or
<literal>Etc/UTC</literal>. The resulting link should
lead to the corresponding binary
<citerefentry><refentrytitle>tzfile</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- time zone data for the configured time zone.</para>
+ timezone data for the configured timezone.</para>
- <para>As the time zone identifier is extracted from
+ <para>Because the timezone identifier is extracted from
the symlink target name of
- <filename>/etc/localtime</filename> this file may not
+ <filename>/etc/localtime</filename>, this file may not
be a normal file or hardlink.</para>
- <para>The time zone may be overridden for individual
+ <para>The timezone may be overridden for individual
programs by using the TZ environment variable. See
<citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
diff --git a/man/loginctl.1 b/man/loginctl.1
new file mode 100644
index 0000000000..275083769b
--- /dev/null
+++ b/man/loginctl.1
@@ -0,0 +1,265 @@
+'\" t
+.TH "LOGINCTL" "1" "" "systemd 208" "loginctl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+loginctl \- Control the systemd login manager
+.SH "SYNOPSIS"
+.HP \w'\fBloginctl\fR\ 'u
+\fBloginctl\fR [OPTIONS...] {COMMAND} [NAME...]
+.SH "DESCRIPTION"
+.PP
+\fBloginctl\fR
+may be used to introspect and control the state of the
+\fBsystemd\fR(1)
+login manager
+\fBsystemd-logind.service\fR(8)\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-property=\fR
+.RS 4
+When showing session/user/seat properties, limit display to certain properties as specified as argument\&. If not specified, all set properties are shown\&. The argument should be a property name, such as
+"Sessions"\&. If specified more than once, all properties with the specified names are shown\&.
+.RE
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+When showing session/user/seat properties, show all properties regardless whether they are set or not\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-full\fR
+.RS 4
+Do not ellipsize process tree entries\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+Do not query the user for authentication for privileged operations\&.
+.RE
+.PP
+\fB\-\-kill\-who=\fR
+.RS 4
+When used with
+\fBkill\-session\fR, choose which processes to kill\&. Must be one of
+\fBleader\fR, or
+\fBall\fR
+to select whether to kill only the leader process of the session or all processes of the session\&. If omitted, defaults to
+\fBall\fR\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-signal=\fR
+.RS 4
+When used with
+\fBkill\-session\fR
+or
+\fBkill\-user\fR, choose which signal to send to selected processes\&. Must be one of the well known signal specifiers, such as
+\fBSIGTERM\fR,
+\fBSIGINT\fR
+or
+\fBSIGSTOP\fR\&. If omitted, defaults to
+\fBSIGTERM\fR\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-host\fR
+.RS 4
+Execute operation remotely\&. Specify a hostname, or username and hostname separated by
+"@", to connect to\&. This will use SSH to talk to the remote login manager instance\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-privileged\fR
+.RS 4
+Acquire privileges via PolicyKit before executing the operation\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fBlist\-sessions\fR
+.RS 4
+List current sessions\&.
+.RE
+.PP
+\fBsession\-status [ID\&.\&.\&.]\fR
+.RS 4
+Show terse runtime status information about one or more sessions\&. This function is intended to generate human\-readable output\&. If you are looking for computer\-parsable output, use
+\fBshow\-session\fR
+instead\&.
+.RE
+.PP
+\fBshow\-session [ID\&.\&.\&.]\fR
+.RS 4
+Show properties of one or more sessions or the manager itself\&. If no argument is specified, properties of the manager will be shown\&. If a session ID is specified, properties of the session are shown\&. By default, empty properties are suppressed\&. Use
+\fB\-\-all\fR
+to show those too\&. To select specific properties to show, use
+\fB\-\-property=\fR\&. This command is intended to be used whenever computer\-parsable output is required\&. Use
+\fBsession\-status\fR
+if you are looking for formatted human\-readable output\&.
+.RE
+.PP
+\fBactivate [ID\&.\&.\&.]\fR
+.RS 4
+Activate one or more sessions\&. This brings one or more sessions into the foreground, if another session is currently in the foreground on the respective seat\&.
+.RE
+.PP
+\fBlock\-session [ID\&.\&.\&.]\fR, \fBunlock\-session [ID\&.\&.\&.]\fR
+.RS 4
+Activates/deactivates the screen lock on one or more sessions, if the session supports it\&.
+.RE
+.PP
+\fBlock\-sessions\fR, \fBunlock\-sessions\fR
+.RS 4
+Activates/deactivates the screen lock on all current sessions supporting it\&.
+.RE
+.PP
+\fBterminate\-session [ID\&.\&.\&.]\fR
+.RS 4
+Terminates a session\&. This kills all processes of the session and deallocates all resources attached to the session\&.
+.RE
+.PP
+\fBkill\-session [ID\&.\&.\&.]\fR
+.RS 4
+Send a signal to one or more processes of the session\&. Use
+\fB\-\-kill\-who=\fR
+to select which process to kill\&. Use
+\fB\-\-signal=\fR
+to select the signal to send\&.
+.RE
+.PP
+\fBlist\-users\fR
+.RS 4
+List currently logged in users\&.
+.RE
+.PP
+\fBuser\-status [USER\&.\&.\&.]\fR
+.RS 4
+Show terse runtime status information about one or more logged in users\&. This function is intended to generate human\-readable output\&. If you are looking for computer\-parsable output, use
+\fBshow\-user\fR
+instead\&. Users may be specified by their usernames or numeric user IDs\&.
+.RE
+.PP
+\fBshow\-user [USER\&.\&.\&.]\fR
+.RS 4
+Show properties of one or more users or the manager itself\&. If no argument is specified, properties of the manager will be shown\&. If a user is specified, properties of the user are shown\&. By default, empty properties are suppressed\&. Use
+\fB\-\-all\fR
+to show those too\&. To select specific properties to show, use
+\fB\-\-property=\fR\&. This command is intended to be used whenever computer\-parsable output is required\&. Use
+\fBuser\-status\fR
+if you are looking for formatted human\-readable output\&.
+.RE
+.PP
+\fBenable\-linger [USER\&.\&.\&.]\fR, \fBdisable\-linger [USER\&.\&.\&.]\fR
+.RS 4
+Enable/disable user lingering for one or more users\&. If enabled for a specific user, a user manager is spawned for him/her at boot and kept around after logouts\&. This allows users who are not logged in to run long\-running services\&.
+.RE
+.PP
+\fBterminate\-user [USER\&.\&.\&.]\fR
+.RS 4
+Terminates all sessions of a user\&. This kills all processes of all sessions of the user and deallocates all runtime resources attached to the user\&.
+.RE
+.PP
+\fBkill\-user [USER\&.\&.\&.]\fR
+.RS 4
+Send a signal to all processes of a user\&. Use
+\fB\-\-signal=\fR
+to select the signal to send\&.
+.RE
+.PP
+\fBlist\-seats\fR
+.RS 4
+List currently available seats on the local system\&.
+.RE
+.PP
+\fBseat\-status [NAME\&.\&.\&.]\fR
+.RS 4
+Show terse runtime status information about one or more seats\&. This function is intended to generate human\-readable output\&. If you are looking for computer\-parsable output, use
+\fBshow\-seat\fR
+instead\&.
+.RE
+.PP
+\fBshow\-seat [NAME\&.\&.\&.]\fR
+.RS 4
+Show properties of one or more seats or the manager itself\&. If no argument is specified, properties of the manager will be shown\&. If a seat is specified, properties of the seat are shown\&. By default, empty properties are suppressed\&. Use
+\fB\-\-all\fR
+to show those too\&. To select specific properties to show, use
+\fB\-\-property=\fR\&. This command is intended to be used whenever computer\-parsable output is required\&. Use
+\fBseat\-status\fR
+if you are looking for formatted human\-readable output\&.
+.RE
+.PP
+\fBattach [NAME] [DEVICE\&.\&.\&.]\fR
+.RS 4
+Persistently attach one or more devices to a seat\&. The devices should be specified via device paths in the
+/sys
+file system\&. To create a new seat, attach at least one graphics card to a previously unused seat name\&. Seat names may consist only of a\-z, A\-Z, 0\-9,
+"\-"
+and
+"_"
+and must be prefixed with
+"seat"\&. To drop assignment of a device to a specific seat, just reassign it to a different seat, or use
+\fBflush\-devices\fR\&.
+.RE
+.PP
+\fBflush\-devices\fR
+.RS 4
+Removes all device assignments previously created with
+\fBattach\fR\&. After this call, only automatically generated seats will remain, and all seat hardware is assigned to them\&.
+.RE
+.PP
+\fBterminate\-seat [NAME\&.\&.\&.]\fR
+.RS 4
+Terminates all sessions on a seat\&. This kills all processes of all sessions on a seat and deallocates all runtime resources attached to them\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-logind.service\fR(8),
+\fBlogind.conf\fR(5)
diff --git a/man/loginctl.html b/man/loginctl.html
index 3d39da9fda..ed48bdc879 100644
--- a/man/loginctl.html
+++ b/man/loginctl.html
@@ -19,27 +19,27 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="loginctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>loginctl — Control the systemd login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">loginctl [OPTIONS...] {COMMAND} [NAME...]</code> </p></div></div><div class="refsect1"><a name="idm259792381040"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>loginctl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="loginctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>loginctl — Control the systemd login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">loginctl</code> [OPTIONS...] {COMMAND} [NAME...]</p></div></div><div class="refsect1"><a name="idm274676202064"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>loginctl</strong></span> may be used to
introspect and control the state of the
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
- login manager <a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259788665424"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ login manager <a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274674005600"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>When showing
- session/user properties, limit
+ session/user/seat properties, limit
display to certain properties as
specified as argument. If not
- specified all set properties are
+ specified, all set properties are
shown. The argument should be a
property name, such as
- <code class="literal">Sessions</code>. If
- specified more than once all
+ "<code class="literal">Sessions</code>". If
+ specified more than once, all
properties with the specified names
are shown.</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p>When showing
- unit/job/manager properties, show all
+ session/user/seat properties, show all
properties regardless whether they are
- set or not.</p></dd><dt id="--full"><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#--full">¶</a></dt><dd><p>Do not ellipsize cgroup
- members.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
- pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Don't query the user
+ set or not.</p></dd><dt id="-l"><span class="term"><code class="option">-l</code>, </span><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p>Do not ellipsize
+ process tree entries.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
+ pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Do not query the user
for authentication for privileged
operations.</p></dd><dt id="--kill-who="><span class="term"><code class="option">--kill-who=</code></span><a class="headerlink" title="Permalink to this term" href="#--kill-who=">¶</a></dt><dd><p>When used with
<span class="command"><strong>kill-session</strong></span>,
@@ -48,18 +48,20 @@
<code class="option">all</code> to select whether
to kill only the leader process of the
session or all processes of the
- session. If omitted defaults to
+ session. If omitted, defaults to
<code class="option">all</code>.</p></dd><dt id="-s"><span class="term"><code class="option">-s</code>, </span><span class="term"><code class="option">--signal=</code></span><a class="headerlink" title="Permalink to this term" href="#-s">¶</a></dt><dd><p>When used with
<span class="command"><strong>kill-session</strong></span> or
<span class="command"><strong>kill-user</strong></span>, choose
which signal to send to selected
processes. Must be one of the well
- known signal specifiers such as
- SIGTERM, SIGINT or SIGSTOP. If omitted
- defaults to
- <code class="option">SIGTERM</code>.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute operation
+ known signal specifiers, such as
+ <code class="constant">SIGTERM</code>,
+ <code class="constant">SIGINT</code> or
+ <code class="constant">SIGSTOP</code>. If
+ omitted, defaults to
+ <code class="constant">SIGTERM</code>.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by "<code class="literal">@</code>",
to connect to. This will use SSH to
talk to the remote login manager
instance.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Acquire privileges via
@@ -73,14 +75,14 @@
<span class="command"><strong>show-session</strong></span>
instead.</p></dd><dt id="show-session [ID...]"><span class="term"><span class="command"><strong>show-session [ID...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show-session%20%5BID...%5D">¶</a></dt><dd><p>Show properties of one
or more sessions or the manager
- itself. If no argument is specified
+ itself. If no argument is specified,
properties of the manager will be
- shown. If a session ID is specified
- properties of the session is shown. By
+ shown. If a session ID is specified,
+ properties of the session are shown. By
default, empty properties are
suppressed. Use <code class="option">--all</code>
to show those too. To select specific
- properties to show use
+ properties to show, use
<code class="option">--property=</code>. This
command is intended to be used
whenever computer-parsable output is
@@ -119,14 +121,14 @@
their usernames or numeric user
IDs.</p></dd><dt id="show-user [USER...]"><span class="term"><span class="command"><strong>show-user [USER...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show-user%20%5BUSER...%5D">¶</a></dt><dd><p>Show properties of one
or more users or the manager
- itself. If no argument is specified
+ itself. If no argument is specified,
properties of the manager will be
- shown. If a user is specified
- properties of the user is shown. By
+ shown. If a user is specified,
+ properties of the user are shown. By
default, empty properties are
suppressed. Use <code class="option">--all</code>
to show those too. To select specific
- properties to show use
+ properties to show, use
<code class="option">--property=</code>. This
command is intended to be used
whenever computer-parsable output is
@@ -136,10 +138,10 @@
human-readable
output.</p></dd><dt id="enable-linger [USER...]"><span class="term"><span class="command"><strong>enable-linger [USER...]</strong></span>, </span><span class="term"><span class="command"><strong>disable-linger [USER...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#enable-linger%20%5BUSER...%5D">¶</a></dt><dd><p>Enable/disable user
lingering for one or more users. If
- enabled for a specific user a user
+ enabled for a specific user, a user
manager is spawned for him/her at
- boot, and kept around after
- logouts. This allows users who aren't
+ boot and kept around after
+ logouts. This allows users who are not
logged in to run long-running
services.</p></dd><dt id="terminate-user [USER...]"><span class="term"><span class="command"><strong>terminate-user [USER...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#terminate-user%20%5BUSER...%5D">¶</a></dt><dd><p>Terminates all
sessions of a user. This kills all
@@ -160,14 +162,14 @@
<span class="command"><strong>show-seat</strong></span>
instead.</p></dd><dt id="show-seat [NAME...]"><span class="term"><span class="command"><strong>show-seat [NAME...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show-seat%20%5BNAME...%5D">¶</a></dt><dd><p>Show properties of one
or more seats or the manager
- itself. If no argument is specified
+ itself. If no argument is specified,
properties of the manager will be
- shown. If a seat is specified
+ shown. If a seat is specified,
properties of the seat are shown. By
default, empty properties are
suppressed. Use <code class="option">--all</code>
to show those too. To select specific
- properties to show use
+ properties to show, use
<code class="option">--property=</code>. This
command is intended to be used
whenever computer-parsable output is
@@ -179,32 +181,34 @@
one or more devices to a seat. The
devices should be specified via device
paths in the <code class="filename">/sys</code>
- file system. To create a new seat
+ file system. To create a new seat,
attach at least one graphics card to a
previously unused seat name. Seat
names may consist only of a-z, A-Z,
- 0-9, "-" and "_" and must be prefixed
- with "seat". To drop assignment of a
- device to a specific seat just
- reassign it to a different seat, or
- use
- <span class="command"><strong>flush-devices</strong></span>.</p></dd><dt id="flush-devices"><span class="term"><span class="command"><strong>flush-devices</strong></span></span><a class="headerlink" title="Permalink to this term" href="#flush-devices">¶</a></dt><dd><p>Removes all device
+ 0-9, "<code class="literal">-</code>" and
+ "<code class="literal">_</code>" and must be
+ prefixed with "<code class="literal">seat</code>".
+ To drop assignment of a device to a
+ specific seat, just reassign it to a
+ different seat, or use
+ <span class="command"><strong>flush-devices</strong></span>.
+ </p></dd><dt id="flush-devices"><span class="term"><span class="command"><strong>flush-devices</strong></span></span><a class="headerlink" title="Permalink to this term" href="#flush-devices">¶</a></dt><dd><p>Removes all device
assignments previously created with
<span class="command"><strong>attach</strong></span>. After this
- call only automatically generated
- seats will remain and all seat
+ call, only automatically generated
+ seats will remain, and all seat
hardware is assigned to
them.</p></dd><dt id="terminate-seat [NAME...]"><span class="term"><span class="command"><strong>terminate-seat [NAME...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#terminate-seat%20%5BNAME...%5D">¶</a></dt><dd><p>Terminates all
sessions on a seat. This kills all
processes of all sessions on a seat and
deallocates all runtime resources
- attached to them.</p></dd></dl></div></div><div class="refsect1"><a name="idm259787841792"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259787840640"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
+ attached to them.</p></dd></dl></div></div><div class="refsect1"><a name="idm274674372000"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success, 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274674061264"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
<code class="option">--no-pager</code> is not given;
overrides <code class="varname">$PAGER</code>. Setting
this to an empty string or the value
- <code class="literal">cat</code> is equivalent to passing
- <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259787835936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">cat</code>" is equivalent to passing
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274676228464"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
diff --git a/man/loginctl.xml b/man/loginctl.xml
index 2c8d982eda..1b54ff7dc3 100644
--- a/man/loginctl.xml
+++ b/man/loginctl.xml
@@ -21,7 +21,7 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->
-<refentry id="loginctl" conditional='HAVE_PAM'>
+<refentry id="loginctl" conditional='ENABLE_LOGIND'>
<refentryinfo>
<title>loginctl</title>
@@ -49,7 +49,10 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>loginctl <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="req">COMMAND</arg> <arg choice="opt" rep="repeat">NAME</arg></command>
+ <command>loginctl</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="req">COMMAND</arg>
+ <arg choice="opt" rep="repeat">NAME</arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -88,14 +91,14 @@
<term><option>--property=</option></term>
<listitem><para>When showing
- session/user properties, limit
+ session/user/seat properties, limit
display to certain properties as
specified as argument. If not
- specified all set properties are
+ specified, all set properties are
shown. The argument should be a
property name, such as
<literal>Sessions</literal>. If
- specified more than once all
+ specified more than once, all
properties with the specified names
are shown.</para></listitem>
</varlistentry>
@@ -105,16 +108,17 @@
<term><option>--all</option></term>
<listitem><para>When showing
- unit/job/manager properties, show all
+ session/user/seat properties, show all
properties regardless whether they are
set or not.</para></listitem>
</varlistentry>
<varlistentry>
+ <term><option>-l</option></term>
<term><option>--full</option></term>
- <listitem><para>Do not ellipsize cgroup
- members.</para>
+ <listitem><para>Do not ellipsize
+ process tree entries.</para>
</listitem>
</varlistentry>
@@ -128,7 +132,7 @@
<varlistentry>
<term><option>--no-ask-password</option></term>
- <listitem><para>Don't query the user
+ <listitem><para>Do not query the user
for authentication for privileged
operations.</para></listitem>
</varlistentry>
@@ -143,7 +147,7 @@
<option>all</option> to select whether
to kill only the leader process of the
session or all processes of the
- session. If omitted defaults to
+ session. If omitted, defaults to
<option>all</option>.</para></listitem>
</varlistentry>
@@ -156,10 +160,12 @@
<command>kill-user</command>, choose
which signal to send to selected
processes. Must be one of the well
- known signal specifiers such as
- SIGTERM, SIGINT or SIGSTOP. If omitted
- defaults to
- <option>SIGTERM</option>.</para></listitem>
+ known signal specifiers, such as
+ <constant>SIGTERM</constant>,
+ <constant>SIGINT</constant> or
+ <constant>SIGSTOP</constant>. If
+ omitted, defaults to
+ <constant>SIGTERM</constant>.</para></listitem>
</varlistentry>
<varlistentry>
@@ -168,7 +174,7 @@
<listitem><para>Execute operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by <literal>@</literal>,
to connect to. This will use SSH to
talk to the remote login manager
instance.</para></listitem>
@@ -211,14 +217,14 @@
<listitem><para>Show properties of one
or more sessions or the manager
- itself. If no argument is specified
+ itself. If no argument is specified,
properties of the manager will be
- shown. If a session ID is specified
- properties of the session is shown. By
+ shown. If a session ID is specified,
+ properties of the session are shown. By
default, empty properties are
suppressed. Use <option>--all</option>
to show those too. To select specific
- properties to show use
+ properties to show, use
<option>--property=</option>. This
command is intended to be used
whenever computer-parsable output is
@@ -307,14 +313,14 @@
<listitem><para>Show properties of one
or more users or the manager
- itself. If no argument is specified
+ itself. If no argument is specified,
properties of the manager will be
- shown. If a user is specified
- properties of the user is shown. By
+ shown. If a user is specified,
+ properties of the user are shown. By
default, empty properties are
suppressed. Use <option>--all</option>
to show those too. To select specific
- properties to show use
+ properties to show, use
<option>--property=</option>. This
command is intended to be used
whenever computer-parsable output is
@@ -331,10 +337,10 @@
<listitem><para>Enable/disable user
lingering for one or more users. If
- enabled for a specific user a user
+ enabled for a specific user, a user
manager is spawned for him/her at
- boot, and kept around after
- logouts. This allows users who aren't
+ boot and kept around after
+ logouts. This allows users who are not
logged in to run long-running
services.</para></listitem>
</varlistentry>
@@ -385,14 +391,14 @@
<listitem><para>Show properties of one
or more seats or the manager
- itself. If no argument is specified
+ itself. If no argument is specified,
properties of the manager will be
- shown. If a seat is specified
+ shown. If a seat is specified,
properties of the seat are shown. By
default, empty properties are
suppressed. Use <option>--all</option>
to show those too. To select specific
- properties to show use
+ properties to show, use
<option>--property=</option>. This
command is intended to be used
whenever computer-parsable output is
@@ -410,16 +416,18 @@
one or more devices to a seat. The
devices should be specified via device
paths in the <filename>/sys</filename>
- file system. To create a new seat
+ file system. To create a new seat,
attach at least one graphics card to a
previously unused seat name. Seat
names may consist only of a-z, A-Z,
- 0-9, "-" and "_" and must be prefixed
- with "seat". To drop assignment of a
- device to a specific seat just
- reassign it to a different seat, or
- use
- <command>flush-devices</command>.</para></listitem>
+ 0-9, <literal>-</literal> and
+ <literal>_</literal> and must be
+ prefixed with <literal>seat</literal>.
+ To drop assignment of a device to a
+ specific seat, just reassign it to a
+ different seat, or use
+ <command>flush-devices</command>.
+ </para></listitem>
</varlistentry>
<varlistentry>
@@ -428,8 +436,8 @@
<listitem><para>Removes all device
assignments previously created with
<command>attach</command>. After this
- call only automatically generated
- seats will remain and all seat
+ call, only automatically generated
+ seats will remain, and all seat
hardware is assigned to
them.</para></listitem>
</varlistentry>
@@ -450,7 +458,7 @@
<refsect1>
<title>Exit status</title>
- <para>On success 0 is returned, a non-zero failure
+ <para>On success, 0 is returned, a non-zero failure
code otherwise.</para>
</refsect1>
diff --git a/man/logind.conf.5 b/man/logind.conf.5
new file mode 100644
index 0000000000..faac35cff8
--- /dev/null
+++ b/man/logind.conf.5
@@ -0,0 +1,178 @@
+'\" t
+.TH "LOGIND\&.CONF" "5" "" "systemd 208" "logind.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+logind.conf \- Login manager configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/systemd/logind\&.conf
+.SH "DESCRIPTION"
+.PP
+This file configures various parameters of the systemd login manager,
+\fBsystemd-logind.service\fR(8)\&.
+.SH "OPTIONS"
+.PP
+All options are configured in the
+"[Login]"
+section:
+.PP
+\fINAutoVTs=\fR
+.RS 4
+Takes a positive integer\&. Configures how many virtual terminals (VTs) to allocate by default that, when switched to and are previously unused,
+"autovt"
+services are automatically spawned on\&. These services are instantiated from the template unit
+autovt@\&.service
+for the respective VT TTY name, e\&.g\&.
+autovt@tty4\&.service\&. By default,
+autovt@\&.service
+is linked to
+getty@\&.service, i\&.e\&. login prompts are started dynamically as the user switches to unused virtual terminals\&. Hence, this parameter controls how many login
+"gettys"
+are available on the VTs\&. If a VT is already used by some other subsystem (for example a graphical login), this kind of activation will not be attempted\&. Note that the VT configured in
+\fIReserveVT=\fR
+is always subject to this kind of activation, even if it is not one of VTs configured with the
+\fINAutoVTs=\fR
+directive\&. Defaults to 6\&. When set to 0, automatic spawning of
+"autovt"
+services is disabled\&.
+.RE
+.PP
+\fIReserveVT=\fR
+.RS 4
+Takes a positive integer\&. Configures the number of one virtual terminal that shall unconditionally be reserved for
+autovt@\&.service
+activation (see above)\&. The VT selected with this option will be marked busy unconditionally, so that no other subsystem will allocate it\&. This functionality is useful to ensure that regardless of how many VTs are allocated by other subsystems, one login
+"getty"
+is always available\&. Defaults to 6 (in other words, there will always be a
+"getty"
+available on Alt\-F6\&.)\&. When set to 0, VT reservation is disabled\&.
+.RE
+.PP
+\fIKillUserProcesses=\fR
+.RS 4
+Takes a boolean argument\&. Configures whether the processes of a user should be killed when she or he completely logs out (i\&.e\&. after her/his last session ended)\&. Defaults to
+"no"\&.
+.sp
+Note that setting
+\fIKillUserProcesses=1\fR
+will break tools like
+\fBscreen\fR(1)\&.
+.RE
+.PP
+\fIKillOnlyUsers=\fR, \fIKillExcludeUsers=\fR
+.RS 4
+These settings take space\-separated lists of usernames that influence the effect of
+\fIKillUserProcesses=\fR\&. If not empty, only processes of users listed in
+\fIKillOnlyUsers=\fR
+will be killed when they log out entirely\&. Processes of users listed in
+\fIKillExcludeUsers=\fR
+are excluded from being killed\&.
+\fIKillExcludeUsers=\fR
+defaults to
+"root"
+and takes precedence over
+\fIKillOnlyUsers=\fR, which defaults to the empty list\&.
+.RE
+.PP
+\fIIdleAction=\fR
+.RS 4
+Configures the action to take when the system is idle\&. Takes one of
+"ignore",
+"poweroff",
+"reboot",
+"halt",
+"kexec",
+"suspend",
+"hibernate",
+"hybrid\-sleep",
+"lock"\&. Defaults to
+"ignore"\&.
+.sp
+Note that this requires that user sessions correctly report the idle status to the system\&. The system will execute the action after all sessions report that they are idle, no idle inhibitor lock is active, and subsequently, the time configured with
+\fIIdleActionSec=\fR
+(see below) has expired\&.
+.RE
+.PP
+\fIIdleActionSec=\fR
+.RS 4
+Configures the delay after which the action configured in
+\fIIdleAction=\fR
+(see above) is taken after the system is idle\&.
+.RE
+.PP
+\fIInhibitDelayMaxSec=\fR
+.RS 4
+Specifies the maximum time a system shutdown or sleep request is delayed due to an inhibitor lock of type
+"delay"
+being active before the inhibitor is ignored and the operation executes anyway\&. Defaults to 5s\&.
+.RE
+.PP
+\fIHandlePowerKey=\fR, \fIHandleSuspendKey=\fR, \fIHandleHibernateKey=\fR, \fIHandleLidSwitch=\fR
+.RS 4
+Controls whether logind shall handle the system power and sleep keys and the lid switch to trigger actions such as system power\-off or suspend\&. Can be one of
+"ignore",
+"poweroff",
+"reboot",
+"halt",
+"kexec",
+"suspend",
+"hibernate",
+"hybrid\-sleep"
+and
+"lock"\&. If
+"ignore", logind will never handle these keys\&. If
+"lock", all running sessions will be screen\-locked; otherwise, the specified action will be taken in the respective event\&. Only input devices with the
+"power\-switch"
+udev tag will be watched for key/lid switch events\&.
+\fIHandlePowerKey=\fR
+defaults to
+"poweroff"\&.
+\fIHandleSuspendKey=\fR
+and
+\fIHandleLidSwitch=\fR
+default to
+"suspend"\&.
+\fIHandleHibernateKey=\fR
+defaults to
+"hibernate"\&.
+.RE
+.PP
+\fIPowerKeyIgnoreInhibited=\fR, \fISuspendKeyIgnoreInhibited=\fR, \fIHibernateKeyIgnoreInhibited=\fR, \fILidSwitchIgnoreInhibited=\fR
+.RS 4
+Controls whether actions triggered by the power and sleep keys and the lid switch are subject to inhibitor locks\&. These settings take boolean arguments\&. If
+"off", the inhibitor locks taken by applications in order to block the requested operation are respected\&. If
+"on", the requested operation is executed in any case\&.
+\fIPowerKeyIgnoreInhibited=\fR,
+\fISuspendKeyIgnoreInhibited=\fR
+and
+\fIHibernateKeyIgnoreInhibited=\fR
+default to
+"off"\&.
+\fILidSwitchIgnoreInhibited=\fR
+defaults to
+"yes"\&. This means that the lid switch does not respect suspend blockers by default, but the power and sleep keys do\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-logind.service\fR(8),
+\fBloginctl\fR(1),
+\fBsystemd-system.conf\fR(5)
diff --git a/man/logind.conf.html b/man/logind.conf.html
index b3cba730ab..801302b67a 100644
--- a/man/logind.conf.html
+++ b/man/logind.conf.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="logind.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>logind.conf — Login manager configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/logind.conf</code></p></div><div class="refsect1"><a name="idm259795689488"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>This file configures various parameters of the systemd login manager <a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259795687456"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
- <code class="literal">[Login]</code> section:</p><div class="variablelist"><dl class="variablelist"><dt id="NAutoVTs="><span class="term"><code class="varname">NAutoVTs=</code></span><a class="headerlink" title="Permalink to this term" href="#NAutoVTs=">¶</a></dt><dd><p>Takes a positive
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="logind.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>logind.conf — Login manager configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/logind.conf</code></p></div><div class="refsect1"><a name="idm274690860784"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>This file configures various parameters of the systemd login manager, <a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274690954496"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
+ "<code class="literal">[Login]</code>" section:</p><div class="variablelist"><dl class="variablelist"><dt id="NAutoVTs="><span class="term"><code class="varname">NAutoVTs=</code></span><a class="headerlink" title="Permalink to this term" href="#NAutoVTs=">¶</a></dt><dd><p>Takes a positive
integer. Configures how many virtual
terminals (VTs) to allocate by default
- that -- when switched to and
- previously unused --
- <code class="literal">autovt</code> services are
+ that, when switched to and are
+ previously unused,
+ "<code class="literal">autovt</code>" services are
automatically spawned on. These
services are instantiated from the
template unit
<code class="filename">autovt@.service</code>
for the respective VT TTY name,
e.g. <code class="filename">autovt@tty4.service</code>. By
- default
+ default,
<code class="filename">autovt@.service</code>
is linked to
<code class="filename">getty@.service</code>,
@@ -40,10 +40,10 @@
dynamically as the user switches to
unused virtual terminals. Hence, this
parameter controls how many login
- <code class="literal">gettys</code> are
+ "<code class="literal">gettys</code>" are
available on the VTs. If a VT is
already used by some other subsystem
- (for example a graphical login) this
+ (for example a graphical login), this
kind of activation will not be
attempted. Note that the VT configured
in <code class="varname">ReserveVT=</code> is
@@ -53,23 +53,23 @@
<code class="varname">NAutoVTs=</code>
directive. Defaults to 6. When set to
0, automatic spawning of
- <code class="literal">autovt</code> services is
- disabled. </p></dd><dt id="ReserveVT="><span class="term"><code class="varname">ReserveVT=</code></span><a class="headerlink" title="Permalink to this term" href="#ReserveVT=">¶</a></dt><dd><p>Takes a positive
+ "<code class="literal">autovt</code>" services is
+ disabled.</p></dd><dt id="ReserveVT="><span class="term"><code class="varname">ReserveVT=</code></span><a class="headerlink" title="Permalink to this term" href="#ReserveVT=">¶</a></dt><dd><p>Takes a positive
integer. Configures the number of one
virtual terminal that shall
unconditionally be reserved for
<code class="filename">autovt@.service</code>
activation (see above). The VT
selected with this option will be
- marked busy unconditionally so that no
+ marked busy unconditionally, so that no
other subsystem will allocate it. This
functionality is useful to ensure that
- regardless how many VTs are allocated
- by other subsystems one login
- <code class="literal">getty</code> is always
- available. Defaults to 6 (with other
- words: there'll always be a
- <code class="literal">getty</code> available on
+ regardless of how many VTs are allocated
+ by other subsystems, one login
+ "<code class="literal">getty</code>" is always
+ available. Defaults to 6 (in other
+ words, there will always be a
+ "<code class="literal">getty</code>" available on
Alt-F6.). When set to 0, VT
reservation is
disabled.</p></dd><dt id="KillUserProcesses="><span class="term"><code class="varname">KillUserProcesses=</code></span><a class="headerlink" title="Permalink to this term" href="#KillUserProcesses=">¶</a></dt><dd><p>Takes a boolean
@@ -77,144 +77,109 @@
processes of a user should be killed
when she or he completely logs out (i.e. after
her/his last session ended). Defaults to
- <code class="literal">no</code>.</p></dd><dt id="IdleAction="><span class="term"><code class="varname">IdleAction=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleAction=">¶</a></dt><dd><p>Configures the action
- to take when the system is idle. Takes
- one of <code class="literal">ignore</code>,
- <code class="literal">poweroff</code>,
- <code class="literal">reboot</code>,
- <code class="literal">halt</code>,
- <code class="literal">kexec</code>,
- <code class="literal">suspend</code>,
- <code class="literal">hibernate</code>,
- <code class="literal">hybrid-sleep</code>,
- <code class="literal">lock</code>. Defaults to
- <code class="literal">ignore</code>.</p><p>Note that this requires that
- user sessions correctly report the
- idle status to the system. The system
- will execute the action after all
- sessions reported that they are idle,
- and no idle inhibitor lock is active,
- and subsequently the time configured
- with <code class="varname">IdleActionSec=</code>
- (see below) has passed.</p></dd><dt id="IdleActionSec="><span class="term"><code class="varname">IdleActionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleActionSec=">¶</a></dt><dd><p>Configures the delay
- after which the action configured in
- <code class="varname">IdleAction=</code> (see
- above) is taken after the system is
- idle.</p></dd><dt id="KillOnlyUsers="><span class="term"><code class="varname">KillOnlyUsers=</code>, </span><span class="term"><code class="varname">KillExcludeUsers=</code></span><a class="headerlink" title="Permalink to this term" href="#KillOnlyUsers=">¶</a></dt><dd><p>These settings take
- space separated lists of user names
+ "<code class="literal">no</code>".</p><p>Note that setting
+ <code class="varname">KillUserProcesses=1</code>
+ will break tools like
+ <a href="screen.html"><span class="citerefentry"><span class="refentrytitle">screen</span>(1)</span></a>.</p></dd><dt id="KillOnlyUsers="><span class="term"><code class="varname">KillOnlyUsers=</code>, </span><span class="term"><code class="varname">KillExcludeUsers=</code></span><a class="headerlink" title="Permalink to this term" href="#KillOnlyUsers=">¶</a></dt><dd><p>These settings take
+ space-separated lists of usernames
that influence the effect of
<code class="varname">KillUserProcesses=</code>. If
- not empty only processes of users
+ not empty, only processes of users
listed in
- <code class="varname">KillOnlyUsers</code> will
+ <code class="varname">KillOnlyUsers=</code> will
be killed when they log out
entirely. Processes of users listed in
<code class="varname">KillExcludeUsers=</code>
are excluded from being
killed. <code class="varname">KillExcludeUsers=</code>
- defaults to <code class="literal">root</code>
+ defaults to "<code class="literal">root</code>"
and takes precedence over
- <code class="varname">KillOnlyUsers=</code>
- which defaults to the empty list.</p></dd><dt id="Controllers="><span class="term"><code class="varname">Controllers=</code>, </span><span class="term"><code class="varname">ResetControllers=</code></span><a class="headerlink" title="Permalink to this term" href="#Controllers=">¶</a></dt><dd><p>These settings control
- the default control group hierarchies
- users logging in are added to, in
- addition to the
- <code class="literal">name=systemd</code> named
- hierarchy. These settings take space
- separated lists of controller
- names. Pass the empty string to ensure
- that logind does not touch any
- hierarchies but systemd's own. When
- logging in user sessions will get
- private control groups in all
- hierarchies listed in
- <code class="varname">Controllers=</code> and be
- reset to the root control group in all
- hierarchies listed in
- <code class="varname">ResetControllers=</code>. <code class="varname">Controllers=</code>
- defaults to the empty list,
- <code class="varname">ResetControllers=</code>
- defaults to
- <code class="literal">cpu</code>. Note that for
- all controllers that are not listed in
- either <code class="varname">Controllers=</code>
- nor
- <code class="varname">ResetControllers=</code>
- newly created sessions will be part of
- the control groups of the system
- service that created the
- session.</p></dd><dt id="InhibitDelayMaxSec="><span class="term"><code class="varname">InhibitDelayMaxSec=</code></span><a class="headerlink" title="Permalink to this term" href="#InhibitDelayMaxSec=">¶</a></dt><dd><p>Specifies the maximum
+ <code class="varname">KillOnlyUsers=</code>,
+ which defaults to the empty list.</p></dd><dt id="IdleAction="><span class="term"><code class="varname">IdleAction=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleAction=">¶</a></dt><dd><p>Configures the action
+ to take when the system is idle. Takes
+ one of "<code class="literal">ignore</code>",
+ "<code class="literal">poweroff</code>",
+ "<code class="literal">reboot</code>",
+ "<code class="literal">halt</code>",
+ "<code class="literal">kexec</code>",
+ "<code class="literal">suspend</code>",
+ "<code class="literal">hibernate</code>",
+ "<code class="literal">hybrid-sleep</code>",
+ "<code class="literal">lock</code>". Defaults to
+ "<code class="literal">ignore</code>".</p><p>Note that this requires that
+ user sessions correctly report the
+ idle status to the system. The system
+ will execute the action after all
+ sessions report that they are idle,
+ no idle inhibitor lock is active,
+ and subsequently, the time configured
+ with <code class="varname">IdleActionSec=</code>
+ (see below) has expired.</p></dd><dt id="IdleActionSec="><span class="term"><code class="varname">IdleActionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleActionSec=">¶</a></dt><dd><p>Configures the delay
+ after which the action configured in
+ <code class="varname">IdleAction=</code> (see
+ above) is taken after the system is
+ idle.</p></dd><dt id="InhibitDelayMaxSec="><span class="term"><code class="varname">InhibitDelayMaxSec=</code></span><a class="headerlink" title="Permalink to this term" href="#InhibitDelayMaxSec=">¶</a></dt><dd><p>Specifies the maximum
time a system shutdown or sleep
request is delayed due to an inhibitor
- lock of type <code class="literal">delay</code>
- being active -- before it is ignored
- and the operation executed
+ lock of type "<code class="literal">delay</code>"
+ being active before the inhibitor is
+ ignored and the operation executes
anyway. Defaults to
5s.</p></dd><dt id="HandlePowerKey="><span class="term"><code class="varname">HandlePowerKey=</code>, </span><span class="term"><code class="varname">HandleSuspendKey=</code>, </span><span class="term"><code class="varname">HandleHibernateKey=</code>, </span><span class="term"><code class="varname">HandleLidSwitch=</code></span><a class="headerlink" title="Permalink to this term" href="#HandlePowerKey=">¶</a></dt><dd><p>Controls whether
logind shall handle the system power
and sleep keys and the lid switch to
trigger actions such as system
power-off or suspend. Can be one of
- <code class="literal">ignore</code>,
- <code class="literal">poweroff</code>,
- <code class="literal">reboot</code>,
- <code class="literal">halt</code>,
- <code class="literal">kexec</code>,
- <code class="literal">suspend</code>,
- <code class="literal">hibernate</code>,
- <code class="literal">hybrid-sleep</code> and
- <code class="literal">lock</code>. If
- <code class="literal">ignore</code> logind will
+ "<code class="literal">ignore</code>",
+ "<code class="literal">poweroff</code>",
+ "<code class="literal">reboot</code>",
+ "<code class="literal">halt</code>",
+ "<code class="literal">kexec</code>",
+ "<code class="literal">suspend</code>",
+ "<code class="literal">hibernate</code>",
+ "<code class="literal">hybrid-sleep</code>" and
+ "<code class="literal">lock</code>". If
+ "<code class="literal">ignore</code>", logind will
never handle these keys. If
- <code class="literal">lock</code> all running
- sessions will be screen
- locked. Otherwise the specified action
+ "<code class="literal">lock</code>", all running
+ sessions will be screen-locked; otherwise,
+ the specified action
will be taken in the respective
event. Only input devices with the
- <code class="literal">power-switch</code> udev
+ "<code class="literal">power-switch</code>" udev
tag will be watched for key/lid switch
events. <code class="varname">HandlePowerKey=</code>
defaults to
- <code class="literal">poweroff</code>.
+ "<code class="literal">poweroff</code>".
<code class="varname">HandleSuspendKey=</code>
and
<code class="varname">HandleLidSwitch=</code>
- default to <code class="literal">suspend</code>.
+ default to "<code class="literal">suspend</code>".
<code class="varname">HandleHibernateKey=</code>
defaults to
- <code class="literal">hibernate</code>.</p></dd><dt id="PowerKeyIgnoreInhibited="><span class="term"><code class="varname">PowerKeyIgnoreInhibited=</code>, </span><span class="term"><code class="varname">SuspendKeyIgnoreInhibited=</code>, </span><span class="term"><code class="varname">HibernateKeyIgnoreInhibited=</code>, </span><span class="term"><code class="varname">LidSwitchIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#PowerKeyIgnoreInhibited=">¶</a></dt><dd><p>Controls whether
+ "<code class="literal">hibernate</code>".</p></dd><dt id="PowerKeyIgnoreInhibited="><span class="term"><code class="varname">PowerKeyIgnoreInhibited=</code>, </span><span class="term"><code class="varname">SuspendKeyIgnoreInhibited=</code>, </span><span class="term"><code class="varname">HibernateKeyIgnoreInhibited=</code>, </span><span class="term"><code class="varname">LidSwitchIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#PowerKeyIgnoreInhibited=">¶</a></dt><dd><p>Controls whether
actions triggered by the power and
sleep keys and the lid switch are
subject to inhibitor locks. These
settings take boolean arguments. If
- <code class="literal">off</code> the inhibitor
+ "<code class="literal">off</code>", the inhibitor
locks taken by applications in order
to block the requested operation are
- respected, if <code class="literal">on</code>
+ respected. If "<code class="literal">on</code>",
the requested operation is executed in
any
case. <code class="varname">PowerKeyIgnoreInhibited=</code>,
<code class="varname">SuspendKeyIgnoreInhibited=</code>
and
<code class="varname">HibernateKeyIgnoreInhibited=</code>
- defaults to <code class="literal">off</code>,
+ default to "<code class="literal">off</code>".
<code class="varname">LidSwitchIgnoreInhibited=</code>
defaults to
- <code class="literal">yes</code>. This means
+ "<code class="literal">yes</code>". This means
that the lid switch does not respect
suspend blockers by default, but the
power and sleep keys do.
- </p></dd></dl></div><p>Note that setting
- <code class="varname">KillUserProcesses=1</code> will break tools
- like
- <a href="screen.html"><span class="citerefentry"><span class="refentrytitle">screen</span>(1)</span></a>.</p><p>Note that <code class="varname">KillUserProcesses=1</code>
- is a weaker version of
- <code class="varname">kill-session-processes=1</code> which may
- be configured per-service for
- <a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a>. The
- latter kills processes of a session as soon as it
- ends, the former kills processes as soon as the last
- session of the user ends.</p></div><div class="refsect1"><a name="idm259794595984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274691758112"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
<a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>,
diff --git a/man/logind.conf.xml b/man/logind.conf.xml
index 47ee0e73ff..54cc379048 100644
--- a/man/logind.conf.xml
+++ b/man/logind.conf.xml
@@ -54,7 +54,7 @@
<refsect1>
<title>Description</title>
- <para>This file configures various parameters of the systemd login manager <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+ <para>This file configures various parameters of the systemd login manager, <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
</refsect1>
@@ -72,8 +72,8 @@
<listitem><para>Takes a positive
integer. Configures how many virtual
terminals (VTs) to allocate by default
- that -- when switched to and
- previously unused --
+ that, when switched to and are
+ previously unused,
<literal>autovt</literal> services are
automatically spawned on. These
services are instantiated from the
@@ -81,7 +81,7 @@
<filename>autovt@.service</filename>
for the respective VT TTY name,
e.g. <filename>autovt@tty4.service</filename>. By
- default
+ default,
<filename>autovt@.service</filename>
is linked to
<filename>getty@.service</filename>,
@@ -92,7 +92,7 @@
<literal>gettys</literal> are
available on the VTs. If a VT is
already used by some other subsystem
- (for example a graphical login) this
+ (for example a graphical login), this
kind of activation will not be
attempted. Note that the VT configured
in <varname>ReserveVT=</varname> is
@@ -103,7 +103,7 @@
directive. Defaults to 6. When set to
0, automatic spawning of
<literal>autovt</literal> services is
- disabled. </para></listitem>
+ disabled.</para></listitem>
</varlistentry>
<varlistentry>
@@ -116,14 +116,14 @@
<filename>autovt@.service</filename>
activation (see above). The VT
selected with this option will be
- marked busy unconditionally so that no
+ marked busy unconditionally, so that no
other subsystem will allocate it. This
functionality is useful to ensure that
- regardless how many VTs are allocated
- by other subsystems one login
+ regardless of how many VTs are allocated
+ by other subsystems, one login
<literal>getty</literal> is always
- available. Defaults to 6 (with other
- words: there'll always be a
+ available. Defaults to 6 (in other
+ words, there will always be a
<literal>getty</literal> available on
Alt-F6.). When set to 0, VT
reservation is
@@ -138,7 +138,34 @@
processes of a user should be killed
when she or he completely logs out (i.e. after
her/his last session ended). Defaults to
- <literal>no</literal>.</para></listitem>
+ <literal>no</literal>.</para>
+
+ <para>Note that setting
+ <varname>KillUserProcesses=1</varname>
+ will break tools like
+ <citerefentry><refentrytitle>screen</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>KillOnlyUsers=</varname></term>
+ <term><varname>KillExcludeUsers=</varname></term>
+
+ <listitem><para>These settings take
+ space-separated lists of usernames
+ that influence the effect of
+ <varname>KillUserProcesses=</varname>. If
+ not empty, only processes of users
+ listed in
+ <varname>KillOnlyUsers=</varname> will
+ be killed when they log out
+ entirely. Processes of users listed in
+ <varname>KillExcludeUsers=</varname>
+ are excluded from being
+ killed. <varname>KillExcludeUsers=</varname>
+ defaults to <literal>root</literal>
+ and takes precedence over
+ <varname>KillOnlyUsers=</varname>,
+ which defaults to the empty list.</para></listitem>
</varlistentry>
<varlistentry>
@@ -161,11 +188,11 @@
user sessions correctly report the
idle status to the system. The system
will execute the action after all
- sessions reported that they are idle,
- and no idle inhibitor lock is active,
- and subsequently the time configured
+ sessions report that they are idle,
+ no idle inhibitor lock is active,
+ and subsequently, the time configured
with <varname>IdleActionSec=</varname>
- (see below) has passed.</para>
+ (see below) has expired.</para>
</listitem>
</varlistentry>
@@ -180,71 +207,14 @@
</varlistentry>
<varlistentry>
- <term><varname>KillOnlyUsers=</varname></term>
- <term><varname>KillExcludeUsers=</varname></term>
-
- <listitem><para>These settings take
- space separated lists of user names
- that influence the effect of
- <varname>KillUserProcesses=</varname>. If
- not empty only processes of users
- listed in
- <varname>KillOnlyUsers</varname> will
- be killed when they log out
- entirely. Processes of users listed in
- <varname>KillExcludeUsers=</varname>
- are excluded from being
- killed. <varname>KillExcludeUsers=</varname>
- defaults to <literal>root</literal>
- and takes precedence over
- <varname>KillOnlyUsers=</varname>
- which defaults to the empty list.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>Controllers=</varname></term>
- <term><varname>ResetControllers=</varname></term>
-
- <listitem><para>These settings control
- the default control group hierarchies
- users logging in are added to, in
- addition to the
- <literal>name=systemd</literal> named
- hierarchy. These settings take space
- separated lists of controller
- names. Pass the empty string to ensure
- that logind does not touch any
- hierarchies but systemd's own. When
- logging in user sessions will get
- private control groups in all
- hierarchies listed in
- <varname>Controllers=</varname> and be
- reset to the root control group in all
- hierarchies listed in
- <varname>ResetControllers=</varname>. <varname>Controllers=</varname>
- defaults to the empty list,
- <varname>ResetControllers=</varname>
- defaults to
- <literal>cpu</literal>. Note that for
- all controllers that are not listed in
- either <varname>Controllers=</varname>
- nor
- <varname>ResetControllers=</varname>
- newly created sessions will be part of
- the control groups of the system
- service that created the
- session.</para></listitem>
- </varlistentry>
-
- <varlistentry>
<term><varname>InhibitDelayMaxSec=</varname></term>
<listitem><para>Specifies the maximum
time a system shutdown or sleep
request is delayed due to an inhibitor
lock of type <literal>delay</literal>
- being active -- before it is ignored
- and the operation executed
+ being active before the inhibitor is
+ ignored and the operation executes
anyway. Defaults to
5s.</para></listitem>
</varlistentry>
@@ -269,11 +239,11 @@
<literal>hibernate</literal>,
<literal>hybrid-sleep</literal> and
<literal>lock</literal>. If
- <literal>ignore</literal> logind will
+ <literal>ignore</literal>, logind will
never handle these keys. If
- <literal>lock</literal> all running
- sessions will be screen
- locked. Otherwise the specified action
+ <literal>lock</literal>, all running
+ sessions will be screen-locked; otherwise,
+ the specified action
will be taken in the respective
event. Only input devices with the
<literal>power-switch</literal> udev
@@ -301,17 +271,17 @@
sleep keys and the lid switch are
subject to inhibitor locks. These
settings take boolean arguments. If
- <literal>off</literal> the inhibitor
+ <literal>off</literal>, the inhibitor
locks taken by applications in order
to block the requested operation are
- respected, if <literal>on</literal>
+ respected. If <literal>on</literal>,
the requested operation is executed in
any
case. <varname>PowerKeyIgnoreInhibited=</varname>,
<varname>SuspendKeyIgnoreInhibited=</varname>
and
<varname>HibernateKeyIgnoreInhibited=</varname>
- defaults to <literal>off</literal>,
+ default to <literal>off</literal>.
<varname>LidSwitchIgnoreInhibited=</varname>
defaults to
<literal>yes</literal>. This means
@@ -322,20 +292,6 @@
</varlistentry>
</variablelist>
-
- <para>Note that setting
- <varname>KillUserProcesses=1</varname> will break tools
- like
- <citerefentry><refentrytitle>screen</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
-
- <para>Note that <varname>KillUserProcesses=1</varname>
- is a weaker version of
- <varname>kill-session-processes=1</varname> which may
- be configured per-service for
- <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>. The
- latter kills processes of a session as soon as it
- ends, the former kills processes as soon as the last
- session of the user ends.</para>
</refsect1>
<refsect1>
diff --git a/man/machine-id.5 b/man/machine-id.5
new file mode 100644
index 0000000000..565f067dd1
--- /dev/null
+++ b/man/machine-id.5
@@ -0,0 +1,96 @@
+'\" t
+.TH "MACHINE\-ID" "5" "" "systemd 208" "machine-id"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+machine-id \- Local machine ID configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/machine\-id
+.SH "DESCRIPTION"
+.PP
+The
+/etc/machine\-id
+file contains the unique machine ID of the local system that is set during installation\&. The machine ID is a single newline\-terminated, hexadecimal, 32\-character, lowercase machine ID string\&. When decoded from hexadecimal, this corresponds with a 16\-byte/128\-bit string\&.
+.PP
+The machine ID is usually generated from a random source during system installation and stays constant for all subsequent boots\&. Optionally, for stateless systems, it is generated during runtime at boot if it is found to be empty\&.
+.PP
+The machine ID does not change based on user configuration or when hardware is replaced\&.
+.PP
+This machine ID adheres to the same format and logic as the D\-Bus machine ID\&.
+.PP
+Programs may use this ID to identify the host with a globally unique ID in the network, which does not change even if the local network configuration changes\&. Due to this and its greater length, it is a more useful replacement for the
+\fBgethostid\fR(3)
+call that POSIX specifies\&.
+.PP
+The
+\fBsystemd-machine-id-setup\fR(1)
+tool may be used by installer tools to initialize the machine ID at install time\&.
+.SH "RELATION TO OSF UUIDS"
+.PP
+Note that the machine ID historically is not an OSF UUID as defined by
+\m[blue]\fBRFC 4122\fR\m[]\&\s-2\u[1]\d\s+2, nor a Microsoft GUID; however, starting with systemd v30, newly generated machine IDs do qualify as v4 UUIDs\&.
+.PP
+In order to maintain compatibility with existing installations, an application requiring a UUID should decode the machine ID, and then apply the following operations to turn it into a valid OSF v4 UUID\&. With
+"id"
+being an unsigned character array:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+/* Set UUID version to 4 \-\-\- truly random generation */
+id[6] = (id[6] & 0x0F) | 0x40;
+/* Set the UUID variant to DCE */
+id[8] = (id[8] & 0x3F) | 0x80;
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+(This code is inspired by
+"generate_random_uuid()"
+of
+drivers/char/random\&.c
+from the Linux kernel sources\&.)
+.SH "HISTORY"
+.PP
+The simple configuration file format of
+/etc/machine\-id
+originates in the
+/var/lib/dbus/machine\-id
+file introduced by D\-Bus\&. In fact, this latter file might be a symlink to
+\fI/etc/machine\-id\fR\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-machine-id-setup\fR(1),
+\fBgethostid\fR(3),
+\fBhostname\fR(5),
+\fBmachine-info\fR(5),
+\fBos-release\fR(5),
+\fBsd-id128\fR(3),
+\fBsd_id128_get_machine\fR(3)
+.SH "NOTES"
+.IP " 1." 4
+RFC 4122
+.RS 4
+\%https://tools.ietf.org/html/rfc4122
+.RE
diff --git a/man/machine-id.html b/man/machine-id.html
index b2b9378f8c..d893f3d809 100644
--- a/man/machine-id.html
+++ b/man/machine-id.html
@@ -19,48 +19,48 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="machine-id"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>machine-id — Local machine ID configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/machine-id</code></p></div><div class="refsect1"><a name="idm259782755728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/machine-id</code> file
- contains the unique machine id of the local system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="machine-id"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>machine-id — Local machine ID configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/machine-id</code></p></div><div class="refsect1"><a name="idm274703761008"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/machine-id</code> file
+ contains the unique machine ID of the local system
that is set during installation. The machine ID is a
- single newline-terminated, hexadecimal, lowercase 32
- character machine ID string. (When decoded from
- hexadecimal this corresponds with a 16 byte/128 bit
- string.)</p><p>The machine ID is usually generated from a
+ single newline-terminated, hexadecimal, 32-character,
+ lowercase machine ID string. When decoded from
+ hexadecimal, this corresponds with a 16-byte/128-bit
+ string.</p><p>The machine ID is usually generated from a
random source during system installation and stays
constant for all subsequent boots. Optionally, for
- stateless systems it is generated during runtime at
+ stateless systems, it is generated during runtime at
boot if it is found to be empty.</p><p>The machine ID does not change based on user
- configuration, or when hardware is replaced.</p><p>This machine ID adheres to the same format and
+ configuration or when hardware is replaced.</p><p>This machine ID adheres to the same format and
logic as the D-Bus machine ID.</p><p>Programs may use this ID to identify the host
with a globally unique ID in the network, which does
not change even if the local network configuration
- changes. Due to this and its greater length it is
+ changes. Due to this and its greater length, it is
a more useful replacement for the
<a href="gethostid.html"><span class="citerefentry"><span class="refentrytitle">gethostid</span>(3)</span></a>
- call POSIX specifies.</p><p>The
+ call that POSIX specifies.</p><p>The
<a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>
tool may be used by installer tools to initialize the
- machine ID at install time.</p></div><div class="refsect1"><a name="idm259782748880"></a><h2 id="Relation to OSF UUIDs">Relation to OSF UUIDs<a class="headerlink" title="Permalink to this headline" href="#Relation%20to%20OSF%20UUIDs">¶</a></h2><p>Note that the machine ID historically is not an
- OSF UUID as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, nor a Microsoft GUID. Starting with
- systemd v30 newly generated machine IDs however do
+ machine ID at install time.</p></div><div class="refsect1"><a name="idm274703754272"></a><h2 id="Relation to OSF UUIDs">Relation to OSF UUIDs<a class="headerlink" title="Permalink to this headline" href="#Relation%20to%20OSF%20UUIDs">¶</a></h2><p>Note that the machine ID historically is not an
+ OSF UUID as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a>, nor a Microsoft GUID; however, starting with
+ systemd v30, newly generated machine IDs do
qualify as v4 UUIDs.</p><p>In order to maintain compatibility with existing
installations, an application requiring a UUID should
decode the machine ID, and then apply the following
operations to turn it into a valid OSF v4 UUID. With
- <code class="literal">id</code> being an unsigned character
+ "<code class="literal">id</code>" being an unsigned character
array:</p><pre class="programlisting">/* Set UUID version to 4 --- truly random generation */
id[6] = (id[6] &amp; 0x0F) | 0x40;
/* Set the UUID variant to DCE */
id[8] = (id[8] &amp; 0x3F) | 0x80;</pre><p>(This code is inspired by
- <code class="literal">generate_random_uuid()</code> of
+ "<code class="literal">generate_random_uuid()</code>" of
<code class="filename">drivers/char/random.c</code> from the
- kernel sources.)</p></div><div class="refsect1"><a name="idm259782742704"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p>The simple configuration file format of
+ Linux kernel sources.)</p></div><div class="refsect1"><a name="idm274703748208"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p>The simple configuration file format of
<code class="filename">/etc/machine-id</code> originates in the
<code class="filename">/var/lib/dbus/machine-id</code> file
- introduced by D-Bus. In fact this latter file might be a
+ introduced by D-Bus. In fact, this latter file might be a
symlink to
- <code class="varname">/etc/machine-id</code>.</p></div><div class="refsect1"><a name="idm259786693264"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="varname">/etc/machine-id</code>.</p></div><div class="refsect1"><a name="idm274707645056"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>,
<a href="gethostid.html"><span class="citerefentry"><span class="refentrytitle">gethostid</span>(3)</span></a>,
diff --git a/man/machine-id.xml b/man/machine-id.xml
index 1e558a6178..4b4759e48d 100644
--- a/man/machine-id.xml
+++ b/man/machine-id.xml
@@ -55,21 +55,21 @@
<title>Description</title>
<para>The <filename>/etc/machine-id</filename> file
- contains the unique machine id of the local system
+ contains the unique machine ID of the local system
that is set during installation. The machine ID is a
- single newline-terminated, hexadecimal, lowercase 32
- character machine ID string. (When decoded from
- hexadecimal this corresponds with a 16 byte/128 bit
- string.)</para>
+ single newline-terminated, hexadecimal, 32-character,
+ lowercase machine ID string. When decoded from
+ hexadecimal, this corresponds with a 16-byte/128-bit
+ string.</para>
<para>The machine ID is usually generated from a
random source during system installation and stays
constant for all subsequent boots. Optionally, for
- stateless systems it is generated during runtime at
+ stateless systems, it is generated during runtime at
boot if it is found to be empty.</para>
<para>The machine ID does not change based on user
- configuration, or when hardware is replaced.</para>
+ configuration or when hardware is replaced.</para>
<para>This machine ID adheres to the same format and
logic as the D-Bus machine ID.</para>
@@ -77,10 +77,10 @@
<para>Programs may use this ID to identify the host
with a globally unique ID in the network, which does
not change even if the local network configuration
- changes. Due to this and its greater length it is
+ changes. Due to this and its greater length, it is
a more useful replacement for the
<citerefentry><refentrytitle>gethostid</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- call POSIX specifies.</para>
+ call that POSIX specifies.</para>
<para>The
<citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>
@@ -93,9 +93,9 @@
<para>Note that the machine ID historically is not an
OSF UUID as defined by <ulink
- url="http://tools.ietf.org/html/rfc4122">RFC
- 4122</ulink>, nor a Microsoft GUID. Starting with
- systemd v30 newly generated machine IDs however do
+ url="https://tools.ietf.org/html/rfc4122">RFC
+ 4122</ulink>, nor a Microsoft GUID; however, starting with
+ systemd v30, newly generated machine IDs do
qualify as v4 UUIDs.</para>
<para>In order to maintain compatibility with existing
@@ -113,7 +113,7 @@ id[8] = (id[8] &amp; 0x3F) | 0x80;</programlisting>
<para>(This code is inspired by
<literal>generate_random_uuid()</literal> of
<filename>drivers/char/random.c</filename> from the
- kernel sources.)</para>
+ Linux kernel sources.)</para>
</refsect1>
@@ -123,7 +123,7 @@ id[8] = (id[8] &amp; 0x3F) | 0x80;</programlisting>
<para>The simple configuration file format of
<filename>/etc/machine-id</filename> originates in the
<filename>/var/lib/dbus/machine-id</filename> file
- introduced by D-Bus. In fact this latter file might be a
+ introduced by D-Bus. In fact, this latter file might be a
symlink to
<varname>/etc/machine-id</varname>.</para>
</refsect1>
diff --git a/man/machine-info.5 b/man/machine-info.5
new file mode 100644
index 0000000000..78eb420160
--- /dev/null
+++ b/man/machine-info.5
@@ -0,0 +1,110 @@
+'\" t
+.TH "MACHINE\-INFO" "5" "" "systemd 208" "machine-info"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+machine-info \- Local machine information file
+.SH "SYNOPSIS"
+.PP
+/etc/machine\-info
+.SH "DESCRIPTION"
+.PP
+The
+/etc/machine\-info
+file contains machine meta data\&.
+.PP
+The basic file format of
+machine\-info
+is a newline\-separated list of environment\-like shell\-compatible variable assignments\&. It is possible to source the configuration from shell scripts, however, beyond mere variable assignments no shell features are supported, allowing applications to read the file without implementing a shell compatible execution engine\&.
+.PP
+/etc/machine\-info
+contains meta data about the machine that is set by the user or administrator\&.
+.PP
+Depending on the operating system other configuration files might be checked for machine information as well, however only as fallback\&.
+.PP
+You may use
+\fBhostnamectl\fR(1)
+to change the settings of this file from the command line\&.
+.SH "OPTIONS"
+.PP
+The following machine meta data parameters may be set using
+/etc/machine\-info:
+.PP
+\fIPRETTY_HOSTNAME=\fR
+.RS 4
+A pretty human\-readable UTF\-8 machine identifier string\&. This should contain a name like
+"Lennart\*(Aqs Laptop"
+which is useful to present to the user and does not suffer by the syntax limitations of internet domain names\&. If possible, the internet hostname as configured in
+/etc/hostname
+should be kept similar to this one\&. Example: if this value is
+"Lennart\*(Aqs Computer"
+an Internet hostname of
+"lennarts\-computer"
+might be a good choice\&. If this parameter is not set, an application should fall back to the Internet host name for presentation purposes\&.
+.RE
+.PP
+\fIICON_NAME=\fR
+.RS 4
+An icon identifying this machine according to the
+\m[blue]\fBXDG Icon Naming Specification\fR\m[]\&\s-2\u[1]\d\s+2\&. If this parameter is not set, an application should fall back to
+"computer"
+or a similar icon name\&.
+.RE
+.PP
+\fICHASSIS=\fR
+.RS 4
+The chassis type\&. Currently, the following chassis types are defined:
+"desktop",
+"laptop",
+"server",
+"tablet",
+"handset", as well as the special chassis types
+"vm"
+and
+"container"
+for virtualized systems that lack an immediate physical chassis\&. Note that many systems allow detection of the chassis type automatically (based on firmware information or suchlike)\&. This setting (if set) shall take precedence over automatically detected information and is useful to override misdetected configuration or to manually configure the chassis type where automatic detection is not available\&.
+.RE
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+PRETTY_HOSTNAME="Lennart\*(Aqs Tablet"
+ICON_NAME=computer\-tablet
+CHASSIS=tablet
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBos-release\fR(5),
+\fBhostname\fR(5),
+\fBmachine-id\fR(5),
+\fBhostnamectl\fR(1),
+\fBsystemd-hostnamed.service\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+XDG Icon Naming Specification
+.RS 4
+\%http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
+.RE
diff --git a/man/machine-info.html b/man/machine-info.html
index 28cd14fa28..fe896b8dbe 100644
--- a/man/machine-info.html
+++ b/man/machine-info.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="machine-info"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>machine-info — Local machine information file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/machine-info</code></p></div><div class="refsect1"><a name="idm259776390544"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/machine-info</code> file
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="machine-info"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>machine-info — Local machine information file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/machine-info</code></p></div><div class="refsect1"><a name="idm274685097296"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/machine-info</code> file
contains machine meta data.</p><p>The basic file format of
<code class="filename">machine-info</code> is a
newline-separated list of environment-like
@@ -35,44 +35,44 @@
information as well, however only as fallback.</p><p>You may use
<a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>
to change the settings of this file from the command
- line.</p></div><div class="refsect1"><a name="idm259776384208"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following machine meta data parameters may
+ line.</p></div><div class="refsect1"><a name="idm274685090960"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following machine meta data parameters may
be set using
<code class="filename">/etc/machine-info</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="PRETTY_HOSTNAME="><span class="term"><code class="varname">PRETTY_HOSTNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_HOSTNAME=">¶</a></dt><dd><p>A pretty
- human-readable UTF8 machine identifier
+ human-readable UTF-8 machine identifier
string. This should contain a name
- like <code class="literal">Lennart's
- Laptop</code> which is useful to
+ like "<code class="literal">Lennart's
+ Laptop</code>" which is useful to
present to the user and does not
suffer by the syntax limitations of
- internet domain names. If possible the
- internet host name as configured in
+ internet domain names. If possible, the
+ internet hostname as configured in
<code class="filename">/etc/hostname</code>
should be kept similar to this
one. Example: if this value is
- <code class="literal">Lennart's Computer</code>
- an Internet host name of
- <code class="literal">lennarts-computer</code>
+ "<code class="literal">Lennart's Computer</code>"
+ an Internet hostname of
+ "<code class="literal">lennarts-computer</code>"
might be a good choice. If this
- parameter is not set an application
+ parameter is not set, an application
should fall back to the Internet host
name for presentation
purposes.</p></dd><dt id="ICON_NAME="><span class="term"><code class="varname">ICON_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#ICON_NAME=">¶</a></dt><dd><p>An icon identifying
this machine according to the <a class="ulink" href="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html" target="_top">XDG
Icon Naming Specification</a>. If
- this parameter is not set an
+ this parameter is not set, an
application should fall back to
- <code class="literal">computer</code> or a
+ "<code class="literal">computer</code>" or a
similar icon name.</p></dd><dt id="CHASSIS="><span class="term"><code class="varname">CHASSIS=</code></span><a class="headerlink" title="Permalink to this term" href="#CHASSIS=">¶</a></dt><dd><p>The chassis
type. Currently, the following chassis
types are defined:
- <code class="literal">desktop</code>,
- <code class="literal">laptop</code>,
- <code class="literal">server</code>,
- <code class="literal">tablet</code>,
- <code class="literal">handset</code>, as well as
+ "<code class="literal">desktop</code>",
+ "<code class="literal">laptop</code>",
+ "<code class="literal">server</code>",
+ "<code class="literal">tablet</code>",
+ "<code class="literal">handset</code>", as well as
the special chassis types
- <code class="literal">vm</code> and
- <code class="literal">container</code> for
+ "<code class="literal">vm</code>" and
+ "<code class="literal">container</code>" for
virtualized systems that lack an
immediate physical chassis. Note that
many systems allow detection of the
@@ -84,9 +84,9 @@
override misdetected configuration or
to manually configure the chassis type
where automatic detection is not
- available.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780319744"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">PRETTY_HOSTNAME="Lennart's Tablet"
+ available.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688973632"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">PRETTY_HOSTNAME="Lennart's Tablet"
ICON_NAME=computer-tablet
-CHASSIS=tablet</pre></div><div class="refsect1"><a name="idm259780318288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+CHASSIS=tablet</pre></div><div class="refsect1"><a name="idm274688972176"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>,
diff --git a/man/machine-info.xml b/man/machine-info.xml
index 1c3a21c643..ddf8f8b3d0 100644
--- a/man/machine-info.xml
+++ b/man/machine-info.xml
@@ -94,22 +94,22 @@
<term><varname>PRETTY_HOSTNAME=</varname></term>
<listitem><para>A pretty
- human-readable UTF8 machine identifier
+ human-readable UTF-8 machine identifier
string. This should contain a name
like <literal>Lennart's
Laptop</literal> which is useful to
present to the user and does not
suffer by the syntax limitations of
- internet domain names. If possible the
- internet host name as configured in
+ internet domain names. If possible, the
+ internet hostname as configured in
<filename>/etc/hostname</filename>
should be kept similar to this
one. Example: if this value is
<literal>Lennart's Computer</literal>
- an Internet host name of
+ an Internet hostname of
<literal>lennarts-computer</literal>
might be a good choice. If this
- parameter is not set an application
+ parameter is not set, an application
should fall back to the Internet host
name for presentation
purposes.</para></listitem>
@@ -122,7 +122,7 @@
this machine according to the <ulink
url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">XDG
Icon Naming Specification</ulink>. If
- this parameter is not set an
+ this parameter is not set, an
application should fall back to
<literal>computer</literal> or a
similar icon name.</para></listitem>
diff --git a/man/machinectl.1 b/man/machinectl.1
new file mode 100644
index 0000000000..ead20a7e84
--- /dev/null
+++ b/man/machinectl.1
@@ -0,0 +1,162 @@
+'\" t
+.TH "MACHINECTL" "1" "" "systemd 208" "machinectl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+machinectl \- Control the systemd machine manager
+.SH "SYNOPSIS"
+.HP \w'\fBmachinectl\fR\ 'u
+\fBmachinectl\fR [OPTIONS...] {COMMAND} [NAME...]
+.SH "DESCRIPTION"
+.PP
+\fBmachinectl\fR
+may be used to introspect and control the state of the
+\fBsystemd\fR(1)
+virtual machine and container registration manager
+\fBsystemd-machined.service\fR(8)\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-property=\fR
+.RS 4
+When showing machine properties, limit the output to certain properties as specified by the argument\&. If not specified, all set properties are shown\&. The argument should be a property name, such as
+"Name"\&. If specified more than once, all properties with the specified names are shown\&.
+.RE
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+When showing machine properties, show all properties regardless of whether they are set or not\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-full\fR
+.RS 4
+Do not ellipsize process tree entries\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+Do not query the user for authentication for privileged operations\&.
+.RE
+.PP
+\fB\-\-kill\-who=\fR
+.RS 4
+When used with
+\fBkill\-machine\fR, choose which processes to kill\&. Must be one of
+\fBleader\fR, or
+\fBall\fR
+to select whether to kill only the leader process of the machine or all processes of the machine\&. If omitted, defaults to
+\fBall\fR\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-signal=\fR
+.RS 4
+When used with
+\fBkill\-machine\fR, choose which signal to send to selected processes\&. Must be one of the well\-known signal specifiers, such as
+\fBSIGTERM\fR,
+\fBSIGINT\fR
+or
+\fBSIGSTOP\fR\&. If omitted, defaults to
+\fBSIGTERM\fR\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-host\fR
+.RS 4
+Execute operation remotely\&. Specify a hostname, or username and hostname separated by
+"@", to connect to\&. This will use SSH to talk to the remote machine manager instance\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-privileged\fR
+.RS 4
+Acquire privileges via PolicyKit before executing the operation\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fBlist\fR
+.RS 4
+List currently running virtual machines and containers\&.
+.RE
+.PP
+\fBstatus [ID\&.\&.\&.]\fR
+.RS 4
+Show terse runtime status information about one or more virtual machines and containers\&. This function is intended to generate human\-readable output\&. If you are looking for computer\-parsable output, use
+\fBshow\fR
+instead\&.
+.RE
+.PP
+\fBshow [ID\&.\&.\&.]\fR
+.RS 4
+Show properties of one or more registered virtual machines or containers or the manager itself\&. If no argument is specified, properties of the manager will be shown\&. If an ID is specified, properties of this virtual machine or container are shown\&. By default, empty properties are suppressed\&. Use
+\fB\-\-all\fR
+to show those too\&. To select specific properties to show, use
+\fB\-\-property=\fR\&. This command is intended to be used whenever computer\-parsable output is required\&. Use
+\fBstatus\fR
+if you are looking for formatted human\-readable output\&.
+.RE
+.PP
+\fBterminate [ID\&.\&.\&.]\fR
+.RS 4
+Terminates a virtual machine or container\&. This kills all processes of the virtual machine or container and deallocates all resources attached to that instance\&.
+.RE
+.PP
+\fBkill [ID\&.\&.\&.]\fR
+.RS 4
+Send a signal to one or more processes of the virtual machine or container\&. This means processes as seen by the host, not the processes inside the virtual machine or container\&. Use
+\fB\-\-kill\-who=\fR
+to select which process to kill\&. Use
+\fB\-\-signal=\fR
+to select the signal to send\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd-machined.service\fR(8),
+\fBsystemd-logind.service\fR(8),
+\fBsystemd.special\fR(7)\&.
diff --git a/man/machinectl.html b/man/machinectl.html
new file mode 100644
index 0000000000..5b577875c3
--- /dev/null
+++ b/man/machinectl.html
@@ -0,0 +1,119 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>machinectl</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="machinectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>machinectl — Control the systemd machine manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">machinectl</code> [OPTIONS...] {COMMAND} [NAME...]</p></div></div><div class="refsect1"><a name="idm274680855120"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>machinectl</strong></span> may be used to
+ introspect and control the state of the
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
+ virtual machine and container registration manager <a href="systemd-machined.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274678658656"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
+ string and exits.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>When showing
+ machine properties, limit the
+ output to certain properties as
+ specified by the argument. If not
+ specified, all set properties are
+ shown. The argument should be a
+ property name, such as
+ "<code class="literal">Name</code>". If
+ specified more than once, all
+ properties with the specified names
+ are shown.</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p>When showing
+ machine properties, show all
+ properties regardless of whether they are
+ set or not.</p></dd><dt id="-l"><span class="term"><code class="option">-l</code>, </span><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p>Do not ellipsize
+ process tree entries.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
+ pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Do not query the user
+ for authentication for privileged
+ operations.</p></dd><dt id="--kill-who="><span class="term"><code class="option">--kill-who=</code></span><a class="headerlink" title="Permalink to this term" href="#--kill-who=">¶</a></dt><dd><p>When used with
+ <span class="command"><strong>kill-machine</strong></span>,
+ choose which processes to kill. Must
+ be one of <code class="option">leader</code>, or
+ <code class="option">all</code> to select whether
+ to kill only the leader process of the
+ machine or all processes of the
+ machine. If omitted, defaults to
+ <code class="option">all</code>.</p></dd><dt id="-s"><span class="term"><code class="option">-s</code>, </span><span class="term"><code class="option">--signal=</code></span><a class="headerlink" title="Permalink to this term" href="#-s">¶</a></dt><dd><p>When used with
+ <span class="command"><strong>kill-machine</strong></span>, choose
+ which signal to send to selected
+ processes. Must be one of the
+ well-known signal specifiers, such as
+ <code class="constant">SIGTERM</code>,
+ <code class="constant">SIGINT</code> or
+ <code class="constant">SIGSTOP</code>. If
+ omitted, defaults to
+ <code class="constant">SIGTERM</code>.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute operation
+ remotely. Specify a hostname, or
+ username and hostname separated by "<code class="literal">@</code>",
+ to connect to. This will use SSH to
+ talk to the remote machine manager
+ instance.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Acquire privileges via
+ PolicyKit before executing the
+ operation.</p></dd></dl></div><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="list"><span class="term"><span class="command"><strong>list</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list">¶</a></dt><dd><p>List currently running
+ virtual machines and containers.
+ </p></dd><dt id="status [ID...]"><span class="term"><span class="command"><strong>status [ID...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status%20%5BID...%5D">¶</a></dt><dd><p>Show terse runtime
+ status information about one or more
+ virtual machines and containers. This
+ function is intended to generate
+ human-readable output. If you are
+ looking for computer-parsable output,
+ use <span class="command"><strong>show</strong></span> instead.
+ </p></dd><dt id="show [ID...]"><span class="term"><span class="command"><strong>show [ID...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show%20%5BID...%5D">¶</a></dt><dd><p>Show properties of one
+ or more registered virtual machines or
+ containers or the manager itself. If
+ no argument is specified, properties
+ of the manager will be shown. If an
+ ID is specified, properties of this
+ virtual machine or container are
+ shown. By default, empty properties
+ are suppressed. Use
+ <code class="option">--all</code> to show those
+ too. To select specific properties to
+ show, use
+ <code class="option">--property=</code>. This
+ command is intended to be used
+ whenever computer-parsable output is
+ required. Use
+ <span class="command"><strong>status</strong></span> if you are
+ looking for formatted human-readable
+ output.</p></dd><dt id="terminate [ID...]"><span class="term"><span class="command"><strong>terminate [ID...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#terminate%20%5BID...%5D">¶</a></dt><dd><p>Terminates a virtual
+ machine or container. This kills all
+ processes of the virtual machine or
+ container and deallocates all
+ resources attached to that
+ instance.</p></dd><dt id="kill [ID...]"><span class="term"><span class="command"><strong>kill [ID...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kill%20%5BID...%5D">¶</a></dt><dd><p>Send a signal to one
+ or more processes of the virtual
+ machine or container. This means
+ processes as seen by the host, not the
+ processes inside the virtual machine
+ or container.
+ Use <code class="option">--kill-who=</code> to
+ select which process to kill. Use
+ <code class="option">--signal=</code> to select
+ the signal to send.</p></dd></dl></div></div><div class="refsect1"><a name="idm274679440960"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success, 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274680901760"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
+ <code class="option">--no-pager</code> is not given;
+ overrides <code class="varname">$PAGER</code>. Setting
+ this to an empty string or the value
+ "<code class="literal">cat</code>" is equivalent to passing
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274680044672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd-machined.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a>,
+ <a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
+ <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>.
+ </p></div></div></body></html>
diff --git a/man/machinectl.xml b/man/machinectl.xml
new file mode 100644
index 0000000000..2ed9f2e8a1
--- /dev/null
+++ b/man/machinectl.xml
@@ -0,0 +1,301 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+ This file is part of systemd.
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="machinectl" conditional='ENABLE_MACHINED'>
+
+ <refentryinfo>
+ <title>machinectl</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>machinectl</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>machinectl</refname>
+ <refpurpose>Control the systemd machine manager</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>machinectl</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="req">COMMAND</arg>
+ <arg choice="opt" rep="repeat">NAME</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><command>machinectl</command> may be used to
+ introspect and control the state of the
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ virtual machine and container registration manager <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+
+ <para>The following options are understood:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-h</option></term>
+ <term><option>--help</option></term>
+
+ <listitem><para>Prints a short help
+ text and exits.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--version</option></term>
+
+ <listitem><para>Prints a short version
+ string and exits.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-p</option></term>
+ <term><option>--property=</option></term>
+
+ <listitem><para>When showing
+ machine properties, limit the
+ output to certain properties as
+ specified by the argument. If not
+ specified, all set properties are
+ shown. The argument should be a
+ property name, such as
+ <literal>Name</literal>. If
+ specified more than once, all
+ properties with the specified names
+ are shown.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-a</option></term>
+ <term><option>--all</option></term>
+
+ <listitem><para>When showing
+ machine properties, show all
+ properties regardless of whether they are
+ set or not.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-l</option></term>
+ <term><option>--full</option></term>
+
+ <listitem><para>Do not ellipsize
+ process tree entries.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--no-pager</option></term>
+
+ <listitem><para>Do not pipe output into a
+ pager.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--no-ask-password</option></term>
+
+ <listitem><para>Do not query the user
+ for authentication for privileged
+ operations.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--kill-who=</option></term>
+
+ <listitem><para>When used with
+ <command>kill-machine</command>,
+ choose which processes to kill. Must
+ be one of <option>leader</option>, or
+ <option>all</option> to select whether
+ to kill only the leader process of the
+ machine or all processes of the
+ machine. If omitted, defaults to
+ <option>all</option>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-s</option></term>
+ <term><option>--signal=</option></term>
+
+ <listitem><para>When used with
+ <command>kill-machine</command>, choose
+ which signal to send to selected
+ processes. Must be one of the
+ well-known signal specifiers, such as
+ <constant>SIGTERM</constant>,
+ <constant>SIGINT</constant> or
+ <constant>SIGSTOP</constant>. If
+ omitted, defaults to
+ <constant>SIGTERM</constant>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-H</option></term>
+ <term><option>--host</option></term>
+
+ <listitem><para>Execute operation
+ remotely. Specify a hostname, or
+ username and hostname separated by <literal>@</literal>,
+ to connect to. This will use SSH to
+ talk to the remote machine manager
+ instance.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-P</option></term>
+ <term><option>--privileged</option></term>
+
+ <listitem><para>Acquire privileges via
+ PolicyKit before executing the
+ operation.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>The following commands are understood:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>list</command></term>
+
+ <listitem><para>List currently running
+ virtual machines and containers.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>status [ID...]</command></term>
+
+ <listitem><para>Show terse runtime
+ status information about one or more
+ virtual machines and containers. This
+ function is intended to generate
+ human-readable output. If you are
+ looking for computer-parsable output,
+ use <command>show</command> instead.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>show [ID...]</command></term>
+
+ <listitem><para>Show properties of one
+ or more registered virtual machines or
+ containers or the manager itself. If
+ no argument is specified, properties
+ of the manager will be shown. If an
+ ID is specified, properties of this
+ virtual machine or container are
+ shown. By default, empty properties
+ are suppressed. Use
+ <option>--all</option> to show those
+ too. To select specific properties to
+ show, use
+ <option>--property=</option>. This
+ command is intended to be used
+ whenever computer-parsable output is
+ required. Use
+ <command>status</command> if you are
+ looking for formatted human-readable
+ output.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>terminate [ID...]</command></term>
+
+ <listitem><para>Terminates a virtual
+ machine or container. This kills all
+ processes of the virtual machine or
+ container and deallocates all
+ resources attached to that
+ instance.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>kill [ID...]</command></term>
+
+ <listitem><para>Send a signal to one
+ or more processes of the virtual
+ machine or container. This means
+ processes as seen by the host, not the
+ processes inside the virtual machine
+ or container.
+ Use <option>--kill-who=</option> to
+ select which process to kill. Use
+ <option>--signal=</option> to select
+ the signal to send.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Exit status</title>
+
+ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Environment</title>
+
+ <variablelist class='environment-variables'>
+ <varlistentry>
+ <term><varname>$SYSTEMD_PAGER</varname></term>
+ <listitem><para>Pager to use when
+ <option>--no-pager</option> is not given;
+ overrides <varname>$PAGER</varname>. Setting
+ this to an empty string or the value
+ <literal>cat</literal> is equivalent to passing
+ <option>--no-pager</option>.</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/modules-load.d.5 b/man/modules-load.d.5
new file mode 100644
index 0000000000..907e7f7941
--- /dev/null
+++ b/man/modules-load.d.5
@@ -0,0 +1,78 @@
+'\" t
+.TH "MODULES\-LOAD\&.D" "5" "" "systemd 208" "modules-load.d"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+modules-load.d \- Configure kernel modules to load at boot
+.SH "SYNOPSIS"
+.PP
+/etc/modules\-load\&.d/*\&.conf
+.PP
+/run/modules\-load\&.d/*\&.conf
+.PP
+/usr/lib/modules\-load\&.d/*\&.conf
+.SH "DESCRIPTION"
+.PP
+\fBsystemd-modules-load.service\fR(8)
+reads files from the above directories which contain kernel modules to load during boot in a static list\&. Each configuration file is named in the style of
+/etc/modules\-load\&.d/\fIprogram\fR\&.conf\&. Note that it is usually a better idea to rely on the automatic module loading by PCI IDs, USB IDs, DMI IDs or similar triggers encoded in the kernel modules themselves instead of static configuration like this\&. In fact, most modern kernel modules are prepared for automatic loading already\&.
+.SH "CONFIGURATION FORMAT"
+.PP
+The configuration files should simply contain a list of kernel module names to load, separated by newlines\&. Empty lines and lines whose first non\-whitespace character is # or ; are ignored\&.
+.PP
+Each configuration file shall be named in the style of
+\fIprogram\fR\&.conf\&. Files in
+/etc/
+override files with the same name in
+/usr/lib/
+and
+/run/\&. Files in
+/run/
+override files with the same name in
+/usr/lib/\&. Packages should install their configuration files in
+/usr/lib/, files in
+/etc/
+are reserved for the local administrator, who may use this logic to override the configuration files installed from vendor packages\&.
+.PP
+If the administrator wants to disable a configuration file supplied by the vendor, the recommended way is to place a symlink to
+/dev/null
+in
+/etc/modules\-load\&.d/
+bearing the same filename\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&/etc/modules-load.d/virtio-net.conf example:\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Load virtio\-net\&.ko at boot
+virtio\-net
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-modules-load.service\fR(8),
+\fBsystemd-delta\fR(1),
+\fBmodprobe\fR(8)
diff --git a/man/modules-load.d.html b/man/modules-load.d.html
index e57f188d0e..3b31034dc7 100644
--- a/man/modules-load.d.html
+++ b/man/modules-load.d.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="modules-load.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>modules-load.d — Configure kernel modules to load at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/modules-load.d/*.conf</code></p><p><code class="filename">/run/modules-load.d/*.conf</code></p><p><code class="filename">/usr/lib/modules-load.d/*.conf</code></p></div><div class="refsect1"><a name="idm259769383536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="modules-load.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>modules-load.d — Configure kernel modules to load at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/modules-load.d/*.conf</code></p><p><code class="filename">/run/modules-load.d/*.conf</code></p><p><code class="filename">/usr/lib/modules-load.d/*.conf</code></p></div><div class="refsect1"><a name="idm274685617200"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a>
reads files from the above directories which contain
kernel modules to load during boot in a static list.
Each configuration file is named in the style of
@@ -29,7 +29,7 @@
or similar triggers encoded in the kernel modules
themselves instead of static configuration like
this. In fact, most modern kernel modules are prepared
- for automatic loading already.</p></div><div class="refsect1"><a name="idm259769452576"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>The configuration files should simply contain a
+ for automatic loading already.</p></div><div class="refsect1"><a name="idm274684775536"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>The configuration files should simply contain a
list of kernel module names to load, separated by
newlines. Empty lines and lines whose first
non-whitespace character is # or ; are ignored.</p><p>Each configuration file shall be named in the
@@ -45,12 +45,12 @@
administrator, who may use this logic to override the
configuration files installed from vendor
packages.</p><p>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<code class="filename">/dev/null</code> in
<code class="filename">/etc/modules-load.d/</code> bearing the
- same file name.</p></div><div class="refsect1"><a name="idm259765657760"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259765657088"></a><p class="title"><b>Example 1. /etc/modules-load.d/virtio-net.conf example:</b></p><div class="example-contents"><pre class="programlisting"># Load virtio-net.ko at boot
-virtio-net</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259765655440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ same filename.</p></div><div class="refsect1"><a name="idm274685014704"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274685942096"></a><p class="title"><b>Example 1. /etc/modules-load.d/virtio-net.conf example:</b></p><div class="example-contents"><pre class="programlisting"># Load virtio-net.ko at boot
+virtio-net</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685650256"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a>,
<a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>,
diff --git a/man/modules-load.d.xml b/man/modules-load.d.xml
index ce94bef7a7..33c466f926 100644
--- a/man/modules-load.d.xml
+++ b/man/modules-load.d.xml
@@ -90,11 +90,11 @@
packages.</para>
<para>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<filename>/dev/null</filename> in
<filename>/etc/modules-load.d/</filename> bearing the
- same file name.</para>
+ same filename.</para>
</refsect1>
<refsect1>
diff --git a/man/nss-myhostname.8 b/man/nss-myhostname.8
new file mode 100644
index 0000000000..2ba5a630f0
--- /dev/null
+++ b/man/nss-myhostname.8
@@ -0,0 +1,113 @@
+'\" t
+.TH "NSS\-MYHOSTNAME" "8" "" "systemd 208" "nss-myhostname"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nss-myhostname \- Provide hostname resolution for the locally configured system hostname\&.
+.SH "SYNOPSIS"
+.PP
+nss\-myhostname\&.la
+.SH "DESCRIPTION"
+.PP
+\fBnss\-myhostname\fR
+is a plugin for the GNU Name Service Switch (NSS) functionality of the GNU C Library (\fBglibc\fR) providing hostname resolution for the locally configured system hostname as returned by
+\fBgethostname\fR(2)\&. Various software relies on an always\-resolvable local hostname\&. When using dynamic hostnames, this is usually achieved by patching
+/etc/hosts
+at the same time as changing the host name\&. This however is not ideal since it requires a writable
+/etc
+file system and is fragile because the file might be edited by the administrator at the same time\&.
+\fBnss\-myhostname\fR
+simply returns all locally configured public IP addresses, or, if none are configured, the IPv4 address 127\&.0\&.0\&.2 (which is on the local loopback) and the IPv6 address ::1 (which is the local host) for whatever system hostname is configured locally\&. Patching
+/etc/hosts
+is thus no longer necessary\&.
+.PP
+To activate the NSS modules,
+\fBmyhostname\fR
+has to be added to the line starting with "\fIhosts:\fR" in
+/etc/nsswitch\&.conf
+.PP
+It is recommended to put
+\fBmyhostname\fR
+last in the
+nsswitch\&.conf
+line to make sure that this mapping is only used as fallback, and any DNS or
+/etc/hosts
+based mapping takes precedence\&.
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# /etc/nsswitch\&.conf
+
+passwd: compat
+group: compat
+shadow: compat
+
+hosts: files dns \fImyhostname\fR
+networks: files
+
+protocols: db files
+services: db files
+ethers: db files
+rpc: db files
+
+netgroup: nis
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+To test, use
+\fBglibc\fR\*(Aqs
+\fBgetent\fR
+tool:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ getent ahosts `hostname`
+::1 STREAM omega
+::1 DGRAM
+::1 RAW
+127\&.0\&.0\&.2 STREAM
+127\&.0\&.0\&.2 DGRAM
+127\&.0\&.0\&.2 RAW
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+In this case the local hostname is
+\fIomega\fR\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-logind.service\fR(8),
+\fBlogind.conf\fR(5),
+\fBloginctl\fR(1),
+\fBpam.conf\fR(5),
+\fBpam.d\fR(5),
+\fBpam\fR(8),
+\fBpam_loginuid\fR(8)
diff --git a/man/nss-myhostname.html b/man/nss-myhostname.html
index c17c915658..c36736f1c8 100644
--- a/man/nss-myhostname.html
+++ b/man/nss-myhostname.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="nss-myhostname"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>nss-myhostname — Provide host name resolution for the locally
- configured system hostname.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">nss-myhostname.la</code></p></div><div class="refsect1"><a name="idm259768906416"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>nss-myhostname</strong></span> is a plugin for the GNU Name Service Switch
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="nss-myhostname"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>nss-myhostname — Provide hostname resolution for the locally
+ configured system hostname.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">nss-myhostname.la</code></p></div><div class="refsect1"><a name="idm274696403040"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>nss-myhostname</strong></span> is a plugin for the GNU Name Service Switch
(NSS) functionality of the GNU C Library (<span class="command"><strong>glibc</strong></span>)
- providing host name resolution for the locally configured system
+ providing hostname resolution for the locally configured system
hostname as returned by
<a href="gethostname.html"><span class="citerefentry"><span class="refentrytitle">gethostname</span>(2)</span></a>.
- Various software relies on an always resolvable local host name. When
- using dynamic hostnames this is usually achieved by patching
+ Various software relies on an always-resolvable local hostname. When
+ using dynamic hostnames, this is usually achieved by patching
<code class="filename">/etc/hosts</code> at the same time as changing the host
name. This however is not ideal since it requires a writable
<code class="filename">/etc</code> file system and is fragile because the file
might be edited by the administrator at the same time. <span class="command"><strong>nss-myhostname</strong></span>
- simply returns all locally configure public IP addresses, or -- if none
- are configured -- the IPv4 address 127.0.0.2 (which is on the local
+ simply returns all locally configured public IP addresses, or, if none
+ are configured, the IPv4 address 127.0.0.2 (which is on the local
loopback) and the IPv6 address ::1 (which is the local host) for
whatever system hostname is configured locally. Patching
<code class="filename">/etc/hosts</code> is thus no longer necessary.</p><p>To activate the NSS modules, <code class="option">myhostname</code>
@@ -40,7 +40,7 @@
<code class="filename">/etc/nsswitch.conf</code></p><p>It is recommended to put <code class="option">myhostname</code>
last in the <code class="filename">nsswitch.conf</code> line to make
sure that this mapping is only used as fallback, and any DNS
- or <code class="filename">/etc/hosts</code> based mapping takes precedence.</p></div><div class="refsect1"><a name="idm259767389856"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">
+ or <code class="filename">/etc/hosts</code> based mapping takes precedence.</p></div><div class="refsect1"><a name="idm274696391728"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">
# /etc/nsswitch.conf
passwd: compat
@@ -64,7 +64,7 @@ $ getent ahosts `hostname`
127.0.0.2 STREAM
127.0.0.2 DGRAM
127.0.0.2 RAW
- </pre><p>In this case the local host name is <code class="varname">omega</code>.</p></div><div class="refsect1"><a name="idm259767384112"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre><p>In this case the local hostname is <code class="varname">omega</code>.</p></div><div class="refsect1"><a name="idm274700344208"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
<a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a>,
diff --git a/man/nss-myhostname.xml b/man/nss-myhostname.xml
index c0e2b828be..efbadac33f 100644
--- a/man/nss-myhostname.xml
+++ b/man/nss-myhostname.xml
@@ -45,7 +45,7 @@
<refnamediv>
<refname>nss-myhostname</refname>
- <refpurpose>Provide host name resolution for the locally
+ <refpurpose>Provide hostname resolution for the locally
configured system hostname.</refpurpose>
</refnamediv>
@@ -58,17 +58,17 @@
<para><command>nss-myhostname</command> is a plugin for the GNU Name Service Switch
(NSS) functionality of the GNU C Library (<command>glibc</command>)
- providing host name resolution for the locally configured system
+ providing hostname resolution for the locally configured system
hostname as returned by
<citerefentry><refentrytitle>gethostname</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
- Various software relies on an always resolvable local host name. When
- using dynamic hostnames this is usually achieved by patching
+ Various software relies on an always-resolvable local hostname. When
+ using dynamic hostnames, this is usually achieved by patching
<filename>/etc/hosts</filename> at the same time as changing the host
name. This however is not ideal since it requires a writable
<filename>/etc</filename> file system and is fragile because the file
might be edited by the administrator at the same time. <command>nss-myhostname</command>
- simply returns all locally configure public IP addresses, or -- if none
- are configured -- the IPv4 address 127.0.0.2 (which is on the local
+ simply returns all locally configured public IP addresses, or, if none
+ are configured, the IPv4 address 127.0.0.2 (which is on the local
loopback) and the IPv6 address ::1 (which is the local host) for
whatever system hostname is configured locally. Patching
<filename>/etc/hosts</filename> is thus no longer necessary.</para>
@@ -116,7 +116,7 @@ $ getent ahosts `hostname`
127.0.0.2 RAW
</programlisting>
- <para>In this case the local host name is <varname>omega</varname>.</para>
+ <para>In this case the local hostname is <varname>omega</varname>.</para>
</refsect1>
diff --git a/man/os-release.5 b/man/os-release.5
new file mode 100644
index 0000000000..cf9ec67d6f
--- /dev/null
+++ b/man/os-release.5
@@ -0,0 +1,205 @@
+'\" t
+.TH "OS\-RELEASE" "5" "" "systemd 208" "os-release"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+os-release \- Operating system identification
+.SH "SYNOPSIS"
+.PP
+/etc/os\-release
+.SH "DESCRIPTION"
+.PP
+The
+/etc/os\-release
+file contains operating system identification data\&.
+.PP
+The basic file format of
+os\-release
+is a newline\-separated list of environment\-like shell\-compatible variable assignments\&. It is possible to source the configuration from shell scripts, however, beyond mere variable assignments, no shell features are supported (this means variable expansion is explicitly not supported), allowing applications to read the file without implementing a shell compatible execution engine\&. Variable assignment values should be enclosed in double or single quotes if they include spaces, semicolons or other special characters outside of A\-Z, a\-z, 0\-9\&. All strings should be in UTF\-8 format, and non\-printable characters should not be used\&. If double or single quotes or backslashes are to be used within variable assignments, they should be escaped with backslashes, following shell style\&. It is not supported to concatenate multiple individually quoted strings\&. Lines beginning with "#" shall be ignored as comments\&.
+.PP
+/etc/os\-release
+contains data that is defined by the operating system vendor and should not be changed by the administrator\&.
+.PP
+As this file only encodes names and identifiers it should not be localized\&.
+.PP
+The file
+/etc/os\-release
+might be a symlink to another file, but it is important that the file is available from earliest boot on, and hence must be located on the root file system\&.
+.PP
+For a longer rationale for
+/etc/os\-release
+please refer to the
+\m[blue]\fBAnnouncement of /etc/os\-release\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "OPTIONS"
+.PP
+The following OS identifications parameters may be set using
+/etc/os\-release:
+.PP
+\fINAME=\fR
+.RS 4
+A string identifying the operating system, without a version component, and suitable for presentation to the user\&. If not set, defaults to
+"NAME=Linux"\&. Example:
+"NAME=Fedora"
+or
+"NAME="Debian GNU/Linux""\&.
+.RE
+.PP
+\fIVERSION=\fR
+.RS 4
+A string identifying the operating system version, excluding any OS name information, possibly including a release code name, and suitable for presentation to the user\&. This field is optional\&. Example:
+"VERSION=17"
+or
+"VERSION="17 (Beefy Miracle)""\&.
+.RE
+.PP
+\fIID=\fR
+.RS 4
+A lower\-case string (no spaces or other characters outside of 0\-9, a\-z, "\&.", "_" and "\-") identifying the operating system, excluding any version information and suitable for processing by scripts or usage in generated filenames\&. If not set, defaults to
+"ID=linux"\&. Example:
+"ID=fedora"
+or
+"ID=debian"\&.
+.RE
+.PP
+\fIID_LIKE=\fR
+.RS 4
+A space\-separated list of operating system identifiers in the same syntax as the
+\fIID=\fR
+setting\&. It should list identifiers of operating systems that are closely related to the local operating system in regards to packaging and programming interfaces, for example listing one or more OS identifiers the local OS is a derivative from\&. An OS should generally only list other OS identifiers it itself is a derivative of, and not any OSes that are derived from it, though symmetric relationships are possible\&. Build scripts and similar should check this variable if they need to identify the local operating system and the value of
+\fIID=\fR
+is not recognized\&. Operating systems should be listed in order of how closely the local operating system relates to the listed ones, starting with the closest\&. This field is optional\&. Example: for an operating system with
+"ID=centos", an assignment of
+"ID_LIKE="rhel fedora""
+would be appropriate\&. For an operating system with
+"ID=ubuntu", an assignment of
+"ID_LIKE=debian"
+is appropriate\&.
+.RE
+.PP
+\fIVERSION_ID=\fR
+.RS 4
+A lower\-case string (mostly numeric, no spaces or other characters outside of 0\-9, a\-z, "\&.", "_" and "\-") identifying the operating system version, excluding any OS name information or release code name, and suitable for processing by scripts or usage in generated filenames\&. This field is optional\&. Example:
+"VERSION_ID=17"
+or
+"VERSION_ID=11\&.04"\&.
+.RE
+.PP
+\fIPRETTY_NAME=\fR
+.RS 4
+A pretty operating system name in a format suitable for presentation to the user\&. May or may not contain a release code name or OS version of some kind, as suitable\&. If not set, defaults to
+"PRETTY_NAME="Linux""\&. Example:
+"PRETTY_NAME="Fedora 17 (Beefy Miracle)""\&.
+.RE
+.PP
+\fIANSI_COLOR=\fR
+.RS 4
+A suggested presentation color when showing the OS name on the console\&. This should be specified as string suitable for inclusion in the ESC [ m ANSI/ECMA\-48 escape code for setting graphical rendition\&. This field is optional\&. Example:
+"ANSI_COLOR="0;31""
+for red, or
+"ANSI_COLOR="1;34""
+for light blue\&.
+.RE
+.PP
+\fICPE_NAME=\fR
+.RS 4
+A CPE name for the operating system, following the
+\m[blue]\fBCommon Platform Enumeration Specification\fR\m[]\&\s-2\u[2]\d\s+2
+as proposed by the MITRE Corporation\&. This field is optional\&. Example:
+"CPE_NAME="cpe:/o:fedoraproject:fedora:17""
+.RE
+.PP
+\fIHOME_URL=\fR, \fISUPPORT_URL=\fR, \fIBUG_REPORT_URL=\fR
+.RS 4
+Links to resources on the Internet related the operating system\&.
+\fIHOME_URL=\fR
+should refer to the homepage of the operating system, or alternatively some homepage of the specific version of the operating system\&.
+\fISUPPORT_URL=\fR
+should refer to the main support page for the operating system, if there is any\&. This is primarily intended for operating systems which vendors provide support for\&.
+\fIBUG_REPORT_URL=\fR
+should refer to the main bug reporting page for the operating system, if there is any\&. This is primarily intended for operating systems that rely on community QA\&. These settings are optional, and providing only some of these settings is common\&. These URLs are intended to be exposed in "About this system" UIs behind links with captions such as "About this Operating System", "Obtain Support", and "Report a Bug"\&. The values should be in
+\m[blue]\fBRFC3986 format\fR\m[]\&\s-2\u[3]\d\s+2, and should be
+"http:"
+or
+"https:"
+URLs, and possibly
+"mailto:"
+or
+"tel:"\&. Only one URL shall be listed in each setting\&. If multiple resources need to be referenced, it is recommended to provide an online landing page linking all available resources\&. Examples:
+"HOME_URL="https://fedoraproject\&.org/""
+and
+"BUG_REPORT_URL="https://bugzilla\&.redhat\&.com/""
+.RE
+.PP
+\fIBUILD_ID=\fR
+.RS 4
+A string uniquely identifying the system image used as the origin for a distribution (it is not updated with system updates)\&. The field can be identical between different VERSION_IDs as BUILD_ID is an only a unique identifier to a specific version\&. Distributions that release each update as a new version would only need to use VERSION_ID as each build is already distinct based on the VERSION_ID\&. This field is optional\&. Example:
+"BUILD_ID="2013\-03\-20\&.3""
+or
+"BUILD_ID=201303203"\&.
+.RE
+.PP
+If you are reading this file from C code or a shell script to determine the OS or a specific version of it, use the ID and VERSION_ID fields, possibly with ID_LIKE as fallback for ID\&. When looking for an OS identification string for presentation to the user use the PRETTY_NAME field\&.
+.PP
+Note that operating system vendors may choose not to provide version information, for example to accommodate for rolling releases\&. In this case, VERSION and VERSION_ID may be unset\&. Applications should not rely on these fields to be set\&.
+.PP
+Operating system vendors may extend the file format and introduce new fields\&. It is highly recommended to prefix new fields with an OS specific name in order to avoid name clashes\&. Applications reading this file must ignore unknown fields\&. Example:
+"DEBIAN_BTS="debbugs://bugs\&.debian\&.org/""
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+NAME=Fedora
+VERSION="17 (Beefy Miracle)"
+ID=fedora
+VERSION_ID=17
+PRETTY_NAME="Fedora 17 (Beefy Miracle)"
+ANSI_COLOR="0;34"
+CPE_NAME="cpe:/o:fedoraproject:fedora:17"
+HOME_URL="https://fedoraproject\&.org/"
+BUG_REPORT_URL="https://bugzilla\&.redhat\&.com/"
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBlsb_release\fR(1),
+\fBhostname\fR(5),
+\fBmachine-id\fR(5),
+\fBmachine-info\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+Announcement of /etc/os-release
+.RS 4
+\%http://0pointer.de/blog/projects/os-release
+.RE
+.IP " 2." 4
+Common Platform Enumeration Specification
+.RS 4
+\%https://cpe.mitre.org/specification/
+.RE
+.IP " 3." 4
+RFC3986 format
+.RS 4
+\%https://tools.ietf.org/html/rfc3986
+.RE
diff --git a/man/os-release.html b/man/os-release.html
index 9cd707f168..8a1c3681ef 100644
--- a/man/os-release.html
+++ b/man/os-release.html
@@ -19,13 +19,13 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="os-release"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>os-release — Operating system identification</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/os-release</code></p></div><div class="refsect1"><a name="idm259789821328"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/os-release</code> file
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="os-release"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>os-release — Operating system identification</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/os-release</code></p></div><div class="refsect1"><a name="idm274690946384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/os-release</code> file
contains operating system identification data.</p><p>The basic file format of
<code class="filename">os-release</code> is a newline-separated
list of environment-like shell-compatible variable
assignments. It is possible to source the
configuration from shell scripts, however, beyond mere
- variable assignments no shell features are supported
+ variable assignments, no shell features are supported
(this means variable expansion is explicitly not
supported), allowing applications to read the file
without implementing a shell compatible execution
@@ -35,7 +35,7 @@
a-z, 0-9. All strings should be in UTF-8 format, and
non-printable characters should not be used. If double
or single quotes or backslashes are to be used within
- variable assignments they should be escaped with
+ variable assignments, they should be escaped with
backslashes, following shell style. It is not
supported to concatenate multiple individually quoted
strings. Lines beginning with "#" shall be ignored as
@@ -47,38 +47,38 @@
the file is available from earliest boot on, and hence
must be located on the root file system.</p><p>For a longer rationale for
<code class="filename">/etc/os-release</code> please refer to
- the <a class="ulink" href="http://0pointer.de/blog/projects/os-release" target="_top">Announcement of <code class="filename">/etc/os-release</code></a>.</p></div><div class="refsect1"><a name="idm259789811984"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following OS identifications parameters may be set using
+ the <a class="ulink" href="http://0pointer.de/blog/projects/os-release" target="_top">Announcement of <code class="filename">/etc/os-release</code></a>.</p></div><div class="refsect1"><a name="idm274690937040"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following OS identifications parameters may be set using
<code class="filename">/etc/os-release</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="NAME="><span class="term"><code class="varname">NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#NAME=">¶</a></dt><dd><p>A string identifying
the operating system, without a
version component, and suitable for
- presentation to the user. If not set
+ presentation to the user. If not set,
defaults to
- <code class="literal">NAME=Linux</code>. Example:
- <code class="literal">NAME=Fedora</code> or
- <code class="literal">NAME="Debian
- GNU/Linux"</code>.</p></dd><dt id="VERSION="><span class="term"><code class="varname">VERSION=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION=">¶</a></dt><dd><p>A string identifying
+ "<code class="literal">NAME=Linux</code>". Example:
+ "<code class="literal">NAME=Fedora</code>" or
+ "<code class="literal">NAME="Debian
+ GNU/Linux"</code>".</p></dd><dt id="VERSION="><span class="term"><code class="varname">VERSION=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION=">¶</a></dt><dd><p>A string identifying
the operating system version,
excluding any OS name information,
possibly including a release code
name, and suitable for presentation to
the user. This field is
optional. Example:
- <code class="literal">VERSION=17</code> or
- <code class="literal">VERSION="17 (Beefy
- Miracle)"</code>.</p></dd><dt id="ID="><span class="term"><code class="varname">ID=</code></span><a class="headerlink" title="Permalink to this term" href="#ID=">¶</a></dt><dd><p>A lower-case string
+ "<code class="literal">VERSION=17</code>" or
+ "<code class="literal">VERSION="17 (Beefy
+ Miracle)"</code>".</p></dd><dt id="ID="><span class="term"><code class="varname">ID=</code></span><a class="headerlink" title="Permalink to this term" href="#ID=">¶</a></dt><dd><p>A lower-case string
(no spaces or other characters outside
of 0-9, a-z, ".", "_" and "-")
identifying the operating system,
excluding any version information and
suitable for processing by scripts or
- usage in generated file names. If not
- set defaults to
- <code class="literal">ID=linux</code>. Example:
- <code class="literal">ID=fedora</code> or
- <code class="literal">ID=debian</code>.</p></dd><dt id="ID_LIKE="><span class="term"><code class="varname">ID_LIKE=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_LIKE=">¶</a></dt><dd><p>A space-separated list
+ usage in generated filenames. If not
+ set, defaults to
+ "<code class="literal">ID=linux</code>". Example:
+ "<code class="literal">ID=fedora</code>" or
+ "<code class="literal">ID=debian</code>".</p></dd><dt id="ID_LIKE="><span class="term"><code class="varname">ID_LIKE=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_LIKE=">¶</a></dt><dd><p>A space-separated list
of operating system identifiers in the
same syntax as the
- <code class="varname">ID=</code> setting. Should
+ <code class="varname">ID=</code> setting. It should
list identifiers of operating systems
that are closely related to the local
operating system in regards to
@@ -88,8 +88,8 @@
OS is a derivative from. An
OS should generally only list other OS
identifiers it itself is a derivative
- from, and not any OSes that
- are derived from it, but symmetric
+ of, and not any OSes that
+ are derived from it, though symmetric
relationships are possible. Build
scripts and similar should check this
variable if they need to identify the
@@ -102,13 +102,13 @@
closest. This field is
optional. Example: for an operating
system with
- <code class="literal">ID=centos</code> an
- assignment of <code class="literal">ID_LIKE="rhel
- fedora"</code> would be
+ "<code class="literal">ID=centos</code>", an
+ assignment of "<code class="literal">ID_LIKE="rhel
+ fedora"</code>" would be
appropriate. For an operating system
- with <code class="literal">ID=ubuntu</code> an
+ with "<code class="literal">ID=ubuntu</code>", an
assignment of
- <code class="literal">ID_LIKE=debian</code> is
+ "<code class="literal">ID_LIKE=debian</code>" is
appropriate.</p></dd><dt id="VERSION_ID="><span class="term"><code class="varname">VERSION_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION_ID=">¶</a></dt><dd><p>A lower-case string
(mostly numeric, no spaces or other
characters outside of 0-9, a-z, ".",
@@ -116,18 +116,18 @@
system version, excluding any OS name
information or release code name, and
suitable for processing by scripts or
- usage in generated file names. This
+ usage in generated filenames. This
field is optional. Example:
- <code class="literal">VERSION_ID=17</code> or
- <code class="literal">VERSION_ID=11.04</code>.</p></dd><dt id="PRETTY_NAME="><span class="term"><code class="varname">PRETTY_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_NAME=">¶</a></dt><dd><p>A pretty operating
+ "<code class="literal">VERSION_ID=17</code>" or
+ "<code class="literal">VERSION_ID=11.04</code>".</p></dd><dt id="PRETTY_NAME="><span class="term"><code class="varname">PRETTY_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_NAME=">¶</a></dt><dd><p>A pretty operating
system name in a format suitable for
presentation to the user. May or may
not contain a release code name or OS
version of some kind, as suitable. If
- not set defaults to
- <code class="literal">PRETTY_NAME="Linux"</code>. Example:
- <code class="literal">PRETTY_NAME="Fedora 17 (Beefy
- Miracle)"</code>.</p></dd><dt id="ANSI_COLOR="><span class="term"><code class="varname">ANSI_COLOR=</code></span><a class="headerlink" title="Permalink to this term" href="#ANSI_COLOR=">¶</a></dt><dd><p>A suggested
+ not set, defaults to
+ "<code class="literal">PRETTY_NAME="Linux"</code>". Example:
+ "<code class="literal">PRETTY_NAME="Fedora 17 (Beefy
+ Miracle)"</code>".</p></dd><dt id="ANSI_COLOR="><span class="term"><code class="varname">ANSI_COLOR=</code></span><a class="headerlink" title="Permalink to this term" href="#ANSI_COLOR=">¶</a></dt><dd><p>A suggested
presentation color when showing the
OS name on the console. This
should be specified as string suitable
@@ -135,16 +135,16 @@
ANSI/ECMA-48 escape code for setting
graphical rendition. This field is
optional. Example:
- <code class="literal">ANSI_COLOR="0;31"</code>
+ "<code class="literal">ANSI_COLOR="0;31"</code>"
for red, or
- <code class="literal">ANSI_COLOR="1;34"</code>
+ "<code class="literal">ANSI_COLOR="1;34"</code>"
for light blue.</p></dd><dt id="CPE_NAME="><span class="term"><code class="varname">CPE_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#CPE_NAME=">¶</a></dt><dd><p>A CPE name for the
- operating system, following the <a class="ulink" href="http://cpe.mitre.org/specification/" target="_top">Common
+ operating system, following the <a class="ulink" href="https://cpe.mitre.org/specification/" target="_top">Common
Platform Enumeration
Specification</a> as proposed by
the MITRE Corporation. This field
is optional. Example:
- <code class="literal">CPE_NAME="cpe:/o:fedoraproject:fedora:17"</code>
+ "<code class="literal">CPE_NAME="cpe:/o:fedoraproject:fedora:17"</code>"
</p></dd><dt id="HOME_URL="><span class="term"><code class="varname">HOME_URL=</code>, </span><span class="term"><code class="varname">SUPPORT_URL=</code>, </span><span class="term"><code class="varname">BUG_REPORT_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#HOME_URL=">¶</a></dt><dd><p>Links to resources on
the Internet related the operating
system. <code class="varname">HOME_URL=</code>
@@ -173,18 +173,18 @@
and "Report a Bug". The values should
be in <a class="ulink" href="https://tools.ietf.org/html/rfc3986" target="_top">RFC3986
format</a>, and should be
- <code class="literal">http:</code> or
- <code class="literal">https:</code> URLs, and
- possibly <code class="literal">mailto:</code> or
- <code class="literal">tel:</code>. Only one URL
+ "<code class="literal">http:</code>" or
+ "<code class="literal">https:</code>" URLs, and
+ possibly "<code class="literal">mailto:</code>" or
+ "<code class="literal">tel:</code>". Only one URL
shall be listed in each setting. If
multiple resources need to be
- referenced it is recommended to
+ referenced, it is recommended to
provide an online landing page linking
all available resources. Examples:
- <code class="literal">HOME_URL="https://fedoraproject.org/"</code>
+ "<code class="literal">HOME_URL="https://fedoraproject.org/"</code>"
and
- <code class="literal">BUG_REPORT_URL="https://bugzilla.redhat.com/"</code></p></dd><dt id="BUILD_ID="><span class="term"><code class="varname">BUILD_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#BUILD_ID=">¶</a></dt><dd><p>A string uniquely
+ "<code class="literal">BUG_REPORT_URL="https://bugzilla.redhat.com/"</code>"</p></dd><dt id="BUILD_ID="><span class="term"><code class="varname">BUILD_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#BUILD_ID=">¶</a></dt><dd><p>A string uniquely
identifying the system image used as
the origin for a distribution (it is
not updated with system updates). The
@@ -197,9 +197,9 @@
each build is already distinct based
on the VERSION_ID. This field is
optional. Example:
- <code class="literal">BUILD_ID="2013-03-20.3"</code>
+ "<code class="literal">BUILD_ID="2013-03-20.3"</code>"
or
- <code class="literal">BUILD_ID=201303203</code>.
+ "<code class="literal">BUILD_ID=201303203</code>".
</p></dd></dl></div><p>If you are reading this file from C code or a
shell script to determine the OS or a specific version
@@ -208,14 +208,14 @@
identification string for presentation to the user use
the PRETTY_NAME field.</p><p>Note that operating system vendors may choose
not to provide version information, for example to
- accommodate for rolling releases. In this case VERSION
+ accommodate for rolling releases. In this case, VERSION
and VERSION_ID may be unset. Applications should not
rely on these fields to be set.</p><p>Operating system vendors may extend the file
format and introduce new fields. It is highly
recommended to prefix new fields with an OS specific
name in order to avoid name clashes. Applications
reading this file must ignore unknown fields. Example:
- <code class="literal">DEBIAN_BTS="debbugs://bugs.debian.org/"</code></p></div><div class="refsect1"><a name="idm259788739216"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">NAME=Fedora
+ "<code class="literal">DEBIAN_BTS="debbugs://bugs.debian.org/"</code>"</p></div><div class="refsect1"><a name="idm274689866592"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">NAME=Fedora
VERSION="17 (Beefy Miracle)"
ID=fedora
VERSION_ID=17
@@ -223,7 +223,7 @@ PRETTY_NAME="Fedora 17 (Beefy Miracle)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:17"
HOME_URL="https://fedoraproject.org/"
-BUG_REPORT_URL="https://bugzilla.redhat.com/"</pre></div><div class="refsect1"><a name="idm259788737552"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+BUG_REPORT_URL="https://bugzilla.redhat.com/"</pre></div><div class="refsect1"><a name="idm274689864928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="lsb_release.html"><span class="citerefentry"><span class="refentrytitle">lsb_release</span>(1)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>,
diff --git a/man/os-release.xml b/man/os-release.xml
index 45babd61b9..c1dd62f715 100644
--- a/man/os-release.xml
+++ b/man/os-release.xml
@@ -62,7 +62,7 @@
list of environment-like shell-compatible variable
assignments. It is possible to source the
configuration from shell scripts, however, beyond mere
- variable assignments no shell features are supported
+ variable assignments, no shell features are supported
(this means variable expansion is explicitly not
supported), allowing applications to read the file
without implementing a shell compatible execution
@@ -72,7 +72,7 @@
a-z, 0-9. All strings should be in UTF-8 format, and
non-printable characters should not be used. If double
or single quotes or backslashes are to be used within
- variable assignments they should be escaped with
+ variable assignments, they should be escaped with
backslashes, following shell style. It is not
supported to concatenate multiple individually quoted
strings. Lines beginning with "#" shall be ignored as
@@ -110,7 +110,7 @@
<listitem><para>A string identifying
the operating system, without a
version component, and suitable for
- presentation to the user. If not set
+ presentation to the user. If not set,
defaults to
<literal>NAME=Linux</literal>. Example:
<literal>NAME=Fedora</literal> or
@@ -142,8 +142,8 @@
identifying the operating system,
excluding any version information and
suitable for processing by scripts or
- usage in generated file names. If not
- set defaults to
+ usage in generated filenames. If not
+ set, defaults to
<literal>ID=linux</literal>. Example:
<literal>ID=fedora</literal> or
<literal>ID=debian</literal>.</para></listitem>
@@ -155,7 +155,7 @@
<listitem><para>A space-separated list
of operating system identifiers in the
same syntax as the
- <varname>ID=</varname> setting. Should
+ <varname>ID=</varname> setting. It should
list identifiers of operating systems
that are closely related to the local
operating system in regards to
@@ -165,8 +165,8 @@
OS is a derivative from. An
OS should generally only list other OS
identifiers it itself is a derivative
- from, and not any OSes that
- are derived from it, but symmetric
+ of, and not any OSes that
+ are derived from it, though symmetric
relationships are possible. Build
scripts and similar should check this
variable if they need to identify the
@@ -179,11 +179,11 @@
closest. This field is
optional. Example: for an operating
system with
- <literal>ID=centos</literal> an
+ <literal>ID=centos</literal>, an
assignment of <literal>ID_LIKE="rhel
fedora"</literal> would be
appropriate. For an operating system
- with <literal>ID=ubuntu</literal> an
+ with <literal>ID=ubuntu</literal>, an
assignment of
<literal>ID_LIKE=debian</literal> is
appropriate.</para></listitem>
@@ -199,7 +199,7 @@
system version, excluding any OS name
information or release code name, and
suitable for processing by scripts or
- usage in generated file names. This
+ usage in generated filenames. This
field is optional. Example:
<literal>VERSION_ID=17</literal> or
<literal>VERSION_ID=11.04</literal>.</para></listitem>
@@ -213,7 +213,7 @@
presentation to the user. May or may
not contain a release code name or OS
version of some kind, as suitable. If
- not set defaults to
+ not set, defaults to
<literal>PRETTY_NAME="Linux"</literal>. Example:
<literal>PRETTY_NAME="Fedora 17 (Beefy
Miracle)"</literal>.</para></listitem>
@@ -241,7 +241,7 @@
<listitem><para>A CPE name for the
operating system, following the <ulink
- url="http://cpe.mitre.org/specification/">Common
+ url="https://cpe.mitre.org/specification/">Common
Platform Enumeration
Specification</ulink> as proposed by
the MITRE Corporation. This field
@@ -290,7 +290,7 @@
<literal>tel:</literal>. Only one URL
shall be listed in each setting. If
multiple resources need to be
- referenced it is recommended to
+ referenced, it is recommended to
provide an online landing page linking
all available resources. Examples:
<literal>HOME_URL="https://fedoraproject.org/"</literal>
@@ -332,7 +332,7 @@
<para>Note that operating system vendors may choose
not to provide version information, for example to
- accommodate for rolling releases. In this case VERSION
+ accommodate for rolling releases. In this case, VERSION
and VERSION_ID may be unset. Applications should not
rely on these fields to be set.</para>
diff --git a/man/pam_systemd.8 b/man/pam_systemd.8
new file mode 100644
index 0000000000..198572550c
--- /dev/null
+++ b/man/pam_systemd.8
@@ -0,0 +1,173 @@
+'\" t
+.TH "PAM_SYSTEMD" "8" "" "systemd 208" "pam_systemd"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pam_systemd \- Register user sessions in the systemd login manager
+.SH "SYNOPSIS"
+.PP
+pam_systemd\&.so
+.SH "DESCRIPTION"
+.PP
+\fBpam_systemd\fR
+registers user sessions with the systemd login manager
+\fBsystemd-logind.service\fR(8), and hence the systemd control group hierarchy\&.
+.PP
+On login, this module ensures the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+If it does not exist yet, the user runtime directory
+/run/user/$USER
+is created and its ownership changed to the user that is logging in\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+The
+\fI$XDG_SESSION_ID\fR
+environment variable is initialized\&. If auditing is available and
+\fBpam_loginuid\&.so\fR
+run before this module (which is highly recommended), the variable is initialized from the auditing session id (/proc/self/sessionid)\&. Otherwise an independent session counter is used\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 3.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 3." 4.2
+.\}
+A new systemd scope unit is created for the session\&. If this is the first concurrent session of the user, an implicit slice below
+user\&.slice
+is automatically created and the scope placed in it\&. In instance of the system service
+user@\&.service
+which runs the systemd user manager instance\&.
+.RE
+.PP
+On logout, this module ensures the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+If this is enabled, all processes of the session are terminated\&. If the last concurrent session of a user ends, his user systemd instance will be terminated too, and so will the user\*(Aqs slice unit\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+If the last concurrent session of a user ends, the
+\fI$XDG_RUNTIME_DIR\fR
+directory and all its contents are removed, too\&.
+.RE
+.PP
+If the system was not booted up with systemd as init system, this module does nothing and immediately returns PAM_SUCCESS\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fBclass=\fR
+.RS 4
+Takes a string argument which sets the session class\&. The XDG_SESSION_CLASS environmental variable takes precedence\&.
+.RE
+.PP
+\fBdebug=\fR
+.RS 4
+Takes a boolean argument\&. If yes, the module will log debugging information as it operates\&.
+.RE
+.SH "MODULE TYPES PROVIDED"
+.PP
+Only
+\fBsession\fR
+is provided\&.
+.SH "ENVIRONMENT"
+.PP
+The following environment variables are set for the processes of the user\*(Aqs session:
+.PP
+\fI$XDG_SESSION_ID\fR
+.RS 4
+A session identifier, suitable to be used in filenames\&. The string itself should be considered opaque, although often it is just the audit session ID as reported by
+/proc/self/sessionid\&. Each ID will be assigned only once during machine uptime\&. It may hence be used to uniquely label files or other resources of this session\&.
+.RE
+.PP
+\fI$XDG_RUNTIME_DIR\fR
+.RS 4
+Path to a user\-private user\-writable directory that is bound to the user login time on the machine\&. It is automatically created the first time a user logs in and removed on his final logout\&. If a user logs in twice at the same time, both sessions will see the same
+\fI$XDG_RUNTIME_DIR\fR
+and the same contents\&. If a user logs in once, then logs out again, and logs in again, the directory contents will have been lost in between, but applications should not rely on this behavior and must be able to deal with stale files\&. To store session\-private data in this directory, the user should include the value of
+\fI$XDG_SESSION_ID\fR
+in the filename\&. This directory shall be used for runtime file system objects such as
+\fBAF_UNIX\fR
+sockets, FIFOs, PID files and similar\&. It is guaranteed that this directory is local and offers the greatest possible file system feature set the operating system provides\&.
+.RE
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#%PAM\-1\&.0
+auth required pam_unix\&.so
+auth required pam_nologin\&.so
+account required pam_unix\&.so
+password required pam_unix\&.so
+session required pam_unix\&.so
+session required pam_loginuid\&.so
+session required pam_systemd\&.so
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-logind.service\fR(8),
+\fBlogind.conf\fR(5),
+\fBloginctl\fR(1),
+\fBpam.conf\fR(5),
+\fBpam.d\fR(5),
+\fBpam\fR(8),
+\fBpam_loginuid\fR(8),
+\fBsystemd.scope\fR(5),
+\fBsystemd.slice\fR(5),
+\fBsystemd.service\fR(5)
diff --git a/man/pam_systemd.html b/man/pam_systemd.html
index 8a63534b10..68c60708fe 100644
--- a/man/pam_systemd.html
+++ b/man/pam_systemd.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="pam_systemd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>pam_systemd — Register user sessions in the systemd login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">pam_systemd.so</code></p></div><div class="refsect1"><a name="idm259767374112"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>pam_systemd</strong></span> registers user
- sessions in the systemd login manager
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="pam_systemd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>pam_systemd — Register user sessions in the systemd login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">pam_systemd.so</code></p></div><div class="refsect1"><a name="idm274692159456"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>pam_systemd</strong></span> registers user
+ sessions with the systemd login manager
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
and hence the systemd control group hierarchy.</p><p>On login, this module ensures the following:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If it does not exist yet, the
user runtime directory
@@ -36,91 +36,33 @@
session id
(<code class="filename">/proc/self/sessionid</code>). Otherwise
an independent session counter is
- used.</p></li><li class="listitem"><p>A new control group
- <code class="filename">/user/$USER/$XDG_SESSION_ID</code>
- is created and the login process moved into
- it.</p></li></ol></div><p>On logout, this module ensures the following:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If
- <code class="varname">$XDG_SESSION_ID</code> is set and
- <code class="option">kill-session-processes=1</code> specified, all
- remaining processes in the
- <code class="filename">/user/$USER/$XDG_SESSION_ID</code>
- control group are killed and the control group
- is removed.</p></li><li class="listitem"><p>If the last subgroup of the
- <code class="filename">/user/$USER</code> control group
- was removed the
+ used.</p></li><li class="listitem"><p>A new systemd scope unit is
+ created for the session. If this is the first
+ concurrent session of the user, an implicit
+ slice below <code class="filename">user.slice</code> is
+ automatically created and the scope placed in
+ it. In instance of the system service
+ <code class="filename">user@.service</code> which runs
+ the systemd user manager
+ instance.</p></li></ol></div><p>On logout, this module ensures the following:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>If this is enabled, all
+ processes of the session are terminated. If
+ the last concurrent session of a user ends, his
+ user systemd instance will be terminated too,
+ and so will the user's slice
+ unit.</p></li><li class="listitem"><p>If the last concurrent session
+ of a user ends, the
<code class="varname">$XDG_RUNTIME_DIR</code> directory
- and all its contents are
- removed, too.</p></li></ol></div><p>If the system was not booted up with systemd as
+ and all its contents are removed,
+ too.</p></li></ol></div><p>If the system was not booted up with systemd as
init system, this module does nothing and immediately
- returns PAM_SUCCESS.</p></div><div class="refsect1"><a name="idm259766054704"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="kill-session-processes="><span class="term"><code class="option">kill-session-processes=</code></span><a class="headerlink" title="Permalink to this term" href="#kill-session-processes=">¶</a></dt><dd><p>Takes a boolean
- argument. If true, all processes
- created by the user during his session
- and from his session will be
- terminated when he logs out from his
- session.</p></dd><dt id="kill-only-users="><span class="term"><code class="option">kill-only-users=</code></span><a class="headerlink" title="Permalink to this term" href="#kill-only-users=">¶</a></dt><dd><p>Takes a comma
- separated list of user names or
- numeric user ids as argument. If this
- option is used the effect of the
- <code class="option">kill-session-processes=</code> options
- will apply only to the listed
- users. If this option is not used the
- option applies to all local
- users. Note that
- <code class="option">kill-exclude-users=</code>
- takes precedence over this list and is
- hence subtracted from the list
- specified here.</p></dd><dt id="kill-exclude-users="><span class="term"><code class="option">kill-exclude-users=</code></span><a class="headerlink" title="Permalink to this term" href="#kill-exclude-users=">¶</a></dt><dd><p>Takes a comma
- separated list of user names or
- numeric user ids as argument. Users
- listed in this argument will not be
- subject to the effect of
- <code class="option">kill-session-processes=</code>. Note
- that this option takes precedence
- over
- <code class="option">kill-only-users=</code>, and
- hence whatever is listed for
- <code class="option">kill-exclude-users=</code>
- is guaranteed to never be killed by
- this PAM module, independent of any
- other configuration
- setting.</p></dd><dt id="controllers="><span class="term"><code class="option">controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#controllers=">¶</a></dt><dd><p>Takes a comma
- separated list of control group
- controllers in which hierarchies a
- user/session control group will be
- created by default for each user
- logging in, in addition to the control
- group in the named 'name=systemd'
- hierarchy. If omitted, defaults to an
- empty list.</p></dd><dt id="reset-controllers="><span class="term"><code class="option">reset-controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#reset-controllers=">¶</a></dt><dd><p>Takes a comma
- separated list of control group
- controllers in which hierarchies the
- logged in processes will be reset to
- the root control
- group.</p></dd><dt id="class="><span class="term"><code class="option">class=</code></span><a class="headerlink" title="Permalink to this term" href="#class=">¶</a></dt><dd><p>Takes a string
+ returns PAM_SUCCESS.</p></div><div class="refsect1"><a name="idm274692145040"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="class="><span class="term"><code class="option">class=</code></span><a class="headerlink" title="Permalink to this term" href="#class=">¶</a></dt><dd><p>Takes a string
argument which sets the session class.
The XDG_SESSION_CLASS environmental variable
takes precedence.</p></dd><dt id="debug="><span class="term"><code class="option">debug=</code></span><a class="headerlink" title="Permalink to this term" href="#debug=">¶</a></dt><dd><p>Takes a boolean
argument. If yes, the module will log
debugging information as it
- operates.</p></dd></dl></div><p>Note that setting
- <code class="varname">kill-session-processes=1</code> will break tools
- like
- <a href="screen.html"><span class="citerefentry"><span class="refentrytitle">screen</span>(1)</span></a>.</p><p>Note that
- <code class="varname">kill-session-processes=1</code> is a
- stricter version of
- <code class="varname">KillUserProcesses=1</code> which may be
- configured system-wide in
- <a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a>. The
- former kills processes of a session as soon as it
- ends, the latter kills processes as soon as the last
- session of the user ends.</p><p>If the options are omitted they default to
- <code class="option">kill-session-processes=0</code>,
- <code class="option">kill-only-users=</code>,
- <code class="option">kill-exclude-users=</code>,
- <code class="option">controllers=</code>,
- <code class="option">reset-controllers=</code>,
- <code class="option">debug=no</code>.</p></div><div class="refsect1"><a name="idm259769926800"></a><h2 id="Module Types Provided">Module Types Provided<a class="headerlink" title="Permalink to this headline" href="#Module%20Types%20Provided">¶</a></h2><p>Only <code class="option">session</code> is provided.</p></div><div class="refsect1"><a name="idm259769925136"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><p>The following environment variables are set for the processes of the user's session:</p><div class="variablelist"><dl class="variablelist"><dt id="$XDG_SESSION_ID"><span class="term"><code class="varname">$XDG_SESSION_ID</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_SESSION_ID">¶</a></dt><dd><p>A session identifier,
- suitable to be used in file names. The
+ operates.</p></dd></dl></div></div><div class="refsect1"><a name="idm274696098080"></a><h2 id="Module Types Provided">Module Types Provided<a class="headerlink" title="Permalink to this headline" href="#Module%20Types%20Provided">¶</a></h2><p>Only <code class="option">session</code> is provided.</p></div><div class="refsect1"><a name="idm274696096416"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><p>The following environment variables are set for the processes of the user's session:</p><div class="variablelist"><dl class="variablelist"><dt id="$XDG_SESSION_ID"><span class="term"><code class="varname">$XDG_SESSION_ID</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_SESSION_ID">¶</a></dt><dd><p>A session identifier,
+ suitable to be used in filenames. The
string itself should be considered
opaque, although often it is just the
audit session ID as reported by
@@ -145,24 +87,24 @@
applications should not rely on this
behavior and must be able to deal with
stale files. To store session-private
- data in this directory the user should
+ data in this directory, the user should
include the value of <code class="varname">$XDG_SESSION_ID</code>
in the filename. This directory shall
be used for runtime file system
- objects such as AF_UNIX sockets,
+ objects such as <code class="constant">AF_UNIX</code> sockets,
FIFOs, PID files and similar. It is
guaranteed that this directory is
local and offers the greatest possible
file system feature set the
operating system
- provides.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769916496"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">#%PAM-1.0
+ provides.</p></dd></dl></div></div><div class="refsect1"><a name="idm274696086848"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting">#%PAM-1.0
auth required pam_unix.so
auth required pam_nologin.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
session required pam_loginuid.so
-session required pam_systemd.so kill-session-processes=1</pre></div><div class="refsect1"><a name="idm259769914720"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+session required pam_systemd.so</pre></div><div class="refsect1"><a name="idm274696077792"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
<a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a>,
@@ -170,5 +112,8 @@ session required pam_systemd.so kill-session-processes=1</pre></div><div
<a href="pam.conf.html"><span class="citerefentry"><span class="refentrytitle">pam.conf</span>(5)</span></a>,
<a href="pam.d.html"><span class="citerefentry"><span class="refentrytitle">pam.d</span>(5)</span></a>,
<a href="pam.html"><span class="citerefentry"><span class="refentrytitle">pam</span>(8)</span></a>,
- <a href="pam_loginuid.html"><span class="citerefentry"><span class="refentrytitle">pam_loginuid</span>(8)</span></a>
+ <a href="pam_loginuid.html"><span class="citerefentry"><span class="refentrytitle">pam_loginuid</span>(8)</span></a>,
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>,
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml
index 2dc6651885..0e25a4ac9f 100644
--- a/man/pam_systemd.xml
+++ b/man/pam_systemd.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para><command>pam_systemd</command> registers user
- sessions in the systemd login manager
+ sessions with the systemd login manager
<citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
and hence the systemd control group hierarchy.</para>
@@ -80,29 +80,32 @@
an independent session counter is
used.</para></listitem>
- <listitem><para>A new control group
- <filename>/user/$USER/$XDG_SESSION_ID</filename>
- is created and the login process moved into
- it.</para></listitem>
+ <listitem><para>A new systemd scope unit is
+ created for the session. If this is the first
+ concurrent session of the user, an implicit
+ slice below <filename>user.slice</filename> is
+ automatically created and the scope placed in
+ it. In instance of the system service
+ <filename>user@.service</filename> which runs
+ the systemd user manager
+ instance.</para></listitem>
</orderedlist>
<para>On logout, this module ensures the following:</para>
<orderedlist>
- <listitem><para>If
- <varname>$XDG_SESSION_ID</varname> is set and
- <option>kill-session-processes=1</option> specified, all
- remaining processes in the
- <filename>/user/$USER/$XDG_SESSION_ID</filename>
- control group are killed and the control group
- is removed.</para></listitem>
-
- <listitem><para>If the last subgroup of the
- <filename>/user/$USER</filename> control group
- was removed the
+ <listitem><para>If this is enabled, all
+ processes of the session are terminated. If
+ the last concurrent session of a user ends, his
+ user systemd instance will be terminated too,
+ and so will the user's slice
+ unit.</para></listitem>
+
+ <listitem><para>If the last concurrent session
+ of a user ends, the
<varname>$XDG_RUNTIME_DIR</varname> directory
- and all its contents are
- removed, too.</para></listitem>
+ and all its contents are removed,
+ too.</para></listitem>
</orderedlist>
<para>If the system was not booted up with systemd as
@@ -117,79 +120,6 @@
<para>The following options are understood:</para>
<variablelist class='pam-directives'>
- <varlistentry>
- <term><option>kill-session-processes=</option></term>
-
- <listitem><para>Takes a boolean
- argument. If true, all processes
- created by the user during his session
- and from his session will be
- terminated when he logs out from his
- session.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>kill-only-users=</option></term>
-
- <listitem><para>Takes a comma
- separated list of user names or
- numeric user ids as argument. If this
- option is used the effect of the
- <option>kill-session-processes=</option> options
- will apply only to the listed
- users. If this option is not used the
- option applies to all local
- users. Note that
- <option>kill-exclude-users=</option>
- takes precedence over this list and is
- hence subtracted from the list
- specified here.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>kill-exclude-users=</option></term>
-
- <listitem><para>Takes a comma
- separated list of user names or
- numeric user ids as argument. Users
- listed in this argument will not be
- subject to the effect of
- <option>kill-session-processes=</option>. Note
- that this option takes precedence
- over
- <option>kill-only-users=</option>, and
- hence whatever is listed for
- <option>kill-exclude-users=</option>
- is guaranteed to never be killed by
- this PAM module, independent of any
- other configuration
- setting.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>controllers=</option></term>
-
- <listitem><para>Takes a comma
- separated list of control group
- controllers in which hierarchies a
- user/session control group will be
- created by default for each user
- logging in, in addition to the control
- group in the named 'name=systemd'
- hierarchy. If omitted, defaults to an
- empty list.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>reset-controllers=</option></term>
-
- <listitem><para>Takes a comma
- separated list of control group
- controllers in which hierarchies the
- logged in processes will be reset to
- the root control
- group.</para></listitem>
- </varlistentry>
<varlistentry>
<term><option>class=</option></term>
@@ -209,29 +139,6 @@
operates.</para></listitem>
</varlistentry>
</variablelist>
-
- <para>Note that setting
- <varname>kill-session-processes=1</varname> will break tools
- like
- <citerefentry><refentrytitle>screen</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
-
- <para>Note that
- <varname>kill-session-processes=1</varname> is a
- stricter version of
- <varname>KillUserProcesses=1</varname> which may be
- configured system-wide in
- <citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
- former kills processes of a session as soon as it
- ends, the latter kills processes as soon as the last
- session of the user ends.</para>
-
- <para>If the options are omitted they default to
- <option>kill-session-processes=0</option>,
- <option>kill-only-users=</option>,
- <option>kill-exclude-users=</option>,
- <option>controllers=</option>,
- <option>reset-controllers=</option>,
- <option>debug=no</option>.</para>
</refsect1>
<refsect1>
@@ -250,7 +157,7 @@
<term><varname>$XDG_SESSION_ID</varname></term>
<listitem><para>A session identifier,
- suitable to be used in file names. The
+ suitable to be used in filenames. The
string itself should be considered
opaque, although often it is just the
audit session ID as reported by
@@ -281,11 +188,11 @@
applications should not rely on this
behavior and must be able to deal with
stale files. To store session-private
- data in this directory the user should
+ data in this directory, the user should
include the value of <varname>$XDG_SESSION_ID</varname>
in the filename. This directory shall
be used for runtime file system
- objects such as AF_UNIX sockets,
+ objects such as <constant>AF_UNIX</constant> sockets,
FIFOs, PID files and similar. It is
guaranteed that this directory is
local and offers the greatest possible
@@ -306,7 +213,7 @@ account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
session required pam_loginuid.so
-session required pam_systemd.so kill-session-processes=1</programlisting>
+session required pam_systemd.so</programlisting>
</refsect1>
<refsect1>
@@ -319,7 +226,10 @@ session required pam_systemd.so kill-session-processes=1</programlisting>
<citerefentry><refentrytitle>pam.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>pam.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam_loginuid</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>pam_loginuid</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/poweroff.8 b/man/poweroff.8
new file mode 100644
index 0000000000..41c02c13ca
--- /dev/null
+++ b/man/poweroff.8
@@ -0,0 +1 @@
+.so man8/halt.8
diff --git a/man/poweroff.html b/man/poweroff.html
index 196aded96c..c7402a951f 100644
--- a/man/poweroff.html
+++ b/man/poweroff.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="halt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>halt, poweroff, reboot — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">halt [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">poweroff [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">reboot [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm259768280352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>halt</strong></span>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="halt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>halt, poweroff, reboot — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">halt [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">poweroff [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">reboot [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm274696062512"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>halt</strong></span>,
<span class="command"><strong>poweroff</strong></span>, <span class="command"><strong>reboot</strong></span>
may be used to halt, power-off or reboot the
- machine.</p></div><div class="refsect1"><a name="idm259768277152"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ machine.</p></div><div class="refsect1"><a name="idm274696059360"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--halt"><span class="term"><code class="option">--halt</code></span><a class="headerlink" title="Permalink to this term" href="#--halt">¶</a></dt><dd><p>Halt the machine,
regardless of which one of the three
commands is invoked.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--poweroff</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>Power-off the machine,
@@ -30,15 +30,15 @@
commands is invoked.</p></dd><dt id="--reboot"><span class="term"><code class="option">--reboot</code></span><a class="headerlink" title="Permalink to this term" href="#--reboot">¶</a></dt><dd><p>Reboot the machine,
regardless of which one of the three
commands is invoked.</p></dd><dt id="-f"><span class="term"><code class="option">-f</code>, </span><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#-f">¶</a></dt><dd><p>Force immediate halt,
- power-off, reboot. Don't contact the
+ power-off, reboot. Do not contact the
init system.</p></dd><dt id="-w"><span class="term"><code class="option">-w</code>, </span><span class="term"><code class="option">--wtmp-only</code></span><a class="headerlink" title="Permalink to this term" href="#-w">¶</a></dt><dd><p>Only write wtmp
- shutdown entry, don't actually halt,
- power-off, reboot.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Don't write wtmp
- shutdown entry.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Don't send wall
+ shutdown entry, do not actually halt,
+ power-off, reboot.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Do not write wtmp
+ shutdown entry.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Do not send wall
message before
- halt, power-off, reboot.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772158320"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259772157136"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These are legacy commands available for
- compatibility only.</p></div><div class="refsect1"><a name="idm259772155952"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ halt, power-off, reboot.</p></dd></dl></div></div><div class="refsect1"><a name="idm274696223392"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274696222208"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These are legacy commands available for
+ compatibility only.</p></div><div class="refsect1"><a name="idm274696221024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>,
diff --git a/man/reboot.8 b/man/reboot.8
new file mode 100644
index 0000000000..41c02c13ca
--- /dev/null
+++ b/man/reboot.8
@@ -0,0 +1 @@
+.so man8/halt.8
diff --git a/man/reboot.html b/man/reboot.html
index 196aded96c..c7402a951f 100644
--- a/man/reboot.html
+++ b/man/reboot.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="halt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>halt, poweroff, reboot — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">halt [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">poweroff [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">reboot [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm259768280352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>halt</strong></span>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="halt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>halt, poweroff, reboot — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">halt [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">poweroff [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">reboot [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm274696062512"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>halt</strong></span>,
<span class="command"><strong>poweroff</strong></span>, <span class="command"><strong>reboot</strong></span>
may be used to halt, power-off or reboot the
- machine.</p></div><div class="refsect1"><a name="idm259768277152"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ machine.</p></div><div class="refsect1"><a name="idm274696059360"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--halt"><span class="term"><code class="option">--halt</code></span><a class="headerlink" title="Permalink to this term" href="#--halt">¶</a></dt><dd><p>Halt the machine,
regardless of which one of the three
commands is invoked.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--poweroff</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>Power-off the machine,
@@ -30,15 +30,15 @@
commands is invoked.</p></dd><dt id="--reboot"><span class="term"><code class="option">--reboot</code></span><a class="headerlink" title="Permalink to this term" href="#--reboot">¶</a></dt><dd><p>Reboot the machine,
regardless of which one of the three
commands is invoked.</p></dd><dt id="-f"><span class="term"><code class="option">-f</code>, </span><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#-f">¶</a></dt><dd><p>Force immediate halt,
- power-off, reboot. Don't contact the
+ power-off, reboot. Do not contact the
init system.</p></dd><dt id="-w"><span class="term"><code class="option">-w</code>, </span><span class="term"><code class="option">--wtmp-only</code></span><a class="headerlink" title="Permalink to this term" href="#-w">¶</a></dt><dd><p>Only write wtmp
- shutdown entry, don't actually halt,
- power-off, reboot.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Don't write wtmp
- shutdown entry.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Don't send wall
+ shutdown entry, do not actually halt,
+ power-off, reboot.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Do not write wtmp
+ shutdown entry.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Do not send wall
message before
- halt, power-off, reboot.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772158320"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259772157136"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These are legacy commands available for
- compatibility only.</p></div><div class="refsect1"><a name="idm259772155952"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ halt, power-off, reboot.</p></dd></dl></div></div><div class="refsect1"><a name="idm274696223392"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274696222208"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These are legacy commands available for
+ compatibility only.</p></div><div class="refsect1"><a name="idm274696221024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>,
diff --git a/man/runlevel.8 b/man/runlevel.8
new file mode 100644
index 0000000000..23d4a9b8eb
--- /dev/null
+++ b/man/runlevel.8
@@ -0,0 +1,79 @@
+'\" t
+.TH "RUNLEVEL" "8" "" "systemd 208" "runlevel"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+runlevel \- Print previous and current SysV runlevel
+.SH "SYNOPSIS"
+.HP \w'\fBrunlevel\ \fR\fB[options...]\fR\ 'u
+\fBrunlevel \fR\fB[options...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBrunlevel\fR
+prints the previous and current SysV runlevel if they are known\&.
+.PP
+The two runlevel characters are separated by a single space character\&. If a runlevel cannot be determined, N is printed instead\&. If neither can be determined, the word "unknown" is printed\&.
+.PP
+Unless overridden in the environment, this will check the utmp database for recent runlevel changes\&.
+.SH "OPTIONS"
+.PP
+The following option is understood:
+.PP
+\fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+If one or both runlevels could be determined, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$RUNLEVEL\fR
+.RS 4
+If
+\fI$RUNLEVEL\fR
+is set,
+\fBrunlevel\fR
+will print this value as current runlevel and ignore utmp\&.
+.RE
+.PP
+\fI$PREVLEVEL\fR
+.RS 4
+If
+\fI$PREVLEVEL\fR
+is set,
+\fBrunlevel\fR
+will print this value as previous runlevel and ignore utmp\&.
+.RE
+.SH "FILES"
+.PP
+/var/run/utmp
+.RS 4
+The utmp database
+\fBrunlevel\fR
+reads the previous and current runlevel from\&.
+.RE
+.SH "NOTES"
+.PP
+This is a legacy command available for compatibility only\&. It should not be used anymore, as the concept of runlevels is obsolete\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1)
diff --git a/man/runlevel.html b/man/runlevel.html
index dbe4780be0..342c4a9b57 100644
--- a/man/runlevel.html
+++ b/man/runlevel.html
@@ -19,28 +19,28 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="runlevel"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>runlevel — Print previous and current SysV runlevel</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">runlevel [options...]</code> </p></div></div><div class="refsect1"><a name="idm259769004400"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>runlevel</strong></span> prints the previous
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="runlevel"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>runlevel — Print previous and current SysV runlevel</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">runlevel [options...]</code> </p></div></div><div class="refsect1"><a name="idm274701861408"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>runlevel</strong></span> prints the previous
and current SysV runlevel if they are known.</p><p>The two runlevel characters are separated by a
single space character. If a runlevel cannot be
determined, N is printed instead. If neither can be
determined, the word "unknown" is printed.</p><p>Unless overridden in the environment, this will
check the utmp database for recent runlevel
- changes.</p></div><div class="refsect1"><a name="idm259769001488"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following option is understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
- text and exits.</p></dd></dl></div></div><div class="refsect1"><a name="idm259768998384"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>If one or both runlevels could be determined, 0
- is returned, a non-zero failure code otherwise.</p></div><div class="refsect1"><a name="idm259768997072"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$RUNLEVEL"><span class="term"><code class="varname">$RUNLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24RUNLEVEL">¶</a></dt><dd><p>If
+ changes.</p></div><div class="refsect1"><a name="idm274701858496"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following option is understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ text and exits.</p></dd></dl></div></div><div class="refsect1"><a name="idm274701855392"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>If one or both runlevels could be determined, 0
+ is returned, a non-zero failure code otherwise.</p></div><div class="refsect1"><a name="idm274701854080"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$RUNLEVEL"><span class="term"><code class="varname">$RUNLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24RUNLEVEL">¶</a></dt><dd><p>If
<code class="varname">$RUNLEVEL</code> is set,
<span class="command"><strong>runlevel</strong></span> will print
this value as current runlevel and
ignore utmp.</p></dd><dt id="$PREVLEVEL"><span class="term"><code class="varname">$PREVLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24PREVLEVEL">¶</a></dt><dd><p>If
- <code class="varname">$PREVLEVEL</code> is set
+ <code class="varname">$PREVLEVEL</code> is set,
<span class="command"><strong>runlevel</strong></span> will print
this value as previous runlevel and
- ignore utmp.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772943424"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/var/run/utmp"><span class="term"><code class="filename">/var/run/utmp</code></span><a class="headerlink" title="Permalink to this term" href="#/var/run/utmp">¶</a></dt><dd><p>The utmp database
+ ignore utmp.</p></dd></dl></div></div><div class="refsect1"><a name="idm274705747776"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/var/run/utmp"><span class="term"><code class="filename">/var/run/utmp</code></span><a class="headerlink" title="Permalink to this term" href="#/var/run/utmp">¶</a></dt><dd><p>The utmp database
<span class="command"><strong>runlevel</strong></span> reads the
previous and current runlevel
- from.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772939744"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This is a legacy command available for compatibility
+ from.</p></dd></dl></div></div><div class="refsect1"><a name="idm274705744064"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This is a legacy command available for compatibility
only. It should not be used anymore, as the concept of
- runlevels is obsolete.</p></div><div class="refsect1"><a name="idm259772938384"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ runlevels is obsolete.</p></div><div class="refsect1"><a name="idm274705742704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/runlevel.xml b/man/runlevel.xml
index 6d9fe85726..5efb340df5 100644
--- a/man/runlevel.xml
+++ b/man/runlevel.xml
@@ -111,7 +111,7 @@
<term><varname>$PREVLEVEL</varname></term>
<listitem><para>If
- <varname>$PREVLEVEL</varname> is set
+ <varname>$PREVLEVEL</varname> is set,
<command>runlevel</command> will print
this value as previous runlevel and
ignore utmp.</para></listitem>
diff --git a/man/sd-daemon.3 b/man/sd-daemon.3
new file mode 100644
index 0000000000..63c0f1e3cc
--- /dev/null
+++ b/man/sd-daemon.3
@@ -0,0 +1,122 @@
+'\" t
+.TH "SD\-DAEMON" "3" "" "systemd 208" "sd-daemon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG \- Reference implementation of APIs for new\-style daemons
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-daemon\&.h>
+.fi
+.ft
+.HP \w'\fBpkg\-config\ \-\-cflags\ \-\-libs\ libsystemd\-daemon\fR\ 'u
+\fBpkg\-config \-\-cflags \-\-libs libsystemd\-daemon\fR
+.SH "DESCRIPTION"
+.PP
+sd\-daemon\&.c
+and
+sd\-daemon\&.h
+provide a reference implementation of various APIs for new\-style daemons, as implemented by the
+\fBsystemd\fR(1)
+init system\&.
+.PP
+See
+\fBsd_listen_fds\fR(3),
+\fBsd_notify\fR(3),
+\fBsd_booted\fR(3),
+\fBsd_is_fifo\fR(3)
+for more information about the functions implemented\&. In addition to these functions a couple of logging prefixes are defined as macros:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#define SD_EMERG "<0>" /* system is unusable */
+#define SD_ALERT "<1>" /* action must be taken immediately */
+#define SD_CRIT "<2>" /* critical conditions */
+#define SD_ERR "<3>" /* error conditions */
+#define SD_WARNING "<4>" /* warning conditions */
+#define SD_NOTICE "<5>" /* normal but significant condition */
+#define SD_INFO "<6>" /* informational */
+#define SD_DEBUG "<7>" /* debug\-level messages */
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+These prefixes are intended to be used in conjunction with STDERR\-based logging as implemented by systemd\&. If a systemd service definition file is configured with
+\fIStandardError=syslog\fR
+or
+\fIStandardError=kmsg\fR, these prefixes can be used to encode a log level in lines printed\&. This is similar to the kernel
+\fBprintk()\fR\-style logging\&. See
+\fBklogctl\fR(2)
+for more information\&.
+.PP
+The log levels are identical to
+\fBsyslog\fR(3)\*(Aqs log level system\&. To use these prefixes simply prefix every line with one of these strings\&. A line that is not prefixed will be logged at the default log level SD_INFO\&.
+.PP
+\fBExample\ \&1.\ \&Hello World\fR
+.PP
+A daemon may log with the log level NOTICE by issuing this call:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+fprintf(stderr, SD_NOTICE "Hello World!\en");
+.fi
+.if n \{\
+.RE
+.\}
+.SH "NOTES"
+.PP
+These interfaces are provided by the reference implementation of APIs for new\-style daemons and distributed with the systemd package\&. The algorithms they implement are simple, and can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&. See the respective function man pages for details\&.
+.PP
+In addition, for details about the algorithms check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h\fR\m[]
+.PP
+These APIs are implemented in the reference implementation\*(Aqs
+sd\-daemon\&.c
+and
+sd\-daemon\&.h
+files\&. These interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-daemon\fR\ \&\fBpkg-config\fR(1)
+file\&. Alternatively, applications consuming these APIs may copy the implementation into their source tree, either verbatim or in excerpts\&.
+.PP
+The functions directly related to new\-style daemons become NOPs when \-DDISABLE_SYSTEMD is set during compilation and the reference implementation is used as drop\-in files\&. In addition, if
+sd\-daemon\&.c
+is compiled on non\-Linux systems they become NOPs\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd_listen_fds\fR(3),
+\fBsd_notify\fR(3),
+\fBsd_booted\fR(3),
+\fBsd_is_fifo\fR(3),
+\fBdaemon\fR(7),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBfprintf\fR(3),
+\fBsd-readahead\fR(3),
+\fBpkg-config\fR(1)
diff --git a/man/sd-daemon.html b/man/sd-daemon.html
index 8d0c31281d..8003b756e8 100644
--- a/man/sd-daemon.html
+++ b/man/sd-daemon.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
- new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm259783673520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-daemon"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-daemon, SD_EMERG, SD_ALERT, SD_CRIT, SD_ERR, SD_WARNING, SD_NOTICE, SD_INFO, SD_DEBUG — Reference implementation of APIs for
+ new-style daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-daemon</code> </p></div></div><div class="refsect1"><a name="idm274682004384"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-daemon.c</code> and
<code class="filename">sd-daemon.h</code> provide a reference
implementation of various APIs for new-style daemons,
as implemented by the
@@ -43,7 +43,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <code class="varname">StandardError=syslog</code>
- or <code class="varname">StandardError=kmsg</code> these
+ or <code class="varname">StandardError=kmsg</code>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<code class="function">printk()</code>-style logging. See
@@ -53,8 +53,8 @@
log level system. To use these prefixes simply prefix
every line with one of these strings. A line that is
not prefixed will be logged at the default log level
- SD_INFO.</p><div class="example"><a name="idm259782027536"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
- NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259782025408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
+ SD_INFO.</p><div class="example"><a name="idm274685891936"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p>A daemon may log with the log level
+ NOTICE by issuing this call:</p><pre class="programlisting">fprintf(stderr, SD_NOTICE "Hello World!\n");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274685889856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These interfaces are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -70,8 +70,7 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</p><p>The functions directly related to new-style
@@ -79,7 +78,7 @@
during compilation and the reference implementation is
used as drop-in files. In addition, if
<code class="filename">sd-daemon.c</code> is compiled on
- non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm259783768736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems they become NOPs.</p></div><div class="refsect1"><a name="idm274685881984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>,
diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml
index a3bf662fe9..6e804e1a6c 100644
--- a/man/sd-daemon.xml
+++ b/man/sd-daemon.xml
@@ -99,7 +99,7 @@
conjunction with STDERR-based logging as implemented
by systemd. If a systemd service definition file is
configured with <varname>StandardError=syslog</varname>
- or <varname>StandardError=kmsg</varname> these
+ or <varname>StandardError=kmsg</varname>, these
prefixes can be used to encode a log level in lines
printed. This is similar to the kernel
<function>printk()</function>-style logging. See
@@ -146,8 +146,7 @@
<filename>sd-daemon.h</filename> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-daemon</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree,
either verbatim or in excerpts.</para>
diff --git a/man/sd-id128.3 b/man/sd-id128.3
new file mode 100644
index 0000000000..89643bb461
--- /dev/null
+++ b/man/sd-id128.3
@@ -0,0 +1,163 @@
+'\" t
+.TH "SD\-ID128" "3" "" "systemd 208" "sd-id128"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal \- APIs for processing 128\-bit IDs
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-id128\&.h>
+.fi
+.ft
+.HP \w'\fBpkg\-config\ \-\-cflags\ \-\-libs\ libsystemd\-id128\fR\ 'u
+\fBpkg\-config \-\-cflags \-\-libs libsystemd\-id128\fR
+.SH "DESCRIPTION"
+.PP
+sd\-id128\&.h
+provides APIs to process and generate 128\-bit ID values\&. The 128\-bit ID values processed and generated by these APIs are a generalization of OSF UUIDs as defined by
+\m[blue]\fBRFC 4122\fR\m[]\&\s-2\u[1]\d\s+2
+but use a simpler string format\&. These functions impose no structure on the used IDs, much unlike OSF UUIDs or Microsoft GUIDs, but are fully compatible with those types of IDs\&.
+.PP
+See
+\fBsd_id128_to_string\fR(3),
+\fBsd_id128_randomize\fR(3)
+and
+\fBsd_id128_get_machine\fR(3)
+for more information about the implemented functions\&.
+.PP
+A 128\-bit ID is implemented as the following union type:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+typedef union sd_id128 {
+ uint8_t bytes[16];
+ uint64_t qwords[2];
+} sd_id128_t;
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This union type allows accessing the 128\-bit ID as 16 separate bytes or two 64\-bit words\&. It is generally safer to access the ID components by their 8\-bit array to avoid endianness issues\&. This union is intended to be passed call\-by\-value (as opposed to call\-by\-reference) and may be directly manipulated by clients\&.
+.PP
+A couple of macros are defined to denote and decode 128\-bit IDs:
+.PP
+\fBSD_ID128_MAKE()\fR
+may be used to denote a constant 128\-bit ID in source code\&. A commonly used idiom is to assign a name to a 128\-bit ID using this macro:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBSD_ID128_CONST_STR()\fR
+may be used to convert constant 128\-bit IDs into constant strings for output\&. The following example code will output the string "fc2e22bc6ee647b6b90729ab34a250b1":
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+int main(int argc, char *argv[]) {
+ puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBSD_ID128_FORMAT_STR\fR
+and
+\fBSD_ID128_FORMAT_VAL()\fR
+may be used to format a 128\-bit ID in a
+\fBprintf\fR(3)
+format string, as shown in the following example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+int main(int argc, char *argv[]) {
+ sd_id128_t id;
+ id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
+ printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR "\&.\en", SD_ID128_FORMAT_VAL(id));
+ return 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Use
+\fBsd_id128_equal()\fR
+to compare two 128\-bit IDs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+int main(int argc, char *argv[]) {
+ sd_id128_t a, b, c;
+ a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
+ b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
+ c = a;
+ assert(sd_id128_equal(a, c));
+ assert(!sd_id128_equal(a, b));
+ return 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Note that new, randomized IDs may be generated with
+\fBjournalctl\fR(1)\*(Aqs
+\fB\-\-new\-id\fR
+option\&.
+.SH "NOTES"
+.PP
+These APIs are implemented as a shared library, which can be compiled and linked to with the
+"libsystemd\-id128"\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd_id128_to_string\fR(3),
+\fBsd_id128_randomize\fR(3),
+\fBsd_id128_get_machine\fR(3),
+\fBprintf\fR(3),
+\fBjournalctl\fR(1),
+\fBsd-journal\fR(7),
+\fBpkg-config\fR(1),
+\fBmachine-id\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+RFC 4122
+.RS 4
+\%https://tools.ietf.org/html/rfc4122
+.RE
diff --git a/man/sd-id128.html b/man/sd-id128.html
index c29d171da1..6bd1585c5a 100644
--- a/man/sd-id128.html
+++ b/man/sd-id128.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/sd-id128.xml b/man/sd-id128.xml
index ac2000e275..3a5e13306d 100644
--- a/man/sd-id128.xml
+++ b/man/sd-id128.xml
@@ -50,7 +50,7 @@
<refname>SD_ID128_FORMAT_STR</refname>
<refname>SD_ID128_FORMAT_VAL</refname>
<refname>sd_id128_equal</refname>
- <refpurpose>APIs for processing 128 bit IDs</refpurpose>
+ <refpurpose>APIs for processing 128-bit IDs</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -68,12 +68,12 @@
<title>Description</title>
<para><filename>sd-id128.h</filename> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
generalization of OSF UUIDs as defined by <ulink
- url="http://tools.ietf.org/html/rfc4122">RFC
- 4122</ulink>, though use a simpler string
- formatting. These functions impose no structure on the
+ url="https://tools.ietf.org/html/rfc4122">RFC
+ 4122</ulink> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</para>
@@ -85,7 +85,7 @@
for more information about the implemented
functions.</para>
- <para>A 128 bit ID is implemented as the following
+ <para>A 128-bit ID is implemented as the following
union type:</para>
<programlisting>typedef union sd_id128 {
@@ -93,26 +93,26 @@
uint64_t qwords[2];
} sd_id128_t;</programlisting>
- <para>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+ <para>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</para>
<para>A couple of macros are defined to denote and
- decode 128 bit IDs:</para>
+ decode 128-bit IDs:</para>
<para><function>SD_ID128_MAKE()</function> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</para>
<programlisting>#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</programlisting>
<para><function>SD_ID128_CONST_STR()</function> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</para>
@@ -122,7 +122,7 @@
<para><function>SD_ID128_FORMAT_STR</function> and
<function>SD_ID128_FORMAT_VAL()</function> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<citerefentry><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>
format string, as shown in the following
example:</para>
@@ -134,7 +134,7 @@
return 0;
}</programlisting>
- <para>Use <function>sd_id128_equal()</function> to compare two 128 bit IDs:</para>
+ <para>Use <function>sd_id128_equal()</function> to compare two 128-bit IDs:</para>
<programlisting>int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
@@ -149,7 +149,7 @@
<para>Note that new, randomized IDs may be generated
with
<citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
- <literal>--new-id</literal> option.</para>
+ <option>--new-id</option> option.</para>
</refsect1>
<refsect1>
@@ -157,8 +157,7 @@
<para>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <literal>libsystemd-id128</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd-journal.3 b/man/sd-journal.3
new file mode 100644
index 0000000000..06cc3d4714
--- /dev/null
+++ b/man/sd-journal.3
@@ -0,0 +1,85 @@
+'\" t
+.TH "SD\-JOURNAL" "3" "" "systemd 208" "sd-journal"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd-journal \- APIs for submitting and querying log entries to and from the journal
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'\fBpkg\-config\ \-\-cflags\ \-\-libs\ libsystemd\-journal\fR\ 'u
+\fBpkg\-config \-\-cflags \-\-libs libsystemd\-journal\fR
+.SH "DESCRIPTION"
+.PP
+sd\-journal\&.h
+provides APIs to submit and query log entries\&. The APIs exposed act both as client for the
+\fBsystemd-journald.service\fR(8)
+journal service and as parser for the journal files on disk\&.
+.PP
+See
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_add_match\fR(3),
+\fBsd_journal_seek_head\fR(3),
+\fBsd_journal_get_cursor\fR(3),
+\fBsd_journal_cutoff_realtime_usec\fR(3),
+\fBsd_journal_get_usage\fR(3),
+\fBsd_journal_get_catalog\fR(3)
+and
+\fBsd_journal_get_fd\fR(3)
+for more information about the functions implemented\&.
+.PP
+Command line access for submitting entries to the journal is available with the
+\fBsystemd-cat\fR(1)
+tool\&. Command line access for querying entries from the journal is available with the
+\fBjournalctl\fR(1)
+tool\&.
+.SH "NOTES"
+.PP
+These APIs are implemented as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_add_match\fR(3),
+\fBsd_journal_seek_head\fR(3),
+\fBsd_journal_get_cursor\fR(3),
+\fBsd_journal_cutoff_realtime_usec\fR(3),
+\fBsd_journal_get_usage\fR(3),
+\fBsd_journal_get_fd\fR(3),
+\fBsd_journal_query_unique\fR(3),
+\fBsd_journal_get_catalog\fR(3),
+\fBjournalctl\fR(1),
+\fBsd-id128\fR(3),
+\fBpkg-config\fR(1)
diff --git a/man/sd-journal.html b/man/sd-journal.html
index e537496136..ef37b34b91 100644
--- a/man/sd-journal.html
+++ b/man/sd-journal.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-journal"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-journal — APIs for submitting and querying log entries to and from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-journal</code> </p></div></div><div class="refsect1"><a name="idm259773261184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-journal.h</code> provides APIs
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-journal"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-journal — APIs for submitting and querying log entries to and from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-journal</code> </p></div></div><div class="refsect1"><a name="idm274697528880"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-journal.h</code> provides APIs
to submit and query log entries. The APIs exposed act
both as client for the
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>
@@ -46,11 +46,10 @@
tool. Command line access for querying entries from
the journal is available with the
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>
- tool.</p></div><div class="refsect1"><a name="idm259771685920"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as shared library,
+ tool.</p></div><div class="refsect1"><a name="idm274701465792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259771683072"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274701463184"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/sd-journal.xml b/man/sd-journal.xml
index a7220ec6bc..6d39611447 100644
--- a/man/sd-journal.xml
+++ b/man/sd-journal.xml
@@ -100,8 +100,7 @@
<para>These APIs are implemented as shared library,
which can be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd-login.3 b/man/sd-login.3
new file mode 100644
index 0000000000..05f32d1215
--- /dev/null
+++ b/man/sd-login.3
@@ -0,0 +1,96 @@
+'\" t
+.TH "SD\-LOGIN" "3" "" "systemd 208" "sd-login"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd-login \- APIs for tracking logins
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'\fBpkg\-config\ \-\-cflags\ \-\-libs\ libsystemd\-login\fR\ 'u
+\fBpkg\-config \-\-cflags \-\-libs libsystemd\-login\fR
+.SH "DESCRIPTION"
+.PP
+sd\-login\&.h
+provides APIs to introspect and monitor seat, login session and user status information on the local system\&.
+.PP
+See
+\m[blue]\fBMulti\-Seat on Linux\fR\m[]\&\s-2\u[1]\d\s+2
+for an introduction into multi\-seat support on Linux, the background for this set of APIs\&.
+.PP
+Note that these APIs only allow purely passive access and monitoring of seats, sessions and users\&. To actively make changes to the seat configuration, terminate login sessions, or switch session on a seat you need to utilize the D\-Bus API of systemd\-logind, instead\&.
+.PP
+These functions synchronously access data in
+/proc,
+/sys/fs/cgroup
+and
+/run\&. All of these are virtual file systems, hence the runtime cost of the accesses is relatively cheap\&.
+.PP
+It is possible (and often a very good choice) to mix calls to the synchronous interface of
+sd\-login\&.h
+with the asynchronous D\-Bus interface of systemd\-logind\&. However, if this is done you need to think a bit about possible races since the stream of events from D\-Bus and from
+sd\-login\&.h
+interfaces such as the login monitor are asynchronous and not ordered against each other\&.
+.PP
+If the functions return string arrays, these are generally
+\fBNULL\fR
+terminated and need to be freed by the caller with the libc
+\fBfree\fR(3)
+call after use, including the strings referenced therein\&. Similar, individual strings returned need to be freed, as well\&.
+.PP
+As a special exception, instead of an empty string array
+\fBNULL\fR
+may be returned, which should be treated equivalent to an empty string array\&.
+.PP
+See
+\fBsd_pid_get_session\fR(3),
+\fBsd_uid_get_state\fR(3),
+\fBsd_session_is_active\fR(3),
+\fBsd_seat_get_active\fR(3),
+\fBsd_get_seats\fR(3),
+\fBsd_login_monitor_new\fR(3)
+for more information about the functions implemented\&.
+.SH "NOTES"
+.PP
+These APIs are implemented as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd_pid_get_session\fR(3),
+\fBsd_uid_get_state\fR(3),
+\fBsd_session_is_active\fR(3),
+\fBsd_seat_get_active\fR(3),
+\fBsd_get_seats\fR(3),
+\fBsd_login_monitor_new\fR(3),
+\fBsd-daemon\fR(3),
+\fBsd-readahead\fR(3),
+\fBpkg-config\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+Multi-Seat on Linux
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/multiseat
+.RE
diff --git a/man/sd-login.html b/man/sd-login.html
index eab05605cb..4c51b387fe 100644
--- a/man/sd-login.html
+++ b/man/sd-login.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-login"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-login — APIs for
- tracking logins</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-login</code> </p></div></div><div class="refsect1"><a name="idm259797573152"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-login.h</code> provides APIs to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-login"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-login — APIs for
+ tracking logins</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-login</code> </p></div></div><div class="refsect1"><a name="idm274697454064"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-login.h</code> provides APIs to
introspect and monitor seat, login session and user
status information on the local system. </p><p>See <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/multiseat" target="_top">Multi-Seat
on Linux</a> for an introduction into multi-seat
@@ -43,13 +43,13 @@
<code class="filename">sd-login.h</code> interfaces such as the
login monitor are asynchronous and not ordered against
each other.</p><p>If the functions return string arrays, these are
- generally NULL terminated and need to be freed by the
+ generally <code class="constant">NULL</code> terminated and need to be freed by the
caller with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use, including the strings referenced
therein. Similar, individual strings returned need to
be freed, as well.</p><p>As a special exception, instead of an empty
- string array NULL may be returned, which should be
+ string array <code class="constant">NULL</code> may be returned, which should be
treated equivalent to an empty string array.</p><p>See
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>,
<a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a>,
@@ -58,11 +58,10 @@
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
<a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a>
for more information about the functions
- implemented.</p></div><div class="refsect1"><a name="idm259793849024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as shared library,
+ implemented.</p></div><div class="refsect1"><a name="idm274701395328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259793846176"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274701392672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>,
<a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a>,
diff --git a/man/sd-login.xml b/man/sd-login.xml
index 697259564d..251b35b06f 100644
--- a/man/sd-login.xml
+++ b/man/sd-login.xml
@@ -95,7 +95,7 @@
each other.</para>
<para>If the functions return string arrays, these are
- generally NULL terminated and need to be freed by the
+ generally <constant>NULL</constant> terminated and need to be freed by the
caller with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use, including the strings referenced
@@ -103,7 +103,7 @@
be freed, as well.</para>
<para>As a special exception, instead of an empty
- string array NULL may be returned, which should be
+ string array <constant>NULL</constant> may be returned, which should be
treated equivalent to an empty string array.</para>
<para>See
@@ -122,8 +122,7 @@
<para>These APIs are implemented as shared library,
which can be compiled and linked to with the
- <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd-readahead.3 b/man/sd-readahead.3
new file mode 100644
index 0000000000..1dc0ebf881
--- /dev/null
+++ b/man/sd-readahead.3
@@ -0,0 +1,65 @@
+'\" t
+.TH "SD\-READAHEAD" "3" "" "systemd 208" "sd-readahead"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd-readahead \- Reference implementation of APIs for controlling boot\-time read\-ahead
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include "sd\-readahead\&.h"
+.fi
+.ft
+.SH "DESCRIPTION"
+.PP
+sd\-readahead\&.c
+and
+sd\-readahead\&.h
+provide a reference implementation for APIs for controlling boot\-time read\-ahead, as implemented by the read\-ahead subsystem of the
+\fBsystemd\fR(1)
+init system\&.
+.PP
+See
+\fBsd_readahead\fR(3)
+for more information about the function implemented\&.
+.SH "NOTES"
+.PP
+This interface is provided by the reference implementation of APIs for controlling boot\-time read\-ahead and distributed with the systemd package\&. The algorithms it implements are simple, and can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&. See the respective function man pages for details\&.
+.PP
+In addition, for details about the algorithms check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/readahead/sd-readahead.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-readahead.h\fR\m[]
+.PP
+These APIs are implemented in the reference implementation\*(Aqs drop\-in
+sd\-readahead\&.c
+and
+sd\-readahead\&.h
+files\&. It is recommended that applications consuming these APIs copy the implementation into their source tree, either verbatim or in excerpts\&. These interfaces are currently not available in a dynamic library\&.
+.PP
+The functions provided by this interface become NOPs when \-DDISABLE_SYSTEMD is set during compilation\&. In addition, if
+sd\-readhead\&.c
+is compiled on non\-Linux systems it becomes NOPs\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd_readahead\fR(3),
+\fBsd-daemon\fR(3)
diff --git a/man/sd-readahead.html b/man/sd-readahead.html
index f5959f3ec7..6383fea38f 100644
--- a/man/sd-readahead.html
+++ b/man/sd-readahead.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-readahead"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-readahead — Reference implementation of APIs for
- controlling boot-time read-ahead</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include "sd-readahead.h"</pre></div></div><div class="refsect1"><a name="idm259774040160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-readahead.c</code> and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-readahead"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-readahead — Reference implementation of APIs for
+ controlling boot-time read-ahead</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include "sd-readahead.h"</pre></div></div><div class="refsect1"><a name="idm274673259056"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-readahead.c</code> and
<code class="filename">sd-readahead.h</code> provide a
reference implementation for APIs for controlling boot-time
read-ahead, as implemented by the read-ahead subsystem
@@ -29,7 +29,7 @@
init system.</p><p>See
<a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a>
for more information about the function
- implemented.</p></div><div class="refsect1"><a name="idm259774108208"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This interface is provided by the reference
+ implemented.</p></div><div class="refsect1"><a name="idm274673254432"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This interface is provided by the reference
implementation of APIs for controlling boot-time
read-ahead and distributed with the systemd
package. The algorithms it implements are simple, and
@@ -51,7 +51,7 @@
NOPs when -DDISABLE_SYSTEMD is set during
compilation. In addition, if
<code class="filename">sd-readhead.c</code> is compiled on
- non-Linux systems it becomes NOPs.</p></div><div class="refsect1"><a name="idm259770266880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ non-Linux systems it becomes NOPs.</p></div><div class="refsect1"><a name="idm274673247856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>
diff --git a/man/sd_booted.3 b/man/sd_booted.3
new file mode 100644
index 0000000000..a8e48fb877
--- /dev/null
+++ b/man/sd_booted.3
@@ -0,0 +1,67 @@
+'\" t
+.TH "SD_BOOTED" "3" "" "systemd 208" "sd_booted"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_booted \- Test whether the system is running the systemd init system
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-daemon\&.h>
+.fi
+.ft
+.HP \w'int\ sd_booted('u
+.BI "int sd_booted(void);"
+.SH "DESCRIPTION"
+.PP
+\fBsd_booted()\fR
+checks whether the system was booted up using the systemd init system\&.
+.SH "RETURN VALUE"
+.PP
+On failure, this call returns a negative errno\-style error code\&. If the system was booted up with systemd as init system, this call returns a positive return value, zero otherwise\&.
+.SH "NOTES"
+.PP
+This function is provided by the reference implementation of APIs for new\-style daemons and distributed with the systemd package\&. The algorithm it implements is simple, and can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&.
+.PP
+Internally, this function checks whether the directory
+/run/systemd/system/
+exists\&. A simple check like this can also be implemented trivially in shell or any other language\&.
+.PP
+For details about the algorithm check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h\fR\m[]
+.PP
+\fBsd_booted()\fR
+is implemented in the reference implementation\*(Aqs
+sd\-daemon\&.c
+and
+sd\-daemon\&.h
+files\&. These interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-daemon\fR\ \&\fBpkg-config\fR(1)
+file\&. Alternatively, applications consuming these APIs may copy the implementation into their source tree\&. For more details about the reference implementation see
+\fBsd-daemon\fR(3)\&.
+.PP
+If the reference implementation is used as drop\-in files and \-DDISABLE_SYSTEMD is set during compilation, this function will always return 0 and otherwise become a NOP\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-daemon\fR(3)
diff --git a/man/sd_booted.html b/man/sd_booted.html
index a491e72f03..8ac6f42fd6 100644
--- a/man/sd_booted.html
+++ b/man/sd_booted.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_booted"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_booted — Test whether the system is running the systemd init system</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_booted</b>(</code></td><td>void<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259792897024"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_booted()</code> checks whether
- the system was booted up using the systemd init system.</p></div><div class="refsect1"><a name="idm259792968384"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, this call returns a negative
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_booted"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_booted — Test whether the system is running the systemd init system</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_booted</b>(</code></td><td>void<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274673488944"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_booted()</code> checks whether
+ the system was booted up using the systemd init system.</p></div><div class="refsect1"><a name="idm274673487200"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, this call returns a negative
errno-style error code. If the system was booted up
with systemd as init system, this call returns a
- positive return value, zero otherwise.</p></div><div class="refsect1"><a name="idm259792966960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
+ positive return value, zero otherwise.</p></div><div class="refsect1"><a name="idm274673485776"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithm it
implements is simple, and can easily be reimplemented
@@ -42,16 +42,15 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation this function will always return 0 and
- otherwise become a NOP.</p></div><div class="refsect1"><a name="idm259791324176"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ compilation, this function will always return 0 and
+ otherwise become a NOP.</p></div><div class="refsect1"><a name="idm274673476080"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>
</p></div></div></body></html>
diff --git a/man/sd_booted.xml b/man/sd_booted.xml
index ce5a34dc86..64c0cd9d3d 100644
--- a/man/sd_booted.xml
+++ b/man/sd_booted.xml
@@ -102,8 +102,7 @@
<filename>sd-daemon.h</filename> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-daemon</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
@@ -112,7 +111,7 @@
<para>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation this function will always return 0 and
+ compilation, this function will always return 0 and
otherwise become a NOP.</para>
</refsect1>
diff --git a/man/sd_get_machine_names.3 b/man/sd_get_machine_names.3
new file mode 100644
index 0000000000..e7cdc2d923
--- /dev/null
+++ b/man/sd_get_machine_names.3
@@ -0,0 +1 @@
+.so man3/sd_get_seats.3
diff --git a/man/sd_get_machine_names.html b/man/sd_get_machine_names.html
index 3323e32f65..7920c4bc9d 100644
--- a/man/sd_get_machine_names.html
+++ b/man/sd_get_machine_names.html
@@ -19,33 +19,32 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259797390800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274687208976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
to determine all currently available local
- seats. Returns a NULL terminated array of seat
+ seats. Returns a <code class="constant">NULL</code> terminated array of seat
identifiers. The returned array and all strings it
references need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p>Similar, <code class="function">sd_get_sessions()</code> may
be used to determine all current login sessions.</p><p>Similar, <code class="function">sd_get_uids()</code> may
be used to determine all Unix users who currently have login sessions.</p><p>Similar,
<code class="function">sd_get_machine_names()</code> may be
used to determine all current virtual machines and
- containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm259797383872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
+ containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm274691159552"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> return the
number of entries in the arrays. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797379648"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274691155328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259801272720"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274691149776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_get_seats.3 b/man/sd_get_seats.3
new file mode 100644
index 0000000000..8c347dd435
--- /dev/null
+++ b/man/sd_get_seats.3
@@ -0,0 +1,87 @@
+'\" t
+.TH "SD_GET_SEATS" "3" "" "systemd 208" "sd_get_seats"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names \- Determine available seats, sessions, logged in users and virtual machines/containers
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'int\ sd_get_seats('u
+.BI "int sd_get_seats(char***\ " "seats" ");"
+.HP \w'int\ sd_get_sessions('u
+.BI "int sd_get_sessions(char***\ " "sessions" ");"
+.HP \w'int\ sd_get_uids('u
+.BI "int sd_get_uids(uid_t**\ " "users" ");"
+.HP \w'int\ sd_get_machine_names('u
+.BI "int sd_get_machine_names(char***\ " "machines" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_get_seats()\fR
+may be used to determine all currently available local seats\&. Returns a
+\fBNULL\fR
+terminated array of seat identifiers\&. The returned array and all strings it references need to be freed with the libc
+\fBfree\fR(3)
+call after use\&. Note that instead of an empty array
+\fBNULL\fR
+may be returned and should be considered equivalent to an empty array\&.
+.PP
+Similar,
+\fBsd_get_sessions()\fR
+may be used to determine all current login sessions\&.
+.PP
+Similar,
+\fBsd_get_uids()\fR
+may be used to determine all Unix users who currently have login sessions\&.
+.PP
+Similar,
+\fBsd_get_machine_names()\fR
+may be used to determine all current virtual machines and containers on the system\&.
+.PP
+Note that the returned lists are not sorted and in an undefined order\&.
+.SH "RETURN VALUE"
+.PP
+On success
+\fBsd_get_seats()\fR,
+\fBsd_get_sessions()\fR,
+\fBsd_get_uids()\fR
+and
+\fBsd_get_machine_names()\fR
+return the number of entries in the arrays\&. On failure, these calls return a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_get_seats()\fR,
+\fBsd_get_sessions()\fR,
+\fBsd_get_uids()\fR
+and
+\fBsd_get_machine_names()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-login\fR(3),
+\fBsd_session_get_seat\fR(3)
diff --git a/man/sd_get_seats.html b/man/sd_get_seats.html
index 3323e32f65..7920c4bc9d 100644
--- a/man/sd_get_seats.html
+++ b/man/sd_get_seats.html
@@ -19,33 +19,32 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259797390800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274687208976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
to determine all currently available local
- seats. Returns a NULL terminated array of seat
+ seats. Returns a <code class="constant">NULL</code> terminated array of seat
identifiers. The returned array and all strings it
references need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p>Similar, <code class="function">sd_get_sessions()</code> may
be used to determine all current login sessions.</p><p>Similar, <code class="function">sd_get_uids()</code> may
be used to determine all Unix users who currently have login sessions.</p><p>Similar,
<code class="function">sd_get_machine_names()</code> may be
used to determine all current virtual machines and
- containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm259797383872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
+ containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm274691159552"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> return the
number of entries in the arrays. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797379648"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274691155328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259801272720"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274691149776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml
index 9bc866dc68..8254b7cae4 100644
--- a/man/sd_get_seats.xml
+++ b/man/sd_get_seats.xml
@@ -82,12 +82,12 @@
<para><function>sd_get_seats()</function> may be used
to determine all currently available local
- seats. Returns a NULL terminated array of seat
+ seats. Returns a <constant>NULL</constant> terminated array of seat
identifiers. The returned array and all strings it
references need to be freed with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <constant>NULL</constant> may be returned and should be considered
equivalent to an empty array.</para>
<para>Similar, <function>sd_get_sessions()</function> may
@@ -124,8 +124,7 @@
<function>sd_get_machine_names()</function> interfaces
are available as shared library, which can be compiled
and linked to with the
- <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_get_sessions.3 b/man/sd_get_sessions.3
new file mode 100644
index 0000000000..e7cdc2d923
--- /dev/null
+++ b/man/sd_get_sessions.3
@@ -0,0 +1 @@
+.so man3/sd_get_seats.3
diff --git a/man/sd_get_sessions.html b/man/sd_get_sessions.html
index 3323e32f65..7920c4bc9d 100644
--- a/man/sd_get_sessions.html
+++ b/man/sd_get_sessions.html
@@ -19,33 +19,32 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259797390800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274687208976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
to determine all currently available local
- seats. Returns a NULL terminated array of seat
+ seats. Returns a <code class="constant">NULL</code> terminated array of seat
identifiers. The returned array and all strings it
references need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p>Similar, <code class="function">sd_get_sessions()</code> may
be used to determine all current login sessions.</p><p>Similar, <code class="function">sd_get_uids()</code> may
be used to determine all Unix users who currently have login sessions.</p><p>Similar,
<code class="function">sd_get_machine_names()</code> may be
used to determine all current virtual machines and
- containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm259797383872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
+ containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm274691159552"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> return the
number of entries in the arrays. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797379648"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274691155328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259801272720"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274691149776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_get_uids.3 b/man/sd_get_uids.3
new file mode 100644
index 0000000000..e7cdc2d923
--- /dev/null
+++ b/man/sd_get_uids.3
@@ -0,0 +1 @@
+.so man3/sd_get_seats.3
diff --git a/man/sd_get_uids.html b/man/sd_get_uids.html
index 3323e32f65..7920c4bc9d 100644
--- a/man/sd_get_uids.html
+++ b/man/sd_get_uids.html
@@ -19,33 +19,32 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259797390800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_get_seats"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_get_seats, sd_get_sessions, sd_get_uids, sd_get_machine_names — Determine available seats, sessions, logged in users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_seats</b>(</code></td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_sessions</b>(</code></td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_uids</b>(</code></td><td>uid_t** <var class="pdparam">users</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_get_machine_names</b>(</code></td><td>char*** <var class="pdparam">machines</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274687208976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_get_seats()</code> may be used
to determine all currently available local
- seats. Returns a NULL terminated array of seat
+ seats. Returns a <code class="constant">NULL</code> terminated array of seat
identifiers. The returned array and all strings it
references need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p>Similar, <code class="function">sd_get_sessions()</code> may
be used to determine all current login sessions.</p><p>Similar, <code class="function">sd_get_uids()</code> may
be used to determine all Unix users who currently have login sessions.</p><p>Similar,
<code class="function">sd_get_machine_names()</code> may be
used to determine all current virtual machines and
- containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm259797383872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
+ containers on the system.</p><p>Note that the returned lists are not sorted and in an undefined order.</p></div><div class="refsect1"><a name="idm274691159552"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> return the
number of entries in the arrays. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797379648"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274691155328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_get_seats()</code>,
<code class="function">sd_get_sessions()</code>,
<code class="function">sd_get_uids()</code> and
<code class="function">sd_get_machine_names()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259801272720"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274691149776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_id128_equal.3 b/man/sd_id128_equal.3
new file mode 100644
index 0000000000..e201b0f6fa
--- /dev/null
+++ b/man/sd_id128_equal.3
@@ -0,0 +1 @@
+.so man3/sd-id128.3
diff --git a/man/sd_id128_equal.html b/man/sd_id128_equal.html
index c29d171da1..6bd1585c5a 100644
--- a/man/sd_id128_equal.html
+++ b/man/sd_id128_equal.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/sd_id128_from_string.3 b/man/sd_id128_from_string.3
new file mode 100644
index 0000000000..1428ca3de9
--- /dev/null
+++ b/man/sd_id128_from_string.3
@@ -0,0 +1 @@
+.so man3/sd_id128_to_string.3
diff --git a/man/sd_id128_from_string.html b/man/sd_id128_from_string.html
index 870882e7a0..81c8761eaa 100644
--- a/man/sd_id128_from_string.html
+++ b/man/sd_id128_from_string.html
@@ -19,41 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_id128_to_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_to_string, sd_id128_from_string — Format or parse 128 bit IDs as strings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">char* <b class="fsfunc">sd_id128_to_string</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, char <var class="pdparam">s</var>[33]<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_from_string</b>(</code></td><td>const char* <var class="pdparam">s</var>, sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259794775728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_to_string()</code>
- formats a 128 bit ID as character string. It expects
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_id128_to_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_to_string, sd_id128_from_string — Format or parse 128-bit IDs as strings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">char* <b class="fsfunc">sd_id128_to_string</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, char <var class="pdparam">s</var>[33]<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_from_string</b>(</code></td><td>const char* <var class="pdparam">s</var>, sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274699009584"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_to_string()</code>
+ formats a 128-bit ID as a character string. It expects
the ID and a string array capable of storing 33
characters. The ID will be formatted as 32 lowercase
- hexadecimal digits and be terminated by a NUL
- byte.</p><p><code class="function">sd_id128_from_string()</code>
+ hexadecimal digits and be terminated by a
+ <code class="constant">NUL</code> byte.</p><p><code class="function">sd_id128_from_string()</code>
implements the reverse operation: it takes a 33
- character string with 32 hexadecimal digits
- (either lowercase or uppercase, terminated by NUL) and parses them back into an 128
- bit ID returned in
+ character string with 32 hexadecimal digits (either
+ lowercase or uppercase, terminated by
+ <code class="constant">NUL</code>) and parses them back into a
+ 128-bit ID returned in
<em class="parameter"><code>ret</code></em>. Alternatively, this call
- can also parse a 37 character string with a 128bit ID
+ can also parse a 37-character string with a 128-bit ID
formatted as RFC UUID.</p><p>For more information about the
- <code class="literal">sd_id128_t</code> type see
+ "<code class="literal">sd_id128_t</code>" type see
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>. Note
that these calls operate the same way on all
architectures, i.e. the results do not depend on
- endianess.</p><p>When formatting a 128 bit ID into a string it is
+ endianness.</p><p>When formatting a 128-bit ID into a string, it is
often easier to use a format string for
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>. This
is easily done using the
<code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> macros. For
more information see
- <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm259793134816"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_id128_to_string()</code> always
+ <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm274698999088"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_id128_to_string()</code> always
succeeds and returns a pointer to the string array
- passed in. <code class="function">sd_id128_from_string</code>
- returns 0 on success (in which case
- <em class="parameter"><code>ret</code></em> is filled in), or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259793131616"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_to_string()</code>
+ passed in. <code class="function">sd_id128_from_string</code>
+ returns 0 on success, in which case
+ <em class="parameter"><code>ret</code></em> is filled in, or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274698995888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_to_string()</code>
and <code class="function">sd_id128_from_string()</code> interfaces are
available as shared library, which can be compiled and
- linked to with the <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794877328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ linked to with the "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274702707856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>,
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
diff --git a/man/sd_id128_get_boot.3 b/man/sd_id128_get_boot.3
new file mode 100644
index 0000000000..f31ed8951c
--- /dev/null
+++ b/man/sd_id128_get_boot.3
@@ -0,0 +1 @@
+.so man3/sd_id128_get_machine.3
diff --git a/man/sd_id128_get_boot.html b/man/sd_id128_get_boot.html
index 6041523464..fafc13e648 100644
--- a/man/sd_id128_get_boot.html
+++ b/man/sd_id128_get_boot.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_id128_get_machine"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_get_machine, sd_id128_get_boot — Retrieve 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_machine</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_boot</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259796301024"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_get_machine()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_id128_get_machine"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_get_machine, sd_id128_get_boot — Retrieve 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_machine</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_boot</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685871200"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_get_machine()</code>
returns the machine ID of the executing host. This
reads and parses the
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>
@@ -39,21 +39,20 @@
<code class="function">sd_id128_get_boot()</code> always returns
a UUID v4 compatible
ID. <code class="function">sd_id128_get_machine()</code> will
- also return a UUID v4 compatible ID on new
- installations, but might not on older. It is possible
- to convert the machine ID into an UUID v4 compatible
- one. For more information see
+ also return a UUID v4-compatible ID on new
+ installations but might not on older. It is possible
+ to convert the machine ID into a UUID v4-compatible
+ one. For more information, see
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>.</p><p>For more information about the
- <code class="literal">sd_id128_t</code> type see
- <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm259794659168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The two calls return 0 on success (in which
+ "<code class="literal">sd_id128_t</code>" type see
+ <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm274689814576"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The two calls return 0 on success (in which
case <em class="parameter"><code>ret</code></em> is filled in), or a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794657328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_get_machine()</code>
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274689812736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_get_machine()</code>
and <code class="function">sd_id128_get_boot()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794652976"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274689808400"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>,
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>,
diff --git a/man/sd_id128_get_machine.3 b/man/sd_id128_get_machine.3
new file mode 100644
index 0000000000..cf65c8da4f
--- /dev/null
+++ b/man/sd_id128_get_machine.3
@@ -0,0 +1,80 @@
+'\" t
+.TH "SD_ID128_GET_MACHINE" "3" "" "systemd 208" "sd_id128_get_machine"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_id128_get_machine, sd_id128_get_boot \- Retrieve 128\-bit IDs
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-id128\&.h>
+.fi
+.ft
+.HP \w'int\ sd_id128_get_machine('u
+.BI "int sd_id128_get_machine(sd_id128_t*\ " "ret" ");"
+.HP \w'int\ sd_id128_get_boot('u
+.BI "int sd_id128_get_boot(sd_id128_t*\ " "ret" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_id128_get_machine()\fR
+returns the machine ID of the executing host\&. This reads and parses the
+\fBmachine-id\fR(5)
+file\&. This function caches the machine ID internally to make retrieving the machine ID a cheap operation\&.
+.PP
+\fBsd_id128_get_boot()\fR
+returns the boot ID of the executing kernel\&. This reads and parses the
+/proc/sys/kernel/random/boot_id
+file exposed by the kernel\&. It is randomly generated early at boot and is unique for every running kernel instance\&. See
+\fBrandom\fR(4)
+for more information\&. This function also internally caches the returned ID to make this call a cheap operation\&.
+.PP
+Note that
+\fBsd_id128_get_boot()\fR
+always returns a UUID v4 compatible ID\&.
+\fBsd_id128_get_machine()\fR
+will also return a UUID v4\-compatible ID on new installations but might not on older\&. It is possible to convert the machine ID into a UUID v4\-compatible one\&. For more information, see
+\fBmachine-id\fR(5)\&.
+.PP
+For more information about the
+"sd_id128_t"
+type see
+\fBsd-id128\fR(3)\&.
+.SH "RETURN VALUE"
+.PP
+The two calls return 0 on success (in which case
+\fIret\fR
+is filled in), or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_id128_get_machine()\fR
+and
+\fBsd_id128_get_boot()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+"libsystemd\-id128"\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-id128\fR(3),
+\fBmachine-id\fR(5),
+\fBrandom\fR(4),
+\fBsd_id128_randomize\fR(3)
diff --git a/man/sd_id128_get_machine.html b/man/sd_id128_get_machine.html
index 6041523464..fafc13e648 100644
--- a/man/sd_id128_get_machine.html
+++ b/man/sd_id128_get_machine.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_id128_get_machine"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_get_machine, sd_id128_get_boot — Retrieve 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_machine</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_boot</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259796301024"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_get_machine()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_id128_get_machine"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_get_machine, sd_id128_get_boot — Retrieve 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_machine</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_get_boot</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685871200"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_get_machine()</code>
returns the machine ID of the executing host. This
reads and parses the
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>
@@ -39,21 +39,20 @@
<code class="function">sd_id128_get_boot()</code> always returns
a UUID v4 compatible
ID. <code class="function">sd_id128_get_machine()</code> will
- also return a UUID v4 compatible ID on new
- installations, but might not on older. It is possible
- to convert the machine ID into an UUID v4 compatible
- one. For more information see
+ also return a UUID v4-compatible ID on new
+ installations but might not on older. It is possible
+ to convert the machine ID into a UUID v4-compatible
+ one. For more information, see
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>.</p><p>For more information about the
- <code class="literal">sd_id128_t</code> type see
- <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm259794659168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The two calls return 0 on success (in which
+ "<code class="literal">sd_id128_t</code>" type see
+ <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm274689814576"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The two calls return 0 on success (in which
case <em class="parameter"><code>ret</code></em> is filled in), or a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794657328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_get_machine()</code>
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274689812736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_get_machine()</code>
and <code class="function">sd_id128_get_boot()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794652976"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274689808400"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>,
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>,
diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml
index 039c1dd64c..6bee7ad9c1 100644
--- a/man/sd_id128_get_machine.xml
+++ b/man/sd_id128_get_machine.xml
@@ -45,7 +45,7 @@
<refnamediv>
<refname>sd_id128_get_machine</refname>
<refname>sd_id128_get_boot</refname>
- <refpurpose>Retrieve 128 bit IDs</refpurpose>
+ <refpurpose>Retrieve 128-bit IDs</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -92,10 +92,10 @@
<function>sd_id128_get_boot()</function> always returns
a UUID v4 compatible
ID. <function>sd_id128_get_machine()</function> will
- also return a UUID v4 compatible ID on new
- installations, but might not on older. It is possible
- to convert the machine ID into an UUID v4 compatible
- one. For more information see
+ also return a UUID v4-compatible ID on new
+ installations but might not on older. It is possible
+ to convert the machine ID into a UUID v4-compatible
+ one. For more information, see
<citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
<para>For more information about the
@@ -118,8 +118,7 @@
and <function>sd_id128_get_boot()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-id128</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_id128_randomize.3 b/man/sd_id128_randomize.3
new file mode 100644
index 0000000000..75a918106b
--- /dev/null
+++ b/man/sd_id128_randomize.3
@@ -0,0 +1,72 @@
+'\" t
+.TH "SD_ID128_RANDOMIZE" "3" "" "systemd 208" "sd_id128_randomize"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_id128_randomize \- Generate 128\-bit IDs
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-id128\&.h>
+.fi
+.ft
+.HP \w'int\ sd_id128_randomize('u
+.BI "int sd_id128_randomize(sd_id128_t*\ " "ret" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_id128_randomize()\fR
+generates a new randomized 128\-bit ID and returns it in
+\fIret\fR\&. Every invocation returns a new randomly generated ID\&. This uses the
+/dev/urandom
+kernel random number generator\&.
+.PP
+Note that
+\fBsd_id128_randomize()\fR
+always returns a UUID v4\-compatible ID\&.
+.PP
+For more information about the
+"sd_id128_t"
+type, see
+\fBsd-id128\fR(3)\&.
+.PP
+\fBjournalctl\fR(1)\*(Aqs
+\fB\-\-new\-id\fR
+option may be used as a command\-line front\-end for
+\fBsd_id128_randomize()\fR\&.
+.SH "RETURN VALUE"
+.PP
+The call returns 0 on success (in which case
+\fIret\fR
+is filled in), or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_id128_randomize()\fR
+interface is available as shared library, which can be compiled and linked to with the
+"libsystemd\-id128"\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-id128\fR(3),
+\fBmachine-id\fR(5),
+\fBrandom\fR(4),
+\fBsd_id128_get_machine\fR(3)
diff --git a/man/sd_id128_randomize.html b/man/sd_id128_randomize.html
index 8c0f944604..36700e6689 100644
--- a/man/sd_id128_randomize.html
+++ b/man/sd_id128_randomize.html
@@ -19,27 +19,25 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_id128_randomize"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_randomize — Generate 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_randomize</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772330912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_randomize()</code>
- generates a new randomized 128 bit ID and returns it
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_id128_randomize"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_randomize — Generate 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_randomize</b>(</code></td><td>sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274702298816"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_randomize()</code>
+ generates a new randomized 128-bit ID and returns it
in <em class="parameter"><code>ret</code></em>. Every invocation
returns a new randomly generated ID. This uses the
<code class="filename">/dev/urandom</code> kernel random number
generator.</p><p>Note that
<code class="function">sd_id128_randomize()</code> always returns
- a UUID v4 compatible
- ID.</p><p>For more information about the
- <code class="literal">sd_id128_t</code> type see
+ a UUID v4-compatible ID.</p><p>For more information about the
+ "<code class="literal">sd_id128_t</code>" type, see
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> command may be used as
- command line front-end for
- <code class="function">sd_id128_randomize()</code>.</p></div><div class="refsect1"><a name="idm259770718432"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The call returns 0 on success (in which
+ <code class="option">--new-id</code> option may be used as a
+ command-line front-end for
+ <code class="function">sd_id128_randomize()</code>.</p></div><div class="refsect1"><a name="idm274702290272"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The call returns 0 on success (in which
case <em class="parameter"><code>ret</code></em> is filled in), or a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259770716592"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_randomize()</code> interface
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274702288432"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_randomize()</code> interface
is available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259770713008"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274706238992"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>,
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>,
diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml
index be74937dd0..0b9580308a 100644
--- a/man/sd_id128_randomize.xml
+++ b/man/sd_id128_randomize.xml
@@ -44,7 +44,7 @@
<refnamediv>
<refname>sd_id128_randomize</refname>
- <refpurpose>Generate 128 bit IDs</refpurpose>
+ <refpurpose>Generate 128-bit IDs</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -63,7 +63,7 @@
<title>Description</title>
<para><function>sd_id128_randomize()</function>
- generates a new randomized 128 bit ID and returns it
+ generates a new randomized 128-bit ID and returns it
in <parameter>ret</parameter>. Every invocation
returns a new randomly generated ID. This uses the
<filename>/dev/urandom</filename> kernel random number
@@ -71,16 +71,15 @@
<para>Note that
<function>sd_id128_randomize()</function> always returns
- a UUID v4 compatible
- ID.</para>
+ a UUID v4-compatible ID.</para>
<para>For more information about the
- <literal>sd_id128_t</literal> type see
+ <literal>sd_id128_t</literal> type, see
<citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
<para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
- <literal>--new-id</literal> command may be used as
- command line front-end for
+ <option>--new-id</option> option may be used as a
+ command-line front-end for
<function>sd_id128_randomize()</function>.</para>
</refsect1>
@@ -98,8 +97,7 @@
<para>The <function>sd_id128_randomize()</function> interface
is available as shared library, which can be compiled
and linked to with the
- <literal>libsystemd-id128</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_id128_t.3 b/man/sd_id128_t.3
new file mode 100644
index 0000000000..e201b0f6fa
--- /dev/null
+++ b/man/sd_id128_t.3
@@ -0,0 +1 @@
+.so man3/sd-id128.3
diff --git a/man/sd_id128_t.html b/man/sd_id128_t.html
index c29d171da1..6bd1585c5a 100644
--- a/man/sd_id128_t.html
+++ b/man/sd_id128_t.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128 bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm259785214528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
- process and generate 128 bit ID values. The 128 bit ID
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd-id128"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing 128-bit IDs</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre></div><div class="cmdsynopsis"><p><code class="command">pkg-config --cflags --libs libsystemd-id128</code> </p></div></div><div class="refsect1"><a name="idm274677249712"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">sd-id128.h</code> provides APIs to
+ process and generate 128-bit ID values. The 128-bit ID
values processed and generated by these APIs are a
- generalization of OSF UUIDs as defined by <a class="ulink" href="http://tools.ietf.org/html/rfc4122" target="_top">RFC
- 4122</a>, though use a simpler string
- formatting. These functions impose no structure on the
+ generalization of OSF UUIDs as defined by <a class="ulink" href="https://tools.ietf.org/html/rfc4122" target="_top">RFC
+ 4122</a> but use a simpler string
+ format. These functions impose no structure on the
used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
but are fully compatible with those types of IDs.
</p><p>See
@@ -32,29 +32,29 @@
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> and
<a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a>
for more information about the implemented
- functions.</p><p>A 128 bit ID is implemented as the following
+ functions.</p><p>A 128-bit ID is implemented as the following
union type:</p><pre class="programlisting">typedef union sd_id128 {
uint8_t bytes[16];
uint64_t qwords[2];
-} sd_id128_t;</pre><p>This union type allows accessing the 128 bit ID
- as 16 separate bytes or two 64 bit words. It is generally
- safer to access the ID components by their 8 bit array
+} sd_id128_t;</pre><p>This union type allows accessing the 128-bit ID
+ as 16 separate bytes or two 64-bit words. It is generally
+ safer to access the ID components by their 8-bit array
to avoid endianness issues. This union is intended to
be passed call-by-value (as opposed to
call-by-reference) and may be directly manipulated by
clients.</p><p>A couple of macros are defined to denote and
- decode 128 bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
- to denote a constant 128 bit ID in source code. A
- commonly used idiom is to assign a name to a 128 bit
+ decode 128-bit IDs:</p><p><code class="function">SD_ID128_MAKE()</code> may be used
+ to denote a constant 128-bit ID in source code. A
+ commonly used idiom is to assign a name to a 128-bit
ID using this macro:</p><pre class="programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</pre><p><code class="function">SD_ID128_CONST_STR()</code> may be
- used to convert constant 128bit IDs into constant
+ used to convert constant 128-bit IDs into constant
strings for output. The following example code will
output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</p><pre class="programlisting">int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
}</pre><p><code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> may be used
- to format a 128 bit ID in a
+ to format a 128-bit ID in a
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
format string, as shown in the following
example:</p><pre class="programlisting">int main(int argc, char *argv[]) {
@@ -62,7 +62,7 @@
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
return 0;
-}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128 bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
+}</pre><p>Use <code class="function">sd_id128_equal()</code> to compare two 128-bit IDs:</p><pre class="programlisting">int main(int argc, char *argv[]) {
sd_id128_t a, b, c;
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
@@ -73,11 +73,10 @@
}</pre><p>Note that new, randomized IDs may be generated
with
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>'s
- <code class="literal">--new-id</code> option.</p></div><div class="refsect1"><a name="idm259785313216"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
+ <code class="option">--new-id</code> option.</p></div><div class="refsect1"><a name="idm274681131024"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These APIs are implemented as a shared library,
which can be compiled and linked to with the
- <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259785310368"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681128144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>,
<a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>,
diff --git a/man/sd_id128_to_string.3 b/man/sd_id128_to_string.3
new file mode 100644
index 0000000000..c5fe0b0c52
--- /dev/null
+++ b/man/sd_id128_to_string.3
@@ -0,0 +1,80 @@
+'\" t
+.TH "SD_ID128_TO_STRING" "3" "" "systemd 208" "sd_id128_to_string"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_id128_to_string, sd_id128_from_string \- Format or parse 128\-bit IDs as strings
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-id128\&.h>
+.fi
+.ft
+.HP \w'char*\ sd_id128_to_string('u
+.BI "char* sd_id128_to_string(sd_id128_t\ " "id" ",\ char\ " "s" "[33]);"
+.HP \w'int\ sd_id128_from_string('u
+.BI "int sd_id128_from_string(const\ char*\ " "s" ",\ sd_id128_t*\ " "ret" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_id128_to_string()\fR
+formats a 128\-bit ID as a character string\&. It expects the ID and a string array capable of storing 33 characters\&. The ID will be formatted as 32 lowercase hexadecimal digits and be terminated by a
+\fBNUL\fR
+byte\&.
+.PP
+\fBsd_id128_from_string()\fR
+implements the reverse operation: it takes a 33 character string with 32 hexadecimal digits (either lowercase or uppercase, terminated by
+\fBNUL\fR) and parses them back into a 128\-bit ID returned in
+\fIret\fR\&. Alternatively, this call can also parse a 37\-character string with a 128\-bit ID formatted as RFC UUID\&.
+.PP
+For more information about the
+"sd_id128_t"
+type see
+\fBsd-id128\fR(3)\&. Note that these calls operate the same way on all architectures, i\&.e\&. the results do not depend on endianness\&.
+.PP
+When formatting a 128\-bit ID into a string, it is often easier to use a format string for
+\fBprintf\fR(3)\&. This is easily done using the
+\fBSD_ID128_FORMAT_STR\fR
+and
+\fBSD_ID128_FORMAT_VAL()\fR
+macros\&. For more information see
+\fBsd-id128\fR(3)\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_id128_to_string()\fR
+always succeeds and returns a pointer to the string array passed in\&.
+\fBsd_id128_from_string\fR
+returns 0 on success, in which case
+\fIret\fR
+is filled in, or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_id128_to_string()\fR
+and
+\fBsd_id128_from_string()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+"libsystemd\-id128"\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-id128\fR(3),
+\fBprintf\fR(3)
diff --git a/man/sd_id128_to_string.html b/man/sd_id128_to_string.html
index 870882e7a0..81c8761eaa 100644
--- a/man/sd_id128_to_string.html
+++ b/man/sd_id128_to_string.html
@@ -19,41 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_id128_to_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_to_string, sd_id128_from_string — Format or parse 128 bit IDs as strings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">char* <b class="fsfunc">sd_id128_to_string</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, char <var class="pdparam">s</var>[33]<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_from_string</b>(</code></td><td>const char* <var class="pdparam">s</var>, sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259794775728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_to_string()</code>
- formats a 128 bit ID as character string. It expects
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_id128_to_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_id128_to_string, sd_id128_from_string — Format or parse 128-bit IDs as strings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-id128.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">char* <b class="fsfunc">sd_id128_to_string</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, char <var class="pdparam">s</var>[33]<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_id128_from_string</b>(</code></td><td>const char* <var class="pdparam">s</var>, sd_id128_t* <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274699009584"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_id128_to_string()</code>
+ formats a 128-bit ID as a character string. It expects
the ID and a string array capable of storing 33
characters. The ID will be formatted as 32 lowercase
- hexadecimal digits and be terminated by a NUL
- byte.</p><p><code class="function">sd_id128_from_string()</code>
+ hexadecimal digits and be terminated by a
+ <code class="constant">NUL</code> byte.</p><p><code class="function">sd_id128_from_string()</code>
implements the reverse operation: it takes a 33
- character string with 32 hexadecimal digits
- (either lowercase or uppercase, terminated by NUL) and parses them back into an 128
- bit ID returned in
+ character string with 32 hexadecimal digits (either
+ lowercase or uppercase, terminated by
+ <code class="constant">NUL</code>) and parses them back into a
+ 128-bit ID returned in
<em class="parameter"><code>ret</code></em>. Alternatively, this call
- can also parse a 37 character string with a 128bit ID
+ can also parse a 37-character string with a 128-bit ID
formatted as RFC UUID.</p><p>For more information about the
- <code class="literal">sd_id128_t</code> type see
+ "<code class="literal">sd_id128_t</code>" type see
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>. Note
that these calls operate the same way on all
architectures, i.e. the results do not depend on
- endianess.</p><p>When formatting a 128 bit ID into a string it is
+ endianness.</p><p>When formatting a 128-bit ID into a string, it is
often easier to use a format string for
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>. This
is easily done using the
<code class="function">SD_ID128_FORMAT_STR</code> and
<code class="function">SD_ID128_FORMAT_VAL()</code> macros. For
more information see
- <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm259793134816"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_id128_to_string()</code> always
+ <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>.</p></div><div class="refsect1"><a name="idm274698999088"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_id128_to_string()</code> always
succeeds and returns a pointer to the string array
- passed in. <code class="function">sd_id128_from_string</code>
- returns 0 on success (in which case
- <em class="parameter"><code>ret</code></em> is filled in), or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259793131616"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_to_string()</code>
+ passed in. <code class="function">sd_id128_from_string</code>
+ returns 0 on success, in which case
+ <em class="parameter"><code>ret</code></em> is filled in, or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274698995888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_id128_to_string()</code>
and <code class="function">sd_id128_from_string()</code> interfaces are
available as shared library, which can be compiled and
- linked to with the <code class="literal">libsystemd-id128</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794877328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ linked to with the "<code class="literal">libsystemd-id128</code>" <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274702707856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>,
<a href="printf.html"><span class="citerefentry"><span class="refentrytitle">printf</span>(3)</span></a>
diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml
index 593d0752d5..71cf82a6cd 100644
--- a/man/sd_id128_to_string.xml
+++ b/man/sd_id128_to_string.xml
@@ -45,7 +45,7 @@
<refnamediv>
<refname>sd_id128_to_string</refname>
<refname>sd_id128_from_string</refname>
- <refpurpose>Format or parse 128 bit IDs as strings</refpurpose>
+ <refpurpose>Format or parse 128-bit IDs as strings</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -69,19 +69,20 @@
<title>Description</title>
<para><function>sd_id128_to_string()</function>
- formats a 128 bit ID as character string. It expects
+ formats a 128-bit ID as a character string. It expects
the ID and a string array capable of storing 33
characters. The ID will be formatted as 32 lowercase
- hexadecimal digits and be terminated by a NUL
- byte.</para>
+ hexadecimal digits and be terminated by a
+ <constant>NUL</constant> byte.</para>
<para><function>sd_id128_from_string()</function>
implements the reverse operation: it takes a 33
- character string with 32 hexadecimal digits
- (either lowercase or uppercase, terminated by NUL) and parses them back into an 128
- bit ID returned in
+ character string with 32 hexadecimal digits (either
+ lowercase or uppercase, terminated by
+ <constant>NUL</constant>) and parses them back into a
+ 128-bit ID returned in
<parameter>ret</parameter>. Alternatively, this call
- can also parse a 37 character string with a 128bit ID
+ can also parse a 37-character string with a 128-bit ID
formatted as RFC UUID.</para>
<para>For more information about the
@@ -89,9 +90,9 @@
<citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>. Note
that these calls operate the same way on all
architectures, i.e. the results do not depend on
- endianess.</para>
+ endianness.</para>
- <para>When formatting a 128 bit ID into a string it is
+ <para>When formatting a 128-bit ID into a string, it is
often easier to use a format string for
<citerefentry><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>. This
is easily done using the
@@ -106,9 +107,9 @@
<para><function>sd_id128_to_string()</function> always
succeeds and returns a pointer to the string array
- passed in. <function>sd_id128_from_string</function>
- returns 0 on success (in which case
- <parameter>ret</parameter> is filled in), or a negative
+ passed in. <function>sd_id128_from_string</function>
+ returns 0 on success, in which case
+ <parameter>ret</parameter> is filled in, or a negative
errno-style error code.</para>
</refsect1>
@@ -118,8 +119,7 @@
<para>The <function>sd_id128_to_string()</function>
and <function>sd_id128_from_string()</function> interfaces are
available as shared library, which can be compiled and
- linked to with the <literal>libsystemd-id128</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ linked to with the <literal>libsystemd-id128</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_is_fifo.3 b/man/sd_is_fifo.3
new file mode 100644
index 0000000000..942d8c9288
--- /dev/null
+++ b/man/sd_is_fifo.3
@@ -0,0 +1,136 @@
+'\" t
+.TH "SD_IS_FIFO" "3" "" "systemd 208" "sd_is_fifo"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq \- Check the type of a file descriptor
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-daemon\&.h>
+.fi
+.ft
+.HP \w'int\ sd_is_fifo('u
+.BI "int sd_is_fifo(int\ " "fd" ", const\ char\ *" "path" ");"
+.HP \w'int\ sd_is_socket('u
+.BI "int sd_is_socket(int\ " "fd" ", int\ " "family" ", int\ " "type" ", int\ " "listening" ");"
+.HP \w'int\ sd_is_socket_inet('u
+.BI "int sd_is_socket_inet(int\ " "fd" ", int\ " "family" ", int\ " "type" ", int\ " "listening" ", uint16_t\ " "port" ");"
+.HP \w'int\ sd_is_socket_unix('u
+.BI "int sd_is_socket_unix(int\ " "fd" ", int\ " "type" ", int\ " "listening" ", const\ char*\ " "path" ", size_t\ " "length" ");"
+.HP \w'int\ sd_is_mq('u
+.BI "int sd_is_mq(int\ " "fd" ", const\ char\ *" "path" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_is_fifo()\fR
+may be called to check whether the specified file descriptor refers to a FIFO or pipe\&. If the
+\fIpath\fR
+parameter is not
+\fBNULL\fR, it is checked whether the FIFO is bound to the specified file system path\&.
+.PP
+\fBsd_is_socket()\fR
+may be called to check whether the specified file descriptor refers to a socket\&. If the
+\fIfamily\fR
+parameter is not
+\fBAF_UNSPEC\fR, it is checked whether the socket is of the specified family (AF_UNIX,
+\fBAF_INET\fR, \&.\&.\&.)\&. If the
+\fItype\fR
+parameter is not 0, it is checked whether the socket is of the specified type (\fBSOCK_STREAM\fR,
+\fBSOCK_DGRAM\fR, \&.\&.\&.)\&. If the
+\fIlistening\fR
+parameter is positive, it is checked whether the socket is in accepting mode, i\&.e\&.
+\fBlisten()\fR
+has been called for it\&. If
+\fIlistening\fR
+is 0, it is checked whether the socket is not in this mode\&. If the parameter is negative, no such check is made\&. The
+\fIlistening\fR
+parameter should only be used for stream sockets and should be set to a negative value otherwise\&.
+.PP
+\fBsd_is_socket_inet()\fR
+is similar to
+\fBsd_is_socket()\fR, but optionally checks the IPv4 or IPv6 port number the socket is bound to, unless
+\fIport\fR
+is zero\&. For this call
+\fIfamily\fR
+must be passed as either
+\fBAF_UNSPEC\fR,
+\fBAF_INET\fR, or
+\fBAF_INET6\fR\&.
+.PP
+\fBsd_is_socket_unix()\fR
+is similar to
+\fBsd_is_socket()\fR
+but optionally checks the
+\fBAF_UNIX\fR
+path the socket is bound to, unless the
+\fIpath\fR
+parameter is
+\fBNULL\fR\&. For normal file system
+\fBAF_UNIX\fR
+sockets, set the
+\fIlength\fR
+parameter to 0\&. For Linux abstract namespace sockets, set the
+\fIlength\fR
+to the size of the address, including the initial 0 byte, and set the
+\fIpath\fR
+to the initial 0 byte of the socket address\&.
+.PP
+\fBsd_is_mq()\fR
+may be called to check whether the specified file descriptor refers to a POSIX message queue\&. If the
+\fIpath\fR
+parameter is not
+\fBNULL\fR, it is checked whether the message queue is bound to the specified name\&.
+.SH "RETURN VALUE"
+.PP
+On failure, these calls return a negative errno\-style error code\&. If the file descriptor is of the specified type and bound to the specified address, a positive return value is returned, otherwise zero\&.
+.SH "NOTES"
+.PP
+These functions are provided by the reference implementation of APIs for new\-style daemons and distributed with the systemd package\&. The algorithms they implement are simple, and they can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&.
+.PP
+Internally, these function use a combination of
+fstat()
+and
+getsockname()
+to check the file descriptor type and where it is bound to\&.
+.PP
+For details about the algorithms, check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h\fR\m[]
+.PP
+\fBsd_is_fifo()\fR
+and the related functions are implemented in the reference implementation\*(Aqs
+sd\-daemon\&.c
+and
+sd\-daemon\&.h
+files\&. These interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-daemon\fR\ \&\fBpkg-config\fR(1)
+file\&. Alternatively, applications consuming these APIs may copy the implementation into their source tree\&. For more details about the reference implementation see
+\fBsd-daemon\fR(3)\&.
+.PP
+These functions continue to work as described, even if \-DDISABLE_SYSTEMD is set during compilation\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-daemon\fR(3),
+\fBsd_listen_fds\fR(3),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5)
diff --git a/man/sd_is_fifo.html b/man/sd_is_fifo.html
index beb19574cb..8a20f46ef4 100644
--- a/man/sd_is_fifo.html
+++ b/man/sd_is_fifo.html
@@ -19,20 +19,23 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784659536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274698824000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
to check whether the specified file descriptor refers
to a FIFO or pipe. If the <em class="parameter"><code>path</code></em>
- parameter is not NULL, it is checked whether the FIFO
- is bound to the specified file system path.</p><p><code class="function">sd_is_socket()</code> may be
+ parameter is not <code class="constant">NULL</code>, it is
+ checked whether the FIFO is bound to the specified
+ file system path.</p><p><code class="function">sd_is_socket()</code> may be
called to check whether the specified file descriptor
refers to a socket. If the
<em class="parameter"><code>family</code></em> parameter is not
- AF_UNSPEC it is checked whether the socket is of the
- specified family (AF_UNIX, AF_INET, ...). If the
- <em class="parameter"><code>type</code></em> parameter is not 0 it is
+ <code class="constant">AF_UNSPEC</code>, it is checked whether
+ the socket is of the specified family (AF_UNIX,
+ <code class="constant">AF_INET</code>, ...). If the
+ <em class="parameter"><code>type</code></em> parameter is not 0, it is
checked whether the socket is of the specified type
- (SOCK_STREAM, SOCK_DGRAM, ...). If the
- <em class="parameter"><code>listening</code></em> parameter is positive
+ (<code class="constant">SOCK_STREAM</code>,
+ <code class="constant">SOCK_DGRAM</code>, ...). If the
+ <em class="parameter"><code>listening</code></em> parameter is positive,
it is checked whether the socket is in accepting mode,
i.e. <code class="function">listen()</code> has been called for
it. If <em class="parameter"><code>listening</code></em> is 0, it is
@@ -45,36 +48,36 @@
optionally checks the IPv4 or IPv6 port number the
socket is bound to, unless <em class="parameter"><code>port</code></em>
is zero. For this call <em class="parameter"><code>family</code></em>
- must be passed as either AF_UNSPEC, AF_INET, or
- AF_INET6.</p><p><code class="function">sd_is_socket_unix()</code> is
- similar to <code class="function">sd_is_socket()</code>, but
- optionally checks the AF_UNIX path the socket is bound
+ must be passed as either <code class="constant">AF_UNSPEC</code>, <code class="constant">AF_INET</code>, or
+ <code class="constant">AF_INET6</code>.</p><p><code class="function">sd_is_socket_unix()</code> is
+ similar to <code class="function">sd_is_socket()</code> but
+ optionally checks the <code class="constant">AF_UNIX</code> path the socket is bound
to, unless the <em class="parameter"><code>path</code></em> parameter
- is NULL. For normal file system AF_UNIX sockets set
- the <em class="parameter"><code>length</code></em> parameter to 0. For
- Linux abstract namespace sockets set the
+ is <code class="constant">NULL</code>. For normal file system <code class="constant">AF_UNIX</code> sockets,
+ set the <em class="parameter"><code>length</code></em> parameter to 0. For
+ Linux abstract namespace sockets, set the
<em class="parameter"><code>length</code></em> to the size of the
- address, including the initial 0 byte and set
+ address, including the initial 0 byte, and set the
<em class="parameter"><code>path</code></em> to the initial 0 byte of
the socket address.</p><p><code class="function">sd_is_mq()</code> may be called to
check whether the specified file descriptor refers to
a POSIX message queue. If the
- <em class="parameter"><code>path</code></em> parameter is not NULL, it
- is checked whether the message queue is bound to the
- specified name.</p></div><div class="refsect1"><a name="idm259784633360"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ <em class="parameter"><code>path</code></em> parameter is not
+ <code class="constant">NULL</code>, it is checked whether the
+ message queue is bound to the specified name.</p></div><div class="refsect1"><a name="idm274698792912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If the file descriptor is of
- the specified type and bound to the specified address
+ the specified type and bound to the specified address,
a positive return value is returned, otherwise
- zero.</p></div><div class="refsect1"><a name="idm259784631888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ zero.</p></div><div class="refsect1"><a name="idm274698791440"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
- they implement are simple, and can easily be
+ they implement are simple, and they can easily be
reimplemented in daemons if it is important to support
this interface without using the reference
implementation.</p><p>Internally, these function use a combination of
<code class="filename">fstat()</code> and
<code class="filename">getsockname()</code> to check the file
- descriptor type and where it is bound to.</p><p>For details about the algorithms check the
+ descriptor type and where it is bound to.</p><p>For details about the algorithms, check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
and <a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h</a></p><p><code class="function">sd_is_fifo()</code> and the
@@ -83,15 +86,14 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>These functions continue to work as described,
even if -DDISABLE_SYSTEMD is set during
- compilation.</p></div><div class="refsect1"><a name="idm259784621312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ compilation.</p></div><div class="refsect1"><a name="idm274698781152"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml
index 595c8f112d..2bc860c373 100644
--- a/man/sd_is_fifo.xml
+++ b/man/sd_is_fifo.xml
@@ -102,19 +102,22 @@
<para><function>sd_is_fifo()</function> may be called
to check whether the specified file descriptor refers
to a FIFO or pipe. If the <parameter>path</parameter>
- parameter is not NULL, it is checked whether the FIFO
- is bound to the specified file system path.</para>
+ parameter is not <constant>NULL</constant>, it is
+ checked whether the FIFO is bound to the specified
+ file system path.</para>
<para><function>sd_is_socket()</function> may be
called to check whether the specified file descriptor
refers to a socket. If the
<parameter>family</parameter> parameter is not
- AF_UNSPEC it is checked whether the socket is of the
- specified family (AF_UNIX, AF_INET, ...). If the
- <parameter>type</parameter> parameter is not 0 it is
+ <constant>AF_UNSPEC</constant>, it is checked whether
+ the socket is of the specified family (AF_UNIX,
+ <constant>AF_INET</constant>, ...). If the
+ <parameter>type</parameter> parameter is not 0, it is
checked whether the socket is of the specified type
- (SOCK_STREAM, SOCK_DGRAM, ...). If the
- <parameter>listening</parameter> parameter is positive
+ (<constant>SOCK_STREAM</constant>,
+ <constant>SOCK_DGRAM</constant>, ...). If the
+ <parameter>listening</parameter> parameter is positive,
it is checked whether the socket is in accepting mode,
i.e. <function>listen()</function> has been called for
it. If <parameter>listening</parameter> is 0, it is
@@ -129,27 +132,27 @@
optionally checks the IPv4 or IPv6 port number the
socket is bound to, unless <parameter>port</parameter>
is zero. For this call <parameter>family</parameter>
- must be passed as either AF_UNSPEC, AF_INET, or
- AF_INET6.</para>
+ must be passed as either <constant>AF_UNSPEC</constant>, <constant>AF_INET</constant>, or
+ <constant>AF_INET6</constant>.</para>
<para><function>sd_is_socket_unix()</function> is
- similar to <function>sd_is_socket()</function>, but
- optionally checks the AF_UNIX path the socket is bound
+ similar to <function>sd_is_socket()</function> but
+ optionally checks the <constant>AF_UNIX</constant> path the socket is bound
to, unless the <parameter>path</parameter> parameter
- is NULL. For normal file system AF_UNIX sockets set
- the <parameter>length</parameter> parameter to 0. For
- Linux abstract namespace sockets set the
+ is <constant>NULL</constant>. For normal file system <constant>AF_UNIX</constant> sockets,
+ set the <parameter>length</parameter> parameter to 0. For
+ Linux abstract namespace sockets, set the
<parameter>length</parameter> to the size of the
- address, including the initial 0 byte and set
+ address, including the initial 0 byte, and set the
<parameter>path</parameter> to the initial 0 byte of
the socket address.</para>
<para><function>sd_is_mq()</function> may be called to
check whether the specified file descriptor refers to
a POSIX message queue. If the
- <parameter>path</parameter> parameter is not NULL, it
- is checked whether the message queue is bound to the
- specified name.</para>
+ <parameter>path</parameter> parameter is not
+ <constant>NULL</constant>, it is checked whether the
+ message queue is bound to the specified name.</para>
</refsect1>
<refsect1>
@@ -157,7 +160,7 @@
<para>On failure, these calls return a negative
errno-style error code. If the file descriptor is of
- the specified type and bound to the specified address
+ the specified type and bound to the specified address,
a positive return value is returned, otherwise
zero.</para>
</refsect1>
@@ -168,7 +171,7 @@
<para>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
- they implement are simple, and can easily be
+ they implement are simple, and they can easily be
reimplemented in daemons if it is important to support
this interface without using the reference
implementation.</para>
@@ -178,7 +181,7 @@
<filename>getsockname()</filename> to check the file
descriptor type and where it is bound to.</para>
- <para>For details about the algorithms check the
+ <para>For details about the algorithms, check the
liberally licensed reference implementation sources:
<ulink url="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c"/>
and <ulink
@@ -190,8 +193,7 @@
<filename>sd-daemon.h</filename> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-daemon</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
diff --git a/man/sd_is_mq.3 b/man/sd_is_mq.3
new file mode 100644
index 0000000000..daadb93e3c
--- /dev/null
+++ b/man/sd_is_mq.3
@@ -0,0 +1 @@
+.so man3/sd_is_fifo.3
diff --git a/man/sd_is_mq.html b/man/sd_is_mq.html
index beb19574cb..8a20f46ef4 100644
--- a/man/sd_is_mq.html
+++ b/man/sd_is_mq.html
@@ -19,20 +19,23 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784659536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274698824000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
to check whether the specified file descriptor refers
to a FIFO or pipe. If the <em class="parameter"><code>path</code></em>
- parameter is not NULL, it is checked whether the FIFO
- is bound to the specified file system path.</p><p><code class="function">sd_is_socket()</code> may be
+ parameter is not <code class="constant">NULL</code>, it is
+ checked whether the FIFO is bound to the specified
+ file system path.</p><p><code class="function">sd_is_socket()</code> may be
called to check whether the specified file descriptor
refers to a socket. If the
<em class="parameter"><code>family</code></em> parameter is not
- AF_UNSPEC it is checked whether the socket is of the
- specified family (AF_UNIX, AF_INET, ...). If the
- <em class="parameter"><code>type</code></em> parameter is not 0 it is
+ <code class="constant">AF_UNSPEC</code>, it is checked whether
+ the socket is of the specified family (AF_UNIX,
+ <code class="constant">AF_INET</code>, ...). If the
+ <em class="parameter"><code>type</code></em> parameter is not 0, it is
checked whether the socket is of the specified type
- (SOCK_STREAM, SOCK_DGRAM, ...). If the
- <em class="parameter"><code>listening</code></em> parameter is positive
+ (<code class="constant">SOCK_STREAM</code>,
+ <code class="constant">SOCK_DGRAM</code>, ...). If the
+ <em class="parameter"><code>listening</code></em> parameter is positive,
it is checked whether the socket is in accepting mode,
i.e. <code class="function">listen()</code> has been called for
it. If <em class="parameter"><code>listening</code></em> is 0, it is
@@ -45,36 +48,36 @@
optionally checks the IPv4 or IPv6 port number the
socket is bound to, unless <em class="parameter"><code>port</code></em>
is zero. For this call <em class="parameter"><code>family</code></em>
- must be passed as either AF_UNSPEC, AF_INET, or
- AF_INET6.</p><p><code class="function">sd_is_socket_unix()</code> is
- similar to <code class="function">sd_is_socket()</code>, but
- optionally checks the AF_UNIX path the socket is bound
+ must be passed as either <code class="constant">AF_UNSPEC</code>, <code class="constant">AF_INET</code>, or
+ <code class="constant">AF_INET6</code>.</p><p><code class="function">sd_is_socket_unix()</code> is
+ similar to <code class="function">sd_is_socket()</code> but
+ optionally checks the <code class="constant">AF_UNIX</code> path the socket is bound
to, unless the <em class="parameter"><code>path</code></em> parameter
- is NULL. For normal file system AF_UNIX sockets set
- the <em class="parameter"><code>length</code></em> parameter to 0. For
- Linux abstract namespace sockets set the
+ is <code class="constant">NULL</code>. For normal file system <code class="constant">AF_UNIX</code> sockets,
+ set the <em class="parameter"><code>length</code></em> parameter to 0. For
+ Linux abstract namespace sockets, set the
<em class="parameter"><code>length</code></em> to the size of the
- address, including the initial 0 byte and set
+ address, including the initial 0 byte, and set the
<em class="parameter"><code>path</code></em> to the initial 0 byte of
the socket address.</p><p><code class="function">sd_is_mq()</code> may be called to
check whether the specified file descriptor refers to
a POSIX message queue. If the
- <em class="parameter"><code>path</code></em> parameter is not NULL, it
- is checked whether the message queue is bound to the
- specified name.</p></div><div class="refsect1"><a name="idm259784633360"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ <em class="parameter"><code>path</code></em> parameter is not
+ <code class="constant">NULL</code>, it is checked whether the
+ message queue is bound to the specified name.</p></div><div class="refsect1"><a name="idm274698792912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If the file descriptor is of
- the specified type and bound to the specified address
+ the specified type and bound to the specified address,
a positive return value is returned, otherwise
- zero.</p></div><div class="refsect1"><a name="idm259784631888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ zero.</p></div><div class="refsect1"><a name="idm274698791440"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
- they implement are simple, and can easily be
+ they implement are simple, and they can easily be
reimplemented in daemons if it is important to support
this interface without using the reference
implementation.</p><p>Internally, these function use a combination of
<code class="filename">fstat()</code> and
<code class="filename">getsockname()</code> to check the file
- descriptor type and where it is bound to.</p><p>For details about the algorithms check the
+ descriptor type and where it is bound to.</p><p>For details about the algorithms, check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
and <a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h</a></p><p><code class="function">sd_is_fifo()</code> and the
@@ -83,15 +86,14 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>These functions continue to work as described,
even if -DDISABLE_SYSTEMD is set during
- compilation.</p></div><div class="refsect1"><a name="idm259784621312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ compilation.</p></div><div class="refsect1"><a name="idm274698781152"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
diff --git a/man/sd_is_socket.3 b/man/sd_is_socket.3
new file mode 100644
index 0000000000..daadb93e3c
--- /dev/null
+++ b/man/sd_is_socket.3
@@ -0,0 +1 @@
+.so man3/sd_is_fifo.3
diff --git a/man/sd_is_socket.html b/man/sd_is_socket.html
index beb19574cb..8a20f46ef4 100644
--- a/man/sd_is_socket.html
+++ b/man/sd_is_socket.html
@@ -19,20 +19,23 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784659536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274698824000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
to check whether the specified file descriptor refers
to a FIFO or pipe. If the <em class="parameter"><code>path</code></em>
- parameter is not NULL, it is checked whether the FIFO
- is bound to the specified file system path.</p><p><code class="function">sd_is_socket()</code> may be
+ parameter is not <code class="constant">NULL</code>, it is
+ checked whether the FIFO is bound to the specified
+ file system path.</p><p><code class="function">sd_is_socket()</code> may be
called to check whether the specified file descriptor
refers to a socket. If the
<em class="parameter"><code>family</code></em> parameter is not
- AF_UNSPEC it is checked whether the socket is of the
- specified family (AF_UNIX, AF_INET, ...). If the
- <em class="parameter"><code>type</code></em> parameter is not 0 it is
+ <code class="constant">AF_UNSPEC</code>, it is checked whether
+ the socket is of the specified family (AF_UNIX,
+ <code class="constant">AF_INET</code>, ...). If the
+ <em class="parameter"><code>type</code></em> parameter is not 0, it is
checked whether the socket is of the specified type
- (SOCK_STREAM, SOCK_DGRAM, ...). If the
- <em class="parameter"><code>listening</code></em> parameter is positive
+ (<code class="constant">SOCK_STREAM</code>,
+ <code class="constant">SOCK_DGRAM</code>, ...). If the
+ <em class="parameter"><code>listening</code></em> parameter is positive,
it is checked whether the socket is in accepting mode,
i.e. <code class="function">listen()</code> has been called for
it. If <em class="parameter"><code>listening</code></em> is 0, it is
@@ -45,36 +48,36 @@
optionally checks the IPv4 or IPv6 port number the
socket is bound to, unless <em class="parameter"><code>port</code></em>
is zero. For this call <em class="parameter"><code>family</code></em>
- must be passed as either AF_UNSPEC, AF_INET, or
- AF_INET6.</p><p><code class="function">sd_is_socket_unix()</code> is
- similar to <code class="function">sd_is_socket()</code>, but
- optionally checks the AF_UNIX path the socket is bound
+ must be passed as either <code class="constant">AF_UNSPEC</code>, <code class="constant">AF_INET</code>, or
+ <code class="constant">AF_INET6</code>.</p><p><code class="function">sd_is_socket_unix()</code> is
+ similar to <code class="function">sd_is_socket()</code> but
+ optionally checks the <code class="constant">AF_UNIX</code> path the socket is bound
to, unless the <em class="parameter"><code>path</code></em> parameter
- is NULL. For normal file system AF_UNIX sockets set
- the <em class="parameter"><code>length</code></em> parameter to 0. For
- Linux abstract namespace sockets set the
+ is <code class="constant">NULL</code>. For normal file system <code class="constant">AF_UNIX</code> sockets,
+ set the <em class="parameter"><code>length</code></em> parameter to 0. For
+ Linux abstract namespace sockets, set the
<em class="parameter"><code>length</code></em> to the size of the
- address, including the initial 0 byte and set
+ address, including the initial 0 byte, and set the
<em class="parameter"><code>path</code></em> to the initial 0 byte of
the socket address.</p><p><code class="function">sd_is_mq()</code> may be called to
check whether the specified file descriptor refers to
a POSIX message queue. If the
- <em class="parameter"><code>path</code></em> parameter is not NULL, it
- is checked whether the message queue is bound to the
- specified name.</p></div><div class="refsect1"><a name="idm259784633360"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ <em class="parameter"><code>path</code></em> parameter is not
+ <code class="constant">NULL</code>, it is checked whether the
+ message queue is bound to the specified name.</p></div><div class="refsect1"><a name="idm274698792912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If the file descriptor is of
- the specified type and bound to the specified address
+ the specified type and bound to the specified address,
a positive return value is returned, otherwise
- zero.</p></div><div class="refsect1"><a name="idm259784631888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ zero.</p></div><div class="refsect1"><a name="idm274698791440"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
- they implement are simple, and can easily be
+ they implement are simple, and they can easily be
reimplemented in daemons if it is important to support
this interface without using the reference
implementation.</p><p>Internally, these function use a combination of
<code class="filename">fstat()</code> and
<code class="filename">getsockname()</code> to check the file
- descriptor type and where it is bound to.</p><p>For details about the algorithms check the
+ descriptor type and where it is bound to.</p><p>For details about the algorithms, check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
and <a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h</a></p><p><code class="function">sd_is_fifo()</code> and the
@@ -83,15 +86,14 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>These functions continue to work as described,
even if -DDISABLE_SYSTEMD is set during
- compilation.</p></div><div class="refsect1"><a name="idm259784621312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ compilation.</p></div><div class="refsect1"><a name="idm274698781152"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
diff --git a/man/sd_is_socket_inet.3 b/man/sd_is_socket_inet.3
new file mode 100644
index 0000000000..daadb93e3c
--- /dev/null
+++ b/man/sd_is_socket_inet.3
@@ -0,0 +1 @@
+.so man3/sd_is_fifo.3
diff --git a/man/sd_is_socket_inet.html b/man/sd_is_socket_inet.html
index beb19574cb..8a20f46ef4 100644
--- a/man/sd_is_socket_inet.html
+++ b/man/sd_is_socket_inet.html
@@ -19,20 +19,23 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784659536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274698824000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
to check whether the specified file descriptor refers
to a FIFO or pipe. If the <em class="parameter"><code>path</code></em>
- parameter is not NULL, it is checked whether the FIFO
- is bound to the specified file system path.</p><p><code class="function">sd_is_socket()</code> may be
+ parameter is not <code class="constant">NULL</code>, it is
+ checked whether the FIFO is bound to the specified
+ file system path.</p><p><code class="function">sd_is_socket()</code> may be
called to check whether the specified file descriptor
refers to a socket. If the
<em class="parameter"><code>family</code></em> parameter is not
- AF_UNSPEC it is checked whether the socket is of the
- specified family (AF_UNIX, AF_INET, ...). If the
- <em class="parameter"><code>type</code></em> parameter is not 0 it is
+ <code class="constant">AF_UNSPEC</code>, it is checked whether
+ the socket is of the specified family (AF_UNIX,
+ <code class="constant">AF_INET</code>, ...). If the
+ <em class="parameter"><code>type</code></em> parameter is not 0, it is
checked whether the socket is of the specified type
- (SOCK_STREAM, SOCK_DGRAM, ...). If the
- <em class="parameter"><code>listening</code></em> parameter is positive
+ (<code class="constant">SOCK_STREAM</code>,
+ <code class="constant">SOCK_DGRAM</code>, ...). If the
+ <em class="parameter"><code>listening</code></em> parameter is positive,
it is checked whether the socket is in accepting mode,
i.e. <code class="function">listen()</code> has been called for
it. If <em class="parameter"><code>listening</code></em> is 0, it is
@@ -45,36 +48,36 @@
optionally checks the IPv4 or IPv6 port number the
socket is bound to, unless <em class="parameter"><code>port</code></em>
is zero. For this call <em class="parameter"><code>family</code></em>
- must be passed as either AF_UNSPEC, AF_INET, or
- AF_INET6.</p><p><code class="function">sd_is_socket_unix()</code> is
- similar to <code class="function">sd_is_socket()</code>, but
- optionally checks the AF_UNIX path the socket is bound
+ must be passed as either <code class="constant">AF_UNSPEC</code>, <code class="constant">AF_INET</code>, or
+ <code class="constant">AF_INET6</code>.</p><p><code class="function">sd_is_socket_unix()</code> is
+ similar to <code class="function">sd_is_socket()</code> but
+ optionally checks the <code class="constant">AF_UNIX</code> path the socket is bound
to, unless the <em class="parameter"><code>path</code></em> parameter
- is NULL. For normal file system AF_UNIX sockets set
- the <em class="parameter"><code>length</code></em> parameter to 0. For
- Linux abstract namespace sockets set the
+ is <code class="constant">NULL</code>. For normal file system <code class="constant">AF_UNIX</code> sockets,
+ set the <em class="parameter"><code>length</code></em> parameter to 0. For
+ Linux abstract namespace sockets, set the
<em class="parameter"><code>length</code></em> to the size of the
- address, including the initial 0 byte and set
+ address, including the initial 0 byte, and set the
<em class="parameter"><code>path</code></em> to the initial 0 byte of
the socket address.</p><p><code class="function">sd_is_mq()</code> may be called to
check whether the specified file descriptor refers to
a POSIX message queue. If the
- <em class="parameter"><code>path</code></em> parameter is not NULL, it
- is checked whether the message queue is bound to the
- specified name.</p></div><div class="refsect1"><a name="idm259784633360"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ <em class="parameter"><code>path</code></em> parameter is not
+ <code class="constant">NULL</code>, it is checked whether the
+ message queue is bound to the specified name.</p></div><div class="refsect1"><a name="idm274698792912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If the file descriptor is of
- the specified type and bound to the specified address
+ the specified type and bound to the specified address,
a positive return value is returned, otherwise
- zero.</p></div><div class="refsect1"><a name="idm259784631888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ zero.</p></div><div class="refsect1"><a name="idm274698791440"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
- they implement are simple, and can easily be
+ they implement are simple, and they can easily be
reimplemented in daemons if it is important to support
this interface without using the reference
implementation.</p><p>Internally, these function use a combination of
<code class="filename">fstat()</code> and
<code class="filename">getsockname()</code> to check the file
- descriptor type and where it is bound to.</p><p>For details about the algorithms check the
+ descriptor type and where it is bound to.</p><p>For details about the algorithms, check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
and <a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h</a></p><p><code class="function">sd_is_fifo()</code> and the
@@ -83,15 +86,14 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>These functions continue to work as described,
even if -DDISABLE_SYSTEMD is set during
- compilation.</p></div><div class="refsect1"><a name="idm259784621312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ compilation.</p></div><div class="refsect1"><a name="idm274698781152"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
diff --git a/man/sd_is_socket_unix.3 b/man/sd_is_socket_unix.3
new file mode 100644
index 0000000000..daadb93e3c
--- /dev/null
+++ b/man/sd_is_socket_unix.3
@@ -0,0 +1 @@
+.so man3/sd_is_fifo.3
diff --git a/man/sd_is_socket_unix.html b/man/sd_is_socket_unix.html
index beb19574cb..8a20f46ef4 100644
--- a/man/sd_is_socket_unix.html
+++ b/man/sd_is_socket_unix.html
@@ -19,20 +19,23 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784659536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_is_fifo"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq — Check the type of a file descriptor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_fifo</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_inet</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">family</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>uint16_t <var class="pdparam">port</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_socket_unix</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">type</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">listening</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_is_mq</b>(</code></td><td>int <var class="pdparam">fd</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">path</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274698824000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_is_fifo()</code> may be called
to check whether the specified file descriptor refers
to a FIFO or pipe. If the <em class="parameter"><code>path</code></em>
- parameter is not NULL, it is checked whether the FIFO
- is bound to the specified file system path.</p><p><code class="function">sd_is_socket()</code> may be
+ parameter is not <code class="constant">NULL</code>, it is
+ checked whether the FIFO is bound to the specified
+ file system path.</p><p><code class="function">sd_is_socket()</code> may be
called to check whether the specified file descriptor
refers to a socket. If the
<em class="parameter"><code>family</code></em> parameter is not
- AF_UNSPEC it is checked whether the socket is of the
- specified family (AF_UNIX, AF_INET, ...). If the
- <em class="parameter"><code>type</code></em> parameter is not 0 it is
+ <code class="constant">AF_UNSPEC</code>, it is checked whether
+ the socket is of the specified family (AF_UNIX,
+ <code class="constant">AF_INET</code>, ...). If the
+ <em class="parameter"><code>type</code></em> parameter is not 0, it is
checked whether the socket is of the specified type
- (SOCK_STREAM, SOCK_DGRAM, ...). If the
- <em class="parameter"><code>listening</code></em> parameter is positive
+ (<code class="constant">SOCK_STREAM</code>,
+ <code class="constant">SOCK_DGRAM</code>, ...). If the
+ <em class="parameter"><code>listening</code></em> parameter is positive,
it is checked whether the socket is in accepting mode,
i.e. <code class="function">listen()</code> has been called for
it. If <em class="parameter"><code>listening</code></em> is 0, it is
@@ -45,36 +48,36 @@
optionally checks the IPv4 or IPv6 port number the
socket is bound to, unless <em class="parameter"><code>port</code></em>
is zero. For this call <em class="parameter"><code>family</code></em>
- must be passed as either AF_UNSPEC, AF_INET, or
- AF_INET6.</p><p><code class="function">sd_is_socket_unix()</code> is
- similar to <code class="function">sd_is_socket()</code>, but
- optionally checks the AF_UNIX path the socket is bound
+ must be passed as either <code class="constant">AF_UNSPEC</code>, <code class="constant">AF_INET</code>, or
+ <code class="constant">AF_INET6</code>.</p><p><code class="function">sd_is_socket_unix()</code> is
+ similar to <code class="function">sd_is_socket()</code> but
+ optionally checks the <code class="constant">AF_UNIX</code> path the socket is bound
to, unless the <em class="parameter"><code>path</code></em> parameter
- is NULL. For normal file system AF_UNIX sockets set
- the <em class="parameter"><code>length</code></em> parameter to 0. For
- Linux abstract namespace sockets set the
+ is <code class="constant">NULL</code>. For normal file system <code class="constant">AF_UNIX</code> sockets,
+ set the <em class="parameter"><code>length</code></em> parameter to 0. For
+ Linux abstract namespace sockets, set the
<em class="parameter"><code>length</code></em> to the size of the
- address, including the initial 0 byte and set
+ address, including the initial 0 byte, and set the
<em class="parameter"><code>path</code></em> to the initial 0 byte of
the socket address.</p><p><code class="function">sd_is_mq()</code> may be called to
check whether the specified file descriptor refers to
a POSIX message queue. If the
- <em class="parameter"><code>path</code></em> parameter is not NULL, it
- is checked whether the message queue is bound to the
- specified name.</p></div><div class="refsect1"><a name="idm259784633360"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ <em class="parameter"><code>path</code></em> parameter is not
+ <code class="constant">NULL</code>, it is checked whether the
+ message queue is bound to the specified name.</p></div><div class="refsect1"><a name="idm274698792912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If the file descriptor is of
- the specified type and bound to the specified address
+ the specified type and bound to the specified address,
a positive return value is returned, otherwise
- zero.</p></div><div class="refsect1"><a name="idm259784631888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ zero.</p></div><div class="refsect1"><a name="idm274698791440"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
- they implement are simple, and can easily be
+ they implement are simple, and they can easily be
reimplemented in daemons if it is important to support
this interface without using the reference
implementation.</p><p>Internally, these function use a combination of
<code class="filename">fstat()</code> and
<code class="filename">getsockname()</code> to check the file
- descriptor type and where it is bound to.</p><p>For details about the algorithms check the
+ descriptor type and where it is bound to.</p><p>For details about the algorithms, check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
and <a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h</a></p><p><code class="function">sd_is_fifo()</code> and the
@@ -83,15 +86,14 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>These functions continue to work as described,
even if -DDISABLE_SYSTEMD is set during
- compilation.</p></div><div class="refsect1"><a name="idm259784621312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ compilation.</p></div><div class="refsect1"><a name="idm274698781152"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>,
diff --git a/man/sd_journal.3 b/man/sd_journal.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/sd_journal.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/sd_journal.html b/man/sd_journal.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/sd_journal.html
+++ b/man/sd_journal.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/sd_journal_add_conjunction.3 b/man/sd_journal_add_conjunction.3
new file mode 100644
index 0000000000..6abfa85fdb
--- /dev/null
+++ b/man/sd_journal_add_conjunction.3
@@ -0,0 +1 @@
+.so man3/sd_journal_add_match.3
diff --git a/man/sd_journal_add_conjunction.html b/man/sd_journal_add_conjunction.html
index cbad1788d5..01bde3477c 100644
--- a/man/sd_journal_add_conjunction.html
+++ b/man/sd_journal_add_conjunction.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780241840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274690115552"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
a match by which to filter the entries of the journal
file. Matches applied with this call will filter what
can be iterated through and read from the journal file
@@ -27,16 +27,16 @@
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
and
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. Matches
- are of the form <code class="literal">FIELD=value</code>, where
+ are of the form "<code class="literal">FIELD=value</code>", where
the field part is a short uppercase string consisting
only of 0-9, A-Z and the underscore. It may not begin
with two underscores or be the empty string. The value
part may be any value, including binary. If a match is
- applied only entries with this field set will be
+ applied, only entries with this field set will be
iterated. Multiple matches may be active at the same
- time: if they apply to different fields only entries
- with both fields set like this will be iterated, if
- they apply to the same fields only entries where the
+ time: If they apply to different fields, only entries
+ with both fields set like this will be iterated. If
+ they apply to the same fields, only entries where the
field takes one of the specified values will be
iterated. Well known fields are documented in
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>. Whenever
@@ -46,7 +46,7 @@
needs to be called before entries can be read
again.</p><p><code class="function">sd_journal_add_disjunction()</code>
may be used to insert a disjunction (i.e. logical OR)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_disjunction()</code> or
<code class="function">sd_journal_add_conjunction()</code> are
@@ -57,7 +57,7 @@
invoked again to begin the next OR or AND
term. </p><p><code class="function">sd_journal_add_conjunction()</code>
may be used to insert a conjunction (i.e. logical AND)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_conjunction()</code> are
combined in an AND with all matches added afterwards,
@@ -83,20 +83,19 @@
is removed and all entries in the journal will be
iterated again.</p><p>Note that filtering via matches only applies to
the way the journal is read, it has no effect on storage
- on disk.</p></div><div class="refsect1"><a name="idm259784119376"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
+ on disk.</p></div><div class="refsect1"><a name="idm274693811872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code> and
<code class="function">sd_journal_add_conjunction()</code>
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_flush_matches()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259784115328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274693807792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code>,
<code class="function">sd_journal_add_conjunction()</code> and
<code class="function">sd_journal_flush_matches()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259784109488"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274693794832"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
context object to iterate only through messages
generated by the Avahi service at the four error log
levels, plus all messages of the message ID
@@ -111,7 +110,7 @@ int add_matches(sd_journal *j) {
sd_journal_add_match(j, "PRIORITY=3", 0);
sd_journal_add_disjunction(j);
sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964", 0);
-}</pre></div><div class="refsect1"><a name="idm259784106784"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274693792128"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_add_disjunction.3 b/man/sd_journal_add_disjunction.3
new file mode 100644
index 0000000000..6abfa85fdb
--- /dev/null
+++ b/man/sd_journal_add_disjunction.3
@@ -0,0 +1 @@
+.so man3/sd_journal_add_match.3
diff --git a/man/sd_journal_add_disjunction.html b/man/sd_journal_add_disjunction.html
index cbad1788d5..01bde3477c 100644
--- a/man/sd_journal_add_disjunction.html
+++ b/man/sd_journal_add_disjunction.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780241840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274690115552"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
a match by which to filter the entries of the journal
file. Matches applied with this call will filter what
can be iterated through and read from the journal file
@@ -27,16 +27,16 @@
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
and
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. Matches
- are of the form <code class="literal">FIELD=value</code>, where
+ are of the form "<code class="literal">FIELD=value</code>", where
the field part is a short uppercase string consisting
only of 0-9, A-Z and the underscore. It may not begin
with two underscores or be the empty string. The value
part may be any value, including binary. If a match is
- applied only entries with this field set will be
+ applied, only entries with this field set will be
iterated. Multiple matches may be active at the same
- time: if they apply to different fields only entries
- with both fields set like this will be iterated, if
- they apply to the same fields only entries where the
+ time: If they apply to different fields, only entries
+ with both fields set like this will be iterated. If
+ they apply to the same fields, only entries where the
field takes one of the specified values will be
iterated. Well known fields are documented in
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>. Whenever
@@ -46,7 +46,7 @@
needs to be called before entries can be read
again.</p><p><code class="function">sd_journal_add_disjunction()</code>
may be used to insert a disjunction (i.e. logical OR)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_disjunction()</code> or
<code class="function">sd_journal_add_conjunction()</code> are
@@ -57,7 +57,7 @@
invoked again to begin the next OR or AND
term. </p><p><code class="function">sd_journal_add_conjunction()</code>
may be used to insert a conjunction (i.e. logical AND)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_conjunction()</code> are
combined in an AND with all matches added afterwards,
@@ -83,20 +83,19 @@
is removed and all entries in the journal will be
iterated again.</p><p>Note that filtering via matches only applies to
the way the journal is read, it has no effect on storage
- on disk.</p></div><div class="refsect1"><a name="idm259784119376"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
+ on disk.</p></div><div class="refsect1"><a name="idm274693811872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code> and
<code class="function">sd_journal_add_conjunction()</code>
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_flush_matches()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259784115328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274693807792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code>,
<code class="function">sd_journal_add_conjunction()</code> and
<code class="function">sd_journal_flush_matches()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259784109488"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274693794832"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
context object to iterate only through messages
generated by the Avahi service at the four error log
levels, plus all messages of the message ID
@@ -111,7 +110,7 @@ int add_matches(sd_journal *j) {
sd_journal_add_match(j, "PRIORITY=3", 0);
sd_journal_add_disjunction(j);
sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964", 0);
-}</pre></div><div class="refsect1"><a name="idm259784106784"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274693792128"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_add_match.3 b/man/sd_journal_add_match.3
new file mode 100644
index 0000000000..db0260fc18
--- /dev/null
+++ b/man/sd_journal_add_match.3
@@ -0,0 +1,130 @@
+'\" t
+.TH "SD_JOURNAL_ADD_MATCH" "3" "" "systemd 208" "sd_journal_add_match"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches \- Add or remove entry matches
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_add_match('u
+.BI "int sd_journal_add_match(sd_journal*\ " "j" ", const\ void*\ " "data" ", size_t\ " "size" ");"
+.HP \w'int\ sd_journal_add_disjunction('u
+.BI "int sd_journal_add_disjunction(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_add_conjunction('u
+.BI "int sd_journal_add_conjunction(sd_journal*\ " "j" ");"
+.HP \w'void\ sd_journal_flush_matches('u
+.BI "void sd_journal_flush_matches(sd_journal*\ " "j" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_add_match()\fR
+adds a match by which to filter the entries of the journal file\&. Matches applied with this call will filter what can be iterated through and read from the journal file via calls like
+\fBsd_journal_next\fR(3)
+and
+\fBsd_journal_get_data\fR(3)\&. Matches are of the form
+"FIELD=value", where the field part is a short uppercase string consisting only of 0\-9, A\-Z and the underscore\&. It may not begin with two underscores or be the empty string\&. The value part may be any value, including binary\&. If a match is applied, only entries with this field set will be iterated\&. Multiple matches may be active at the same time: If they apply to different fields, only entries with both fields set like this will be iterated\&. If they apply to the same fields, only entries where the field takes one of the specified values will be iterated\&. Well known fields are documented in
+\fBsystemd.journal-fields\fR(7)\&. Whenever a new match is added the current entry position is reset, and
+\fBsd_journal_next\fR(3)
+(or a similar call) needs to be called before entries can be read again\&.
+.PP
+\fBsd_journal_add_disjunction()\fR
+may be used to insert a disjunction (i\&.e\&. logical OR) in the match list\&. If this call is invoked, all previously added matches since the last invocation of
+\fBsd_journal_add_disjunction()\fR
+or
+\fBsd_journal_add_conjunction()\fR
+are combined in an OR with all matches added afterwards, until
+\fBsd_journal_add_disjunction()\fR
+or
+\fBsd_journal_add_conjunction()\fR
+is invoked again to begin the next OR or AND term\&.
+.PP
+\fBsd_journal_add_conjunction()\fR
+may be used to insert a conjunction (i\&.e\&. logical AND) in the match list\&. If this call is invoked, all previously added matches since the last invocation of
+\fBsd_journal_add_conjunction()\fR
+are combined in an AND with all matches added afterwards, until
+\fBsd_journal_add_conjunction()\fR
+is invoked again to begin the next AND term\&. The combination of
+\fBsd_journal_add_match()\fR,
+\fBsd_journal_add_disjunction()\fR
+and
+\fBsd_journal_add_conjunction()\fR
+may be used to build complex search terms, even though full logical expressions are not available\&. Note that
+\fBsd_journal_add_conjunction()\fR
+operates one level \*(Aqhigher\*(Aq than
+\fBsd_journal_add_disjunction()\fR\&. It is hence possible to build an expression of AND terms, consisting of OR terms, consisting of AND terms, consisting of OR terms of matches (the latter OR expression is implicitly created for matches with the same field name, see above)\&.
+.PP
+\fBsd_journal_flush_matches()\fR
+may be used to flush all matches, disjunction and conjunction terms again\&. After this call all filtering is removed and all entries in the journal will be iterated again\&.
+.PP
+Note that filtering via matches only applies to the way the journal is read, it has no effect on storage on disk\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_add_match()\fR,
+\fBsd_journal_add_disjunction()\fR
+and
+\fBsd_journal_add_conjunction()\fR
+return 0 on success or a negative errno\-style error code\&.
+\fBsd_journal_flush_matches()\fR
+returns nothing\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_add_match()\fR,
+\fBsd_journal_add_disjunction()\fR,
+\fBsd_journal_add_conjunction()\fR
+and
+\fBsd_journal_flush_matches()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "EXAMPLES"
+.PP
+The following example adds matches to a journal context object to iterate only through messages generated by the Avahi service at the four error log levels, plus all messages of the message ID 03bb1dab98ab4ecfbf6fff2738bdd964 coming from any service (this example lacks the necessary error checking):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\&.\&.\&.
+int add_matches(sd_journal *j) {
+ sd_journal_add_match(j, "_SYSTEMD_UNIT=avahi\-daemon\&.service", 0);
+ sd_journal_add_match(j, "PRIORITY=0", 0);
+ sd_journal_add_match(j, "PRIORITY=1", 0);
+ sd_journal_add_match(j, "PRIORITY=2", 0);
+ sd_journal_add_match(j, "PRIORITY=3", 0);
+ sd_journal_add_disjunction(j);
+ sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964", 0);
+}
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsystemd.journal-fields\fR(7)
diff --git a/man/sd_journal_add_match.html b/man/sd_journal_add_match.html
index cbad1788d5..01bde3477c 100644
--- a/man/sd_journal_add_match.html
+++ b/man/sd_journal_add_match.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780241840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274690115552"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
a match by which to filter the entries of the journal
file. Matches applied with this call will filter what
can be iterated through and read from the journal file
@@ -27,16 +27,16 @@
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
and
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. Matches
- are of the form <code class="literal">FIELD=value</code>, where
+ are of the form "<code class="literal">FIELD=value</code>", where
the field part is a short uppercase string consisting
only of 0-9, A-Z and the underscore. It may not begin
with two underscores or be the empty string. The value
part may be any value, including binary. If a match is
- applied only entries with this field set will be
+ applied, only entries with this field set will be
iterated. Multiple matches may be active at the same
- time: if they apply to different fields only entries
- with both fields set like this will be iterated, if
- they apply to the same fields only entries where the
+ time: If they apply to different fields, only entries
+ with both fields set like this will be iterated. If
+ they apply to the same fields, only entries where the
field takes one of the specified values will be
iterated. Well known fields are documented in
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>. Whenever
@@ -46,7 +46,7 @@
needs to be called before entries can be read
again.</p><p><code class="function">sd_journal_add_disjunction()</code>
may be used to insert a disjunction (i.e. logical OR)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_disjunction()</code> or
<code class="function">sd_journal_add_conjunction()</code> are
@@ -57,7 +57,7 @@
invoked again to begin the next OR or AND
term. </p><p><code class="function">sd_journal_add_conjunction()</code>
may be used to insert a conjunction (i.e. logical AND)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_conjunction()</code> are
combined in an AND with all matches added afterwards,
@@ -83,20 +83,19 @@
is removed and all entries in the journal will be
iterated again.</p><p>Note that filtering via matches only applies to
the way the journal is read, it has no effect on storage
- on disk.</p></div><div class="refsect1"><a name="idm259784119376"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
+ on disk.</p></div><div class="refsect1"><a name="idm274693811872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code> and
<code class="function">sd_journal_add_conjunction()</code>
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_flush_matches()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259784115328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274693807792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code>,
<code class="function">sd_journal_add_conjunction()</code> and
<code class="function">sd_journal_flush_matches()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259784109488"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274693794832"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
context object to iterate only through messages
generated by the Avahi service at the four error log
levels, plus all messages of the message ID
@@ -111,7 +110,7 @@ int add_matches(sd_journal *j) {
sd_journal_add_match(j, "PRIORITY=3", 0);
sd_journal_add_disjunction(j);
sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964", 0);
-}</pre></div><div class="refsect1"><a name="idm259784106784"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274693792128"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_add_match.xml b/man/sd_journal_add_match.xml
index 549785ca83..b6c7b06f2e 100644
--- a/man/sd_journal_add_match.xml
+++ b/man/sd_journal_add_match.xml
@@ -94,11 +94,11 @@
only of 0-9, A-Z and the underscore. It may not begin
with two underscores or be the empty string. The value
part may be any value, including binary. If a match is
- applied only entries with this field set will be
+ applied, only entries with this field set will be
iterated. Multiple matches may be active at the same
- time: if they apply to different fields only entries
- with both fields set like this will be iterated, if
- they apply to the same fields only entries where the
+ time: If they apply to different fields, only entries
+ with both fields set like this will be iterated. If
+ they apply to the same fields, only entries where the
field takes one of the specified values will be
iterated. Well known fields are documented in
<citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>. Whenever
@@ -110,7 +110,7 @@
<para><function>sd_journal_add_disjunction()</function>
may be used to insert a disjunction (i.e. logical OR)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<function>sd_journal_add_disjunction()</function> or
<function>sd_journal_add_conjunction()</function> are
@@ -123,7 +123,7 @@
<para><function>sd_journal_add_conjunction()</function>
may be used to insert a conjunction (i.e. logical AND)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<function>sd_journal_add_conjunction()</function> are
combined in an AND with all matches added afterwards,
@@ -176,8 +176,7 @@
<function>sd_journal_flush_matches()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_close.3 b/man/sd_journal_close.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/sd_journal_close.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/sd_journal_close.html b/man/sd_journal_close.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/sd_journal_close.html
+++ b/man/sd_journal_close.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/sd_journal_enumerate_data.3 b/man/sd_journal_enumerate_data.3
new file mode 100644
index 0000000000..25bd005a92
--- /dev/null
+++ b/man/sd_journal_enumerate_data.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_data.3
diff --git a/man/sd_journal_enumerate_data.html b/man/sd_journal_enumerate_data.html
index 924d74ecf0..677c8836ed 100644
--- a/man/sd_journal_enumerate_data.html
+++ b/man/sd_journal_enumerate_data.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782712960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274684373776"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
the data object associated with a specific field from
the current journal entry. It takes four arguments:
the journal context object, a string with the field
@@ -77,12 +77,12 @@
having to decompress large compressed data objects in
full.</p><p><code class="function">sd_journal_get_data_threshold()</code>
returns the currently configured data field size
- threshold.</p></div><div class="refsect1"><a name="idm259782687296"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
+ threshold.</p></div><div class="refsect1"><a name="idm274684347840"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <code class="function">sd_journal_enumerate_data()</code>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -92,7 +92,7 @@
nothing. <code class="function">sd_journal_set_data_threshold()</code>
and <code class="function">sd_journal_get_threshold()</code>
return 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259782681248"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274684341792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
<code class="function">sd_journal_enumerate_data()</code>,
<code class="function">sd_journal_restart_data()</code>,
<code class="function">sd_journal_set_data_threshold()</code>
@@ -100,9 +100,8 @@
<code class="function">sd_journal_get_data_threshold()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777759888"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274679375856"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
for a complete example how to use
<code class="function">sd_journal_get_data()</code>.</p><p>Use the
@@ -115,7 +114,7 @@ int print_fields(sd_journal *j) {
SD_JOURNAL_FOREACH_DATA(j, data, length)
printf("%.*s\n", (int) length, data);
}
-...</pre></div><div class="refsect1"><a name="idm259777755392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+...</pre></div><div class="refsect1"><a name="idm274679371360"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_enumerate_unique.3 b/man/sd_journal_enumerate_unique.3
new file mode 100644
index 0000000000..69f4069cda
--- /dev/null
+++ b/man/sd_journal_enumerate_unique.3
@@ -0,0 +1 @@
+.so man3/sd_journal_query_unique.3
diff --git a/man/sd_journal_enumerate_unique.html b/man/sd_journal_enumerate_unique.html
index 4edd48f1f4..6605f2ba5b 100644
--- a/man/sd_journal_enumerate_unique.html
+++ b/man/sd_journal_enumerate_unique.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782903840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274683751280"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
queries the journal for all unique values the
specified field can take. It takes two arguments: the
journal to query and the field name to look
@@ -60,21 +60,20 @@
influenced by matches set with
<code class="function">sd_journal_add_match()</code> but this
might change in a later version of this
- software.</p></div><div class="refsect1"><a name="idm259782890000"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ software.</p></div><div class="refsect1"><a name="idm274683737440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
returns 0 on success or a negative errno-style error
code. <code class="function">sd_journal_enumerate_unique()</code>
returns a positive integer if the next field data has
been read, 0 when no more fields are known, or a
negative errno-style error
code. <code class="function">sd_journal_restart_unique()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259782878928"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274683726464"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
<code class="function">sd_journal_enumerate_unique()</code> and
<code class="function">sd_journal_restart_unique()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259782873808"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274683721584"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
<code class="function">SD_JOURNAL_FOREACH_UNIQUE</code> macro
to iterate through all values a field of the journal
can take. The following example lists all unit names
@@ -102,7 +101,7 @@ int main(int argc, char *argv[]) {
printf("%.*s\n", (int) l, (const char*) d);
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259782869328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274683716976"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_flush_matches.3 b/man/sd_journal_flush_matches.3
new file mode 100644
index 0000000000..6abfa85fdb
--- /dev/null
+++ b/man/sd_journal_flush_matches.3
@@ -0,0 +1 @@
+.so man3/sd_journal_add_match.3
diff --git a/man/sd_journal_flush_matches.html b/man/sd_journal_flush_matches.html
index cbad1788d5..01bde3477c 100644
--- a/man/sd_journal_flush_matches.html
+++ b/man/sd_journal_flush_matches.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780241840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_add_match"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_add_match, sd_journal_add_disjunction, sd_journal_add_conjunction, sd_journal_flush_matches — Add or remove entry matches</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_match</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">size</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_disjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_add_conjunction</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_flush_matches</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274690115552"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_add_match()</code> adds
a match by which to filter the entries of the journal
file. Matches applied with this call will filter what
can be iterated through and read from the journal file
@@ -27,16 +27,16 @@
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
and
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. Matches
- are of the form <code class="literal">FIELD=value</code>, where
+ are of the form "<code class="literal">FIELD=value</code>", where
the field part is a short uppercase string consisting
only of 0-9, A-Z and the underscore. It may not begin
with two underscores or be the empty string. The value
part may be any value, including binary. If a match is
- applied only entries with this field set will be
+ applied, only entries with this field set will be
iterated. Multiple matches may be active at the same
- time: if they apply to different fields only entries
- with both fields set like this will be iterated, if
- they apply to the same fields only entries where the
+ time: If they apply to different fields, only entries
+ with both fields set like this will be iterated. If
+ they apply to the same fields, only entries where the
field takes one of the specified values will be
iterated. Well known fields are documented in
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>. Whenever
@@ -46,7 +46,7 @@
needs to be called before entries can be read
again.</p><p><code class="function">sd_journal_add_disjunction()</code>
may be used to insert a disjunction (i.e. logical OR)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_disjunction()</code> or
<code class="function">sd_journal_add_conjunction()</code> are
@@ -57,7 +57,7 @@
invoked again to begin the next OR or AND
term. </p><p><code class="function">sd_journal_add_conjunction()</code>
may be used to insert a conjunction (i.e. logical AND)
- in the match list. If this call is invoked all
+ in the match list. If this call is invoked, all
previously added matches since the last invocation of
<code class="function">sd_journal_add_conjunction()</code> are
combined in an AND with all matches added afterwards,
@@ -83,20 +83,19 @@
is removed and all entries in the journal will be
iterated again.</p><p>Note that filtering via matches only applies to
the way the journal is read, it has no effect on storage
- on disk.</p></div><div class="refsect1"><a name="idm259784119376"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
+ on disk.</p></div><div class="refsect1"><a name="idm274693811872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code> and
<code class="function">sd_journal_add_conjunction()</code>
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_flush_matches()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259784115328"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274693807792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_add_match()</code>,
<code class="function">sd_journal_add_disjunction()</code>,
<code class="function">sd_journal_add_conjunction()</code> and
<code class="function">sd_journal_flush_matches()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259784109488"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274693794832"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>The following example adds matches to a journal
context object to iterate only through messages
generated by the Avahi service at the four error log
levels, plus all messages of the message ID
@@ -111,7 +110,7 @@ int add_matches(sd_journal *j) {
sd_journal_add_match(j, "PRIORITY=3", 0);
sd_journal_add_disjunction(j);
sd_journal_add_match(j, "MESSAGE_ID=03bb1dab98ab4ecfbf6fff2738bdd964", 0);
-}</pre></div><div class="refsect1"><a name="idm259784106784"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274693792128"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_catalog.3 b/man/sd_journal_get_catalog.3
new file mode 100644
index 0000000000..19d669f324
--- /dev/null
+++ b/man/sd_journal_get_catalog.3
@@ -0,0 +1,83 @@
+'\" t
+.TH "SD_JOURNAL_GET_CATALOG" "3" "" "systemd 208" "sd_journal_get_catalog"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_catalog, sd_journal_get_catalog_for_message_id \- Retrieve message catalog entry
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_catalog('u
+.BI "int sd_journal_get_catalog(sd_journal*\ " "j" ", char**\ " "ret" ");"
+.HP \w'int\ sd_journal_get_catalog_for_message_id('u
+.BI "int sd_journal_get_catalog_for_message_id(sd_id128_t\ " "id" ", char**\ " "ret" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_catalog()\fR
+retrieves a message catalog entry for the current journal entry\&. This will look up an entry in the message catalog by using the
+"MESSAGE_ID="
+field of the current journal entry\&. Before returning the entry all journal field names in the catalog entry text enclosed in "@" will be replaced by the respective field values of the current entry\&. If a field name referenced in the message catalog entry does not exist, in the current journal entry, the "@" will be removed, but the field name otherwise left untouched\&.
+.PP
+\fBsd_journal_get_catalog_for_message_id()\fR
+works similar to
+\fBsd_journal_get_catalog()\fR
+but the entry is looked up by the specified message ID (no open journal context is necessary for this), and no field substitution is performed\&.
+.PP
+For more information about the journal message catalog please refer to the
+\m[blue]\fBJournal Message Catalogs\fR\m[]\&\s-2\u[1]\d\s+2
+documentation page\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_catalog()\fR
+and
+\fBsd_journal_get_catalog_for_message_id()\fR
+return 0 on success or a negative errno\-style error code\&. If no matching message catalog entry is found, \-ENOENT is returned\&.
+.PP
+On successful return,
+\fIret\fR
+points to a new string, which must be freed with
+\fBfree\fR(3)\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_catalog()\fR
+and
+\fBsd_journal_get_catalog_for_message_id()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.journal-fields\fR(7),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_data\fR(3)\fBmalloc\fR(3)
+.SH "NOTES"
+.IP " 1." 4
+Journal Message Catalogs
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/catalog
+.RE
diff --git a/man/sd_journal_get_catalog.html b/man/sd_journal_get_catalog.html
index dfdf9d8954..f2be754505 100644
--- a/man/sd_journal_get_catalog.html
+++ b/man/sd_journal_get_catalog.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_catalog"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_catalog, sd_journal_get_catalog_for_message_id — Retrieve message catalog entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog_for_message_id</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259773964048"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_catalog"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_catalog, sd_journal_get_catalog_for_message_id — Retrieve message catalog entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog_for_message_id</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274680609968"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
retrieves a message catalog entry for the current
journal entry. This will look up an entry in the
message catalog by using the
- <code class="literal">MESSAGE_ID=</code> field of the current
+ "<code class="literal">MESSAGE_ID=</code>" field of the current
journal entry. Before returning the entry all journal
field names in the catalog entry text enclosed in "@"
will be replaced by the respective field values of the
current entry. If a field name referenced in the
- message catalog entry does not exist it the current
- journal entry the "@" will be removed but the field
+ message catalog entry does not exist, in the current
+ journal entry, the "@" will be removed, but the field
name otherwise left untouched.</p><p><code class="function">sd_journal_get_catalog_for_message_id()</code>
works similar to
<code class="function">sd_journal_get_catalog()</code> but the
@@ -37,21 +37,20 @@
open journal context is necessary for this), and no
field substitution is performed.</p><p>For more information about the journal message
catalog please refer to the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/catalog" target="_top">Journal
- Message Catalogs</a> documentation page.</p></div><div class="refsect1"><a name="idm259773957872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
+ Message Catalogs</a> documentation page.</p></div><div class="refsect1"><a name="idm274680603792"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
and
<code class="function">sd_journal_get_catalog_for_message_id()</code>
return 0 on success or a negative errno-style error
- code. If no matching message catalog entry is found
+ code. If no matching message catalog entry is found,
-ENOENT is returned.</p><p>On successful return, <em class="parameter"><code>ret</code></em>
points to a new string, which must be freed with
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>.
- </p></div><div class="refsect1"><a name="idm259777857600"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_catalog()</code> and
+ </p></div><div class="refsect1"><a name="idm274680599184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_catalog()</code> and
<code class="function">sd_journal_get_catalog_for_message_id()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777853216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274684311312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml
index 719d77f723..4a7e0a1f8c 100644
--- a/man/sd_journal_get_catalog.xml
+++ b/man/sd_journal_get_catalog.xml
@@ -80,8 +80,8 @@
field names in the catalog entry text enclosed in "@"
will be replaced by the respective field values of the
current entry. If a field name referenced in the
- message catalog entry does not exist it the current
- journal entry the "@" will be removed but the field
+ message catalog entry does not exist, in the current
+ journal entry, the "@" will be removed, but the field
name otherwise left untouched.</para>
<para><function>sd_journal_get_catalog_for_message_id()</function>
@@ -104,7 +104,7 @@
and
<function>sd_journal_get_catalog_for_message_id()</function>
return 0 on success or a negative errno-style error
- code. If no matching message catalog entry is found
+ code. If no matching message catalog entry is found,
-ENOENT is returned.</para>
<para>On successful return, <parameter>ret</parameter>
@@ -120,8 +120,7 @@
<function>sd_journal_get_catalog_for_message_id()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_get_catalog_for_message_id.3 b/man/sd_journal_get_catalog_for_message_id.3
new file mode 100644
index 0000000000..fc7879e4f5
--- /dev/null
+++ b/man/sd_journal_get_catalog_for_message_id.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_catalog.3
diff --git a/man/sd_journal_get_catalog_for_message_id.html b/man/sd_journal_get_catalog_for_message_id.html
index dfdf9d8954..f2be754505 100644
--- a/man/sd_journal_get_catalog_for_message_id.html
+++ b/man/sd_journal_get_catalog_for_message_id.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_catalog"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_catalog, sd_journal_get_catalog_for_message_id — Retrieve message catalog entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog_for_message_id</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259773964048"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_catalog"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_catalog, sd_journal_get_catalog_for_message_id — Retrieve message catalog entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_catalog_for_message_id</b>(</code></td><td>sd_id128_t <var class="pdparam">id</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274680609968"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
retrieves a message catalog entry for the current
journal entry. This will look up an entry in the
message catalog by using the
- <code class="literal">MESSAGE_ID=</code> field of the current
+ "<code class="literal">MESSAGE_ID=</code>" field of the current
journal entry. Before returning the entry all journal
field names in the catalog entry text enclosed in "@"
will be replaced by the respective field values of the
current entry. If a field name referenced in the
- message catalog entry does not exist it the current
- journal entry the "@" will be removed but the field
+ message catalog entry does not exist, in the current
+ journal entry, the "@" will be removed, but the field
name otherwise left untouched.</p><p><code class="function">sd_journal_get_catalog_for_message_id()</code>
works similar to
<code class="function">sd_journal_get_catalog()</code> but the
@@ -37,21 +37,20 @@
open journal context is necessary for this), and no
field substitution is performed.</p><p>For more information about the journal message
catalog please refer to the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/catalog" target="_top">Journal
- Message Catalogs</a> documentation page.</p></div><div class="refsect1"><a name="idm259773957872"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
+ Message Catalogs</a> documentation page.</p></div><div class="refsect1"><a name="idm274680603792"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_catalog()</code>
and
<code class="function">sd_journal_get_catalog_for_message_id()</code>
return 0 on success or a negative errno-style error
- code. If no matching message catalog entry is found
+ code. If no matching message catalog entry is found,
-ENOENT is returned.</p><p>On successful return, <em class="parameter"><code>ret</code></em>
points to a new string, which must be freed with
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>.
- </p></div><div class="refsect1"><a name="idm259777857600"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_catalog()</code> and
+ </p></div><div class="refsect1"><a name="idm274680599184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_catalog()</code> and
<code class="function">sd_journal_get_catalog_for_message_id()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777853216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274684311312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_get_cursor.3 b/man/sd_journal_get_cursor.3
new file mode 100644
index 0000000000..87819b0da6
--- /dev/null
+++ b/man/sd_journal_get_cursor.3
@@ -0,0 +1,74 @@
+'\" t
+.TH "SD_JOURNAL_GET_CURSOR" "3" "" "systemd 208" "sd_journal_get_cursor"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_cursor, sd_journal_test_cursor \- Get cursor string for or test cursor string against the current journal entry
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_cursor('u
+.BI "int sd_journal_get_cursor(sd_journal*\ " "j" ", char\ **\ " "cursor" ");"
+.HP \w'int\ sd_journal_test_cursor('u
+.BI "int sd_journal_test_cursor(sd_journal*\ " "j" ", const\ char\ *\ " "cursor" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_cursor()\fR
+returns a cursor string for the current journal entry\&. A cursor is a serialization of the current journal position formatted as text\&. The string only contains printable characters and can be passed around in text form\&. The cursor identifies a journal entry globally and in a stable way and may be used to later seek to it via
+\fBsd_journal_seek_cursor\fR(3)\&. The cursor string should be considered opaque and not be parsed by clients\&. Seeking to a cursor position without the specific entry being available locally will seek to the next closest (in terms of time) available entry\&. The call takes two arguments: a journal context object and a pointer to a string pointer where the cursor string will be placed\&. The string is allocated via libc
+\fBmalloc\fR(3)
+and should be freed after use with
+\fBfree\fR(3)\&.
+.PP
+Note that
+\fBsd_journal_get_cursor()\fR
+will not work before
+\fBsd_journal_next\fR(3)
+(or related call) has been called at least once, in order to position the read pointer at a valid entry\&.
+.PP
+\fBsd_journal_test_cursor()\fR
+may be used to check whether the current position in the journal matches the specified cursor\&. This is useful since cursor strings do not uniquely identify an entry: the same entry might be referred to by multiple different cursor strings, and hence string comparing cursors is not possible\&. Use this call to verify after an invocation of
+\fBsd_journal_seek_cursor\fR(3)
+whether the entry being sought to was actually found in the journal or the next closest entry was used instead\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_cursor()\fR
+returns 0 on success or a negative errno\-style error code\&.
+\fBsd_journal_test_cursor()\fR
+returns positive if the current entry matches the specified cursor, 0 if it does not match the specified cursor or a negative errno\-style error code on failure\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_cursor()\fR
+and
+\fBsd_journal_test_cursor()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_seek_cursor\fR(3)
diff --git a/man/sd_journal_get_cursor.html b/man/sd_journal_get_cursor.html
index ad86923da1..86bcf327b0 100644
--- a/man/sd_journal_get_cursor.html
+++ b/man/sd_journal_get_cursor.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_cursor"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cursor, sd_journal_test_cursor — Get cursor string for or test cursor string against the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char ** <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_test_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778957168"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_cursor"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cursor, sd_journal_test_cursor — Get cursor string for or test cursor string against the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char ** <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_test_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677906448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
returns a cursor string for the current journal
entry. A cursor is a serialization of the current
journal position formatted as text. The string only
@@ -55,19 +55,18 @@
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>
whether the entry being sought to was actually found
in the journal or the next closest entry was used
- instead.</p></div><div class="refsect1"><a name="idm259782851408"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
+ instead.</p></div><div class="refsect1"><a name="idm274677896256"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
returns 0 on success or a negative errno-style error
code. <code class="function">sd_journal_test_cursor()</code>
returns positive if the current entry matches the
- specified cursor, 0 if it doesn't match the specified
+ specified cursor, 0 if it does not match the specified
cursor or a negative errno-style error code on
- failure.</p></div><div class="refsect1"><a name="idm259782848608"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_cursor()</code>
+ failure.</p></div><div class="refsect1"><a name="idm274677893456"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_cursor()</code>
and <code class="function">sd_journal_test_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259782844240"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681605664"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml
index 1b0e775bb4..4cee7d5b63 100644
--- a/man/sd_journal_get_cursor.xml
+++ b/man/sd_journal_get_cursor.xml
@@ -120,7 +120,7 @@
returns 0 on success or a negative errno-style error
code. <function>sd_journal_test_cursor()</function>
returns positive if the current entry matches the
- specified cursor, 0 if it doesn't match the specified
+ specified cursor, 0 if it does not match the specified
cursor or a negative errno-style error code on
failure.</para>
</refsect1>
@@ -132,8 +132,7 @@
and <function>sd_journal_test_cursor()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_get_cutoff_monotonic_usec.3 b/man/sd_journal_get_cutoff_monotonic_usec.3
new file mode 100644
index 0000000000..c484870acc
--- /dev/null
+++ b/man/sd_journal_get_cutoff_monotonic_usec.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_cutoff_realtime_usec.3
diff --git a/man/sd_journal_get_cutoff_monotonic_usec.html b/man/sd_journal_get_cutoff_monotonic_usec.html
index fe495faafa..3513ffe505 100644
--- a/man/sd_journal_get_cutoff_monotonic_usec.html
+++ b/man/sd_journal_get_cutoff_monotonic_usec.html
@@ -19,22 +19,25 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_cutoff_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cutoff_realtime_usec, sd_journal_get_cutoff_monotonic_usec — Read cut-off timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259797893920"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_cutoff_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cutoff_realtime_usec, sd_journal_get_cutoff_monotonic_usec — Read cut-off timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676871632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
gets the realtime (wallclock) timestamps of the first
and last entries accessible in the journal. It takes
three arguments: the journal context object and two
- pointers to 64 Bit unsigned integers to store the
+ pointers to 64-bit unsigned integers to store the
timestamps in. The timestamps are in microseconds
- since the epoch, i.e. CLOCK_REALTIME. Either one of
- the two timestamp arguments may be passed as NULL in
- case the timestamp is not needed, but not both.</p><p><code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
+ since the epoch,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Either one
+ of the two timestamp arguments may be passed as
+ <code class="constant">NULL</code> in case the timestamp is not
+ needed, but not both.</p><p><code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
gets the monotonic timestamps of the first and last
entries accessible in the journal. It takes three
- arguments: the journal context object, a 128 Bit
- identifier for the boot, and two pointers to 64 Bit
+ arguments: the journal context object, a 128-bit
+ identifier for the boot, and two pointers to 64-bit
unsigned integers to store the timestamps. The
timestamps are in microseconds since boot-up of the
- specific boot, i.e. CLOCK_MONOTONIC. Since the
+ specific boot,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since the
monotonic clock begins new with every reboot it only
defines a well-defined point in time when used
together with an identifier identifying the boot, see
@@ -42,20 +45,19 @@
for more information. The function will return the
timestamps for the boot identified by the passed boot
ID. Either one of the two timestamp arguments may be
- passed as NULL in case the timestamp is not needed,
- but not both.</p></div><div class="refsect1"><a name="idm259797888816"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
+ passed as <code class="constant">NULL</code> in case the
+ timestamp is not needed, but not both.</p></div><div class="refsect1"><a name="idm274680813728"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
and
<code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
return 1 on success, 0 if not suitable entries are in
- the journal or a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259801789776"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
+ the journal or a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274680811056"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
<code class="function">sd_journal_get_cutoff_realtime_usec()</code>
and
<code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259801785376"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680806896"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_cutoff_realtime_usec.3 b/man/sd_journal_get_cutoff_realtime_usec.3
new file mode 100644
index 0000000000..091909b511
--- /dev/null
+++ b/man/sd_journal_get_cutoff_realtime_usec.3
@@ -0,0 +1,72 @@
+'\" t
+.TH "SD_JOURNAL_GET_CUTOFF_REALTIME_USEC" "3" "" "systemd 208" "sd_journal_get_cutoff_realtime_usec"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_cutoff_realtime_usec, sd_journal_get_cutoff_monotonic_usec \- Read cut\-off timestamps from the current journal entry
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_cutoff_realtime_usec('u
+.BI "int sd_journal_get_cutoff_realtime_usec(sd_journal*\ " "j" ", uint64_t*\ " "from" ", uint64_t*\ " "to" ");"
+.HP \w'int\ sd_journal_get_cutoff_monotonic_usec('u
+.BI "int sd_journal_get_cutoff_monotonic_usec(sd_journal*\ " "j" ", sd_id128_t\ " "boot_id" ", uint64_t*\ " "from" ", uint64_t*\ " "to" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_cutoff_realtime_usec()\fR
+gets the realtime (wallclock) timestamps of the first and last entries accessible in the journal\&. It takes three arguments: the journal context object and two pointers to 64\-bit unsigned integers to store the timestamps in\&. The timestamps are in microseconds since the epoch, i\&.e\&.
+\fBCLOCK_REALTIME\fR\&. Either one of the two timestamp arguments may be passed as
+\fBNULL\fR
+in case the timestamp is not needed, but not both\&.
+.PP
+\fBsd_journal_get_cutoff_monotonic_usec()\fR
+gets the monotonic timestamps of the first and last entries accessible in the journal\&. It takes three arguments: the journal context object, a 128\-bit identifier for the boot, and two pointers to 64\-bit unsigned integers to store the timestamps\&. The timestamps are in microseconds since boot\-up of the specific boot, i\&.e\&.
+\fBCLOCK_MONOTONIC\fR\&. Since the monotonic clock begins new with every reboot it only defines a well\-defined point in time when used together with an identifier identifying the boot, see
+\fBsd_id128_get_boot\fR(3)
+for more information\&. The function will return the timestamps for the boot identified by the passed boot ID\&. Either one of the two timestamp arguments may be passed as
+\fBNULL\fR
+in case the timestamp is not needed, but not both\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_cutoff_realtime_usec()\fR
+and
+\fBsd_journal_get_cutoff_monotonic_usec()\fR
+return 1 on success, 0 if not suitable entries are in the journal or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_cutoff_realtime_usec()\fR
+and
+\fBsd_journal_get_cutoff_monotonic_usec()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_id128_get_boot\fR(3),
+\fBclock_gettime\fR(2)
diff --git a/man/sd_journal_get_cutoff_realtime_usec.html b/man/sd_journal_get_cutoff_realtime_usec.html
index fe495faafa..3513ffe505 100644
--- a/man/sd_journal_get_cutoff_realtime_usec.html
+++ b/man/sd_journal_get_cutoff_realtime_usec.html
@@ -19,22 +19,25 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_cutoff_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cutoff_realtime_usec, sd_journal_get_cutoff_monotonic_usec — Read cut-off timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259797893920"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_cutoff_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cutoff_realtime_usec, sd_journal_get_cutoff_monotonic_usec — Read cut-off timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cutoff_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">from</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">to</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676871632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
gets the realtime (wallclock) timestamps of the first
and last entries accessible in the journal. It takes
three arguments: the journal context object and two
- pointers to 64 Bit unsigned integers to store the
+ pointers to 64-bit unsigned integers to store the
timestamps in. The timestamps are in microseconds
- since the epoch, i.e. CLOCK_REALTIME. Either one of
- the two timestamp arguments may be passed as NULL in
- case the timestamp is not needed, but not both.</p><p><code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
+ since the epoch,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Either one
+ of the two timestamp arguments may be passed as
+ <code class="constant">NULL</code> in case the timestamp is not
+ needed, but not both.</p><p><code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
gets the monotonic timestamps of the first and last
entries accessible in the journal. It takes three
- arguments: the journal context object, a 128 Bit
- identifier for the boot, and two pointers to 64 Bit
+ arguments: the journal context object, a 128-bit
+ identifier for the boot, and two pointers to 64-bit
unsigned integers to store the timestamps. The
timestamps are in microseconds since boot-up of the
- specific boot, i.e. CLOCK_MONOTONIC. Since the
+ specific boot,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since the
monotonic clock begins new with every reboot it only
defines a well-defined point in time when used
together with an identifier identifying the boot, see
@@ -42,20 +45,19 @@
for more information. The function will return the
timestamps for the boot identified by the passed boot
ID. Either one of the two timestamp arguments may be
- passed as NULL in case the timestamp is not needed,
- but not both.</p></div><div class="refsect1"><a name="idm259797888816"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
+ passed as <code class="constant">NULL</code> in case the
+ timestamp is not needed, but not both.</p></div><div class="refsect1"><a name="idm274680813728"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cutoff_realtime_usec()</code>
and
<code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
return 1 on success, 0 if not suitable entries are in
- the journal or a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259801789776"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
+ the journal or a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274680811056"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
<code class="function">sd_journal_get_cutoff_realtime_usec()</code>
and
<code class="function">sd_journal_get_cutoff_monotonic_usec()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259801785376"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680806896"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
index ed014cb509..9bf8220d11 100644
--- a/man/sd_journal_get_cutoff_realtime_usec.xml
+++ b/man/sd_journal_get_cutoff_realtime_usec.xml
@@ -77,20 +77,23 @@
gets the realtime (wallclock) timestamps of the first
and last entries accessible in the journal. It takes
three arguments: the journal context object and two
- pointers to 64 Bit unsigned integers to store the
+ pointers to 64-bit unsigned integers to store the
timestamps in. The timestamps are in microseconds
- since the epoch, i.e. CLOCK_REALTIME. Either one of
- the two timestamp arguments may be passed as NULL in
- case the timestamp is not needed, but not both.</para>
+ since the epoch,
+ i.e. <constant>CLOCK_REALTIME</constant>. Either one
+ of the two timestamp arguments may be passed as
+ <constant>NULL</constant> in case the timestamp is not
+ needed, but not both.</para>
<para><function>sd_journal_get_cutoff_monotonic_usec()</function>
gets the monotonic timestamps of the first and last
entries accessible in the journal. It takes three
- arguments: the journal context object, a 128 Bit
- identifier for the boot, and two pointers to 64 Bit
+ arguments: the journal context object, a 128-bit
+ identifier for the boot, and two pointers to 64-bit
unsigned integers to store the timestamps. The
timestamps are in microseconds since boot-up of the
- specific boot, i.e. CLOCK_MONOTONIC. Since the
+ specific boot,
+ i.e. <constant>CLOCK_MONOTONIC</constant>. Since the
monotonic clock begins new with every reboot it only
defines a well-defined point in time when used
together with an identifier identifying the boot, see
@@ -98,8 +101,8 @@
for more information. The function will return the
timestamps for the boot identified by the passed boot
ID. Either one of the two timestamp arguments may be
- passed as NULL in case the timestamp is not needed,
- but not both.</para>
+ passed as <constant>NULL</constant> in case the
+ timestamp is not needed, but not both.</para>
</refsect1>
<refsect1>
@@ -121,8 +124,7 @@
<function>sd_journal_get_cutoff_monotonic_usec()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_get_data.3 b/man/sd_journal_get_data.3
new file mode 100644
index 0000000000..651dcac73e
--- /dev/null
+++ b/man/sd_journal_get_data.3
@@ -0,0 +1,145 @@
+'\" t
+.TH "SD_JOURNAL_GET_DATA" "3" "" "systemd 208" "sd_journal_get_data"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold \- Read data fields from the current journal entry
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_data('u
+.BI "int sd_journal_get_data(sd_journal*\ " "j" ", const\ char*\ " "field" ", const\ void**\ " "data" ", size_t*\ " "length" ");"
+.HP \w'int\ sd_journal_enumerate_data('u
+.BI "int sd_journal_enumerate_data(sd_journal*\ " "j" ", const\ void**\ " "data" ", size_t*\ " "length" ");"
+.HP \w'void\ sd_journal_restart_data('u
+.BI "void sd_journal_restart_data(sd_journal*\ " "j" ");"
+.HP \w'SD_JOURNAL_FOREACH_DATA('u
+.BI "SD_JOURNAL_FOREACH_DATA(sd_journal*\ " "j" ", const\ void*\ " "data" ", size_t\ " "length" ");"
+.HP \w'int\ sd_journal_set_data_threshold('u
+.BI "int sd_journal_set_data_threshold(sd_journal*\ " "j" ", size_t\ " "sz" ");"
+.HP \w'int\ sd_journal_get_data_threshold('u
+.BI "int sd_journal_get_data_threshold(sd_journal*\ " "j" ", size_t*\ " "sz" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_data()\fR
+gets the data object associated with a specific field from the current journal entry\&. It takes four arguments: the journal context object, a string with the field name to request, plus a pair of pointers to pointer/size variables where the data object and its size shall be stored in\&. The field name should be an entry field name\&. Well\-known field names are listed in
+\fBsystemd.journal-fields\fR(7)\&. The returned data is in a read\-only memory map and is only valid until the next invocation of
+\fBsd_journal_get_data()\fR
+or
+\fBsd_journal_enumerate_data()\fR, or the read pointer is altered\&. Note that the data returned will be prefixed with the field name and \*(Aq=\*(Aq\&. Also note that by default data fields larger than 64K might get truncated to 64K\&. This threshold may be changed and turned off with
+\fBsd_journal_set_data_threshold()\fR
+(see below)\&.
+.PP
+\fBsd_journal_enumerate_data()\fR
+may be used to iterate through all fields of the current entry\&. On each invocation the data for the next field is returned\&. The order of these fields is not defined\&. The data returned is in the same format as with
+\fBsd_journal_get_data()\fR
+and also follows the same life\-time semantics\&.
+.PP
+\fBsd_journal_restart_data()\fR
+resets the data enumeration index to the beginning of the entry\&. The next invocation of
+\fBsd_journal_enumerate_data()\fR
+will return the first field of the entry again\&.
+.PP
+Note that the
+\fBSD_JOURNAL_FOREACH_DATA()\fR
+macro may be used as a handy wrapper around
+\fBsd_journal_restart_data()\fR
+and
+\fBsd_journal_enumerate_data()\fR\&.
+.PP
+Note that these functions will not work before
+\fBsd_journal_next\fR(3)
+(or related call) has been called at least once, in order to position the read pointer at a valid entry\&.
+.PP
+\fBsd_journal_set_data_threshold()\fR
+may be used to change the data field size threshold for data returned by
+\fBsd_journal_get_data()\fR,
+\fBsd_journal_enumerate_data()\fR
+and
+\fBsd_journal_enumerate_unique()\fR\&. This threshold is a hint only: it indicates that the client program is interested only in the initial parts of the data fields, up to the threshold in size \-\- but the library might still return larger data objects\&. That means applications should not rely exclusively on this setting to limit the size of the data fields returned, but need to apply a explicit size limit on the returned data as well\&. This threshold defaults to 64K by default\&. To retrieve the complete data fields this threshold should be turned off by setting it to 0, so that the library always returns the complete data objects\&. It is recommended to set this threshold as low as possible since this relieves the library from having to decompress large compressed data objects in full\&.
+.PP
+\fBsd_journal_get_data_threshold()\fR
+returns the currently configured data field size threshold\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_data()\fR
+returns 0 on success or a negative errno\-style error code\&. If the current entry does not include the specified field, \-ENOENT is returned\&. If
+\fBsd_journal_next\fR(3)
+has not been called at least once, \-EADDRNOTAVAIL is returned\&.
+\fBsd_journal_enumerate_data()\fR
+returns a positive integer if the next field has been read, 0 when no more fields are known, or a negative errno\-style error code\&.
+\fBsd_journal_restart_data()\fR
+returns nothing\&.
+\fBsd_journal_set_data_threshold()\fR
+and
+\fBsd_journal_get_threshold()\fR
+return 0 on success or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_data()\fR,
+\fBsd_journal_enumerate_data()\fR,
+\fBsd_journal_restart_data()\fR,
+\fBsd_journal_set_data_threshold()\fR
+and
+\fBsd_journal_get_data_threshold()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "EXAMPLES"
+.PP
+See
+\fBsd_journal_next\fR(3)
+for a complete example how to use
+\fBsd_journal_get_data()\fR\&.
+.PP
+Use the
+\fBSD_JOURNAL_FOREACH_DATA\fR
+macro to iterate through all fields of the current journal entry:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\&.\&.\&.
+int print_fields(sd_journal *j) {
+ const void *data;
+ size_t l;
+ SD_JOURNAL_FOREACH_DATA(j, data, length)
+ printf("%\&.*s\en", (int) length, data);
+}
+\&.\&.\&.
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.journal-fields\fR(7),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_query_unique\fR(3)
diff --git a/man/sd_journal_get_data.html b/man/sd_journal_get_data.html
index 924d74ecf0..677c8836ed 100644
--- a/man/sd_journal_get_data.html
+++ b/man/sd_journal_get_data.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782712960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274684373776"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
the data object associated with a specific field from
the current journal entry. It takes four arguments:
the journal context object, a string with the field
@@ -77,12 +77,12 @@
having to decompress large compressed data objects in
full.</p><p><code class="function">sd_journal_get_data_threshold()</code>
returns the currently configured data field size
- threshold.</p></div><div class="refsect1"><a name="idm259782687296"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
+ threshold.</p></div><div class="refsect1"><a name="idm274684347840"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <code class="function">sd_journal_enumerate_data()</code>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -92,7 +92,7 @@
nothing. <code class="function">sd_journal_set_data_threshold()</code>
and <code class="function">sd_journal_get_threshold()</code>
return 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259782681248"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274684341792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
<code class="function">sd_journal_enumerate_data()</code>,
<code class="function">sd_journal_restart_data()</code>,
<code class="function">sd_journal_set_data_threshold()</code>
@@ -100,9 +100,8 @@
<code class="function">sd_journal_get_data_threshold()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777759888"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274679375856"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
for a complete example how to use
<code class="function">sd_journal_get_data()</code>.</p><p>Use the
@@ -115,7 +114,7 @@ int print_fields(sd_journal *j) {
SD_JOURNAL_FOREACH_DATA(j, data, length)
printf("%.*s\n", (int) length, data);
}
-...</pre></div><div class="refsect1"><a name="idm259777755392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+...</pre></div><div class="refsect1"><a name="idm274679371360"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml
index 1259b0cdbe..0e1111e05d 100644
--- a/man/sd_journal_get_data.xml
+++ b/man/sd_journal_get_data.xml
@@ -179,9 +179,9 @@
<para><function>sd_journal_get_data()</function>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <function>sd_journal_enumerate_data()</function>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -205,8 +205,7 @@
<function>sd_journal_get_data_threshold()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_get_data_threshold.3 b/man/sd_journal_get_data_threshold.3
new file mode 100644
index 0000000000..25bd005a92
--- /dev/null
+++ b/man/sd_journal_get_data_threshold.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_data.3
diff --git a/man/sd_journal_get_data_threshold.html b/man/sd_journal_get_data_threshold.html
index 924d74ecf0..677c8836ed 100644
--- a/man/sd_journal_get_data_threshold.html
+++ b/man/sd_journal_get_data_threshold.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782712960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274684373776"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
the data object associated with a specific field from
the current journal entry. It takes four arguments:
the journal context object, a string with the field
@@ -77,12 +77,12 @@
having to decompress large compressed data objects in
full.</p><p><code class="function">sd_journal_get_data_threshold()</code>
returns the currently configured data field size
- threshold.</p></div><div class="refsect1"><a name="idm259782687296"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
+ threshold.</p></div><div class="refsect1"><a name="idm274684347840"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <code class="function">sd_journal_enumerate_data()</code>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -92,7 +92,7 @@
nothing. <code class="function">sd_journal_set_data_threshold()</code>
and <code class="function">sd_journal_get_threshold()</code>
return 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259782681248"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274684341792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
<code class="function">sd_journal_enumerate_data()</code>,
<code class="function">sd_journal_restart_data()</code>,
<code class="function">sd_journal_set_data_threshold()</code>
@@ -100,9 +100,8 @@
<code class="function">sd_journal_get_data_threshold()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777759888"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274679375856"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
for a complete example how to use
<code class="function">sd_journal_get_data()</code>.</p><p>Use the
@@ -115,7 +114,7 @@ int print_fields(sd_journal *j) {
SD_JOURNAL_FOREACH_DATA(j, data, length)
printf("%.*s\n", (int) length, data);
}
-...</pre></div><div class="refsect1"><a name="idm259777755392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+...</pre></div><div class="refsect1"><a name="idm274679371360"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_get_events.3 b/man/sd_journal_get_events.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/sd_journal_get_events.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/sd_journal_get_events.html b/man/sd_journal_get_events.html
index 91ba994e49..deb02e768c 100644
--- a/man/sd_journal_get_events.html
+++ b/man/sd_journal_get_events.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_fd.3 b/man/sd_journal_get_fd.3
new file mode 100644
index 0000000000..459627e45b
--- /dev/null
+++ b/man/sd_journal_get_fd.3
@@ -0,0 +1,278 @@
+'\" t
+.TH "SD_JOURNAL_GET_FD" "3" "" "systemd 208" "sd_journal_get_fd"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE \- Journal change notification interface
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_fd('u
+.BI "int sd_journal_get_fd(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_get_events('u
+.BI "int sd_journal_get_events(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_get_timeout('u
+.BI "int sd_journal_get_timeout(sd_journal*\ " "j" ", uint64_t*\ " "timeout_usec" ");"
+.HP \w'int\ sd_journal_process('u
+.BI "int sd_journal_process(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_wait('u
+.BI "int sd_journal_wait(sd_journal*\ " "j" ", uint64_t\ " "timeout_usec" ");"
+.HP \w'int\ sd_journal_reliable_fd('u
+.BI "int sd_journal_reliable_fd(sd_journal*\ " "j" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_fd()\fR
+returns a file descriptor that may be asynchronously polled in an external event loop and is signaled as soon as the journal changes, because new entries or files were added, rotation took place, or files have been deleted, and similar\&. The file descriptor is suitable for usage in
+\fBpoll\fR(2)\&. Use
+\fBsd_journal_get_events()\fR
+for an events mask to watch for\&. The call takes one argument: the journal context object\&. Note that not all file systems are capable of generating the necessary events for wakeups from this file descriptor for changes to be noticed immediately\&. In particular network files systems do not generate suitable file change events in all cases\&. Cases like this can be detected with
+\fBsd_journal_reliable_fd()\fR, below\&.
+\fBsd_journal_get_timeout()\fR
+will ensure in these cases that wake\-ups happen frequently enough for changes to be noticed, although with a certain latency\&.
+.PP
+\fBsd_journal_get_events()\fR
+will return the
+\fBpoll()\fR
+mask to wait for\&. This function will return a combination of
+\fBPOLLIN\fR
+and
+\fBPOLLOUT\fR
+and similar to fill into the
+"\&.events"
+field of
+\fIstruct pollfd\fR\&.
+.PP
+\fBsd_journal_get_timeout()\fR
+will return a timeout value for usage in
+\fBpoll()\fR\&. This returns a value in microseconds since the epoch of
+\fBCLOCK_MONOTONIC\fR
+for timing out
+\fBpoll()\fR
+in
+\fItimeout_usec\fR\&. See
+\fBclock_gettime\fR(2)
+for details about
+\fBCLOCK_MONOTONIC\fR\&. If there is no timeout to wait for, this will fill in
+\fB(uint64_t) \-1\fR
+instead\&. Note that
+\fBpoll()\fR
+takes a relative timeout in milliseconds rather than an absolute timeout in microseconds\&. To convert the absolute \*(Aqus\*(Aq timeout into relative \*(Aqms\*(Aq, use code like the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+uint64_t t;
+int msec;
+sd_journal_get_timeout(m, &t);
+if (t == (uint64_t) \-1)
+ msec = \-1;
+else {
+ struct timespec ts;
+ uint64_t n;
+ clock_getttime(CLOCK_MONOTONIC, &ts);
+ n = (uint64_t) ts\&.tv_sec * 1000000 + ts\&.tv_nsec / 1000;
+ msec = t > n ? (int) ((t \- n + 999) / 1000) : 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The code above does not do any error checking for brevity\*(Aqs sake\&. The calculated
+\fImsec\fR
+integer can be passed directly as
+\fBpoll()\fR\*(Aqs timeout parameter\&.
+.PP
+After each
+\fBpoll()\fR
+wake\-up
+\fBsd_journal_process()\fR
+needs to be called to process events\&. This call will also indicate what kind of change has been detected (see below; note that spurious wake\-ups are possible)\&.
+.PP
+A synchronous alternative for using
+\fBsd_journal_get_fd()\fR,
+\fBsd_journal_get_events()\fR,
+\fBsd_journal_get_timeout()\fR
+and
+\fBsd_journal_process()\fR
+is
+\fBsd_journal_wait()\fR\&. It will synchronously wait until the journal gets changed\&. The maximum time this call sleeps may be controlled with the
+\fItimeout_usec\fR
+parameter\&. Pass
+\fB(uint64_t) \-1\fR
+to wait indefinitely\&. Internally this call simply combines
+\fBsd_journal_get_fd()\fR,
+\fBsd_journal_get_events()\fR,
+\fBsd_journal_get_timeout()\fR,
+\fBpoll()\fR
+and
+\fBsd_journal_process()\fR
+into one\&.
+.PP
+\fBsd_journal_reliable_fd()\fR
+may be used to check whether the wakeup events from the file descriptor returned by
+\fBsd_journal_get_fd()\fR
+are known to be immediately triggered\&. On certain file systems where file change events from the OS are not available (such as NFS) changes need to be polled for repeatedly, and hence are detected only with a certain latency\&. This call will return a positive value if the journal changes are detected immediately and zero when they need to be polled for and hence might be noticed only with a certain latency\&. Note that there\*(Aqs usually no need to invoke this function directly as
+\fBsd_journal_get_timeout()\fR
+on these file systems will ask for timeouts explicitly anyway\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_fd()\fR
+returns a valid file descriptor on success or a negative errno\-style error code\&.
+.PP
+\fBsd_journal_get_events()\fR
+returns a combination of
+\fBPOLLIN\fR,
+\fBPOLLOUT\fR
+and suchlike on success or a negative errno\-style error code\&.
+.PP
+\fBsd_journal_reliable_fd()\fR
+returns a positive integer if the file descriptor returned by
+\fBsd_journal_get_fd()\fR
+will generate wake\-ups immediately for all journal changes\&. Returns 0 if there might be a latency involved\&.
+.PP
+\fBsd_journal_process()\fR
+and
+\fBsd_journal_wait()\fR
+return one of
+\fBSD_JOURNAL_NOP\fR,
+\fBSD_JOURNAL_APPEND\fR
+or
+\fBSD_JOURNAL_INVALIDATE\fR
+on success or a negative errno\-style error code\&. If
+\fBSD_JOURNAL_NOP\fR
+is returned, the journal did not change since the last invocation\&. If
+\fBSD_JOURNAL_APPEND\fR
+is returned, new entries have been appended to the end of the journal\&. If
+\fBSD_JOURNAL_INVALIDATE\fR, journal files were added or removed (possibly due to rotation)\&. In the latter event, live\-view UIs should probably refresh their entire display, while in the case of
+\fBSD_JOURNAL_APPEND\fR, it is sufficient to simply continue reading at the previous end of the journal\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_fd()\fR,
+\fBsd_journal_get_events()\fR,
+\fBsd_journal_reliable_fd()\fR,
+\fBsd_journal_process()\fR
+and
+\fBsd_journal_wait()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "EXAMPLES"
+.PP
+Iterating through the journal, in a live view tracking all changes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#include <stdio\&.h>
+#include <string\&.h>
+#include <systemd/sd\-journal\&.h>
+
+int main(int argc, char *argv[]) {
+ int r;
+ sd_journal *j;
+ r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+ if (r < 0) {
+ fprintf(stderr, "Failed to open journal: %s\en", strerror(\-r));
+ return 1;
+ }
+ for (;;) {
+ const void *d;
+ size_t l;
+ r = sd_journal_next(j);
+ if (r < 0) {
+ fprintf(stderr, "Failed to iterate to next entry: %s\en", strerror(\-r));
+ break;
+ }
+ if (r == 0) {
+ /* Reached the end, let\*(Aqs wait for changes, and try again */
+ r = sd_journal_wait(j, (uint64_t) \-1);
+ if (r < 0) {
+ fprintf(stderr, "Failed to wait for changes: %s\en", strerror(\-r));
+ break;
+ }
+ continue;
+ }
+ r = sd_journal_get_data(j, "MESSAGE", &d, &l);
+ if (r < 0) {
+ fprintf(stderr, "Failed to read message field: %s\en", strerror(\-r));
+ continue;
+ }
+ printf("%\&.*s\en", (int) l, (const char*) d);
+ }
+ sd_journal_close(j);
+ return 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Waiting with
+\fBpoll()\fR
+(this example lacks all error checking for the sake of simplicity):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#include <sys/poll\&.h>
+#include <systemd/sd\-journal\&.h>
+
+int wait_for_changes(sd_journal *j) {
+ struct pollfd pollfd;
+ int msec;
+
+ sd_journal_get_timeout(m, &t);
+ if (t == (uint64_t) \-1)
+ msec = \-1;
+ else {
+ struct timespec ts;
+ uint64_t n;
+ clock_getttime(CLOCK_MONOTONIC, &ts);
+ n = (uint64_t) ts\&.tv_sec * 1000000 + ts\&.tv_nsec / 1000;
+ msec = t > n ? (int) ((t \- n + 999) / 1000) : 0;
+ }
+
+ pollfd\&.fd = sd_journal_get_fd(j);
+ pollfd\&.events = sd_journal_get_events(j);
+ poll(&pollfd, 1, msec);
+ return sd_journal_process(j);
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBpoll\fR(2),
+\fBclock_gettime\fR(2)
diff --git a/man/sd_journal_get_fd.html b/man/sd_journal_get_fd.html
index 91ba994e49..deb02e768c 100644
--- a/man/sd_journal_get_fd.html
+++ b/man/sd_journal_get_fd.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml
index 33d2980b3b..764f716a17 100644
--- a/man/sd_journal_get_fd.xml
+++ b/man/sd_journal_get_fd.xml
@@ -123,22 +123,28 @@
<para><function>sd_journal_get_events()</function>
will return the <function>poll()</function> mask to
wait for. This function will return a combination of
- <literal>POLLIN</literal> and
- <literal>POLLOUT</literal> and similar to fill into
+ <constant>POLLIN</constant> and
+ <constant>POLLOUT</constant> and similar to fill into
the <literal>.events</literal> field of
- <literal>struct pollfd</literal>.</para>
+ <varname>struct pollfd</varname>.</para>
<para><function>sd_journal_get_timeout()</function>
- will return a timeout value for usage in <function>poll()</function>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <function>poll()</function> in <literal>timeout_usec</literal>. See
+ will return a timeout value for usage in
+ <function>poll()</function>. This returns a value in
+ microseconds since the epoch of
+ <constant>CLOCK_MONOTONIC</constant> for timing out
+ <function>poll()</function> in
+ <varname>timeout_usec</varname>. See
<citerefentry><refentrytitle>clock_gettime</refentrytitle><manvolnum>2</manvolnum></citerefentry>
for details about
- <literal>CLOCK_MONOTONIC</literal>. If there's no
- timeout to wait for this will fill in
- <literal>(uint64_t) -1</literal> instead. Note that
+ <constant>CLOCK_MONOTONIC</constant>. If there is no
+ timeout to wait for, this will fill in
+ <constant>(uint64_t) -1</constant> instead. Note that
<function>poll()</function> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</para>
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</para>
<programlisting>uint64_t t;
int msec;
@@ -154,7 +160,7 @@ else {
}</programlisting>
<para>The code above does not do any error checking
- for brevity's sake. The calculated <literal>msec</literal>
+ for brevity's sake. The calculated <varname>msec</varname>
integer can be passed directly as
<function>poll()</function>'s timeout
parameter.</para>
@@ -174,7 +180,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <parameter>timeout_usec</parameter>
- parameter. Pass <literal>(uint64_t) -1</literal> to
+ parameter. Pass <constant>(uint64_t) -1</constant> to
wait indefinitely. Internally this call simply
combines <function>sd_journal_get_fd()</function>,
<function>sd_journal_get_events()</function>,
@@ -209,8 +215,8 @@ else {
errno-style error code.</para>
<para><function>sd_journal_get_events()</function>
- returns a combination of <literal>POLLIN</literal>,
- <literal>POLLOUT</literal> and suchlike on success or
+ returns a combination of <constant>POLLIN</constant>,
+ <constant>POLLOUT</constant> and suchlike on success or
a negative errno-style error code.</para>
<para><function>sd_journal_reliable_fd()</function>
@@ -222,19 +228,19 @@ else {
<para><function>sd_journal_process()</function> and
<function>sd_journal_wait()</function> return one of
- <literal>SD_JOURNAL_NOP</literal>,
- <literal>SD_JOURNAL_APPEND</literal> or
- <literal>SD_JOURNAL_INVALIDATE</literal> on success or
+ <constant>SD_JOURNAL_NOP</constant>,
+ <constant>SD_JOURNAL_APPEND</constant> or
+ <constant>SD_JOURNAL_INVALIDATE</constant> on success or
a negative errno-style error code. If
- <literal>SD_JOURNAL_NOP</literal> is returned the
- journal didn't change since the last invocation. If
- <literal>SD_JOURNAL_APPEND</literal> is returned new
+ <constant>SD_JOURNAL_NOP</constant> is returned, the
+ journal did not change since the last invocation. If
+ <constant>SD_JOURNAL_APPEND</constant> is returned, new
entries have been appended to the end of the
- journal. If <literal>SD_JOURNAL_INVALIDATE</literal>
+ journal. If <constant>SD_JOURNAL_INVALIDATE</constant>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <literal>SD_JOURNAL_APPEND</literal> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <constant>SD_JOURNAL_APPEND</constant>, it is
sufficient to simply continue reading at the previous
end of the journal.</para>
</refsect1>
@@ -249,8 +255,7 @@ else {
<function>sd_journal_wait()</function> interfaces are
available as shared library, which can be compiled and
linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_get_monotonic_usec.3 b/man/sd_journal_get_monotonic_usec.3
new file mode 100644
index 0000000000..1017797f8f
--- /dev/null
+++ b/man/sd_journal_get_monotonic_usec.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_realtime_usec.3
diff --git a/man/sd_journal_get_monotonic_usec.html b/man/sd_journal_get_monotonic_usec.html
index f7edb636d8..30e3b02475 100644
--- a/man/sd_journal_get_monotonic_usec.html
+++ b/man/sd_journal_get_monotonic_usec.html
@@ -19,45 +19,45 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_realtime_usec, sd_journal_get_monotonic_usec — Read timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var>, </td></tr><tr><td> </td><td>sd_id128_t* <var class="pdparam">boot_id</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259777682192"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_realtime_usec, sd_journal_get_monotonic_usec — Read timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var>, </td></tr><tr><td> </td><td>sd_id128_t* <var class="pdparam">boot_id</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274701113904"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
gets the realtime (wallclock) timestamp of the
- current journal entry. It takes two arguments: the
- journal context object and a pointer to a 64 Bit
+ current journal entry. It takes two arguments: the
+ journal context object and a pointer to a 64-bit
unsigned integer to store the timestamp in. The
timestamp is in microseconds since the epoch,
- i.e. CLOCK_REALTIME.</p><p><code class="function">sd_journal_get_monotonic_usec()</code>
- gets the monotonic timestamp of the current
- journal entry. It takes three arguments: the journal
- context object, a pointer to a 64 Bit unsigned integer
- to store the timestamp in as well as a 128 Bit ID
- buffer to store the boot ID of the monotonic timestamp
- in. The timestamp is in microseconds since boot-up of
- the specific boot, i.e. CLOCK_MONOTONIC. Since the
- monotonic clock begins new with every reboot it only
+ i.e. <code class="constant">CLOCK_REALTIME</code>.</p><p><code class="function">sd_journal_get_monotonic_usec()</code>
+ gets the monotonic timestamp of the current journal
+ entry. It takes three arguments: the journal context
+ object, a pointer to a 64-bit unsigned integer to
+ store the timestamp in, as well as a 128-bit ID buffer
+ to store the boot ID of the monotonic timestamp.
+ The timestamp is in microseconds since boot-up of
+ the specific boot,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since the
+ monotonic clock begins new with every reboot, it only
defines a well-defined point in time when used
- together with an identifier identifying the boot, see
+ together with an identifier identifying the boot. See
<a href="sd_id128_get_boot.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_boot</span>(3)</span></a>
for more information. If the boot ID parameter is
- passed NULL the function will fail if the monotonic
- timestamp of the current entry is not of the current
- system boot.</p><p>Note that these functions will not work before
+ passed <code class="constant">NULL</code>, the function will
+ fail if the monotonic timestamp of the current entry
+ is not of the current system boot.</p><p>Note that these functions will not work before
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
(or related call) has been called at least
- once, in order to position the read pointer at a valid entry.</p></div><div class="refsect1"><a name="idm259781579696"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
+ once, in order to position the read pointer at a valid entry.</p></div><div class="refsect1"><a name="idm274705055216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
and
<code class="function">sd_journal_get_monotonic_usec()</code>
returns 0 on success or a negative errno-style error
- code. If the boot ID parameter was passed NULL and the
+ code. If the boot ID parameter was passed <code class="constant">NULL</code> and the
monotonic timestamp of the current journal entry is
- not of the current system boot, -ESTALE is returned by <code class="function">sd_journal_get_monotonic_usec()</code>.</p></div><div class="refsect1"><a name="idm259781576208"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
+ not of the current system boot, -ESTALE is returned by <code class="function">sd_journal_get_monotonic_usec()</code>.</p></div><div class="refsect1"><a name="idm274705051280"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
<code class="function">sd_journal_get_realtime_usec()</code>
and
<code class="function">sd_journal_get_monotonic_usec()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781571808"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274705047120"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_realtime_usec.3 b/man/sd_journal_get_realtime_usec.3
new file mode 100644
index 0000000000..152237db96
--- /dev/null
+++ b/man/sd_journal_get_realtime_usec.3
@@ -0,0 +1,78 @@
+'\" t
+.TH "SD_JOURNAL_GET_REALTIME_USEC" "3" "" "systemd 208" "sd_journal_get_realtime_usec"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_realtime_usec, sd_journal_get_monotonic_usec \- Read timestamps from the current journal entry
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_realtime_usec('u
+.BI "int sd_journal_get_realtime_usec(sd_journal*\ " "j" ", uint64_t*\ " "usec" ");"
+.HP \w'int\ sd_journal_get_monotonic_usec('u
+.BI "int sd_journal_get_monotonic_usec(sd_journal*\ " "j" ", uint64_t*\ " "usec" ", sd_id128_t*\ " "boot_id" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_realtime_usec()\fR
+gets the realtime (wallclock) timestamp of the current journal entry\&. It takes two arguments: the journal context object and a pointer to a 64\-bit unsigned integer to store the timestamp in\&. The timestamp is in microseconds since the epoch, i\&.e\&.
+\fBCLOCK_REALTIME\fR\&.
+.PP
+\fBsd_journal_get_monotonic_usec()\fR
+gets the monotonic timestamp of the current journal entry\&. It takes three arguments: the journal context object, a pointer to a 64\-bit unsigned integer to store the timestamp in, as well as a 128\-bit ID buffer to store the boot ID of the monotonic timestamp\&. The timestamp is in microseconds since boot\-up of the specific boot, i\&.e\&.
+\fBCLOCK_MONOTONIC\fR\&. Since the monotonic clock begins new with every reboot, it only defines a well\-defined point in time when used together with an identifier identifying the boot\&. See
+\fBsd_id128_get_boot\fR(3)
+for more information\&. If the boot ID parameter is passed
+\fBNULL\fR, the function will fail if the monotonic timestamp of the current entry is not of the current system boot\&.
+.PP
+Note that these functions will not work before
+\fBsd_journal_next\fR(3)
+(or related call) has been called at least once, in order to position the read pointer at a valid entry\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_realtime_usec()\fR
+and
+\fBsd_journal_get_monotonic_usec()\fR
+returns 0 on success or a negative errno\-style error code\&. If the boot ID parameter was passed
+\fBNULL\fR
+and the monotonic timestamp of the current journal entry is not of the current system boot, \-ESTALE is returned by
+\fBsd_journal_get_monotonic_usec()\fR\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_realtime_usec()\fR
+and
+\fBsd_journal_get_monotonic_usec()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsd_id128_get_boot\fR(3),
+\fBclock_gettime\fR(2),
+\fBsd_journal_get_cutoff_realtime_usec\fR(3)
diff --git a/man/sd_journal_get_realtime_usec.html b/man/sd_journal_get_realtime_usec.html
index f7edb636d8..30e3b02475 100644
--- a/man/sd_journal_get_realtime_usec.html
+++ b/man/sd_journal_get_realtime_usec.html
@@ -19,45 +19,45 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_realtime_usec, sd_journal_get_monotonic_usec — Read timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var>, </td></tr><tr><td> </td><td>sd_id128_t* <var class="pdparam">boot_id</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259777682192"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_realtime_usec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_realtime_usec, sd_journal_get_monotonic_usec — Read timestamps from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">usec</var>, </td></tr><tr><td> </td><td>sd_id128_t* <var class="pdparam">boot_id</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274701113904"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
gets the realtime (wallclock) timestamp of the
- current journal entry. It takes two arguments: the
- journal context object and a pointer to a 64 Bit
+ current journal entry. It takes two arguments: the
+ journal context object and a pointer to a 64-bit
unsigned integer to store the timestamp in. The
timestamp is in microseconds since the epoch,
- i.e. CLOCK_REALTIME.</p><p><code class="function">sd_journal_get_monotonic_usec()</code>
- gets the monotonic timestamp of the current
- journal entry. It takes three arguments: the journal
- context object, a pointer to a 64 Bit unsigned integer
- to store the timestamp in as well as a 128 Bit ID
- buffer to store the boot ID of the monotonic timestamp
- in. The timestamp is in microseconds since boot-up of
- the specific boot, i.e. CLOCK_MONOTONIC. Since the
- monotonic clock begins new with every reboot it only
+ i.e. <code class="constant">CLOCK_REALTIME</code>.</p><p><code class="function">sd_journal_get_monotonic_usec()</code>
+ gets the monotonic timestamp of the current journal
+ entry. It takes three arguments: the journal context
+ object, a pointer to a 64-bit unsigned integer to
+ store the timestamp in, as well as a 128-bit ID buffer
+ to store the boot ID of the monotonic timestamp.
+ The timestamp is in microseconds since boot-up of
+ the specific boot,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since the
+ monotonic clock begins new with every reboot, it only
defines a well-defined point in time when used
- together with an identifier identifying the boot, see
+ together with an identifier identifying the boot. See
<a href="sd_id128_get_boot.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_boot</span>(3)</span></a>
for more information. If the boot ID parameter is
- passed NULL the function will fail if the monotonic
- timestamp of the current entry is not of the current
- system boot.</p><p>Note that these functions will not work before
+ passed <code class="constant">NULL</code>, the function will
+ fail if the monotonic timestamp of the current entry
+ is not of the current system boot.</p><p>Note that these functions will not work before
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
(or related call) has been called at least
- once, in order to position the read pointer at a valid entry.</p></div><div class="refsect1"><a name="idm259781579696"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
+ once, in order to position the read pointer at a valid entry.</p></div><div class="refsect1"><a name="idm274705055216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_realtime_usec()</code>
and
<code class="function">sd_journal_get_monotonic_usec()</code>
returns 0 on success or a negative errno-style error
- code. If the boot ID parameter was passed NULL and the
+ code. If the boot ID parameter was passed <code class="constant">NULL</code> and the
monotonic timestamp of the current journal entry is
- not of the current system boot, -ESTALE is returned by <code class="function">sd_journal_get_monotonic_usec()</code>.</p></div><div class="refsect1"><a name="idm259781576208"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
+ not of the current system boot, -ESTALE is returned by <code class="function">sd_journal_get_monotonic_usec()</code>.</p></div><div class="refsect1"><a name="idm274705051280"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The
<code class="function">sd_journal_get_realtime_usec()</code>
and
<code class="function">sd_journal_get_monotonic_usec()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781571808"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274705047120"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml
index 515932c6d8..8870c29e30 100644
--- a/man/sd_journal_get_realtime_usec.xml
+++ b/man/sd_journal_get_realtime_usec.xml
@@ -73,28 +73,29 @@
<para><function>sd_journal_get_realtime_usec()</function>
gets the realtime (wallclock) timestamp of the
- current journal entry. It takes two arguments: the
- journal context object and a pointer to a 64 Bit
+ current journal entry. It takes two arguments: the
+ journal context object and a pointer to a 64-bit
unsigned integer to store the timestamp in. The
timestamp is in microseconds since the epoch,
- i.e. CLOCK_REALTIME.</para>
+ i.e. <constant>CLOCK_REALTIME</constant>.</para>
<para><function>sd_journal_get_monotonic_usec()</function>
- gets the monotonic timestamp of the current
- journal entry. It takes three arguments: the journal
- context object, a pointer to a 64 Bit unsigned integer
- to store the timestamp in as well as a 128 Bit ID
- buffer to store the boot ID of the monotonic timestamp
- in. The timestamp is in microseconds since boot-up of
- the specific boot, i.e. CLOCK_MONOTONIC. Since the
- monotonic clock begins new with every reboot it only
+ gets the monotonic timestamp of the current journal
+ entry. It takes three arguments: the journal context
+ object, a pointer to a 64-bit unsigned integer to
+ store the timestamp in, as well as a 128-bit ID buffer
+ to store the boot ID of the monotonic timestamp.
+ The timestamp is in microseconds since boot-up of
+ the specific boot,
+ i.e. <constant>CLOCK_MONOTONIC</constant>. Since the
+ monotonic clock begins new with every reboot, it only
defines a well-defined point in time when used
- together with an identifier identifying the boot, see
+ together with an identifier identifying the boot. See
<citerefentry><refentrytitle>sd_id128_get_boot</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for more information. If the boot ID parameter is
- passed NULL the function will fail if the monotonic
- timestamp of the current entry is not of the current
- system boot.</para>
+ passed <constant>NULL</constant>, the function will
+ fail if the monotonic timestamp of the current entry
+ is not of the current system boot.</para>
<para>Note that these functions will not work before
<citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>
@@ -109,7 +110,7 @@
and
<function>sd_journal_get_monotonic_usec()</function>
returns 0 on success or a negative errno-style error
- code. If the boot ID parameter was passed NULL and the
+ code. If the boot ID parameter was passed <constant>NULL</constant> and the
monotonic timestamp of the current journal entry is
not of the current system boot, -ESTALE is returned by <function>sd_journal_get_monotonic_usec()</function>.</para>
</refsect1>
@@ -123,8 +124,7 @@
<function>sd_journal_get_monotonic_usec()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_get_timeout.3 b/man/sd_journal_get_timeout.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/sd_journal_get_timeout.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/sd_journal_get_timeout.html b/man/sd_journal_get_timeout.html
index 91ba994e49..deb02e768c 100644
--- a/man/sd_journal_get_timeout.html
+++ b/man/sd_journal_get_timeout.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_usage.3 b/man/sd_journal_get_usage.3
new file mode 100644
index 0000000000..d429a732b4
--- /dev/null
+++ b/man/sd_journal_get_usage.3
@@ -0,0 +1,54 @@
+'\" t
+.TH "SD_JOURNAL_GET_USAGE" "3" "" "systemd 208" "sd_journal_get_usage"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_get_usage \- Journal disk usage
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_get_usage('u
+.BI "int sd_journal_get_usage(sd_journal*\ " "j" ", uint64_t*\ " "bytes" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_get_usage()\fR
+determines the total disk space currently used by journal files (in bytes)\&. If
+\fBSD_JOURNAL_LOCAL_ONLY\fR
+was passed when opening the journal, this value will only reflect the size of journal files of the local host, otherwise of all hosts\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_get_usage()\fR
+returns 0 on success or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_get_usage()\fR
+interface is available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
diff --git a/man/sd_journal_get_usage.html b/man/sd_journal_get_usage.html
index 842486b7af..061e0a8d43 100644
--- a/man/sd_journal_get_usage.html
+++ b/man/sd_journal_get_usage.html
@@ -19,20 +19,19 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_usage"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_usage — Journal disk usage</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_usage</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">bytes</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259783134656"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_usage()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_usage"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_usage — Journal disk usage</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_usage</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">bytes</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274673159440"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_usage()</code>
determines the total disk space currently used by
journal files (in bytes). If
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> was passed
- when opening the journal this value will only reflect
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> was passed
+ when opening the journal, this value will only reflect
the size of journal files of the local host, otherwise
- of all hosts.</p></div><div class="refsect1"><a name="idm259783131888"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_usage()</code>
+ of all hosts.</p></div><div class="refsect1"><a name="idm274673156944"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_usage()</code>
returns 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259783130032"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_usage()</code>
+ code.</p></div><div class="refsect1"><a name="idm274673155088"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_usage()</code>
interface is available as shared library, which can be
compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259783126400"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274673151696"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml
index a2b868f218..180d8b2ffd 100644
--- a/man/sd_journal_get_usage.xml
+++ b/man/sd_journal_get_usage.xml
@@ -66,8 +66,8 @@
<para><function>sd_journal_get_usage()</function>
determines the total disk space currently used by
journal files (in bytes). If
- <literal>SD_JOURNAL_LOCAL_ONLY</literal> was passed
- when opening the journal this value will only reflect
+ <constant>SD_JOURNAL_LOCAL_ONLY</constant> was passed
+ when opening the journal, this value will only reflect
the size of journal files of the local host, otherwise
of all hosts.</para>
</refsect1>
@@ -86,8 +86,7 @@
<para>The <function>sd_journal_get_usage()</function>
interface is available as shared library, which can be
compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_next.3 b/man/sd_journal_next.3
new file mode 100644
index 0000000000..f5e916f957
--- /dev/null
+++ b/man/sd_journal_next.3
@@ -0,0 +1,142 @@
+'\" t
+.TH "SD_JOURNAL_NEXT" "3" "" "systemd 208" "sd_journal_next"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS \- Advance or set back the read pointer in the journal
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_next('u
+.BI "int sd_journal_next(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_previous('u
+.BI "int sd_journal_previous(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_next_skip('u
+.BI "int sd_journal_next_skip(sd_journal*\ " "j" ", uint64_t\ " "skip" ");"
+.HP \w'int\ sd_journal_previous_skip('u
+.BI "int sd_journal_previous_skip(sd_journal*\ " "j" ", uint64_t\ " "skip" ");"
+.HP \w'SD_JOURNAL_FOREACH('u
+.BI "SD_JOURNAL_FOREACH(sd_journal*\ " "j" ");"
+.HP \w'SD_JOURNAL_FOREACH_BACKWARDS('u
+.BI "SD_JOURNAL_FOREACH_BACKWARDS(sd_journal*\ " "j" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_next()\fR
+advances the read pointer into the journal by one entry\&. The only argument taken is a journal context object as allocated via
+\fBsd_journal_open\fR(3)\&. After successful invocation the entry may be read with functions such as
+\fBsd_journal_get_data\fR(3)\&.
+.PP
+Similar,
+\fBsd_journal_previous()\fR
+sets the read pointer back one entry\&.
+.PP
+\fBsd_journal_next_skip()\fR
+and
+\fBsd_journal_previous_skip()\fR
+advance/set back the read pointer by multiple entries at once, as specified in the
+\fIskip\fR
+parameter\&.
+.PP
+The journal is strictly ordered by reception time, and hence advancing to the next entry guarantees that the entry then pointing to is later in time than then previous one, or has the same timestamp\&.
+.PP
+Note that
+\fBsd_journal_get_data\fR(3)
+and related calls will fail unless
+\fBsd_journal_next()\fR
+has been invoked at least once in order to position the read pointer on a journal entry\&.
+.PP
+Note that the
+\fBSD_JOURNAL_FOREACH()\fR
+macro may be used as a wrapper around
+\fBsd_journal_seek_head\fR(3)
+and
+\fBsd_journal_next()\fR
+in order to make iterating through the journal easier\&. See below for an example\&. Similar,
+\fBSD_JOURNAL_FOREACH_BACKWARDS()\fR
+may be used for iterating the journal in reverse order\&.
+.SH "RETURN VALUE"
+.PP
+The four calls return the number of entries advanced/set back on success or a negative errno\-style error code\&. When the end or beginning of the journal is reached, a number smaller than requested is returned\&. More specifically, if
+\fBsd_journal_next()\fR
+or
+\fBsd_journal_previous()\fR
+reach the end/beginning of the journal they will return 0, instead of 1 when they are successful\&. This should be considered an EOF marker\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_next()\fR,
+\fBsd_journal_previous()\fR,
+\fBsd_journal_next_skip()\fR
+and
+\fBsd_journal_previous_skip()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "EXAMPLES"
+.PP
+Iterating through the journal:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#include <stdio\&.h>
+#include <string\&.h>
+#include <systemd/sd\-journal\&.h>
+
+int main(int argc, char *argv[]) {
+ int r;
+ sd_journal *j;
+ r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+ if (r < 0) {
+ fprintf(stderr, "Failed to open journal: %s\en", strerror(\-r));
+ return 1;
+ }
+ SD_JOURNAL_FOREACH(j) {
+ const char *d;
+ size_t l;
+
+ r = sd_journal_get_data(j, "MESSAGE", &d, &l);
+ if (r < 0) {
+ fprintf(stderr, "Failed to read message field: %s\en", strerror(\-r));
+ continue;
+ }
+
+ printf("%\&.*s\en", (int) l, d);
+ }
+ sd_journal_close(j);
+ return 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_get_cursor\fR(3)
diff --git a/man/sd_journal_next.html b/man/sd_journal_next.html
index 7a5cd7c414..4b66ec502d 100644
--- a/man/sd_journal_next.html
+++ b/man/sd_journal_next.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772947248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274688721504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
the read pointer into the journal by one entry. The
only argument taken is a journal context object as
allocated via
@@ -48,7 +48,7 @@
for an example. Similar,
<code class="function">SD_JOURNAL_FOREACH_BACKWARDS()</code>
may be used for iterating the journal in reverse
- order.</p></div><div class="refsect1"><a name="idm259772933856"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
+ order.</p></div><div class="refsect1"><a name="idm274688708112"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
advanced/set back on success or a negative errno-style
error code. When the end or beginning of the journal
is reached, a number smaller than requested is
@@ -57,14 +57,13 @@
<code class="function">sd_journal_previous()</code> reach the
end/beginning of the journal they will return 0,
instead of 1 when they are successful. This should be
- considered an EOF marker.</p></div><div class="refsect1"><a name="idm259772923184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
+ considered an EOF marker.</p></div><div class="refsect1"><a name="idm274688698112"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
<code class="function">sd_journal_next_skip()</code> and
<code class="function">sd_journal_previous_skip()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772917408"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274688692528"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -90,7 +89,7 @@ int main(int argc, char *argv[]) {
}
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259772914160"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274688689024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
index 9b1cb1fc46..6e437d1822 100644
--- a/man/sd_journal_next.xml
+++ b/man/sd_journal_next.xml
@@ -158,8 +158,7 @@
<function>sd_journal_previous_skip()</function> interfaces are
available as shared library, which can be compiled and
linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_next_skip.3 b/man/sd_journal_next_skip.3
new file mode 100644
index 0000000000..93a93a1c06
--- /dev/null
+++ b/man/sd_journal_next_skip.3
@@ -0,0 +1 @@
+.so man3/sd_journal_next.3
diff --git a/man/sd_journal_next_skip.html b/man/sd_journal_next_skip.html
index 7a5cd7c414..4b66ec502d 100644
--- a/man/sd_journal_next_skip.html
+++ b/man/sd_journal_next_skip.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772947248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274688721504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
the read pointer into the journal by one entry. The
only argument taken is a journal context object as
allocated via
@@ -48,7 +48,7 @@
for an example. Similar,
<code class="function">SD_JOURNAL_FOREACH_BACKWARDS()</code>
may be used for iterating the journal in reverse
- order.</p></div><div class="refsect1"><a name="idm259772933856"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
+ order.</p></div><div class="refsect1"><a name="idm274688708112"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
advanced/set back on success or a negative errno-style
error code. When the end or beginning of the journal
is reached, a number smaller than requested is
@@ -57,14 +57,13 @@
<code class="function">sd_journal_previous()</code> reach the
end/beginning of the journal they will return 0,
instead of 1 when they are successful. This should be
- considered an EOF marker.</p></div><div class="refsect1"><a name="idm259772923184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
+ considered an EOF marker.</p></div><div class="refsect1"><a name="idm274688698112"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
<code class="function">sd_journal_next_skip()</code> and
<code class="function">sd_journal_previous_skip()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772917408"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274688692528"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -90,7 +89,7 @@ int main(int argc, char *argv[]) {
}
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259772914160"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274688689024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_open.3 b/man/sd_journal_open.3
new file mode 100644
index 0000000000..9ab57032fa
--- /dev/null
+++ b/man/sd_journal_open.3
@@ -0,0 +1,148 @@
+'\" t
+.TH "SD_JOURNAL_OPEN" "3" "" "systemd 208" "sd_journal_open"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER \- Open the system journal for reading
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_open('u
+.BI "int sd_journal_open(sd_journal**\ " "ret" ", int\ " "flags" ");"
+.HP \w'int\ sd_journal_open_directory('u
+.BI "int sd_journal_open_directory(sd_journal**\ " "ret" ", const\ char*\ " "path" ", int\ " "flags" ");"
+.HP \w'int\ sd_journal_open_files('u
+.BI "int sd_journal_open_files(sd_journal**\ " "ret" ", const\ char**\ " "paths" ", int\ " "flags" ");"
+.HP \w'void\ sd_journal_close('u
+.BI "void sd_journal_close(sd_journal*\ " "j" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_open()\fR
+opens the log journal for reading\&. It will find all journal files automatically and interleave them automatically when reading\&. As first argument it takes a pointer to a
+\fIsd_journal\fR
+pointer, which on success will contain a journal context object\&. The second argument is a flags field, which may consist of the following flags ORed together:
+\fBSD_JOURNAL_LOCAL_ONLY\fR
+makes sure only journal files generated on the local machine will be opened\&.
+\fBSD_JOURNAL_RUNTIME_ONLY\fR
+makes sure only volatile journal files will be opened, excluding those which are stored on persistent storage\&.
+\fBSD_JOURNAL_SYSTEM\fR
+will cause journal files of system services and the kernel (in opposition to user session processes) to be opened\&.
+\fBSD_JOURNAL_CURRENT_USER\fR
+will cause journal files of the current user to be opened\&. If neither
+\fBSD_JOURNAL_SYSTEM\fR
+nor
+\fBSD_JOURNAL_CURRENT_USER\fR
+are specified, all journal file types will be opened\&.
+.PP
+\fBsd_journal_open_directory()\fR
+is similar to
+\fBsd_journal_open()\fR
+but takes an absolute directory path as argument\&. All journal files in this directory will be opened and interleaved automatically\&. This call also takes a flags argument, but it must be passed as 0 as no flags are currently understood for this call\&.
+.PP
+\fBsd_journal_open_files()\fR
+is similar to
+\fBsd_journal_open()\fR
+but takes a
+\fBNULL\fR\-terminated list of file paths to open\&. All files will be opened and interleaved automatically\&. This call also takes a flags argument, but it must be passed as 0 as no flags are currently understood for this call\&. Please note that in the case of a live journal, this function is only useful for debugging, because individual journal files can be rotated at any moment, and the opening of specific files is inherently racy\&.
+.PP
+\fIsd_journal\fR
+objects cannot be used in the child after a fork\&. Functions which take a journal object as an argument (\fBsd_journal_next()\fR
+and others) will return
+\fB\-ECHILD\fR
+after a fork\&.
+.PP
+\fBsd_journal_close()\fR
+will close the journal context allocated with
+\fBsd_journal_open()\fR
+or
+\fBsd_journal_open_directory()\fR
+and free its resources\&.
+.PP
+When opening the journal only journal files accessible to the calling user will be opened\&. If journal files are not accessible to the caller, this will be silently ignored\&.
+.PP
+See
+\fBsd_journal_next\fR(3)
+for an example of how to iterate through the journal after opening it with
+\fBsd_journal_open()\fR\&.
+.PP
+A journal context object returned by
+\fBsd_journal_open()\fR
+references a specific journal entry as
+\fIcurrent\fR
+entry, similar to a file seek index in a classic file system file, but without absolute positions\&. It may be altered with
+\fBsd_journal_next\fR(3)
+and
+\fBsd_journal_seek_head\fR(3)
+and related calls\&. The current entry position may be exported in
+\fIcursor\fR
+strings, as accessible via
+\fBsd_journal_get_cursor\fR(3)\&. Cursor strings may be used to globally identify a specific journal entry in a stable way and then later to seek to it (or if the specific entry is not available locally, to its closest entry in time)
+\fBsd_journal_seek_cursor\fR(3)\&.
+.PP
+Notification of journal changes is available via
+\fBsd_journal_get_fd()\fR
+and related calls\&.
+.SH "RETURN VALUE"
+.PP
+The
+\fBsd_journal_open()\fR,
+\fBsd_journal_open_directory()\fR, and
+\fBsd_journal_open_files()\fR
+calls return 0 on success or a negative errno\-style error code\&.
+\fBsd_journal_close()\fR
+returns nothing\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_open()\fR,
+\fBsd_journal_open_directory()\fR
+and
+\fBsd_journal_close()\fR
+interfaces are available as a shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "HISTORY"
+.PP
+\fBsd_journal_open()\fR,
+\fBsd_journal_close()\fR,
+\fBSD_JOURNAL_LOCAL_ONLY\fR,
+\fBSD_JOURNAL_RUNTIME_ONLY\fR,
+\fBSD_JOURNAL_SYSTEM_ONLY\fR
+were added in systemd\-38\&.
+.PP
+\fBsd_journal_open_directory()\fR
+was added in systemd\-187\&.
+.PP
+\fBSD_JOURNAL_SYSTEM\fR,
+\fBSD_JOURNAL_CURRENT_USER\fR, and
+\fBsd_journal_open_files()\fR
+were added in systemd\-205\&.
+\fBSD_JOURNAL_SYSTEM_ONLY\fR
+was deprecated\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_data\fR(3)
diff --git a/man/sd_journal_open.html b/man/sd_journal_open.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/sd_journal_open.html
+++ b/man/sd_journal_open.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/sd_journal_open.xml b/man/sd_journal_open.xml
index 76b857b991..bb3703d015 100644
--- a/man/sd_journal_open.xml
+++ b/man/sd_journal_open.xml
@@ -45,11 +45,13 @@
<refnamediv>
<refname>sd_journal_open</refname>
<refname>sd_journal_open_directory</refname>
+ <refname>sd_journal_open_files</refname>
<refname>sd_journal_close</refname>
<refname>sd_journal</refname>
<refname>SD_JOURNAL_LOCAL_ONLY</refname>
<refname>SD_JOURNAL_RUNTIME_ONLY</refname>
- <refname>SD_JOURNAL_SYSTEM_ONLY</refname>
+ <refname>SD_JOURNAL_SYSTEM</refname>
+ <refname>SD_JOURNAL_CURRENT_USER</refname>
<refpurpose>Open the system journal for reading</refpurpose>
</refnamediv>
@@ -71,6 +73,13 @@
</funcprototype>
<funcprototype>
+ <funcdef>int <function>sd_journal_open_files</function></funcdef>
+ <paramdef>sd_journal** <parameter>ret</parameter></paramdef>
+ <paramdef>const char** <parameter>paths</parameter></paramdef>
+ <paramdef>int <parameter>flags</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
<funcdef>void <function>sd_journal_close</function></funcdef>
<paramdef>sd_journal* <parameter>j</parameter></paramdef>
</funcprototype>
@@ -84,19 +93,23 @@
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <literal>sd_journal</literal> pointer, which on
- success will contain journal context object afterwards. The
+ a <varname>sd_journal</varname> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <literal>SD_JOURNAL_LOCAL_ONLY</literal> makes sure
+ <constant>SD_JOURNAL_LOCAL_ONLY</constant> makes sure
only journal files generated on the local machine will
- be opened. <literal>SD_JOURNAL_RUNTIME_ONLY</literal>
+ be opened. <constant>SD_JOURNAL_RUNTIME_ONLY</constant>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <literal>SD_JOURNAL_SYSTEM_ONLY</literal>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</para>
+ storage. <constant>SD_JOURNAL_SYSTEM</constant>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <constant>SD_JOURNAL_CURRENT_USER</constant>
+ will cause journal files of the current user to be
+ opened. If neither <constant>SD_JOURNAL_SYSTEM</constant>
+ nor <constant>SD_JOURNAL_CURRENT_USER</constant> are
+ specified, all journal file types will be opened.</para>
<para><function>sd_journal_open_directory()</function>
is similar to <function>sd_journal_open()</function>
@@ -106,6 +119,25 @@
flags argument, but it must be passed as 0 as no flags
are currently understood for this call.</para>
+ <para><function>sd_journal_open_files()</function>
+ is similar to <function>sd_journal_open()</function>
+ but takes a <constant>NULL</constant>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</para>
+
+ <para><varname>sd_journal</varname> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<function>sd_journal_next()</function> and others)
+ will return <constant>-ECHILD</constant> after a fork.
+ </para>
+
<para><function>sd_journal_close()</function> will
close the journal context allocated with
<function>sd_journal_open()</function> or
@@ -114,12 +146,12 @@
<para>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</para>
<para>See
<citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<function>sd_journal_open()</function>.</para>
@@ -150,8 +182,9 @@
<refsect1>
<title>Return Value</title>
- <para>The <function>sd_journal_open()</function> and
- <function>sd_journal_open_directory()</function> calls
+ <para>The <function>sd_journal_open()</function>,
+ <function>sd_journal_open_directory()</function>, and
+ <function>sd_journal_open_files()</function> calls
return 0 on success or a negative errno-style error
code. <function>sd_journal_close()</function> returns
nothing.</para>
@@ -163,14 +196,34 @@
<para>The <function>sd_journal_open()</function>,
<function>sd_journal_open_directory()</function> and
<function>sd_journal_close()</function> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
<refsect1>
+ <title>History</title>
+
+ <para><function>sd_journal_open()</function>,
+ <function>sd_journal_close()</function>,
+ <constant>SD_JOURNAL_LOCAL_ONLY</constant>,
+ <constant>SD_JOURNAL_RUNTIME_ONLY</constant>,
+ <constant>SD_JOURNAL_SYSTEM_ONLY</constant> were added
+ in systemd-38.</para>
+
+ <para><function>sd_journal_open_directory()</function>
+ was added in systemd-187.</para>
+
+ <para><constant>SD_JOURNAL_SYSTEM</constant>,
+ <constant>SD_JOURNAL_CURRENT_USER</constant>,
+ and <function>sd_journal_open_files()</function>
+ were added in systemd-205.
+ <constant>SD_JOURNAL_SYSTEM_ONLY</constant>
+ was deprecated.</para>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
diff --git a/man/sd_journal_open_directory.3 b/man/sd_journal_open_directory.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/sd_journal_open_directory.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/sd_journal_open_directory.html b/man/sd_journal_open_directory.html
index 4bbfbcba3c..47476e1d8b 100644
--- a/man/sd_journal_open_directory.html
+++ b/man/sd_journal_open_directory.html
@@ -19,38 +19,57 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM_ONLY — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259776818528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
the log journal for reading. It will find all journal
files automatically and interleave them automatically
when reading. As first argument it takes a pointer to
- a <code class="literal">sd_journal</code> pointer, which on
- success will contain journal context object afterwards. The
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
second argument is a flags field, which may consist of
the following flags ORed together:
- <code class="literal">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
only journal files generated on the local machine will
- be opened. <code class="literal">SD_JOURNAL_RUNTIME_ONLY</code>
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
makes sure only volatile journal files will be opened,
excluding those which are stored on persistent
- storage. <code class="literal">SD_JOURNAL_SYSTEM_ONLY</code>
- will ensure that only journal files of system services
- and the kernel (in opposition to user session processes) will
- be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
is similar to <code class="function">sd_journal_open()</code>
but takes an absolute directory path as argument. All
journal files in this directory will be opened and
interleaved automatically. This call also takes a
flags argument, but it must be passed as 0 as no flags
- are currently understood for this call.</p><p><code class="function">sd_journal_close()</code> will
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
close the journal context allocated with
<code class="function">sd_journal_open()</code> or
<code class="function">sd_journal_open_directory()</code> and
free its resources.</p><p>When opening the journal only journal files
accessible to the calling user will be opened. If
- journal files are not accessible to the caller this
+ journal files are not accessible to the caller, this
will be silently ignored.</p><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- for an example how to iterate through the journal
+ for an example of how to iterate through the journal
after opening it with
<code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
<code class="function">sd_journal_open()</code> references a
@@ -71,18 +90,29 @@
locally, to its closest entry in time)
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
<code class="function">sd_journal_get_fd()</code> and related
- calls.</p></div><div class="refsect1"><a name="idm259780692640"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code> and
- <code class="function">sd_journal_open_directory()</code> calls
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
return 0 on success or a negative errno-style error
code. <code class="function">sd_journal_close()</code> returns
- nothing.</p></div><div class="refsect1"><a name="idm259780689152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
<code class="function">sd_journal_open_directory()</code> and
<code class="function">sd_journal_close()</code> interfaces are
- available as shared library, which can be compiled and
+ available as a shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259780684064"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
diff --git a/man/sd_journal_open_files.3 b/man/sd_journal_open_files.3
new file mode 100644
index 0000000000..e2de5851af
--- /dev/null
+++ b/man/sd_journal_open_files.3
@@ -0,0 +1 @@
+.so man3/sd_journal_open.3
diff --git a/man/sd_journal_open_files.html b/man/sd_journal_open_files.html
new file mode 100644
index 0000000000..47476e1d8b
--- /dev/null
+++ b/man/sd_journal_open_files.html
@@ -0,0 +1,120 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>sd_journal_open</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_open"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_open, sd_journal_open_directory, sd_journal_open_files, sd_journal_close, sd_journal, SD_JOURNAL_LOCAL_ONLY, SD_JOURNAL_RUNTIME_ONLY, SD_JOURNAL_SYSTEM, SD_JOURNAL_CURRENT_USER — Open the system journal for reading</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_directory</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">path</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_open_files</b>(</code></td><td>sd_journal** <var class="pdparam">ret</var>, </td></tr><tr><td> </td><td>const char** <var class="pdparam">paths</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">flags</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_close</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677924448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_open()</code> opens
+ the log journal for reading. It will find all journal
+ files automatically and interleave them automatically
+ when reading. As first argument it takes a pointer to
+ a <code class="varname">sd_journal</code> pointer, which on
+ success will contain a journal context object. The
+ second argument is a flags field, which may consist of
+ the following flags ORed together:
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code> makes sure
+ only journal files generated on the local machine will
+ be opened. <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>
+ makes sure only volatile journal files will be opened,
+ excluding those which are stored on persistent
+ storage. <code class="constant">SD_JOURNAL_SYSTEM</code>
+ will cause journal files of system services and the
+ kernel (in opposition to user session processes) to
+ be opened. <code class="constant">SD_JOURNAL_CURRENT_USER</code>
+ will cause journal files of the current user to be
+ opened. If neither <code class="constant">SD_JOURNAL_SYSTEM</code>
+ nor <code class="constant">SD_JOURNAL_CURRENT_USER</code> are
+ specified, all journal file types will be opened.</p><p><code class="function">sd_journal_open_directory()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes an absolute directory path as argument. All
+ journal files in this directory will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call.</p><p><code class="function">sd_journal_open_files()</code>
+ is similar to <code class="function">sd_journal_open()</code>
+ but takes a <code class="constant">NULL</code>-terminated list
+ of file paths to open. All files will be opened and
+ interleaved automatically. This call also takes a
+ flags argument, but it must be passed as 0 as no flags
+ are currently understood for this call. Please note
+ that in the case of a live journal, this function is only
+ useful for debugging, because individual journal files
+ can be rotated at any moment, and the opening of
+ specific files is inherently racy.</p><p><code class="varname">sd_journal</code> objects cannot be
+ used in the child after a fork. Functions which take a
+ journal object as an argument
+ (<code class="function">sd_journal_next()</code> and others)
+ will return <code class="constant">-ECHILD</code> after a fork.
+ </p><p><code class="function">sd_journal_close()</code> will
+ close the journal context allocated with
+ <code class="function">sd_journal_open()</code> or
+ <code class="function">sd_journal_open_directory()</code> and
+ free its resources.</p><p>When opening the journal only journal files
+ accessible to the calling user will be opened. If
+ journal files are not accessible to the caller, this
+ will be silently ignored.</p><p>See
+ <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
+ for an example of how to iterate through the journal
+ after opening it with
+ <code class="function">sd_journal_open()</code>.</p><p>A journal context object returned by
+ <code class="function">sd_journal_open()</code> references a
+ specific journal entry as <span class="emphasis"><em>current</em></span> entry,
+ similar to a file seek index in a classic file system
+ file, but without absolute positions. It may be
+ altered with
+ <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
+ and
+ <a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a>
+ and related calls. The current entry position may be
+ exported in <span class="emphasis"><em>cursor</em></span> strings, as accessible
+ via
+ <a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. Cursor
+ strings may be used to globally identify a specific
+ journal entry in a stable way and then later to seek
+ to it (or if the specific entry is not available
+ locally, to its closest entry in time)
+ <a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>.</p><p>Notification of journal changes is available via
+ <code class="function">sd_journal_get_fd()</code> and related
+ calls.</p></div><div class="refsect1"><a name="idm274677893168"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code>, and
+ <code class="function">sd_journal_open_files()</code> calls
+ return 0 on success or a negative errno-style error
+ code. <code class="function">sd_journal_close()</code> returns
+ nothing.</p></div><div class="refsect1"><a name="idm274677888960"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_open_directory()</code> and
+ <code class="function">sd_journal_close()</code> interfaces are
+ available as a shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274677884112"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p><code class="function">sd_journal_open()</code>,
+ <code class="function">sd_journal_close()</code>,
+ <code class="constant">SD_JOURNAL_LOCAL_ONLY</code>,
+ <code class="constant">SD_JOURNAL_RUNTIME_ONLY</code>,
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code> were added
+ in systemd-38.</p><p><code class="function">sd_journal_open_directory()</code>
+ was added in systemd-187.</p><p><code class="constant">SD_JOURNAL_SYSTEM</code>,
+ <code class="constant">SD_JOURNAL_CURRENT_USER</code>,
+ and <code class="function">sd_journal_open_files()</code>
+ were added in systemd-205.
+ <code class="constant">SD_JOURNAL_SYSTEM_ONLY</code>
+ was deprecated.</p></div><div class="refsect1"><a name="idm274672909856"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
+ <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>,
+ <a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>
+ </p></div></div></body></html>
diff --git a/man/sd_journal_perror.3 b/man/sd_journal_perror.3
new file mode 100644
index 0000000000..102bfea111
--- /dev/null
+++ b/man/sd_journal_perror.3
@@ -0,0 +1 @@
+.so man3/sd_journal_print.3
diff --git a/man/sd_journal_perror.html b/man/sd_journal_perror.html
index 5c3a673261..349702bd56 100644
--- a/man/sd_journal_perror.html
+++ b/man/sd_journal_perror.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259774278688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685988832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
used to submit simple, plain text log entries to the
system journal. The first argument is a priority
value. This is followed by a format string and its
@@ -28,14 +28,14 @@
or
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. The
priority value is one of
- <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. It is recommended to use this call to
@@ -44,15 +44,15 @@
are enforced.</p><p><code class="function">sd_journal_printv()</code> is
similar to <code class="function">sd_journal_print()</code> but
takes a variable argument list encapsulated in an
- object of type <code class="literal">va_list</code> (see
+ object of type <code class="varname">va_list</code> (see
<a href="stdarg.html"><span class="citerefentry"><span class="refentrytitle">stdarg</span>(3)</span></a>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</p><p><code class="function">sd_journal_send()</code> may be
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
- the format <code class="literal">VARIABLE=value</code>. The
+ terminated by <code class="constant">NULL</code>. The strings passed should be of
+ the format "<code class="literal">VARIABLE=value</code>". The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
with an underscore. (All assignments that do not
@@ -60,14 +60,14 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for details, but additional application defined fields
may be used. A variable may be assigned more than one
value per entry.</p><p><code class="function">sd_journal_sendv()</code> is
similar to <code class="function">sd_journal_send()</code> but
- takes an array of <code class="literal">struct iovec</code> (as
+ takes an array of <code class="varname">struct iovec</code> (as
defined in <code class="filename">uio.h</code>, see
<a href="readv.html"><span class="citerefentry"><span class="refentrytitle">readv</span>(3)</span></a>
for details) instead of the format string. Each
@@ -84,12 +84,12 @@
readable representation of the current error code
stored in
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <code class="constant">NULL</code> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <code class="literal">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
+ priority used is <code class="constant">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
is a wrapper around
<code class="function">sd_journal_sendv()</code> to make it
easier to use when only text strings shall be
@@ -101,7 +101,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
NULL);</pre><p>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<code class="filename">sd-journal.h</code>.</p><p><a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
and <code class="function">sd_journal_print()</code> may
@@ -112,24 +112,23 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<code class="function">sd_journal_print()</code> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
<code class="function">sd_journal_send()</code>. Using
<code class="function">syslog()</code> has the benefit of being
- more portable.</p></div><div class="refsect1"><a name="idm259774235216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
+ more portable.</p></div><div class="refsect1"><a name="idm274685947600"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
errno-style error code. The
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- variable itself is not altered.</p></div><div class="refsect1"><a name="idm259769322816"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
+ variable itself is not altered.</p></div><div class="refsect1"><a name="idm274685945488"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
<code class="function">sd_journal_printv()</code>,
<code class="function">sd_journal_send()</code> and
<code class="function">sd_journal_sendv()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259769317616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680973328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/sd_journal_previous.3 b/man/sd_journal_previous.3
new file mode 100644
index 0000000000..93a93a1c06
--- /dev/null
+++ b/man/sd_journal_previous.3
@@ -0,0 +1 @@
+.so man3/sd_journal_next.3
diff --git a/man/sd_journal_previous.html b/man/sd_journal_previous.html
index 7a5cd7c414..4b66ec502d 100644
--- a/man/sd_journal_previous.html
+++ b/man/sd_journal_previous.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772947248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274688721504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
the read pointer into the journal by one entry. The
only argument taken is a journal context object as
allocated via
@@ -48,7 +48,7 @@
for an example. Similar,
<code class="function">SD_JOURNAL_FOREACH_BACKWARDS()</code>
may be used for iterating the journal in reverse
- order.</p></div><div class="refsect1"><a name="idm259772933856"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
+ order.</p></div><div class="refsect1"><a name="idm274688708112"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
advanced/set back on success or a negative errno-style
error code. When the end or beginning of the journal
is reached, a number smaller than requested is
@@ -57,14 +57,13 @@
<code class="function">sd_journal_previous()</code> reach the
end/beginning of the journal they will return 0,
instead of 1 when they are successful. This should be
- considered an EOF marker.</p></div><div class="refsect1"><a name="idm259772923184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
+ considered an EOF marker.</p></div><div class="refsect1"><a name="idm274688698112"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
<code class="function">sd_journal_next_skip()</code> and
<code class="function">sd_journal_previous_skip()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772917408"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274688692528"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -90,7 +89,7 @@ int main(int argc, char *argv[]) {
}
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259772914160"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274688689024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_previous_skip.3 b/man/sd_journal_previous_skip.3
new file mode 100644
index 0000000000..93a93a1c06
--- /dev/null
+++ b/man/sd_journal_previous_skip.3
@@ -0,0 +1 @@
+.so man3/sd_journal_next.3
diff --git a/man/sd_journal_previous_skip.html b/man/sd_journal_previous_skip.html
index 7a5cd7c414..4b66ec502d 100644
--- a/man/sd_journal_previous_skip.html
+++ b/man/sd_journal_previous_skip.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772947248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_next"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_next, sd_journal_previous, sd_journal_next_skip, sd_journal_previous_skip, SD_JOURNAL_FOREACH, SD_JOURNAL_FOREACH_BACKWARDS — Advance or set back the read pointer in the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_next_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_previous_skip</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">skip</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_BACKWARDS</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274688721504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_next()</code> advances
the read pointer into the journal by one entry. The
only argument taken is a journal context object as
allocated via
@@ -48,7 +48,7 @@
for an example. Similar,
<code class="function">SD_JOURNAL_FOREACH_BACKWARDS()</code>
may be used for iterating the journal in reverse
- order.</p></div><div class="refsect1"><a name="idm259772933856"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
+ order.</p></div><div class="refsect1"><a name="idm274688708112"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return the number of entries
advanced/set back on success or a negative errno-style
error code. When the end or beginning of the journal
is reached, a number smaller than requested is
@@ -57,14 +57,13 @@
<code class="function">sd_journal_previous()</code> reach the
end/beginning of the journal they will return 0,
instead of 1 when they are successful. This should be
- considered an EOF marker.</p></div><div class="refsect1"><a name="idm259772923184"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
+ considered an EOF marker.</p></div><div class="refsect1"><a name="idm274688698112"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_next()</code>, <code class="function">sd_journal_previous()</code>,
<code class="function">sd_journal_next_skip()</code> and
<code class="function">sd_journal_previous_skip()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772917408"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274688692528"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -90,7 +89,7 @@ int main(int argc, char *argv[]) {
}
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259772914160"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274688689024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_print.3 b/man/sd_journal_print.3
new file mode 100644
index 0000000000..d509659895
--- /dev/null
+++ b/man/sd_journal_print.3
@@ -0,0 +1,154 @@
+'\" t
+.TH "SD_JOURNAL_PRINT" "3" "" "systemd 208" "sd_journal_print"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION \- Submit log entries to the journal
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_print('u
+.BI "int sd_journal_print(int\ " "priority" ", const\ char*\ " "format" ", \&.\&.\&.);"
+.HP \w'int\ sd_journal_printv('u
+.BI "int sd_journal_printv(int\ " "priority" ", const\ char*\ " "format" ", va_list\ " "ap" ");"
+.HP \w'int\ sd_journal_send('u
+.BI "int sd_journal_send(const\ char*\ " "format" ", \&.\&.\&.);"
+.HP \w'int\ sd_journal_sendv('u
+.BI "int sd_journal_sendv(const\ struct\ iovec\ *" "iov" ", int\ " "n" ");"
+.HP \w'int\ sd_journal_perror('u
+.BI "int sd_journal_perror(const\ char*\ " "message" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_print()\fR
+may be used to submit simple, plain text log entries to the system journal\&. The first argument is a priority value\&. This is followed by a format string and its parameters, similar to
+\fBprintf\fR(3)
+or
+\fBsyslog\fR(3)\&. The priority value is one of
+\fBLOG_EMERG\fR,
+\fBLOG_ALERT\fR,
+\fBLOG_CRIT\fR,
+\fBLOG_ERR\fR,
+\fBLOG_WARNING\fR,
+\fBLOG_NOTICE\fR,
+\fBLOG_INFO\fR,
+\fBLOG_DEBUG\fR, as defined in
+syslog\&.h, see
+\fBsyslog\fR(3)
+for details\&. It is recommended to use this call to submit log messages in the application locale or system locale and in UTF\-8 format, but no such restrictions are enforced\&.
+.PP
+\fBsd_journal_printv()\fR
+is similar to
+\fBsd_journal_print()\fR
+but takes a variable argument list encapsulated in an object of type
+\fIva_list\fR
+(see
+\fBstdarg\fR(3)
+for more information) instead of the format string\&. It is otherwise equivalent in behavior\&.
+.PP
+\fBsd_journal_send()\fR
+may be used to submit structured log entries to the system journal\&. It takes a series of format strings, each immediately followed by their associated parameters, terminated by
+\fBNULL\fR\&. The strings passed should be of the format
+"VARIABLE=value"\&. The variable name must be in uppercase and consist only of characters, numbers and underscores, and may not begin with an underscore\&. (All assignments that do not follow this syntax will be ignored\&.) The value can be of any size and format\&. It is highly recommended to submit text strings formatted in the UTF\-8 character encoding only, and submit binary fields only when formatting in UTF\-8 strings is not sensible\&. A number of well known fields are defined, see
+\fBsystemd.journal-fields\fR(7)
+for details, but additional application defined fields may be used\&. A variable may be assigned more than one value per entry\&.
+.PP
+\fBsd_journal_sendv()\fR
+is similar to
+\fBsd_journal_send()\fR
+but takes an array of
+\fIstruct iovec\fR
+(as defined in
+uio\&.h, see
+\fBreadv\fR(3)
+for details) instead of the format string\&. Each structure should reference one field of the entry to submit\&. The second argument specifies the number of structures in the array\&.
+\fBsd_journal_sendv()\fR
+is particularly useful to submit binary objects to the journal where that is necessary\&.
+.PP
+\fBsd_journal_perror()\fR
+is a similar to
+\fBperror\fR(3)
+and writes a message to the journal that consists of the passed string, suffixed with ": " and a human readable representation of the current error code stored in
+\fBerrno\fR(3)\&. If the message string is passed as
+\fBNULL\fR
+or empty string, only the error string representation will be written, prefixed with nothing\&. An additional journal field ERRNO= is included in the entry containing the numeric error code formatted as decimal string\&. The log priority used is
+\fBLOG_ERR\fR
+(3)\&.
+.PP
+Note that
+\fBsd_journal_send()\fR
+is a wrapper around
+\fBsd_journal_sendv()\fR
+to make it easier to use when only text strings shall be submitted\&. Also, the following two calls are mostly equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+sd_journal_print(LOG_INFO, "Hello World, this is PID %lu!", (unsigned long) getpid());
+
+sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(),
+ "PRIORITY=%i", LOG_INFO,
+ NULL);
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Note that these calls implicitly add fields for the source file, function name and code line where invoked\&. This is implemented with macros\&. If this is not desired, it can be turned off by defining SD_JOURNAL_SUPPRESS_LOCATION before including
+sd\-journal\&.h\&.
+.PP
+\fBsyslog\fR(3)
+and
+\fBsd_journal_print()\fR
+may largely be used interchangeably functionality\-wise\&. However, note that log messages logged via the former take a different path to the journal server than the later, and hence global chronological ordering between the two streams cannot be guaranteed\&. Using
+\fBsd_journal_print()\fR
+has the benefit of logging source code line, filenames, and functions as meta data along all entries, and guaranteeing chronological ordering with structured log entries that are generated via
+\fBsd_journal_send()\fR\&. Using
+\fBsyslog()\fR
+has the benefit of being more portable\&.
+.SH "RETURN VALUE"
+.PP
+The four calls return 0 on success or a negative errno\-style error code\&. The
+\fBerrno\fR(3)
+variable itself is not altered\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_print()\fR,
+\fBsd_journal_printv()\fR,
+\fBsd_journal_send()\fR
+and
+\fBsd_journal_sendv()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_stream_fd\fR(3),
+\fBsyslog\fR(3),
+\fBperror\fR(3),
+\fBerrno\fR(3),
+\fBsystemd.journal-fields\fR(7)
diff --git a/man/sd_journal_print.html b/man/sd_journal_print.html
index 5c3a673261..349702bd56 100644
--- a/man/sd_journal_print.html
+++ b/man/sd_journal_print.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259774278688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685988832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
used to submit simple, plain text log entries to the
system journal. The first argument is a priority
value. This is followed by a format string and its
@@ -28,14 +28,14 @@
or
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. The
priority value is one of
- <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. It is recommended to use this call to
@@ -44,15 +44,15 @@
are enforced.</p><p><code class="function">sd_journal_printv()</code> is
similar to <code class="function">sd_journal_print()</code> but
takes a variable argument list encapsulated in an
- object of type <code class="literal">va_list</code> (see
+ object of type <code class="varname">va_list</code> (see
<a href="stdarg.html"><span class="citerefentry"><span class="refentrytitle">stdarg</span>(3)</span></a>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</p><p><code class="function">sd_journal_send()</code> may be
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
- the format <code class="literal">VARIABLE=value</code>. The
+ terminated by <code class="constant">NULL</code>. The strings passed should be of
+ the format "<code class="literal">VARIABLE=value</code>". The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
with an underscore. (All assignments that do not
@@ -60,14 +60,14 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for details, but additional application defined fields
may be used. A variable may be assigned more than one
value per entry.</p><p><code class="function">sd_journal_sendv()</code> is
similar to <code class="function">sd_journal_send()</code> but
- takes an array of <code class="literal">struct iovec</code> (as
+ takes an array of <code class="varname">struct iovec</code> (as
defined in <code class="filename">uio.h</code>, see
<a href="readv.html"><span class="citerefentry"><span class="refentrytitle">readv</span>(3)</span></a>
for details) instead of the format string. Each
@@ -84,12 +84,12 @@
readable representation of the current error code
stored in
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <code class="constant">NULL</code> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <code class="literal">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
+ priority used is <code class="constant">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
is a wrapper around
<code class="function">sd_journal_sendv()</code> to make it
easier to use when only text strings shall be
@@ -101,7 +101,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
NULL);</pre><p>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<code class="filename">sd-journal.h</code>.</p><p><a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
and <code class="function">sd_journal_print()</code> may
@@ -112,24 +112,23 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<code class="function">sd_journal_print()</code> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
<code class="function">sd_journal_send()</code>. Using
<code class="function">syslog()</code> has the benefit of being
- more portable.</p></div><div class="refsect1"><a name="idm259774235216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
+ more portable.</p></div><div class="refsect1"><a name="idm274685947600"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
errno-style error code. The
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- variable itself is not altered.</p></div><div class="refsect1"><a name="idm259769322816"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
+ variable itself is not altered.</p></div><div class="refsect1"><a name="idm274685945488"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
<code class="function">sd_journal_printv()</code>,
<code class="function">sd_journal_send()</code> and
<code class="function">sd_journal_sendv()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259769317616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680973328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
index 7742268f5d..e61a648703 100644
--- a/man/sd_journal_print.xml
+++ b/man/sd_journal_print.xml
@@ -102,14 +102,14 @@
or
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>. The
priority value is one of
- <literal>LOG_EMERG</literal>,
- <literal>LOG_ALERT</literal>,
- <literal>LOG_CRIT</literal>,
- <literal>LOG_ERR</literal>,
- <literal>LOG_WARNING</literal>,
- <literal>LOG_NOTICE</literal>,
- <literal>LOG_INFO</literal>,
- <literal>LOG_DEBUG</literal>, as defined in
+ <constant>LOG_EMERG</constant>,
+ <constant>LOG_ALERT</constant>,
+ <constant>LOG_CRIT</constant>,
+ <constant>LOG_ERR</constant>,
+ <constant>LOG_WARNING</constant>,
+ <constant>LOG_NOTICE</constant>,
+ <constant>LOG_INFO</constant>,
+ <constant>LOG_DEBUG</constant>, as defined in
<filename>syslog.h</filename>, see
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for details. It is recommended to use this call to
@@ -120,7 +120,7 @@
<para><function>sd_journal_printv()</function> is
similar to <function>sd_journal_print()</function> but
takes a variable argument list encapsulated in an
- object of type <literal>va_list</literal> (see
+ object of type <varname>va_list</varname> (see
<citerefentry><refentrytitle>stdarg</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</para>
@@ -129,7 +129,7 @@
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
+ terminated by <constant>NULL</constant>. The strings passed should be of
the format <literal>VARIABLE=value</literal>. The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
@@ -138,7 +138,7 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for details, but additional application defined fields
@@ -147,7 +147,7 @@
<para><function>sd_journal_sendv()</function> is
similar to <function>sd_journal_send()</function> but
- takes an array of <literal>struct iovec</literal> (as
+ takes an array of <varname>struct iovec</varname> (as
defined in <filename>uio.h</filename>, see
<citerefentry><refentrytitle>readv</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for details) instead of the format string. Each
@@ -166,12 +166,12 @@
readable representation of the current error code
stored in
<citerefentry><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <constant>NULL</constant> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <literal>LOG_ERR</literal> (3).</para>
+ priority used is <constant>LOG_ERR</constant> (3).</para>
<para>Note that <function>sd_journal_send()</function>
is a wrapper around
@@ -189,7 +189,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
<para>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<filename>sd-journal.h</filename>.</para>
@@ -202,7 +202,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<function>sd_journal_print()</function> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
@@ -229,8 +229,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
<function>sd_journal_sendv()</function> interfaces
are available as shared library, which can be compiled
and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_printv.3 b/man/sd_journal_printv.3
new file mode 100644
index 0000000000..102bfea111
--- /dev/null
+++ b/man/sd_journal_printv.3
@@ -0,0 +1 @@
+.so man3/sd_journal_print.3
diff --git a/man/sd_journal_printv.html b/man/sd_journal_printv.html
index 5c3a673261..349702bd56 100644
--- a/man/sd_journal_printv.html
+++ b/man/sd_journal_printv.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259774278688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685988832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
used to submit simple, plain text log entries to the
system journal. The first argument is a priority
value. This is followed by a format string and its
@@ -28,14 +28,14 @@
or
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. The
priority value is one of
- <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. It is recommended to use this call to
@@ -44,15 +44,15 @@
are enforced.</p><p><code class="function">sd_journal_printv()</code> is
similar to <code class="function">sd_journal_print()</code> but
takes a variable argument list encapsulated in an
- object of type <code class="literal">va_list</code> (see
+ object of type <code class="varname">va_list</code> (see
<a href="stdarg.html"><span class="citerefentry"><span class="refentrytitle">stdarg</span>(3)</span></a>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</p><p><code class="function">sd_journal_send()</code> may be
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
- the format <code class="literal">VARIABLE=value</code>. The
+ terminated by <code class="constant">NULL</code>. The strings passed should be of
+ the format "<code class="literal">VARIABLE=value</code>". The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
with an underscore. (All assignments that do not
@@ -60,14 +60,14 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for details, but additional application defined fields
may be used. A variable may be assigned more than one
value per entry.</p><p><code class="function">sd_journal_sendv()</code> is
similar to <code class="function">sd_journal_send()</code> but
- takes an array of <code class="literal">struct iovec</code> (as
+ takes an array of <code class="varname">struct iovec</code> (as
defined in <code class="filename">uio.h</code>, see
<a href="readv.html"><span class="citerefentry"><span class="refentrytitle">readv</span>(3)</span></a>
for details) instead of the format string. Each
@@ -84,12 +84,12 @@
readable representation of the current error code
stored in
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <code class="constant">NULL</code> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <code class="literal">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
+ priority used is <code class="constant">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
is a wrapper around
<code class="function">sd_journal_sendv()</code> to make it
easier to use when only text strings shall be
@@ -101,7 +101,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
NULL);</pre><p>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<code class="filename">sd-journal.h</code>.</p><p><a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
and <code class="function">sd_journal_print()</code> may
@@ -112,24 +112,23 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<code class="function">sd_journal_print()</code> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
<code class="function">sd_journal_send()</code>. Using
<code class="function">syslog()</code> has the benefit of being
- more portable.</p></div><div class="refsect1"><a name="idm259774235216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
+ more portable.</p></div><div class="refsect1"><a name="idm274685947600"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
errno-style error code. The
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- variable itself is not altered.</p></div><div class="refsect1"><a name="idm259769322816"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
+ variable itself is not altered.</p></div><div class="refsect1"><a name="idm274685945488"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
<code class="function">sd_journal_printv()</code>,
<code class="function">sd_journal_send()</code> and
<code class="function">sd_journal_sendv()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259769317616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680973328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/sd_journal_process.3 b/man/sd_journal_process.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/sd_journal_process.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/sd_journal_process.html b/man/sd_journal_process.html
index 91ba994e49..deb02e768c 100644
--- a/man/sd_journal_process.html
+++ b/man/sd_journal_process.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_query_unique.3 b/man/sd_journal_query_unique.3
new file mode 100644
index 0000000000..c9868f9607
--- /dev/null
+++ b/man/sd_journal_query_unique.3
@@ -0,0 +1,131 @@
+'\" t
+.TH "SD_JOURNAL_QUERY_UNIQUE" "3" "" "systemd 208" "sd_journal_query_unique"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE \- Read unique data fields from the journal
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_query_unique('u
+.BI "int sd_journal_query_unique(sd_journal*\ " "j" ", const\ char*\ " "field" ");"
+.HP \w'int\ sd_journal_enumerate_unique('u
+.BI "int sd_journal_enumerate_unique(sd_journal*\ " "j" ", const\ void**\ " "data" ", size_t*\ " "length" ");"
+.HP \w'void\ sd_journal_restart_unique('u
+.BI "void sd_journal_restart_unique(sd_journal*\ " "j" ");"
+.HP \w'SD_JOURNAL_FOREACH_UNIQUE('u
+.BI "SD_JOURNAL_FOREACH_UNIQUE(sd_journal*\ " "j" ", const\ void*\ " "data" ", size_t\ " "length" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_query_unique()\fR
+queries the journal for all unique values the specified field can take\&. It takes two arguments: the journal to query and the field name to look for\&. Well\-known field names are listed on
+\fBsystemd.journal-fields\fR(7)\&. Field names must be specified without a trailing \*(Aq=\*(Aq\&. After this function has been executed successfully the field values may be queried using
+\fBsd_journal_enumerate_unique()\fR\&. Invoking this call a second time will change the field name being queried and reset the enumeration index to the first field value that matches\&.
+.PP
+\fBsd_journal_enumerate_unique()\fR
+may be used to iterate through all data fields which match the previously selected field name as set with
+\fBsd_journal_query_unique()\fR\&. On each invocation the next field data matching the field name is returned\&. The order of the returned data fields is not defined\&. It takes three arguments: the journal context object, plus a pair of pointers to pointer/size variables where the data object and its size shall be stored in\&. The returned data is in a read\-only memory map and is only valid until the next invocation of
+\fBsd_journal_enumerate_unique()\fR\&. Note that the data returned will be prefixed with the field name and \*(Aq=\*(Aq\&. Note that this call is subject to the data field size threshold as controlled by
+\fBsd_journal_set_data_threshold()\fR\&.
+.PP
+\fBsd_journal_restart_unique()\fR
+resets the data enumeration index to the beginning of the list\&. The next invocation of
+\fBsd_journal_enumerate_unique()\fR
+will return the first field data matching the field name again\&.
+.PP
+Note that the
+\fBSD_JOURNAL_FOREACH_UNIQUE()\fR
+macro may be used as a handy wrapper around
+\fBsd_journal_restart_unique()\fR
+and
+\fBsd_journal_enumerate_unique()\fR\&.
+.PP
+Note that these functions currently are not influenced by matches set with
+\fBsd_journal_add_match()\fR
+but this might change in a later version of this software\&.
+.SH "RETURN VALUE"
+.PP
+\fBsd_journal_query_unique()\fR
+returns 0 on success or a negative errno\-style error code\&.
+\fBsd_journal_enumerate_unique()\fR
+returns a positive integer if the next field data has been read, 0 when no more fields are known, or a negative errno\-style error code\&.
+\fBsd_journal_restart_unique()\fR
+returns nothing\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_query_unique()\fR,
+\fBsd_journal_enumerate_unique()\fR
+and
+\fBsd_journal_restart_unique()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "EXAMPLES"
+.PP
+Use the
+\fBSD_JOURNAL_FOREACH_UNIQUE\fR
+macro to iterate through all values a field of the journal can take\&. The following example lists all unit names referenced in the journal:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#include <stdio\&.h>
+#include <string\&.h>
+#include <systemd/sd\-journal\&.h>
+
+int main(int argc, char *argv[]) {
+ sd_journal *j;
+ const void *d;
+ size_t l;
+ int r;
+
+ r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+ if (r < 0) {
+ fprintf(stderr, "Failed to open journal: %s\en", strerror(\-r));
+ return 1;
+ }
+ r = sd_journal_query_unique(j, "_SYSTEMD_UNIT");
+ if (r < 0) {
+ fprintf(stderr, "Failed to query journal: %s\en", strerror(\-r));
+ return 1;
+ }
+ SD_JOURNAL_FOREACH_UNIQUE(j, d, l)
+ printf("%\&.*s\en", (int) l, (const char*) d);
+ sd_journal_close(j);
+ return 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.journal-fields\fR(7),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsd_journal_add_match\fR(3)
diff --git a/man/sd_journal_query_unique.html b/man/sd_journal_query_unique.html
index 4edd48f1f4..6605f2ba5b 100644
--- a/man/sd_journal_query_unique.html
+++ b/man/sd_journal_query_unique.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782903840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274683751280"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
queries the journal for all unique values the
specified field can take. It takes two arguments: the
journal to query and the field name to look
@@ -60,21 +60,20 @@
influenced by matches set with
<code class="function">sd_journal_add_match()</code> but this
might change in a later version of this
- software.</p></div><div class="refsect1"><a name="idm259782890000"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ software.</p></div><div class="refsect1"><a name="idm274683737440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
returns 0 on success or a negative errno-style error
code. <code class="function">sd_journal_enumerate_unique()</code>
returns a positive integer if the next field data has
been read, 0 when no more fields are known, or a
negative errno-style error
code. <code class="function">sd_journal_restart_unique()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259782878928"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274683726464"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
<code class="function">sd_journal_enumerate_unique()</code> and
<code class="function">sd_journal_restart_unique()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259782873808"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274683721584"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
<code class="function">SD_JOURNAL_FOREACH_UNIQUE</code> macro
to iterate through all values a field of the journal
can take. The following example lists all unit names
@@ -102,7 +101,7 @@ int main(int argc, char *argv[]) {
printf("%.*s\n", (int) l, (const char*) d);
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259782869328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274683716976"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml
index 502a7e08c2..f5d9d2bfb5 100644
--- a/man/sd_journal_query_unique.xml
+++ b/man/sd_journal_query_unique.xml
@@ -158,8 +158,7 @@
<function>sd_journal_restart_unique()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_reliable_fd.3 b/man/sd_journal_reliable_fd.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/sd_journal_reliable_fd.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/sd_journal_reliable_fd.html b/man/sd_journal_reliable_fd.html
index 91ba994e49..deb02e768c 100644
--- a/man/sd_journal_reliable_fd.html
+++ b/man/sd_journal_reliable_fd.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_restart_data.3 b/man/sd_journal_restart_data.3
new file mode 100644
index 0000000000..25bd005a92
--- /dev/null
+++ b/man/sd_journal_restart_data.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_data.3
diff --git a/man/sd_journal_restart_data.html b/man/sd_journal_restart_data.html
index 924d74ecf0..677c8836ed 100644
--- a/man/sd_journal_restart_data.html
+++ b/man/sd_journal_restart_data.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782712960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274684373776"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
the data object associated with a specific field from
the current journal entry. It takes four arguments:
the journal context object, a string with the field
@@ -77,12 +77,12 @@
having to decompress large compressed data objects in
full.</p><p><code class="function">sd_journal_get_data_threshold()</code>
returns the currently configured data field size
- threshold.</p></div><div class="refsect1"><a name="idm259782687296"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
+ threshold.</p></div><div class="refsect1"><a name="idm274684347840"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <code class="function">sd_journal_enumerate_data()</code>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -92,7 +92,7 @@
nothing. <code class="function">sd_journal_set_data_threshold()</code>
and <code class="function">sd_journal_get_threshold()</code>
return 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259782681248"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274684341792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
<code class="function">sd_journal_enumerate_data()</code>,
<code class="function">sd_journal_restart_data()</code>,
<code class="function">sd_journal_set_data_threshold()</code>
@@ -100,9 +100,8 @@
<code class="function">sd_journal_get_data_threshold()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777759888"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274679375856"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
for a complete example how to use
<code class="function">sd_journal_get_data()</code>.</p><p>Use the
@@ -115,7 +114,7 @@ int print_fields(sd_journal *j) {
SD_JOURNAL_FOREACH_DATA(j, data, length)
printf("%.*s\n", (int) length, data);
}
-...</pre></div><div class="refsect1"><a name="idm259777755392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+...</pre></div><div class="refsect1"><a name="idm274679371360"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_restart_unique.3 b/man/sd_journal_restart_unique.3
new file mode 100644
index 0000000000..69f4069cda
--- /dev/null
+++ b/man/sd_journal_restart_unique.3
@@ -0,0 +1 @@
+.so man3/sd_journal_query_unique.3
diff --git a/man/sd_journal_restart_unique.html b/man/sd_journal_restart_unique.html
index 4edd48f1f4..6605f2ba5b 100644
--- a/man/sd_journal_restart_unique.html
+++ b/man/sd_journal_restart_unique.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782903840"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_query_unique"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_query_unique, sd_journal_enumerate_unique, sd_journal_restart_unique, SD_JOURNAL_FOREACH_UNIQUE — Read unique data fields from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_query_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_unique</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_UNIQUE</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274683751280"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
queries the journal for all unique values the
specified field can take. It takes two arguments: the
journal to query and the field name to look
@@ -60,21 +60,20 @@
influenced by matches set with
<code class="function">sd_journal_add_match()</code> but this
might change in a later version of this
- software.</p></div><div class="refsect1"><a name="idm259782890000"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
+ software.</p></div><div class="refsect1"><a name="idm274683737440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_query_unique()</code>
returns 0 on success or a negative errno-style error
code. <code class="function">sd_journal_enumerate_unique()</code>
returns a positive integer if the next field data has
been read, 0 when no more fields are known, or a
negative errno-style error
code. <code class="function">sd_journal_restart_unique()</code>
- returns nothing.</p></div><div class="refsect1"><a name="idm259782878928"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
+ returns nothing.</p></div><div class="refsect1"><a name="idm274683726464"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_query_unique()</code>,
<code class="function">sd_journal_enumerate_unique()</code> and
<code class="function">sd_journal_restart_unique()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259782873808"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274683721584"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Use the
<code class="function">SD_JOURNAL_FOREACH_UNIQUE</code> macro
to iterate through all values a field of the journal
can take. The following example lists all unit names
@@ -102,7 +101,7 @@ int main(int argc, char *argv[]) {
printf("%.*s\n", (int) l, (const char*) d);
sd_journal_close(j);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259782869328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274683716976"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_seek_cursor.3 b/man/sd_journal_seek_cursor.3
new file mode 100644
index 0000000000..6b5bbc87a2
--- /dev/null
+++ b/man/sd_journal_seek_cursor.3
@@ -0,0 +1 @@
+.so man3/sd_journal_seek_head.3
diff --git a/man/sd_journal_seek_cursor.html b/man/sd_journal_seek_cursor.html
index 8680fa19fc..b0f68140e6 100644
--- a/man/sd_journal_seek_cursor.html
+++ b/man/sd_journal_seek_cursor.html
@@ -19,54 +19,55 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
- journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772866880"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
+ journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274696451184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
seeks to the beginning of the journal, i.e. the oldest
available entry.</p><p>Similar,
<code class="function">sd_journal_seek_tail()</code> may be
used to seek to the end of the journal, i.e. the most
recent available entry.</p><p><code class="function">sd_journal_seek_monotonic_usec()</code>
seeks to the entry with the specified monotonic
- timestamp, i.e. CLOCK_MONOTONIC. Since monotonic time
- restarts on every reboot a boot ID needs to be
- specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
+ timestamp,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since
+ monotonic time restarts on every reboot a boot ID
+ needs to be specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
seeks to the entry with the specified realtime
- (wallclock) timestamp, i.e. CLOCK_REALTIME. Note that
+ (wallclock) timestamp,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Note that
the realtime clock is not necessarily monotonic. If a
- realtime timestamp is ambiguous it is not defined
+ realtime timestamp is ambiguous, it is not defined
which position is sought to.</p><p><code class="function">sd_journal_seek_cursor()</code>
seeks to the entry located at the specified cursor
- string. For details on cursors see
+ string. For details on cursors, see
<a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. If
no entry matching the specified cursor is found the
call will seek to the next closest entry (in terms of
time) instead. To verify whether the newly selected
- entry actually matches the cursor use
+ entry actually matches the cursor, use
<a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a>.</p><p>Note that these calls do not actually make any
entry the new current entry, this needs to be done in
a separate step with a subsequent
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- invocation (or a similar call). Only then entry data
+ invocation (or a similar call). Only then, entry data
may be retrieved via
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. If
no entry exists that matches exactly the specified
- seek address the next closest is sought to. If
+ seek address, the next closest is sought to. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- is used the closest following entry will be sought to,
+ is used, the closest following entry will be sought to,
if
<a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a>
is used the closest preceding entry is sought
- to.</p></div><div class="refsect1"><a name="idm259772854032"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259772852848"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
+ to.</p></div><div class="refsect1"><a name="idm274696437440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274696428912"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
<code class="function">sd_journal_seek_tail()</code>,
<code class="function">sd_journal_seek_monotonic_usec()</code>,
<code class="function">sd_journal_seek_realtime_usec()</code>,
and <code class="function">sd_journal_seek_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772838944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274696422592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_seek_head.3 b/man/sd_journal_seek_head.3
new file mode 100644
index 0000000000..66f7b97958
--- /dev/null
+++ b/man/sd_journal_seek_head.3
@@ -0,0 +1,93 @@
+'\" t
+.TH "SD_JOURNAL_SEEK_HEAD" "3" "" "systemd 208" "sd_journal_seek_head"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor \- Seek to a position in the journal
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_seek_head('u
+.BI "int sd_journal_seek_head(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_seek_tail('u
+.BI "int sd_journal_seek_tail(sd_journal*\ " "j" ");"
+.HP \w'int\ sd_journal_seek_monotonic_usec('u
+.BI "int sd_journal_seek_monotonic_usec(sd_journal*\ " "j" ", sd_id128_t\ " "boot_id" ", uint64_t\ " "usec" ");"
+.HP \w'int\ sd_journal_seek_realtime_usec('u
+.BI "int sd_journal_seek_realtime_usec(sd_journal*\ " "j" ", uint64_t\ " "usec" ");"
+.HP \w'int\ sd_journal_seek_cursor('u
+.BI "int sd_journal_seek_cursor(sd_journal*\ " "j" ", const\ char\ *\ " "cursor" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_seek_head()\fR
+seeks to the beginning of the journal, i\&.e\&. the oldest available entry\&.
+.PP
+Similar,
+\fBsd_journal_seek_tail()\fR
+may be used to seek to the end of the journal, i\&.e\&. the most recent available entry\&.
+.PP
+\fBsd_journal_seek_monotonic_usec()\fR
+seeks to the entry with the specified monotonic timestamp, i\&.e\&.
+\fBCLOCK_MONOTONIC\fR\&. Since monotonic time restarts on every reboot a boot ID needs to be specified as well\&.
+.PP
+\fBsd_journal_seek_realtime_usec()\fR
+seeks to the entry with the specified realtime (wallclock) timestamp, i\&.e\&.
+\fBCLOCK_REALTIME\fR\&. Note that the realtime clock is not necessarily monotonic\&. If a realtime timestamp is ambiguous, it is not defined which position is sought to\&.
+.PP
+\fBsd_journal_seek_cursor()\fR
+seeks to the entry located at the specified cursor string\&. For details on cursors, see
+\fBsd_journal_get_cursor\fR(3)\&. If no entry matching the specified cursor is found the call will seek to the next closest entry (in terms of time) instead\&. To verify whether the newly selected entry actually matches the cursor, use
+\fBsd_journal_test_cursor\fR(3)\&.
+.PP
+Note that these calls do not actually make any entry the new current entry, this needs to be done in a separate step with a subsequent
+\fBsd_journal_next\fR(3)
+invocation (or a similar call)\&. Only then, entry data may be retrieved via
+\fBsd_journal_get_data\fR(3)\&. If no entry exists that matches exactly the specified seek address, the next closest is sought to\&. If
+\fBsd_journal_next\fR(3)
+is used, the closest following entry will be sought to, if
+\fBsd_journal_previous\fR(3)
+is used the closest preceding entry is sought to\&.
+.SH "RETURN VALUE"
+.PP
+The functions return 0 on success or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_seek_head()\fR,
+\fBsd_journal_seek_tail()\fR,
+\fBsd_journal_seek_monotonic_usec()\fR,
+\fBsd_journal_seek_realtime_usec()\fR, and
+\fBsd_journal_seek_cursor()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsd_journal_get_cursor\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3)
diff --git a/man/sd_journal_seek_head.html b/man/sd_journal_seek_head.html
index 8680fa19fc..b0f68140e6 100644
--- a/man/sd_journal_seek_head.html
+++ b/man/sd_journal_seek_head.html
@@ -19,54 +19,55 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
- journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772866880"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
+ journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274696451184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
seeks to the beginning of the journal, i.e. the oldest
available entry.</p><p>Similar,
<code class="function">sd_journal_seek_tail()</code> may be
used to seek to the end of the journal, i.e. the most
recent available entry.</p><p><code class="function">sd_journal_seek_monotonic_usec()</code>
seeks to the entry with the specified monotonic
- timestamp, i.e. CLOCK_MONOTONIC. Since monotonic time
- restarts on every reboot a boot ID needs to be
- specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
+ timestamp,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since
+ monotonic time restarts on every reboot a boot ID
+ needs to be specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
seeks to the entry with the specified realtime
- (wallclock) timestamp, i.e. CLOCK_REALTIME. Note that
+ (wallclock) timestamp,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Note that
the realtime clock is not necessarily monotonic. If a
- realtime timestamp is ambiguous it is not defined
+ realtime timestamp is ambiguous, it is not defined
which position is sought to.</p><p><code class="function">sd_journal_seek_cursor()</code>
seeks to the entry located at the specified cursor
- string. For details on cursors see
+ string. For details on cursors, see
<a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. If
no entry matching the specified cursor is found the
call will seek to the next closest entry (in terms of
time) instead. To verify whether the newly selected
- entry actually matches the cursor use
+ entry actually matches the cursor, use
<a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a>.</p><p>Note that these calls do not actually make any
entry the new current entry, this needs to be done in
a separate step with a subsequent
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- invocation (or a similar call). Only then entry data
+ invocation (or a similar call). Only then, entry data
may be retrieved via
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. If
no entry exists that matches exactly the specified
- seek address the next closest is sought to. If
+ seek address, the next closest is sought to. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- is used the closest following entry will be sought to,
+ is used, the closest following entry will be sought to,
if
<a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a>
is used the closest preceding entry is sought
- to.</p></div><div class="refsect1"><a name="idm259772854032"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259772852848"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
+ to.</p></div><div class="refsect1"><a name="idm274696437440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274696428912"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
<code class="function">sd_journal_seek_tail()</code>,
<code class="function">sd_journal_seek_monotonic_usec()</code>,
<code class="function">sd_journal_seek_realtime_usec()</code>,
and <code class="function">sd_journal_seek_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772838944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274696422592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml
index d24b2f30ee..03de30a383 100644
--- a/man/sd_journal_seek_head.xml
+++ b/man/sd_journal_seek_head.xml
@@ -101,38 +101,40 @@
<para><function>sd_journal_seek_monotonic_usec()</function>
seeks to the entry with the specified monotonic
- timestamp, i.e. CLOCK_MONOTONIC. Since monotonic time
- restarts on every reboot a boot ID needs to be
- specified as well.</para>
+ timestamp,
+ i.e. <constant>CLOCK_MONOTONIC</constant>. Since
+ monotonic time restarts on every reboot a boot ID
+ needs to be specified as well.</para>
<para><function>sd_journal_seek_realtime_usec()</function>
seeks to the entry with the specified realtime
- (wallclock) timestamp, i.e. CLOCK_REALTIME. Note that
+ (wallclock) timestamp,
+ i.e. <constant>CLOCK_REALTIME</constant>. Note that
the realtime clock is not necessarily monotonic. If a
- realtime timestamp is ambiguous it is not defined
+ realtime timestamp is ambiguous, it is not defined
which position is sought to.</para>
<para><function>sd_journal_seek_cursor()</function>
seeks to the entry located at the specified cursor
- string. For details on cursors see
+ string. For details on cursors, see
<citerefentry><refentrytitle>sd_journal_get_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>. If
no entry matching the specified cursor is found the
call will seek to the next closest entry (in terms of
time) instead. To verify whether the newly selected
- entry actually matches the cursor use
+ entry actually matches the cursor, use
<citerefentry><refentrytitle>sd_journal_test_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
<para>Note that these calls do not actually make any
entry the new current entry, this needs to be done in
a separate step with a subsequent
<citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- invocation (or a similar call). Only then entry data
+ invocation (or a similar call). Only then, entry data
may be retrieved via
<citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>. If
no entry exists that matches exactly the specified
- seek address the next closest is sought to. If
+ seek address, the next closest is sought to. If
<citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- is used the closest following entry will be sought to,
+ is used, the closest following entry will be sought to,
if
<citerefentry><refentrytitle>sd_journal_previous</refentrytitle><manvolnum>3</manvolnum></citerefentry>
is used the closest preceding entry is sought
@@ -156,8 +158,7 @@
and <function>sd_journal_seek_cursor()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_seek_monotonic_usec.3 b/man/sd_journal_seek_monotonic_usec.3
new file mode 100644
index 0000000000..6b5bbc87a2
--- /dev/null
+++ b/man/sd_journal_seek_monotonic_usec.3
@@ -0,0 +1 @@
+.so man3/sd_journal_seek_head.3
diff --git a/man/sd_journal_seek_monotonic_usec.html b/man/sd_journal_seek_monotonic_usec.html
index 8680fa19fc..b0f68140e6 100644
--- a/man/sd_journal_seek_monotonic_usec.html
+++ b/man/sd_journal_seek_monotonic_usec.html
@@ -19,54 +19,55 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
- journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772866880"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
+ journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274696451184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
seeks to the beginning of the journal, i.e. the oldest
available entry.</p><p>Similar,
<code class="function">sd_journal_seek_tail()</code> may be
used to seek to the end of the journal, i.e. the most
recent available entry.</p><p><code class="function">sd_journal_seek_monotonic_usec()</code>
seeks to the entry with the specified monotonic
- timestamp, i.e. CLOCK_MONOTONIC. Since monotonic time
- restarts on every reboot a boot ID needs to be
- specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
+ timestamp,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since
+ monotonic time restarts on every reboot a boot ID
+ needs to be specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
seeks to the entry with the specified realtime
- (wallclock) timestamp, i.e. CLOCK_REALTIME. Note that
+ (wallclock) timestamp,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Note that
the realtime clock is not necessarily monotonic. If a
- realtime timestamp is ambiguous it is not defined
+ realtime timestamp is ambiguous, it is not defined
which position is sought to.</p><p><code class="function">sd_journal_seek_cursor()</code>
seeks to the entry located at the specified cursor
- string. For details on cursors see
+ string. For details on cursors, see
<a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. If
no entry matching the specified cursor is found the
call will seek to the next closest entry (in terms of
time) instead. To verify whether the newly selected
- entry actually matches the cursor use
+ entry actually matches the cursor, use
<a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a>.</p><p>Note that these calls do not actually make any
entry the new current entry, this needs to be done in
a separate step with a subsequent
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- invocation (or a similar call). Only then entry data
+ invocation (or a similar call). Only then, entry data
may be retrieved via
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. If
no entry exists that matches exactly the specified
- seek address the next closest is sought to. If
+ seek address, the next closest is sought to. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- is used the closest following entry will be sought to,
+ is used, the closest following entry will be sought to,
if
<a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a>
is used the closest preceding entry is sought
- to.</p></div><div class="refsect1"><a name="idm259772854032"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259772852848"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
+ to.</p></div><div class="refsect1"><a name="idm274696437440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274696428912"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
<code class="function">sd_journal_seek_tail()</code>,
<code class="function">sd_journal_seek_monotonic_usec()</code>,
<code class="function">sd_journal_seek_realtime_usec()</code>,
and <code class="function">sd_journal_seek_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772838944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274696422592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_seek_realtime_usec.3 b/man/sd_journal_seek_realtime_usec.3
new file mode 100644
index 0000000000..6b5bbc87a2
--- /dev/null
+++ b/man/sd_journal_seek_realtime_usec.3
@@ -0,0 +1 @@
+.so man3/sd_journal_seek_head.3
diff --git a/man/sd_journal_seek_realtime_usec.html b/man/sd_journal_seek_realtime_usec.html
index 8680fa19fc..b0f68140e6 100644
--- a/man/sd_journal_seek_realtime_usec.html
+++ b/man/sd_journal_seek_realtime_usec.html
@@ -19,54 +19,55 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
- journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772866880"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
+ journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274696451184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
seeks to the beginning of the journal, i.e. the oldest
available entry.</p><p>Similar,
<code class="function">sd_journal_seek_tail()</code> may be
used to seek to the end of the journal, i.e. the most
recent available entry.</p><p><code class="function">sd_journal_seek_monotonic_usec()</code>
seeks to the entry with the specified monotonic
- timestamp, i.e. CLOCK_MONOTONIC. Since monotonic time
- restarts on every reboot a boot ID needs to be
- specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
+ timestamp,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since
+ monotonic time restarts on every reboot a boot ID
+ needs to be specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
seeks to the entry with the specified realtime
- (wallclock) timestamp, i.e. CLOCK_REALTIME. Note that
+ (wallclock) timestamp,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Note that
the realtime clock is not necessarily monotonic. If a
- realtime timestamp is ambiguous it is not defined
+ realtime timestamp is ambiguous, it is not defined
which position is sought to.</p><p><code class="function">sd_journal_seek_cursor()</code>
seeks to the entry located at the specified cursor
- string. For details on cursors see
+ string. For details on cursors, see
<a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. If
no entry matching the specified cursor is found the
call will seek to the next closest entry (in terms of
time) instead. To verify whether the newly selected
- entry actually matches the cursor use
+ entry actually matches the cursor, use
<a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a>.</p><p>Note that these calls do not actually make any
entry the new current entry, this needs to be done in
a separate step with a subsequent
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- invocation (or a similar call). Only then entry data
+ invocation (or a similar call). Only then, entry data
may be retrieved via
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. If
no entry exists that matches exactly the specified
- seek address the next closest is sought to. If
+ seek address, the next closest is sought to. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- is used the closest following entry will be sought to,
+ is used, the closest following entry will be sought to,
if
<a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a>
is used the closest preceding entry is sought
- to.</p></div><div class="refsect1"><a name="idm259772854032"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259772852848"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
+ to.</p></div><div class="refsect1"><a name="idm274696437440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274696428912"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
<code class="function">sd_journal_seek_tail()</code>,
<code class="function">sd_journal_seek_monotonic_usec()</code>,
<code class="function">sd_journal_seek_realtime_usec()</code>,
and <code class="function">sd_journal_seek_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772838944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274696422592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_seek_tail.3 b/man/sd_journal_seek_tail.3
new file mode 100644
index 0000000000..6b5bbc87a2
--- /dev/null
+++ b/man/sd_journal_seek_tail.3
@@ -0,0 +1 @@
+.so man3/sd_journal_seek_head.3
diff --git a/man/sd_journal_seek_tail.html b/man/sd_journal_seek_tail.html
index 8680fa19fc..b0f68140e6 100644
--- a/man/sd_journal_seek_tail.html
+++ b/man/sd_journal_seek_tail.html
@@ -19,54 +19,55 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
- journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259772866880"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_seek_head"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_seek_head, sd_journal_seek_tail, sd_journal_seek_monotonic_usec, sd_journal_seek_realtime_usec, sd_journal_seek_cursor — Seek to a position in the
+ journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_head</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_tail</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_monotonic_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>sd_id128_t <var class="pdparam">boot_id</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_realtime_usec</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_seek_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274696451184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_seek_head()</code>
seeks to the beginning of the journal, i.e. the oldest
available entry.</p><p>Similar,
<code class="function">sd_journal_seek_tail()</code> may be
used to seek to the end of the journal, i.e. the most
recent available entry.</p><p><code class="function">sd_journal_seek_monotonic_usec()</code>
seeks to the entry with the specified monotonic
- timestamp, i.e. CLOCK_MONOTONIC. Since monotonic time
- restarts on every reboot a boot ID needs to be
- specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
+ timestamp,
+ i.e. <code class="constant">CLOCK_MONOTONIC</code>. Since
+ monotonic time restarts on every reboot a boot ID
+ needs to be specified as well.</p><p><code class="function">sd_journal_seek_realtime_usec()</code>
seeks to the entry with the specified realtime
- (wallclock) timestamp, i.e. CLOCK_REALTIME. Note that
+ (wallclock) timestamp,
+ i.e. <code class="constant">CLOCK_REALTIME</code>. Note that
the realtime clock is not necessarily monotonic. If a
- realtime timestamp is ambiguous it is not defined
+ realtime timestamp is ambiguous, it is not defined
which position is sought to.</p><p><code class="function">sd_journal_seek_cursor()</code>
seeks to the entry located at the specified cursor
- string. For details on cursors see
+ string. For details on cursors, see
<a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>. If
no entry matching the specified cursor is found the
call will seek to the next closest entry (in terms of
time) instead. To verify whether the newly selected
- entry actually matches the cursor use
+ entry actually matches the cursor, use
<a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a>.</p><p>Note that these calls do not actually make any
entry the new current entry, this needs to be done in
a separate step with a subsequent
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- invocation (or a similar call). Only then entry data
+ invocation (or a similar call). Only then, entry data
may be retrieved via
<a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>. If
no entry exists that matches exactly the specified
- seek address the next closest is sought to. If
+ seek address, the next closest is sought to. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- is used the closest following entry will be sought to,
+ is used, the closest following entry will be sought to,
if
<a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a>
is used the closest preceding entry is sought
- to.</p></div><div class="refsect1"><a name="idm259772854032"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259772852848"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
+ to.</p></div><div class="refsect1"><a name="idm274696437440"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The functions return 0 on success or a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274696428912"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_seek_head()</code>,
<code class="function">sd_journal_seek_tail()</code>,
<code class="function">sd_journal_seek_monotonic_usec()</code>,
<code class="function">sd_journal_seek_realtime_usec()</code>,
and <code class="function">sd_journal_seek_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772838944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274696422592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_send.3 b/man/sd_journal_send.3
new file mode 100644
index 0000000000..102bfea111
--- /dev/null
+++ b/man/sd_journal_send.3
@@ -0,0 +1 @@
+.so man3/sd_journal_print.3
diff --git a/man/sd_journal_send.html b/man/sd_journal_send.html
index 5c3a673261..349702bd56 100644
--- a/man/sd_journal_send.html
+++ b/man/sd_journal_send.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259774278688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685988832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
used to submit simple, plain text log entries to the
system journal. The first argument is a priority
value. This is followed by a format string and its
@@ -28,14 +28,14 @@
or
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. The
priority value is one of
- <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. It is recommended to use this call to
@@ -44,15 +44,15 @@
are enforced.</p><p><code class="function">sd_journal_printv()</code> is
similar to <code class="function">sd_journal_print()</code> but
takes a variable argument list encapsulated in an
- object of type <code class="literal">va_list</code> (see
+ object of type <code class="varname">va_list</code> (see
<a href="stdarg.html"><span class="citerefentry"><span class="refentrytitle">stdarg</span>(3)</span></a>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</p><p><code class="function">sd_journal_send()</code> may be
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
- the format <code class="literal">VARIABLE=value</code>. The
+ terminated by <code class="constant">NULL</code>. The strings passed should be of
+ the format "<code class="literal">VARIABLE=value</code>". The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
with an underscore. (All assignments that do not
@@ -60,14 +60,14 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for details, but additional application defined fields
may be used. A variable may be assigned more than one
value per entry.</p><p><code class="function">sd_journal_sendv()</code> is
similar to <code class="function">sd_journal_send()</code> but
- takes an array of <code class="literal">struct iovec</code> (as
+ takes an array of <code class="varname">struct iovec</code> (as
defined in <code class="filename">uio.h</code>, see
<a href="readv.html"><span class="citerefentry"><span class="refentrytitle">readv</span>(3)</span></a>
for details) instead of the format string. Each
@@ -84,12 +84,12 @@
readable representation of the current error code
stored in
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <code class="constant">NULL</code> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <code class="literal">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
+ priority used is <code class="constant">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
is a wrapper around
<code class="function">sd_journal_sendv()</code> to make it
easier to use when only text strings shall be
@@ -101,7 +101,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
NULL);</pre><p>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<code class="filename">sd-journal.h</code>.</p><p><a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
and <code class="function">sd_journal_print()</code> may
@@ -112,24 +112,23 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<code class="function">sd_journal_print()</code> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
<code class="function">sd_journal_send()</code>. Using
<code class="function">syslog()</code> has the benefit of being
- more portable.</p></div><div class="refsect1"><a name="idm259774235216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
+ more portable.</p></div><div class="refsect1"><a name="idm274685947600"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
errno-style error code. The
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- variable itself is not altered.</p></div><div class="refsect1"><a name="idm259769322816"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
+ variable itself is not altered.</p></div><div class="refsect1"><a name="idm274685945488"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
<code class="function">sd_journal_printv()</code>,
<code class="function">sd_journal_send()</code> and
<code class="function">sd_journal_sendv()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259769317616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680973328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/sd_journal_sendv.3 b/man/sd_journal_sendv.3
new file mode 100644
index 0000000000..102bfea111
--- /dev/null
+++ b/man/sd_journal_sendv.3
@@ -0,0 +1 @@
+.so man3/sd_journal_print.3
diff --git a/man/sd_journal_sendv.html b/man/sd_journal_sendv.html
index 5c3a673261..349702bd56 100644
--- a/man/sd_journal_sendv.html
+++ b/man/sd_journal_sendv.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259774278688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_print"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_print, sd_journal_printv, sd_journal_send, sd_journal_sendv, sd_journal_perror, SD_JOURNAL_SUPPRESS_LOCATION — Submit log entries to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_print</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_printv</b>(</code></td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>va_list <var class="pdparam">ap</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_send</b>(</code></td><td>const char* <var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_sendv</b>(</code></td><td>const struct iovec *<var class="pdparam">iov</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">n</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_perror</b>(</code></td><td>const char* <var class="pdparam">message</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274685988832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_print()</code> may be
used to submit simple, plain text log entries to the
system journal. The first argument is a priority
value. This is followed by a format string and its
@@ -28,14 +28,14 @@
or
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. The
priority value is one of
- <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. It is recommended to use this call to
@@ -44,15 +44,15 @@
are enforced.</p><p><code class="function">sd_journal_printv()</code> is
similar to <code class="function">sd_journal_print()</code> but
takes a variable argument list encapsulated in an
- object of type <code class="literal">va_list</code> (see
+ object of type <code class="varname">va_list</code> (see
<a href="stdarg.html"><span class="citerefentry"><span class="refentrytitle">stdarg</span>(3)</span></a>
for more information) instead of the format string. It
is otherwise equivalent in behavior.</p><p><code class="function">sd_journal_send()</code> may be
used to submit structured log entries to the system
journal. It takes a series of format strings, each
immediately followed by their associated parameters,
- terminated by NULL. The strings passed should be of
- the format <code class="literal">VARIABLE=value</code>. The
+ terminated by <code class="constant">NULL</code>. The strings passed should be of
+ the format "<code class="literal">VARIABLE=value</code>". The
variable name must be in uppercase and consist only of
characters, numbers and underscores, and may not begin
with an underscore. (All assignments that do not
@@ -60,14 +60,14 @@
of any size and format. It is highly recommended to
submit text strings formatted in the UTF-8 character
encoding only, and submit binary fields only when
- formatting in UTf-8 strings is not sensible. A number
+ formatting in UTF-8 strings is not sensible. A number
of well known fields are defined, see
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for details, but additional application defined fields
may be used. A variable may be assigned more than one
value per entry.</p><p><code class="function">sd_journal_sendv()</code> is
similar to <code class="function">sd_journal_send()</code> but
- takes an array of <code class="literal">struct iovec</code> (as
+ takes an array of <code class="varname">struct iovec</code> (as
defined in <code class="filename">uio.h</code>, see
<a href="readv.html"><span class="citerefentry"><span class="refentrytitle">readv</span>(3)</span></a>
for details) instead of the format string. Each
@@ -84,12 +84,12 @@
readable representation of the current error code
stored in
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>. If
- the message string is passed as NULL or empty string
+ the message string is passed as <code class="constant">NULL</code> or empty string,
only the error string representation will be written,
prefixed with nothing. An additional journal field
ERRNO= is included in the entry containing the numeric
error code formatted as decimal string. The log
- priority used is <code class="literal">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
+ priority used is <code class="constant">LOG_ERR</code> (3).</p><p>Note that <code class="function">sd_journal_send()</code>
is a wrapper around
<code class="function">sd_journal_sendv()</code> to make it
easier to use when only text strings shall be
@@ -101,7 +101,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
NULL);</pre><p>Note that these calls implicitly add fields for
the source file, function name and code line where
invoked. This is implemented with macros. If this is
- not desired it can be turned off by defining
+ not desired, it can be turned off by defining
SD_JOURNAL_SUPPRESS_LOCATION before including
<code class="filename">sd-journal.h</code>.</p><p><a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
and <code class="function">sd_journal_print()</code> may
@@ -112,24 +112,23 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
chronological ordering between the two streams cannot
be guaranteed. Using
<code class="function">sd_journal_print()</code> has the
- benefit of logging source code line, file names, and
+ benefit of logging source code line, filenames, and
functions as meta data along all entries, and
guaranteeing chronological ordering with structured
log entries that are generated via
<code class="function">sd_journal_send()</code>. Using
<code class="function">syslog()</code> has the benefit of being
- more portable.</p></div><div class="refsect1"><a name="idm259774235216"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
+ more portable.</p></div><div class="refsect1"><a name="idm274685947600"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The four calls return 0 on success or a negative
errno-style error code. The
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- variable itself is not altered.</p></div><div class="refsect1"><a name="idm259769322816"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
+ variable itself is not altered.</p></div><div class="refsect1"><a name="idm274685945488"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_print()</code>,
<code class="function">sd_journal_printv()</code>,
<code class="function">sd_journal_send()</code> and
<code class="function">sd_journal_sendv()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259769317616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274680973328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a>,
diff --git a/man/sd_journal_set_data_threshold.3 b/man/sd_journal_set_data_threshold.3
new file mode 100644
index 0000000000..25bd005a92
--- /dev/null
+++ b/man/sd_journal_set_data_threshold.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_data.3
diff --git a/man/sd_journal_set_data_threshold.html b/man/sd_journal_set_data_threshold.html
index 924d74ecf0..677c8836ed 100644
--- a/man/sd_journal_set_data_threshold.html
+++ b/man/sd_journal_set_data_threshold.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259782712960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_data"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_data, sd_journal_enumerate_data, sd_journal_restart_data, SD_JOURNAL_FOREACH_DATA, sd_journal_set_data_threshold, sd_journal_get_data_threshold — Read data fields from the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">field</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_enumerate_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void** <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">void <b class="fsfunc">sd_journal_restart_data</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef"><b class="fsfunc">SD_JOURNAL_FOREACH_DATA</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const void* <var class="pdparam">data</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">length</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_set_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_data_threshold</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>size_t* <var class="pdparam">sz</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274684373776"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_data()</code> gets
the data object associated with a specific field from
the current journal entry. It takes four arguments:
the journal context object, a string with the field
@@ -77,12 +77,12 @@
having to decompress large compressed data objects in
full.</p><p><code class="function">sd_journal_get_data_threshold()</code>
returns the currently configured data field size
- threshold.</p></div><div class="refsect1"><a name="idm259782687296"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
+ threshold.</p></div><div class="refsect1"><a name="idm274684347840"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_data()</code>
returns 0 on success or a negative errno-style error
code. If the current entry does not include the
- specified field -ENOENT is returned. If
+ specified field, -ENOENT is returned. If
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
- has not been called at least once -EADDRNOTAVAIL is
+ has not been called at least once, -EADDRNOTAVAIL is
returned. <code class="function">sd_journal_enumerate_data()</code>
returns a positive integer if the next field has been
read, 0 when no more fields are known, or a negative
@@ -92,7 +92,7 @@
nothing. <code class="function">sd_journal_set_data_threshold()</code>
and <code class="function">sd_journal_get_threshold()</code>
return 0 on success or a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259782681248"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274684341792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_data()</code>,
<code class="function">sd_journal_enumerate_data()</code>,
<code class="function">sd_journal_restart_data()</code>,
<code class="function">sd_journal_set_data_threshold()</code>
@@ -100,9 +100,8 @@
<code class="function">sd_journal_get_data_threshold()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259777759888"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274679375856"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>See
<a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>
for a complete example how to use
<code class="function">sd_journal_get_data()</code>.</p><p>Use the
@@ -115,7 +114,7 @@ int print_fields(sd_journal *j) {
SD_JOURNAL_FOREACH_DATA(j, data, length)
printf("%.*s\n", (int) length, data);
}
-...</pre></div><div class="refsect1"><a name="idm259777755392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+...</pre></div><div class="refsect1"><a name="idm274679371360"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
diff --git a/man/sd_journal_stream_fd.3 b/man/sd_journal_stream_fd.3
new file mode 100644
index 0000000000..098b094127
--- /dev/null
+++ b/man/sd_journal_stream_fd.3
@@ -0,0 +1,115 @@
+'\" t
+.TH "SD_JOURNAL_STREAM_FD" "3" "" "systemd 208" "sd_journal_stream_fd"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_journal_stream_fd \- Create log stream file descriptor to the journal
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-journal\&.h>
+.fi
+.ft
+.HP \w'int\ sd_journal_stream_fd('u
+.BI "int sd_journal_stream_fd(const\ char*\ " "identifier" ", int\ " "priority" ", int\ " "level_prefix" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_journal_stream_fd()\fR
+may be used to create a log stream file descriptor\&. Log messages written to this file descriptor as simple newline\-separated text strings are written to the journal\&. This file descriptor can be used internally by applications or be made STDOUT/STDERR of other processes executed\&.
+.PP
+\fBsd_journal_stream_fd()\fR
+takes a short program identifier string as first argument, which will be written to the journal as _SYSLOG_IDENTIFIER= field for each log entry (see
+\fBsystemd.journal-fields\fR(7)
+for more information)\&. The second argument shall be the default priority level for all messages\&. The priority level is one of
+\fBLOG_EMERG\fR,
+\fBLOG_ALERT\fR,
+\fBLOG_CRIT\fR,
+\fBLOG_ERR\fR,
+\fBLOG_WARNING\fR,
+\fBLOG_NOTICE\fR,
+\fBLOG_INFO\fR,
+\fBLOG_DEBUG\fR, as defined in
+syslog\&.h, see
+\fBsyslog\fR(3)
+for details\&. The third argument is a boolean: if true kernel\-style log priority level prefixes (such as
+\fBSD_WARNING\fR) are interpreted, see
+\fBsd-daemon\fR(3)
+for more information\&.
+.PP
+It is recommended that applications log UTF\-8 messages only with this API, but this is not enforced\&.
+.SH "RETURN VALUE"
+.PP
+The call returns a valid write\-only file descriptor on success or a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_journal_stream_fd()\fR
+interface is available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-journal\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "EXAMPLES"
+.PP
+Creating a log stream suitable for
+\fBfprintf\fR(3):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#include <syslog\&.h>
+#include <stdio\&.h>
+#include <string\&.h>
+#include <unistd\&.h>
+#include <systemd/sd\-journal\&.h>
+#include <systemd/sd\-daemon\&.h>
+
+int main(int argc, char *argv[]) {
+ int fd;
+ FILE *log;
+ fd = sd_journal_stream_fd("test", LOG_INFO, 1);
+ if (fd < 0) {
+ fprintf(stderr, "Failed to create stream fd: %s\en", strerror(\-fd));
+ return 1;
+ }
+ log = fdopen(fd, "w");
+ if (!log) {
+ fprintf(stderr, "Failed to create file object: %m\en");
+ close(fd);
+ return 1;
+ }
+ fprintf(log, "Hello World!\en");
+ fprintf(log, SD_WARNING "This is a warning!\en");
+ fclose(log);
+ return 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-journal\fR(3),
+\fBsd-daemon\fR(3),
+\fBsd_journal_print\fR(3),
+\fBsyslog\fR(3),
+\fBfprintf\fR(3),
+\fBsystemd.journal-fields\fR(7)
diff --git a/man/sd_journal_stream_fd.html b/man/sd_journal_stream_fd.html
index 52953c4ca5..5e07b596f5 100644
--- a/man/sd_journal_stream_fd.html
+++ b/man/sd_journal_stream_fd.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_stream_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_stream_fd — Create log stream file descriptor to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_stream_fd</b>(</code></td><td>const char* <var class="pdparam">identifier</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">level_prefix</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259790662864"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_stream_fd()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_stream_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_stream_fd — Create log stream file descriptor to the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_stream_fd</b>(</code></td><td>const char* <var class="pdparam">identifier</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">priority</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">level_prefix</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274690063392"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_stream_fd()</code> may
be used to create a log stream file descriptor. Log
messages written to this file descriptor as simple
- newline separated text strings are written to the
+ newline-separated text strings are written to the
journal. This file descriptor can be used internally
by applications or be made STDOUT/STDERR of other
processes executed.</p><p><code class="function">sd_journal_stream_fd()</code>
@@ -32,29 +32,28 @@
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for more information). The second argument shall be
the default priority level for all messages. The
- priority level is one of <code class="literal">LOG_EMERG</code>,
- <code class="literal">LOG_ALERT</code>,
- <code class="literal">LOG_CRIT</code>,
- <code class="literal">LOG_ERR</code>,
- <code class="literal">LOG_WARNING</code>,
- <code class="literal">LOG_NOTICE</code>,
- <code class="literal">LOG_INFO</code>,
- <code class="literal">LOG_DEBUG</code>, as defined in
+ priority level is one of <code class="constant">LOG_EMERG</code>,
+ <code class="constant">LOG_ALERT</code>,
+ <code class="constant">LOG_CRIT</code>,
+ <code class="constant">LOG_ERR</code>,
+ <code class="constant">LOG_WARNING</code>,
+ <code class="constant">LOG_NOTICE</code>,
+ <code class="constant">LOG_INFO</code>,
+ <code class="constant">LOG_DEBUG</code>, as defined in
<code class="filename">syslog.h</code>, see
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>
for details. The third argument is a boolean: if true
kernel-style log priority level prefixes (such as
- <code class="literal">SD_WARNING</code>) are interpreted, see
+ <code class="constant">SD_WARNING</code>) are interpreted, see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>
for more information.</p><p>It is recommended that applications log UTF-8
messages only with this API, but this is not
- enforced.</p></div><div class="refsect1"><a name="idm259794550064"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The call returns a valid write-only file descriptor on success or a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794548752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_stream_fd()</code>
+ enforced.</p></div><div class="refsect1"><a name="idm274693953200"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>The call returns a valid write-only file descriptor on success or a
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274693951888"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_stream_fd()</code>
interface is available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794545120"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Creating a log stream suitable for
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274693948544"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Creating a log stream suitable for
<a href="fprintf.html"><span class="citerefentry"><span class="refentrytitle">fprintf</span>(3)</span></a>:</p><pre class="programlisting">#include &lt;syslog.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
@@ -80,7 +79,7 @@ int main(int argc, char *argv[]) {
fprintf(log, SD_WARNING "This is a warning!\n");
fclose(log);
return 0;
-}</pre></div><div class="refsect1"><a name="idm259794540400"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+}</pre></div><div class="refsect1"><a name="idm274693943824"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml
index 4407296b40..4bd0abc3b4 100644
--- a/man/sd_journal_stream_fd.xml
+++ b/man/sd_journal_stream_fd.xml
@@ -67,7 +67,7 @@
<para><function>sd_journal_stream_fd()</function> may
be used to create a log stream file descriptor. Log
messages written to this file descriptor as simple
- newline separated text strings are written to the
+ newline-separated text strings are written to the
journal. This file descriptor can be used internally
by applications or be made STDOUT/STDERR of other
processes executed.</para>
@@ -79,19 +79,19 @@
<citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for more information). The second argument shall be
the default priority level for all messages. The
- priority level is one of <literal>LOG_EMERG</literal>,
- <literal>LOG_ALERT</literal>,
- <literal>LOG_CRIT</literal>,
- <literal>LOG_ERR</literal>,
- <literal>LOG_WARNING</literal>,
- <literal>LOG_NOTICE</literal>,
- <literal>LOG_INFO</literal>,
- <literal>LOG_DEBUG</literal>, as defined in
+ priority level is one of <constant>LOG_EMERG</constant>,
+ <constant>LOG_ALERT</constant>,
+ <constant>LOG_CRIT</constant>,
+ <constant>LOG_ERR</constant>,
+ <constant>LOG_WARNING</constant>,
+ <constant>LOG_NOTICE</constant>,
+ <constant>LOG_INFO</constant>,
+ <constant>LOG_DEBUG</constant>, as defined in
<filename>syslog.h</filename>, see
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for details. The third argument is a boolean: if true
kernel-style log priority level prefixes (such as
- <literal>SD_WARNING</literal>) are interpreted, see
+ <constant>SD_WARNING</constant>) are interpreted, see
<citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for more information.</para>
@@ -114,8 +114,7 @@
<para>The <function>sd_journal_stream_fd()</function>
interface is available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-journal</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-journal</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_journal_test_cursor.3 b/man/sd_journal_test_cursor.3
new file mode 100644
index 0000000000..76206d0bb4
--- /dev/null
+++ b/man/sd_journal_test_cursor.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_cursor.3
diff --git a/man/sd_journal_test_cursor.html b/man/sd_journal_test_cursor.html
index ad86923da1..86bcf327b0 100644
--- a/man/sd_journal_test_cursor.html
+++ b/man/sd_journal_test_cursor.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_cursor"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cursor, sd_journal_test_cursor — Get cursor string for or test cursor string against the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char ** <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_test_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778957168"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_cursor"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_cursor, sd_journal_test_cursor — Get cursor string for or test cursor string against the current journal entry</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>char ** <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_test_cursor</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>const char * <var class="pdparam">cursor</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274677906448"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
returns a cursor string for the current journal
entry. A cursor is a serialization of the current
journal position formatted as text. The string only
@@ -55,19 +55,18 @@
<a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a>
whether the entry being sought to was actually found
in the journal or the next closest entry was used
- instead.</p></div><div class="refsect1"><a name="idm259782851408"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
+ instead.</p></div><div class="refsect1"><a name="idm274677896256"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_cursor()</code>
returns 0 on success or a negative errno-style error
code. <code class="function">sd_journal_test_cursor()</code>
returns positive if the current entry matches the
- specified cursor, 0 if it doesn't match the specified
+ specified cursor, 0 if it does not match the specified
cursor or a negative errno-style error code on
- failure.</p></div><div class="refsect1"><a name="idm259782848608"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_cursor()</code>
+ failure.</p></div><div class="refsect1"><a name="idm274677893456"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_cursor()</code>
and <code class="function">sd_journal_test_cursor()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259782844240"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681605664"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_journal_wait.3 b/man/sd_journal_wait.3
new file mode 100644
index 0000000000..bf9fe433be
--- /dev/null
+++ b/man/sd_journal_wait.3
@@ -0,0 +1 @@
+.so man3/sd_journal_get_fd.3
diff --git a/man/sd_journal_wait.html b/man/sd_journal_wait.html
index 91ba994e49..deb02e768c 100644
--- a/man/sd_journal_wait.html
+++ b/man/sd_journal_wait.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
- interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259780895680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_journal_get_fd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_journal_get_fd, sd_journal_get_events, sd_journal_get_timeout, sd_journal_process, sd_journal_wait, sd_journal_reliable_fd, SD_JOURNAL_NOP, SD_JOURNAL_APPEND, SD_JOURNAL_INVALIDATE — Journal change notification
+ interface</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-journal.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_events</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_get_timeout</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_process</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_wait</b>(</code></td><td>sd_journal* <var class="pdparam">j</var>, </td></tr><tr><td> </td><td>uint64_t <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_journal_reliable_fd</b>(</code></td><td>sd_journal* <var class="pdparam">j</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274704023696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a file descriptor that may be asynchronously polled in
an external event loop and is signaled as soon as the
journal changes, because new entries or files were
@@ -43,20 +43,26 @@
with a certain latency.</p><p><code class="function">sd_journal_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code> and
- <code class="literal">POLLOUT</code> and similar to fill into
- the <code class="literal">.events</code> field of
- <code class="literal">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
- will return a timeout value for usage in <code class="function">poll()</code>. This returns a value in microseconds since the epoch of CLOCK_MONOTONIC for timing out <code class="function">poll()</code> in <code class="literal">timeout_usec</code>. See
+ <code class="constant">POLLIN</code> and
+ <code class="constant">POLLOUT</code> and similar to fill into
+ the "<code class="literal">.events</code>" field of
+ <code class="varname">struct pollfd</code>.</p><p><code class="function">sd_journal_get_timeout()</code>
+ will return a timeout value for usage in
+ <code class="function">poll()</code>. This returns a value in
+ microseconds since the epoch of
+ <code class="constant">CLOCK_MONOTONIC</code> for timing out
+ <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
- timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
+ timeout to wait for, this will fill in
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
- microseconds. To convert the absolute 'us' timeout into
- relative 'ms', use code like the following:</p><pre class="programlisting">uint64_t t;
+ microseconds. To convert the absolute 'us' timeout
+ into relative 'ms', use code like the
+ following:</p><pre class="programlisting">uint64_t t;
int msec;
sd_journal_get_timeout(m, &amp;t);
if (t == (uint64_t) -1)
@@ -68,7 +74,7 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
parameter.</p><p>After each <code class="function">poll()</code> wake-up
@@ -84,7 +90,7 @@ else {
synchronously wait until the journal gets changed. The
maximum time this call sleeps may be controlled with
the <em class="parameter"><code>timeout_usec</code></em>
- parameter. Pass <code class="literal">(uint64_t) -1</code> to
+ parameter. Pass <code class="constant">(uint64_t) -1</code> to
wait indefinitely. Internally this call simply
combines <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
@@ -106,11 +112,11 @@ else {
no need to invoke this function directly as
<code class="function">sd_journal_get_timeout()</code> on these
file systems will ask for timeouts explicitly
- anyway.</p></div><div class="refsect1"><a name="idm259780854192"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
+ anyway.</p></div><div class="refsect1"><a name="idm274703983584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p><code class="function">sd_journal_get_fd()</code> returns
a valid file descriptor on success or a negative
errno-style error code.</p><p><code class="function">sd_journal_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike on success or
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike on success or
a negative errno-style error code.</p><p><code class="function">sd_journal_reliable_fd()</code>
returns a positive integer if the file descriptor
returned by <code class="function">sd_journal_get_fd()</code>
@@ -118,30 +124,29 @@ else {
changes. Returns 0 if there might be a latency
involved.</p><p><code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> return one of
- <code class="literal">SD_JOURNAL_NOP</code>,
- <code class="literal">SD_JOURNAL_APPEND</code> or
- <code class="literal">SD_JOURNAL_INVALIDATE</code> on success or
+ <code class="constant">SD_JOURNAL_NOP</code>,
+ <code class="constant">SD_JOURNAL_APPEND</code> or
+ <code class="constant">SD_JOURNAL_INVALIDATE</code> on success or
a negative errno-style error code. If
- <code class="literal">SD_JOURNAL_NOP</code> is returned the
- journal didn't change since the last invocation. If
- <code class="literal">SD_JOURNAL_APPEND</code> is returned new
+ <code class="constant">SD_JOURNAL_NOP</code> is returned, the
+ journal did not change since the last invocation. If
+ <code class="constant">SD_JOURNAL_APPEND</code> is returned, new
entries have been appended to the end of the
- journal. If <code class="literal">SD_JOURNAL_INVALIDATE</code>
+ journal. If <code class="constant">SD_JOURNAL_INVALIDATE</code>,
journal files were added or removed (possibly due to
- rotation). In the latter event live-view UIs should
- probably refresh their entire display while in the
- case of <code class="literal">SD_JOURNAL_APPEND</code> it is
+ rotation). In the latter event, live-view UIs should
+ probably refresh their entire display, while in the
+ case of <code class="constant">SD_JOURNAL_APPEND</code>, it is
sufficient to simply continue reading at the previous
- end of the journal.</p></div><div class="refsect1"><a name="idm259775927152"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
+ end of the journal.</p></div><div class="refsect1"><a name="idm274699013792"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_journal_get_fd()</code>,
<code class="function">sd_journal_get_events()</code>,
<code class="function">sd_journal_reliable_fd()</code>,
<code class="function">sd_journal_process()</code> and
<code class="function">sd_journal_wait()</code> interfaces are
available as shared library, which can be compiled and
linked to with the
- <code class="literal">libsystemd-journal</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259775921328"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
+ <code class="constant">libsystemd-journal</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274699008208"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Iterating through the journal, in a live view tracking all changes:</p><pre class="programlisting">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;systemd/sd-journal.h&gt;
@@ -204,7 +209,7 @@ int wait_for_changes(sd_journal *j) {
poll(&amp;pollfd, 1, msec);
return sd_journal_process(j);
}
- </pre></div><div class="refsect1"><a name="idm259775914704"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274699001584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
<a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>,
diff --git a/man/sd_listen_fds.3 b/man/sd_listen_fds.3
new file mode 100644
index 0000000000..b34e1966ba
--- /dev/null
+++ b/man/sd_listen_fds.3
@@ -0,0 +1,111 @@
+'\" t
+.TH "SD_LISTEN_FDS" "3" "" "systemd 208" "sd_listen_fds"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_listen_fds, SD_LISTEN_FDS_START \- Check for file descriptors passed by the system manager
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-daemon\&.h>
+.fi
+.ft
+.sp
+.ft B
+.nf
+#define SD_LISTEN_FDS_START 3
+.fi
+.ft
+.HP \w'int\ sd_listen_fds('u
+.BI "int sd_listen_fds(int\ " "unset_environment" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_listen_fds()\fR
+shall be called by a daemon to check for file descriptors passed by the init system as part of the socket\-based activation logic\&.
+.PP
+If the
+\fIunset_environment\fR
+parameter is non\-zero,
+\fBsd_listen_fds()\fR
+will unset the
+\fI$LISTEN_FDS\fR/\fI$LISTEN_PID\fR
+environment variables before returning (regardless whether the function call itself succeeded or not)\&. Further calls to
+\fBsd_listen_fds()\fR
+will then fail, but the variables are no longer inherited by child processes\&.
+.PP
+If a daemon receives more than one file descriptor, they will be passed in the same order as configured in the systemd socket definition file\&. Nonetheless, it is recommended to verify the correct socket types before using them\&. To simplify this checking, the functions
+\fBsd_is_fifo\fR(3),
+\fBsd_is_socket\fR(3),
+\fBsd_is_socket_inet\fR(3),
+\fBsd_is_socket_unix\fR(3)
+are provided\&. In order to maximize flexibility, it is recommended to make these checks as loose as possible without allowing incorrect setups\&. i\&.e\&. often, the actual port number a socket is bound to matters little for the service to work, hence it should not be verified\&. On the other hand, whether a socket is a datagram or stream socket matters a lot for the most common program logics and should be checked\&.
+.PP
+This function call will set the FD_CLOEXEC flag for all passed file descriptors to avoid further inheritance to children of the calling process\&.
+.SH "RETURN VALUE"
+.PP
+On failure, this call returns a negative errno\-style error code\&. If
+\fI$LISTEN_FDS\fR/\fI$LISTEN_PID\fR
+was not set or was not correctly set for this daemon and hence no file descriptors were received, 0 is returned\&. Otherwise, the number of file descriptors passed is returned\&. The application may find them starting with file descriptor SD_LISTEN_FDS_START, i\&.e\&. file descriptor 3\&.
+.SH "NOTES"
+.PP
+This function is provided by the reference implementation of APIs for new\-style daemons and distributed with the systemd package\&. The algorithm it implements is simple, and can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&.
+.PP
+Internally, this function checks whether the
+\fI$LISTEN_PID\fR
+environment variable equals the daemon PID\&. If not, it returns immediately\&. Otherwise, it parses the number passed in the
+\fI$LISTEN_FDS\fR
+environment variable, then sets the FD_CLOEXEC flag for the parsed number of file descriptors starting from SD_LISTEN_FDS_START\&. Finally, it returns the parsed number\&.
+.PP
+For details about the algorithm check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h\fR\m[]
+.PP
+\fBsd_listen_fds()\fR
+is implemented in the reference implementation\*(Aqs
+sd\-daemon\&.c
+and
+sd\-daemon\&.h
+files\&. These interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-daemon\fR\ \&\fBpkg-config\fR(1)
+file\&. Alternatively, applications consuming these APIs may copy the implementation into their source tree\&. For more details about the reference implementation see
+\fBsd-daemon\fR(3)\&.
+.PP
+If the reference implementation is used as drop\-in files and \-DDISABLE_SYSTEMD is set during compilation, this function will always return 0 and otherwise become a NOP\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$LISTEN_PID\fR, \fI$LISTEN_FDS\fR
+.RS 4
+Set by the init system for supervised processes that use socket\-based activation\&. This environment variable specifies the data
+\fBsd_listen_fds()\fR
+parses\&. See above for details\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-daemon\fR(3),
+\fBsd_is_fifo\fR(3),
+\fBsd_is_socket\fR(3),
+\fBsd_is_socket_inet\fR(3),
+\fBsd_is_socket_unix\fR(3),
+\fBdaemon\fR(7),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5)
diff --git a/man/sd_listen_fds.html b/man/sd_listen_fds.html
index ccf9edbd91..6af7146da3 100644
--- a/man/sd_listen_fds.html
+++ b/man/sd_listen_fds.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_listen_fds"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_listen_fds, SD_LISTEN_FDS_START — Check for file descriptors passed by the system manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><pre class="funcsynopsisinfo">#define SD_LISTEN_FDS_START 3</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_listen_fds</b>(</code></td><td>int <var class="pdparam">unset_environment</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259784828416"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_listen_fds()</code> shall be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_listen_fds"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_listen_fds, SD_LISTEN_FDS_START — Check for file descriptors passed by the system manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><pre class="funcsynopsisinfo">#define SD_LISTEN_FDS_START 3</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_listen_fds</b>(</code></td><td>int <var class="pdparam">unset_environment</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274679238848"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_listen_fds()</code> shall be
called by a daemon to check for file descriptors
passed by the init system as part of the socket-based
activation logic.</p><p>If the <em class="parameter"><code>unset_environment</code></em>
- parameter is non-zero
+ parameter is non-zero,
<code class="function">sd_listen_fds()</code> will unset the
<code class="varname">$LISTEN_FDS</code>/<code class="varname">$LISTEN_PID</code>
environment variables before returning (regardless
@@ -34,31 +34,31 @@
processes.</p><p>If a daemon receives more than one file
descriptor, they will be passed in the same order as
configured in the systemd socket definition
- file. Nonetheless it is recommended to verify the
+ file. Nonetheless, it is recommended to verify the
correct socket types before using them. To simplify
- this checking the functions
+ this checking, the functions
<a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>,
<a href="sd_is_socket.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket</span>(3)</span></a>,
<a href="sd_is_socket_inet.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_inet</span>(3)</span></a>,
<a href="sd_is_socket_unix.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_unix</span>(3)</span></a>
- are provided. In order to maximize flexibility it is
+ are provided. In order to maximize flexibility, it is
recommended to make these checks as loose as possible
- without allowing incorrect setups. i.e. often the
+ without allowing incorrect setups. i.e. often, the
actual port number a socket is bound to matters little
for the service to work, hence it should not be
verified. On the other hand, whether a socket is a
datagram or stream socket matters a lot for the most
common program logics and should be checked.</p><p>This function call will set the FD_CLOEXEC flag
for all passed file descriptors to avoid further
- inheritance to children of the calling process.</p></div><div class="refsect1"><a name="idm259784817584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, this call returns a negative
+ inheritance to children of the calling process.</p></div><div class="refsect1"><a name="idm274679228016"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, this call returns a negative
errno-style error code. If
<code class="varname">$LISTEN_FDS</code>/<code class="varname">$LISTEN_PID</code>
was not set or was not correctly set for this daemon and
hence no file descriptors were received, 0 is
- returned. Otherwise the number of file descriptors
+ returned. Otherwise, the number of file descriptors
passed is returned. The application may find them
starting with file descriptor SD_LISTEN_FDS_START,
- i.e. file descriptor 3.</p></div><div class="refsect1"><a name="idm259788713104"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
+ i.e. file descriptor 3.</p></div><div class="refsect1"><a name="idm274683123968"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithm it
implements is simple, and can easily be reimplemented
@@ -67,11 +67,11 @@
implementation.</p><p>Internally, this function checks whether the
<code class="varname">$LISTEN_PID</code> environment variable
equals the daemon PID. If not, it returns
- immediately. Otherwise it parses the number passed in
+ immediately. Otherwise, it parses the number passed in
the <code class="varname">$LISTEN_FDS</code> environment
variable, then sets the FD_CLOEXEC flag for the parsed
number of file descriptors starting from
- SD_LISTEN_FDS_START. Finally it returns the parsed
+ SD_LISTEN_FDS_START. Finally, it returns the parsed
number.</p><p>For details about the algorithm check the
liberally licensed reference implementation sources:
<a class="ulink" href="http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c" target="_top">http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c</a>
@@ -81,23 +81,22 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation this function will always return 0 and
- otherwise become a NOP.</p></div><div class="refsect1"><a name="idm259788702720"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$LISTEN_PID"><span class="term"><code class="varname">$LISTEN_PID</code>, </span><span class="term"><code class="varname">$LISTEN_FDS</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_PID">¶</a></dt><dd><p>Set by the init system
+ compilation, this function will always return 0 and
+ otherwise become a NOP.</p></div><div class="refsect1"><a name="idm274683113840"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$LISTEN_PID"><span class="term"><code class="varname">$LISTEN_PID</code>, </span><span class="term"><code class="varname">$LISTEN_FDS</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_PID">¶</a></dt><dd><p>Set by the init system
for supervised processes that use
socket-based activation. This
environment variable specifies the
data
<code class="function">sd_listen_fds()</code>
parses. See above for
- details.</p></dd></dl></div></div><div class="refsect1"><a name="idm259788691040"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ details.</p></dd></dl></div></div><div class="refsect1"><a name="idm274683109248"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>,
diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml
index 9c8fdbccaf..240300dcb0 100644
--- a/man/sd_listen_fds.xml
+++ b/man/sd_listen_fds.xml
@@ -70,7 +70,7 @@
activation logic.</para>
<para>If the <parameter>unset_environment</parameter>
- parameter is non-zero
+ parameter is non-zero,
<function>sd_listen_fds()</function> will unset the
<varname>$LISTEN_FDS</varname>/<varname>$LISTEN_PID</varname>
environment variables before returning (regardless
@@ -83,16 +83,16 @@
<para>If a daemon receives more than one file
descriptor, they will be passed in the same order as
configured in the systemd socket definition
- file. Nonetheless it is recommended to verify the
+ file. Nonetheless, it is recommended to verify the
correct socket types before using them. To simplify
- this checking the functions
+ this checking, the functions
<citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_is_socket</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_is_socket_inet</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_is_socket_unix</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- are provided. In order to maximize flexibility it is
+ are provided. In order to maximize flexibility, it is
recommended to make these checks as loose as possible
- without allowing incorrect setups. i.e. often the
+ without allowing incorrect setups. i.e. often, the
actual port number a socket is bound to matters little
for the service to work, hence it should not be
verified. On the other hand, whether a socket is a
@@ -112,7 +112,7 @@
<varname>$LISTEN_FDS</varname>/<varname>$LISTEN_PID</varname>
was not set or was not correctly set for this daemon and
hence no file descriptors were received, 0 is
- returned. Otherwise the number of file descriptors
+ returned. Otherwise, the number of file descriptors
passed is returned. The application may find them
starting with file descriptor SD_LISTEN_FDS_START,
i.e. file descriptor 3.</para>
@@ -132,11 +132,11 @@
<para>Internally, this function checks whether the
<varname>$LISTEN_PID</varname> environment variable
equals the daemon PID. If not, it returns
- immediately. Otherwise it parses the number passed in
+ immediately. Otherwise, it parses the number passed in
the <varname>$LISTEN_FDS</varname> environment
variable, then sets the FD_CLOEXEC flag for the parsed
number of file descriptors starting from
- SD_LISTEN_FDS_START. Finally it returns the parsed
+ SD_LISTEN_FDS_START. Finally, it returns the parsed
number.</para>
<para>For details about the algorithm check the
@@ -151,8 +151,7 @@
<filename>sd-daemon.h</filename> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-daemon</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source
tree. For more details about the reference
@@ -161,7 +160,7 @@
<para>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation this function will always return 0 and
+ compilation, this function will always return 0 and
otherwise become a NOP.</para>
</refsect1>
diff --git a/man/sd_login_monitor.3 b/man/sd_login_monitor.3
new file mode 100644
index 0000000000..6229cce03a
--- /dev/null
+++ b/man/sd_login_monitor.3
@@ -0,0 +1 @@
+.so man3/sd_login_monitor_new.3
diff --git a/man/sd_login_monitor.html b/man/sd_login_monitor.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor.html
+++ b/man/sd_login_monitor.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_login_monitor_flush.3 b/man/sd_login_monitor_flush.3
new file mode 100644
index 0000000000..6229cce03a
--- /dev/null
+++ b/man/sd_login_monitor_flush.3
@@ -0,0 +1 @@
+.so man3/sd_login_monitor_new.3
diff --git a/man/sd_login_monitor_flush.html b/man/sd_login_monitor_flush.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor_flush.html
+++ b/man/sd_login_monitor_flush.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_login_monitor_get_events.3 b/man/sd_login_monitor_get_events.3
new file mode 100644
index 0000000000..6229cce03a
--- /dev/null
+++ b/man/sd_login_monitor_get_events.3
@@ -0,0 +1 @@
+.so man3/sd_login_monitor_new.3
diff --git a/man/sd_login_monitor_get_events.html b/man/sd_login_monitor_get_events.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor_get_events.html
+++ b/man/sd_login_monitor_get_events.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_login_monitor_get_fd.3 b/man/sd_login_monitor_get_fd.3
new file mode 100644
index 0000000000..6229cce03a
--- /dev/null
+++ b/man/sd_login_monitor_get_fd.3
@@ -0,0 +1 @@
+.so man3/sd_login_monitor_new.3
diff --git a/man/sd_login_monitor_get_fd.html b/man/sd_login_monitor_get_fd.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor_get_fd.html
+++ b/man/sd_login_monitor_get_fd.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_login_monitor_get_timeout.3 b/man/sd_login_monitor_get_timeout.3
new file mode 100644
index 0000000000..6229cce03a
--- /dev/null
+++ b/man/sd_login_monitor_get_timeout.3
@@ -0,0 +1 @@
+.so man3/sd_login_monitor_new.3
diff --git a/man/sd_login_monitor_get_timeout.html b/man/sd_login_monitor_get_timeout.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor_get_timeout.html
+++ b/man/sd_login_monitor_get_timeout.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_login_monitor_new.3 b/man/sd_login_monitor_new.3
new file mode 100644
index 0000000000..131303c8b8
--- /dev/null
+++ b/man/sd_login_monitor_new.3
@@ -0,0 +1,167 @@
+'\" t
+.TH "SD_LOGIN_MONITOR_NEW" "3" "" "systemd 208" "sd_login_monitor_new"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor \- Monitor login sessions, seats, users and virtual machines/containers
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'int\ sd_login_monitor_new('u
+.BI "int sd_login_monitor_new(const\ char*\ " "category" ", sd_login_monitor**\ " "ret" ");"
+.HP \w'sd_login_monitor*\ sd_login_monitor_unref('u
+.BI "sd_login_monitor* sd_login_monitor_unref(sd_login_monitor*\ " "m" ");"
+.HP \w'int\ sd_login_monitor_flush('u
+.BI "int sd_login_monitor_flush(sd_login_monitor*\ " "m" ");"
+.HP \w'int\ sd_login_monitor_get_fd('u
+.BI "int sd_login_monitor_get_fd(sd_login_monitor*\ " "m" ");"
+.HP \w'int\ sd_login_monitor_get_events('u
+.BI "int sd_login_monitor_get_events(sd_login_monitor*\ " "m" ");"
+.HP \w'int\ sd_login_monitor_get_timeout('u
+.BI "int sd_login_monitor_get_timeout(sd_login_monitor*\ " "m" ", uint64_t*\ " "timeout_usec" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_login_monitor_new()\fR
+may be used to monitor login sessions, users, seats, and virtual machines/containers\&. Via a monitor object a file descriptor can be integrated into an application defined event loop which is woken up each time a user logs in, logs out or a seat is added or removed, or a session, user, seat or virtual machine/container changes state otherwise\&. The first parameter takes a string which can be
+"seat"
+(to get only notifications about seats being added, removed or changed),
+"session"
+(to get only notifications about sessions being created or removed or changed),
+"uid"
+(to get only notifications when a user changes state in respect to logins) or
+"machine"
+(to get only notifications when a virtual machine or container is started or stopped)\&. If notifications shall be generated in all these conditions,
+\fBNULL\fR
+may be passed\&. Note that in the future additional categories may be defined\&. The second parameter returns a monitor object and needs to be freed with the
+\fBsd_login_monitor_unref()\fR
+call after use\&.
+.PP
+\fBsd_login_monitor_unref()\fR
+may be used to destroy a monitor object\&. Note that this will invalidate any file descriptor returned by
+\fBsd_login_monitor_get_fd()\fR\&.
+.PP
+\fBsd_login_monitor_flush()\fR
+may be used to reset the wakeup state of the monitor object\&. Whenever an event causes the monitor to wake up the event loop via the file descriptor this function needs to be called to reset the wake\-up state\&. If this call is not invoked, the file descriptor will immediately wake up the event loop again\&.
+.PP
+\fBsd_login_monitor_get_fd()\fR
+may be used to retrieve the file descriptor of the monitor object that may be integrated in an application defined event loop, based around
+\fBpoll\fR(2)
+or a similar interface\&. The application should include the returned file descriptor as wake\-up source for the events mask returned by
+\fBsd_login_monitor_get_events()\fR\&. It should pass a timeout value as returned by
+\fBsd_login_monitor_get_timeout()\fR\&. Whenever a wake\-up is triggered the file descriptor needs to be reset via
+\fBsd_login_monitor_flush()\fR\&. An application needs to reread the login state with a function like
+\fBsd_get_seats\fR(3)
+or similar to determine what changed\&.
+.PP
+\fBsd_login_monitor_get_events()\fR
+will return the
+\fBpoll()\fR
+mask to wait for\&. This function will return a combination of
+\fBPOLLIN\fR,
+\fBPOLLOUT\fR
+and similar to fill into the
+"\&.events"
+field of
+\fIstruct pollfd\fR\&.
+.PP
+\fBsd_login_monitor_get_timeout()\fR
+will return a timeout value for usage in
+\fBpoll()\fR\&. This returns a value in microseconds since the epoch of
+\fBCLOCK_MONOTONIC\fR
+for timing out
+\fBpoll()\fR
+in
+\fItimeout_usec\fR\&. See
+\fBclock_gettime\fR(2)
+for details about
+\fBCLOCK_MONOTONIC\fR\&. If there is no timeout to wait for this will fill in
+\fB(uint64_t) \-1\fR
+instead\&. Note that
+\fBpoll()\fR
+takes a relative timeout in milliseconds rather than an absolute timeout in microseconds\&. To convert the absolute \*(Aqus\*(Aq timeout into relative \*(Aqms\*(Aq, use code like the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+uint64_t t;
+int msec;
+sd_login_monitor_get_timeout(m, &t);
+if (t == (uint64_t) \-1)
+ msec = \-1;
+else {
+ struct timespec ts;
+ uint64_t n;
+ clock_getttime(CLOCK_MONOTONIC, &ts);
+ n = (uint64_t) ts\&.tv_sec * 1000000 + ts\&.tv_nsec / 1000;
+ msec = t > n ? (int) ((t \- n + 999) / 1000) : 0;
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The code above does not do any error checking for brevity\*(Aqs sake\&. The calculated
+\fImsec\fR
+integer can be passed directly as
+\fBpoll()\fR\*(Aqs timeout parameter\&.
+.SH "RETURN VALUE"
+.PP
+On success
+\fBsd_login_monitor_new()\fR,
+\fBsd_login_monitor_flush()\fR
+and
+\fBsd_login_monitor_get_timeout()\fR
+return 0 or a positive integer\&. On success
+\fBsd_login_monitor_get_fd()\fR
+returns a Unix file descriptor\&. On success
+\fBsd_login_monitor_get_events()\fR
+returns a combination of
+\fBPOLLIN\fR,
+\fBPOLLOUT\fR
+and suchlike\&. On failure, these calls return a negative errno\-style error code\&.
+.PP
+\fBsd_login_monitor_unref()\fR
+always returns
+\fBNULL\fR\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_login_monitor_new()\fR,
+\fBsd_login_monitor_unref()\fR,
+\fBsd_login_monitor_flush()\fR,
+\fBsd_login_monitor_get_fd()\fR,
+\fBsd_login_monitor_get_events()\fR
+and
+\fBsd_login_monitor_get_timeout()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-login\fR(3),
+\fBsd_get_seats\fR(3),
+\fBpoll\fR(2),
+\fBclock_gettime\fR(2)
diff --git a/man/sd_login_monitor_new.html b/man/sd_login_monitor_new.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor_new.html
+++ b/man/sd_login_monitor_new.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
index 26af0ea247..909a3d9bfd 100644
--- a/man/sd_login_monitor_new.xml
+++ b/man/sd_login_monitor_new.xml
@@ -96,7 +96,7 @@
<title>Description</title>
<para><function>sd_login_monitor_new()</function> may
- be used to monitor login sessions, users, seats and
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
@@ -112,7 +112,7 @@
logins) or <literal>machine</literal> (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <constant>NULL</constant> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -129,7 +129,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</para>
<para><function>sd_login_monitor_get_fd()</function>
@@ -154,22 +154,22 @@
<para><function>sd_login_monitor_get_events()</function>
will return the <function>poll()</function> mask to
wait for. This function will return a combination of
- <literal>POLLIN</literal>, <literal>POLLOUT</literal>
+ <constant>POLLIN</constant>, <constant>POLLOUT</constant>
and similar to fill into the
- <literal>.events</literal> field of <literal>struct
- pollfd</literal>.</para>
+ <literal>.events</literal> field of <varname>struct
+ pollfd</varname>.</para>
<para><function>sd_login_monitor_get_timeout()</function>
will return a timeout value for usage in
<function>poll()</function>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <function>poll()</function> in
- <literal>timeout_usec</literal>. See
+ microseconds since the epoch of <constant>CLOCK_MONOTONIC</constant>
+ for timing out <function>poll()</function> in
+ <varname>timeout_usec</varname>. See
<citerefentry><refentrytitle>clock_gettime</refentrytitle><manvolnum>2</manvolnum></citerefentry>
for details about
- <literal>CLOCK_MONOTONIC</literal>. If there's no
+ <constant>CLOCK_MONOTONIC</constant>. If there is no
timeout to wait for this will fill in
- <literal>(uint64_t) -1</literal> instead. Note that
+ <constant>(uint64_t) -1</constant> instead. Note that
<function>poll()</function> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -189,7 +189,7 @@ else {
}</programlisting>
<para>The code above does not do any error checking
- for brevity's sake. The calculated <literal>msec</literal>
+ for brevity's sake. The calculated <varname>msec</varname>
integer can be passed directly as
<function>poll()</function>'s timeout
parameter.</para>
@@ -206,13 +206,13 @@ else {
<function>sd_login_monitor_get_fd()</function> returns
a Unix file descriptor. On success
<function>sd_login_monitor_get_events()</function>
- returns a combination of <literal>POLLIN</literal>,
- <literal>POLLOUT</literal> and suchlike. On failure,
+ returns a combination of <constant>POLLIN</constant>,
+ <constant>POLLOUT</constant> and suchlike. On failure,
these calls return a negative errno-style error
code.</para>
<para><function>sd_login_monitor_unref()</function>
- always returns NULL.</para>
+ always returns <constant>NULL</constant>.</para>
</refsect1>
<refsect1>
@@ -226,8 +226,7 @@ else {
<function>sd_login_monitor_get_timeout()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_login_monitor_unref.3 b/man/sd_login_monitor_unref.3
new file mode 100644
index 0000000000..6229cce03a
--- /dev/null
+++ b/man/sd_login_monitor_unref.3
@@ -0,0 +1 @@
+.so man3/sd_login_monitor_new.3
diff --git a/man/sd_login_monitor_unref.html b/man/sd_login_monitor_unref.html
index cfacf69caf..95b4d4638e 100644
--- a/man/sd_login_monitor_unref.html
+++ b/man/sd_login_monitor_unref.html
@@ -19,24 +19,24 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259778088720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
- be used to monitor login sessions, users, seats and
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_login_monitor_new"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_login_monitor_new, sd_login_monitor_unref, sd_login_monitor_flush, sd_login_monitor_get_fd, sd_login_monitor_get_events, sd_login_monitor_get_timeout, sd_login_monitor — Monitor login sessions, seats, users and virtual machines/containers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_new</b>(</code></td><td>const char* <var class="pdparam">category</var>, </td></tr><tr><td> </td><td>sd_login_monitor** <var class="pdparam">ret</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">sd_login_monitor* <b class="fsfunc">sd_login_monitor_unref</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_flush</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_fd</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_events</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_login_monitor_get_timeout</b>(</code></td><td>sd_login_monitor* <var class="pdparam">m</var>, </td></tr><tr><td> </td><td>uint64_t* <var class="pdparam">timeout_usec</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676550160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_login_monitor_new()</code> may
+ be used to monitor login sessions, users, seats, and
virtual machines/containers. Via a monitor object a
file descriptor can be integrated into an application
defined event loop which is woken up each time a user
logs in, logs out or a seat is added or removed, or a
session, user, seat or virtual machine/container
changes state otherwise. The first parameter takes a
- string which can be <code class="literal">seat</code> (to get
+ string which can be "<code class="literal">seat</code>" (to get
only notifications about seats being added, removed or
- changed), <code class="literal">session</code> (to get only
+ changed), "<code class="literal">session</code>" (to get only
notifications about sessions being created or removed
- or changed), <code class="literal">uid</code> (to get only
+ or changed), "<code class="literal">uid</code>" (to get only
notifications when a user changes state in respect to
- logins) or <code class="literal">machine</code> (to get only
+ logins) or "<code class="literal">machine</code>" (to get only
notifications when a virtual machine or container is
started or stopped). If notifications shall be
- generated in all these conditions, NULL may be
+ generated in all these conditions, <code class="constant">NULL</code> may be
passed. Note that in the future additional categories
may be defined. The second parameter returns a monitor
object and needs to be freed with the
@@ -49,7 +49,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.</p><p><code class="function">sd_login_monitor_get_fd()</code>
may be used to retrieve the file descriptor of the
monitor object that may be integrated in an
@@ -70,20 +70,20 @@
or similar to determine what changed.</p><p><code class="function">sd_login_monitor_get_events()</code>
will return the <code class="function">poll()</code> mask to
wait for. This function will return a combination of
- <code class="literal">POLLIN</code>, <code class="literal">POLLOUT</code>
+ <code class="constant">POLLIN</code>, <code class="constant">POLLOUT</code>
and similar to fill into the
- <code class="literal">.events</code> field of <code class="literal">struct
+ "<code class="literal">.events</code>" field of <code class="varname">struct
pollfd</code>.</p><p><code class="function">sd_login_monitor_get_timeout()</code>
will return a timeout value for usage in
<code class="function">poll()</code>. This returns a value in
- microseconds since the epoch of CLOCK_MONOTONIC for
- timing out <code class="function">poll()</code> in
- <code class="literal">timeout_usec</code>. See
+ microseconds since the epoch of <code class="constant">CLOCK_MONOTONIC</code>
+ for timing out <code class="function">poll()</code> in
+ <code class="varname">timeout_usec</code>. See
<a href="clock_gettime.html"><span class="citerefentry"><span class="refentrytitle">clock_gettime</span>(2)</span></a>
for details about
- <code class="literal">CLOCK_MONOTONIC</code>. If there's no
+ <code class="constant">CLOCK_MONOTONIC</code>. If there is no
timeout to wait for this will fill in
- <code class="literal">(uint64_t) -1</code> instead. Note that
+ <code class="constant">(uint64_t) -1</code> instead. Note that
<code class="function">poll()</code> takes a relative timeout
in milliseconds rather than an absolute timeout in
microseconds. To convert the absolute 'us' timeout into
@@ -99,10 +99,10 @@ else {
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
msec = t &gt; n ? (int) ((t - n + 999) / 1000) : 0;
}</pre><p>The code above does not do any error checking
- for brevity's sake. The calculated <code class="literal">msec</code>
+ for brevity's sake. The calculated <code class="varname">msec</code>
integer can be passed directly as
<code class="function">poll()</code>'s timeout
- parameter.</p></div><div class="refsect1"><a name="idm259781952240"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ parameter.</p></div><div class="refsect1"><a name="idm274676514784"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_flush()</code> and
<code class="function">sd_login_monitor_get_timeout()</code>
@@ -110,11 +110,11 @@ else {
<code class="function">sd_login_monitor_get_fd()</code> returns
a Unix file descriptor. On success
<code class="function">sd_login_monitor_get_events()</code>
- returns a combination of <code class="literal">POLLIN</code>,
- <code class="literal">POLLOUT</code> and suchlike. On failure,
+ returns a combination of <code class="constant">POLLIN</code>,
+ <code class="constant">POLLOUT</code> and suchlike. On failure,
these calls return a negative errno-style error
code.</p><p><code class="function">sd_login_monitor_unref()</code>
- always returns NULL.</p></div><div class="refsect1"><a name="idm259781944896"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
+ always returns <code class="constant">NULL</code>.</p></div><div class="refsect1"><a name="idm274676507376"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_login_monitor_new()</code>,
<code class="function">sd_login_monitor_unref()</code>,
<code class="function">sd_login_monitor_flush()</code>,
<code class="function">sd_login_monitor_get_fd()</code>,
@@ -122,9 +122,8 @@ else {
<code class="function">sd_login_monitor_get_timeout()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259781937632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274671534880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>,
diff --git a/man/sd_notify.3 b/man/sd_notify.3
new file mode 100644
index 0000000000..44f69291ab
--- /dev/null
+++ b/man/sd_notify.3
@@ -0,0 +1,203 @@
+'\" t
+.TH "SD_NOTIFY" "3" "" "systemd 208" "sd_notify"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_notify, sd_notifyf \- Notify service manager about start\-up completion and other daemon status changes
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-daemon\&.h>
+.fi
+.ft
+.HP \w'int\ sd_notify('u
+.BI "int sd_notify(int\ " "unset_environment" ", const\ char\ *" "state" ");"
+.HP \w'int\ sd_notifyf('u
+.BI "int sd_notifyf(int\ " "unset_environment" ", const\ char\ *" "format" ", \&.\&.\&.);"
+.SH "DESCRIPTION"
+.PP
+\fBsd_notify()\fR
+shall be called by a daemon to notify the init system about status changes\&. It can be used to send arbitrary information, encoded in an environment\-block\-like string\&. Most importantly it can be used for start\-up completion notification\&.
+.PP
+If the
+\fIunset_environment\fR
+parameter is non\-zero,
+\fBsd_notify()\fR
+will unset the
+\fI$NOTIFY_SOCKET\fR
+environment variable before returning (regardless whether the function call itself succeeded or not)\&. Further calls to
+\fBsd_notify()\fR
+will then fail, but the variable is no longer inherited by child processes\&.
+.PP
+The
+\fIstate\fR
+parameter should contain a newline\-separated list of variable assignments, similar in style to an environment block\&. A trailing newline is implied if none is specified\&. The string may contain any kind of variable assignments, but the following shall be considered well\-known:
+.PP
+READY=1
+.RS 4
+Tells the init system that daemon startup is finished\&. This is only used by systemd if the service definition file has Type=notify set\&. The passed argument is a boolean "1" or "0"\&. Since there is little value in signaling non\-readiness, the only value daemons should send is "READY=1"\&.
+.RE
+.PP
+STATUS=\&.\&.\&.
+.RS 4
+Passes a single\-line status string back to the init system that describes the daemon state\&. This is free\-form and can be used for various purposes: general state feedback, fsck\-like programs could pass completion percentages and failing programs could pass a human readable error message\&. Example: "STATUS=Completed 66% of file system check\&.\&.\&."
+.RE
+.PP
+ERRNO=\&.\&.\&.
+.RS 4
+If a daemon fails, the errno\-style error code, formatted as string\&. Example: "ERRNO=2" for ENOENT\&.
+.RE
+.PP
+BUSERROR=\&.\&.\&.
+.RS 4
+If a daemon fails, the D\-Bus error\-style error code\&. Example: "BUSERROR=org\&.freedesktop\&.DBus\&.Error\&.TimedOut"
+.RE
+.PP
+MAINPID=\&.\&.\&.
+.RS 4
+The main pid of the daemon, in case the init system did not fork off the process itself\&. Example: "MAINPID=4711"
+.RE
+.PP
+WATCHDOG=1
+.RS 4
+Tells systemd to update the watchdog timestamp\&. This is the keep\-alive ping that services need to issue in regular intervals if
+\fIWatchdogSec=\fR
+is enabled for it\&. See
+\fBsystemd.service\fR(5)
+for details\&. It is recommended to send this message if the
+\fIWATCHDOG_USEC=\fR
+environment variable has been set for the service process, in every half the time interval that is specified in the variable\&.
+.RE
+.PP
+It is recommended to prefix variable names that are not shown in the list above with
+\fIX_\fR
+to avoid namespace clashes\&.
+.PP
+Note that systemd will accept status data sent from a daemon only if the
+\fINotifyAccess=\fR
+option is correctly set in the service definition file\&. See
+\fBsystemd.service\fR(5)
+for details\&.
+.PP
+\fBsd_notifyf()\fR
+is similar to
+\fBsd_notify()\fR
+but takes a
+\fBprintf()\fR\-like format string plus arguments\&.
+.SH "RETURN VALUE"
+.PP
+On failure, these calls return a negative errno\-style error code\&. If
+\fI$NOTIFY_SOCKET\fR
+was not set and hence no status data could be sent, 0 is returned\&. If the status was sent, these functions return with a positive return value\&. In order to support both, init systems that implement this scheme and those which do not, it is generally recommended to ignore the return value of this call\&.
+.SH "NOTES"
+.PP
+These functions are provided by the reference implementation of APIs for new\-style daemons and distributed with the systemd package\&. The algorithms they implement are simple, and can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&.
+.PP
+Internally, these functions send a single datagram with the state string as payload to the
+\fBAF_UNIX\fR
+socket referenced in the
+\fI$NOTIFY_SOCKET\fR
+environment variable\&. If the first character of
+\fI$NOTIFY_SOCKET\fR
+is
+"@", the string is understood as Linux abstract namespace socket\&. The datagram is accompanied by the process credentials of the sending daemon, using SCM_CREDENTIALS\&.
+.PP
+For details about the algorithms check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/libsystemd-daemon/sd-daemon.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h\fR\m[]
+.PP
+\fBsd_notify()\fR
+and
+\fBsd_notifyf()\fR
+are implemented in the reference implementation\*(Aqs
+sd\-daemon\&.c
+and
+sd\-daemon\&.h
+files\&. These interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-daemon\fR\ \&\fBpkg-config\fR(1)
+file\&. Alternatively, applications consuming these APIs may copy the implementation into their source tree\&. For more details about the reference implementation see
+\fBsd-daemon\fR(3)\&.
+.PP
+If the reference implementation is used as drop\-in files and \-DDISABLE_SYSTEMD is set during compilation, these functions will always return 0 and otherwise become a NOP\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$NOTIFY_SOCKET\fR
+.RS 4
+Set by the init system for supervised processes for status and start\-up completion notification\&. This environment variable specifies the socket
+\fBsd_notify()\fR
+talks to\&. See above for details\&.
+.RE
+.SH "EXAMPLES"
+.PP
+\fBExample\ \&1.\ \&Start-up Notification\fR
+.PP
+When a daemon finished starting up, it might issue the following call to notify the init system:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+sd_notify(0, "READY=1");
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBExample\ \&2.\ \&Extended Start-up Notification\fR
+.PP
+A daemon could send the following after completing initialization:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+sd_notifyf(0, "READY=1\en"
+ "STATUS=Processing requests\&.\&.\&.\en"
+ "MAINPID=%lu",
+ (unsigned long) getpid());
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBExample\ \&3.\ \&Error Cause Notification\fR
+.PP
+A daemon could send the following shortly before exiting, on failure
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+sd_notifyf(0, "STATUS=Failed to start up: %s\en"
+ "ERRNO=%i",
+ strerror(errno),
+ errno);
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-daemon\fR(3),
+\fBdaemon\fR(7),
+\fBsystemd.service\fR(5)
diff --git a/man/sd_notify.html b/man/sd_notify.html
index 76cb79140b..6e81fc1c12 100644
--- a/man/sd_notify.html
+++ b/man/sd_notify.html
@@ -19,13 +19,13 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_notify, sd_notifyf — Notify service manager about start-up completion and other daemon status changes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notify</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notifyf</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259769923200"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_notify()</code> shall be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_notify, sd_notifyf — Notify service manager about start-up completion and other daemon status changes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notify</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notifyf</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274675548480"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_notify()</code> shall be called
by a daemon to notify the init system about status
changes. It can be used to send arbitrary information,
encoded in an environment-block-like string. Most
importantly it can be used for start-up completion
notification.</p><p>If the <em class="parameter"><code>unset_environment</code></em>
- parameter is non-zero <code class="function">sd_notify()</code>
+ parameter is non-zero, <code class="function">sd_notify()</code>
will unset the <code class="varname">$NOTIFY_SOCKET</code>
environment variable before returning (regardless
whether the function call itself succeeded or
@@ -89,15 +89,15 @@
for details.</p><p><code class="function">sd_notifyf()</code> is similar to
<code class="function">sd_notify()</code> but takes a
<code class="function">printf()</code>-like format string plus
- arguments.</p></div><div class="refsect1"><a name="idm259773789536"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ arguments.</p></div><div class="refsect1"><a name="idm274679414896"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If
<code class="varname">$NOTIFY_SOCKET</code> was not set and
hence no status data could be sent, 0 is returned. If
- the status was sent these functions return with a
+ the status was sent, these functions return with a
positive return value. In order to support both, init
systems that implement this scheme and those which
- don't, it is generally recommended to ignore the return
- value of this call.</p></div><div class="refsect1"><a name="idm259773787408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ do not, it is generally recommended to ignore the return
+ value of this call.</p></div><div class="refsect1"><a name="idm274679412768"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -105,10 +105,10 @@
this interface without using the reference
implementation.</p><p>Internally, these functions send a single
datagram with the state string as payload to the
- AF_UNIX socket referenced in the
+ <code class="constant">AF_UNIX</code> socket referenced in the
<code class="varname">$NOTIFY_SOCKET</code> environment
variable. If the first character of
- <code class="varname">$NOTIFY_SOCKET</code> is @ the string is
+ <code class="varname">$NOTIFY_SOCKET</code> is "<code class="literal">@</code>", the string is
understood as Linux abstract namespace socket. The
datagram is accompanied by the process credentials of
the sending daemon, using SCM_CREDENTIALS.</p><p>For details about the algorithms check the
@@ -121,30 +121,29 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree. For
more details about the reference implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation these functions will always return 0 and
- otherwise become a NOP.</p></div><div class="refsect1"><a name="idm259773776320"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$NOTIFY_SOCKET"><span class="term"><code class="varname">$NOTIFY_SOCKET</code></span><a class="headerlink" title="Permalink to this term" href="#%24NOTIFY_SOCKET">¶</a></dt><dd><p>Set by the init system
+ compilation, these functions will always return 0 and
+ otherwise become a NOP.</p></div><div class="refsect1"><a name="idm274679400816"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$NOTIFY_SOCKET"><span class="term"><code class="varname">$NOTIFY_SOCKET</code></span><a class="headerlink" title="Permalink to this term" href="#%24NOTIFY_SOCKET">¶</a></dt><dd><p>Set by the init system
for supervised processes for status
and start-up completion
notification. This environment variable
specifies the socket
<code class="function">sd_notify()</code> talks
- to. See above for details.</p></dd></dl></div></div><div class="refsect1"><a name="idm259773772416"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm259773771744"></a><p class="title"><b>Example 1. Start-up Notification</b></p><div class="example-contents"><p>When a daemon finished starting up, it
+ to. See above for details.</p></dd></dl></div></div><div class="refsect1"><a name="idm274679396912"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm274679396240"></a><p class="title"><b>Example 1. Start-up Notification</b></p><div class="example-contents"><p>When a daemon finished starting up, it
might issue the following call to notify
- the init system:</p><pre class="programlisting">sd_notify(0, "READY=1");</pre></div></div><br class="example-break"><div class="example"><a name="idm259773769696"></a><p class="title"><b>Example 2. Extended Start-up Notification</b></p><div class="example-contents"><p>A daemon could send the following after
+ the init system:</p><pre class="programlisting">sd_notify(0, "READY=1");</pre></div></div><br class="example-break"><div class="example"><a name="idm274679394192"></a><p class="title"><b>Example 2. Extended Start-up Notification</b></p><div class="example-contents"><p>A daemon could send the following after
completing initialization:</p><pre class="programlisting">sd_notifyf(0, "READY=1\n"
"STATUS=Processing requests...\n"
"MAINPID=%lu",
- (unsigned long) getpid());</pre></div></div><br class="example-break"><div class="example"><a name="idm259773767568"></a><p class="title"><b>Example 3. Error Cause Notification</b></p><div class="example-contents"><p>A daemon could send the following shortly before exiting, on failure</p><pre class="programlisting">sd_notifyf(0, "STATUS=Failed to start up: %s\n"
+ (unsigned long) getpid());</pre></div></div><br class="example-break"><div class="example"><a name="idm274679392064"></a><p class="title"><b>Example 3. Error Cause Notification</b></p><div class="example-contents"><p>A daemon could send the following shortly before exiting, on failure</p><pre class="programlisting">sd_notifyf(0, "STATUS=Failed to start up: %s\n"
"ERRNO=%i",
strerror(errno),
- errno);</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259768857824"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ errno);</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274674480384"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>,
diff --git a/man/sd_notify.xml b/man/sd_notify.xml
index 81f74aa843..55965ffce4 100644
--- a/man/sd_notify.xml
+++ b/man/sd_notify.xml
@@ -77,7 +77,7 @@
notification.</para>
<para>If the <parameter>unset_environment</parameter>
- parameter is non-zero <function>sd_notify()</function>
+ parameter is non-zero, <function>sd_notify()</function>
will unset the <varname>$NOTIFY_SOCKET</varname>
environment variable before returning (regardless
whether the function call itself succeeded or
@@ -197,10 +197,10 @@
errno-style error code. If
<varname>$NOTIFY_SOCKET</varname> was not set and
hence no status data could be sent, 0 is returned. If
- the status was sent these functions return with a
+ the status was sent, these functions return with a
positive return value. In order to support both, init
systems that implement this scheme and those which
- don't, it is generally recommended to ignore the return
+ do not, it is generally recommended to ignore the return
value of this call.</para>
</refsect1>
@@ -217,10 +217,10 @@
<para>Internally, these functions send a single
datagram with the state string as payload to the
- AF_UNIX socket referenced in the
+ <constant>AF_UNIX</constant> socket referenced in the
<varname>$NOTIFY_SOCKET</varname> environment
variable. If the first character of
- <varname>$NOTIFY_SOCKET</varname> is @ the string is
+ <varname>$NOTIFY_SOCKET</varname> is <literal>@</literal>, the string is
understood as Linux abstract namespace socket. The
datagram is accompanied by the process credentials of
the sending daemon, using SCM_CREDENTIALS.</para>
@@ -238,8 +238,7 @@
<filename>sd-daemon.h</filename> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-daemon</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-daemon</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree. For
more details about the reference implementation see
@@ -247,7 +246,7 @@
<para>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation these functions will always return 0 and
+ compilation, these functions will always return 0 and
otherwise become a NOP.</para>
</refsect1>
diff --git a/man/sd_notifyf.3 b/man/sd_notifyf.3
new file mode 100644
index 0000000000..c6bfe96097
--- /dev/null
+++ b/man/sd_notifyf.3
@@ -0,0 +1 @@
+.so man3/sd_notify.3
diff --git a/man/sd_notifyf.html b/man/sd_notifyf.html
index 76cb79140b..6e81fc1c12 100644
--- a/man/sd_notifyf.html
+++ b/man/sd_notifyf.html
@@ -19,13 +19,13 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_notify, sd_notifyf — Notify service manager about start-up completion and other daemon status changes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notify</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notifyf</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259769923200"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_notify()</code> shall be called
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_notify, sd_notifyf — Notify service manager about start-up completion and other daemon status changes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-daemon.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notify</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_notifyf</b>(</code></td><td>int <var class="pdparam">unset_environment</var>, </td></tr><tr><td> </td><td>const char *<var class="pdparam">format</var>, </td></tr><tr><td> </td><td>...<code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274675548480"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_notify()</code> shall be called
by a daemon to notify the init system about status
changes. It can be used to send arbitrary information,
encoded in an environment-block-like string. Most
importantly it can be used for start-up completion
notification.</p><p>If the <em class="parameter"><code>unset_environment</code></em>
- parameter is non-zero <code class="function">sd_notify()</code>
+ parameter is non-zero, <code class="function">sd_notify()</code>
will unset the <code class="varname">$NOTIFY_SOCKET</code>
environment variable before returning (regardless
whether the function call itself succeeded or
@@ -89,15 +89,15 @@
for details.</p><p><code class="function">sd_notifyf()</code> is similar to
<code class="function">sd_notify()</code> but takes a
<code class="function">printf()</code>-like format string plus
- arguments.</p></div><div class="refsect1"><a name="idm259773789536"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ arguments.</p></div><div class="refsect1"><a name="idm274679414896"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. If
<code class="varname">$NOTIFY_SOCKET</code> was not set and
hence no status data could be sent, 0 is returned. If
- the status was sent these functions return with a
+ the status was sent, these functions return with a
positive return value. In order to support both, init
systems that implement this scheme and those which
- don't, it is generally recommended to ignore the return
- value of this call.</p></div><div class="refsect1"><a name="idm259773787408"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
+ do not, it is generally recommended to ignore the return
+ value of this call.</p></div><div class="refsect1"><a name="idm274679412768"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>These functions are provided by the reference
implementation of APIs for new-style daemons and
distributed with the systemd package. The algorithms
they implement are simple, and can easily be
@@ -105,10 +105,10 @@
this interface without using the reference
implementation.</p><p>Internally, these functions send a single
datagram with the state string as payload to the
- AF_UNIX socket referenced in the
+ <code class="constant">AF_UNIX</code> socket referenced in the
<code class="varname">$NOTIFY_SOCKET</code> environment
variable. If the first character of
- <code class="varname">$NOTIFY_SOCKET</code> is @ the string is
+ <code class="varname">$NOTIFY_SOCKET</code> is "<code class="literal">@</code>", the string is
understood as Linux abstract namespace socket. The
datagram is accompanied by the process credentials of
the sending daemon, using SCM_CREDENTIALS.</p><p>For details about the algorithms check the
@@ -121,30 +121,29 @@
<code class="filename">sd-daemon.h</code> files. These
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-daemon</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="constant">libsystemd-daemon</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file. Alternatively, applications consuming these APIs
may copy the implementation into their source tree. For
more details about the reference implementation see
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>.</p><p>If the reference implementation is used as
drop-in files and -DDISABLE_SYSTEMD is set during
- compilation these functions will always return 0 and
- otherwise become a NOP.</p></div><div class="refsect1"><a name="idm259773776320"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$NOTIFY_SOCKET"><span class="term"><code class="varname">$NOTIFY_SOCKET</code></span><a class="headerlink" title="Permalink to this term" href="#%24NOTIFY_SOCKET">¶</a></dt><dd><p>Set by the init system
+ compilation, these functions will always return 0 and
+ otherwise become a NOP.</p></div><div class="refsect1"><a name="idm274679400816"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$NOTIFY_SOCKET"><span class="term"><code class="varname">$NOTIFY_SOCKET</code></span><a class="headerlink" title="Permalink to this term" href="#%24NOTIFY_SOCKET">¶</a></dt><dd><p>Set by the init system
for supervised processes for status
and start-up completion
notification. This environment variable
specifies the socket
<code class="function">sd_notify()</code> talks
- to. See above for details.</p></dd></dl></div></div><div class="refsect1"><a name="idm259773772416"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm259773771744"></a><p class="title"><b>Example 1. Start-up Notification</b></p><div class="example-contents"><p>When a daemon finished starting up, it
+ to. See above for details.</p></dd></dl></div></div><div class="refsect1"><a name="idm274679396912"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm274679396240"></a><p class="title"><b>Example 1. Start-up Notification</b></p><div class="example-contents"><p>When a daemon finished starting up, it
might issue the following call to notify
- the init system:</p><pre class="programlisting">sd_notify(0, "READY=1");</pre></div></div><br class="example-break"><div class="example"><a name="idm259773769696"></a><p class="title"><b>Example 2. Extended Start-up Notification</b></p><div class="example-contents"><p>A daemon could send the following after
+ the init system:</p><pre class="programlisting">sd_notify(0, "READY=1");</pre></div></div><br class="example-break"><div class="example"><a name="idm274679394192"></a><p class="title"><b>Example 2. Extended Start-up Notification</b></p><div class="example-contents"><p>A daemon could send the following after
completing initialization:</p><pre class="programlisting">sd_notifyf(0, "READY=1\n"
"STATUS=Processing requests...\n"
"MAINPID=%lu",
- (unsigned long) getpid());</pre></div></div><br class="example-break"><div class="example"><a name="idm259773767568"></a><p class="title"><b>Example 3. Error Cause Notification</b></p><div class="example-contents"><p>A daemon could send the following shortly before exiting, on failure</p><pre class="programlisting">sd_notifyf(0, "STATUS=Failed to start up: %s\n"
+ (unsigned long) getpid());</pre></div></div><br class="example-break"><div class="example"><a name="idm274679392064"></a><p class="title"><b>Example 3. Error Cause Notification</b></p><div class="example-contents"><p>A daemon could send the following shortly before exiting, on failure</p><pre class="programlisting">sd_notifyf(0, "STATUS=Failed to start up: %s\n"
"ERRNO=%i",
strerror(errno),
- errno);</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259768857824"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ errno);</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274674480384"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>,
<a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>,
diff --git a/man/sd_pid_get_machine_name.3 b/man/sd_pid_get_machine_name.3
new file mode 100644
index 0000000000..8561feef16
--- /dev/null
+++ b/man/sd_pid_get_machine_name.3
@@ -0,0 +1 @@
+.so man3/sd_pid_get_session.3
diff --git a/man/sd_pid_get_machine_name.html b/man/sd_pid_get_machine_name.html
index 7961d5da43..454fb18379 100644
--- a/man/sd_pid_get_machine_name.html
+++ b/man/sd_pid_get_machine_name.html
@@ -19,7 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name — Determine session, service, owner of a session or container/VM of a specific PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259781218496"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice — Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_slice</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">slice</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676596000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
used to determine the login session identifier of a
process identified by the specified process
identifier. The session identifier is a short string,
@@ -59,32 +61,40 @@
<code class="function">sd_pid_get_session()</code> will
fail. For processes not being part of a login session
and not being a shared process of a user this function
- will fail.</p><p><code class="function">sd_pid_machine_name()</code> may
- be used to determine the name of the VM or container
- is a member of. The machine name is a short string,
- suitable for usage in file system paths. The returned
- string needs to be freed with the libc
+ will fail.</p><p><code class="function">sd_pid_get_machine_name()</code>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">pid</code> parameter of any
- of these functions is passed as 0 the operation is
- executed for the calling process.</p></div><div class="refsect1"><a name="idm259785104832"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success these calls return 0 or a positive
+ call after use.</p><p><code class="function">sd_pid_get_slice()</code> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ for details about slices. The returned string needs to
+ be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p>If the <code class="varname">pid</code> parameter of any
+ of these functions is passed as 0, the operation is
+ executed for the calling process.</p></div><div class="refsect1"><a name="idm274676555824"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success, these calls return 0 or a positive
integer. On failure, these calls return a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259785103472"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274676666736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
<code class="function">sd_pid_get_unit()</code>,
<code class="function">sd_pid_get_user_unit()</code>,
- <code class="function">sd_pid_get_owner_uid()</code> and
- <code class="function">sd_pid_get_machine_name()</code>
- interfaces are available as shared library, which can
- be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="function">sd_pid_get_owner_uid()</code>,
+ <code class="function">sd_pid_get_machine_name()</code> and
+ <code class="function">sd_pid_get_slice()</code> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file.</p><p>Note that the login session identifier as
returned by <code class="function">sd_pid_get_session()</code>
is completely unrelated to the process session
identifier as returned by
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm259785087648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm274671644288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>,
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/sd_pid_get_owner_uid.3 b/man/sd_pid_get_owner_uid.3
new file mode 100644
index 0000000000..8561feef16
--- /dev/null
+++ b/man/sd_pid_get_owner_uid.3
@@ -0,0 +1 @@
+.so man3/sd_pid_get_session.3
diff --git a/man/sd_pid_get_owner_uid.html b/man/sd_pid_get_owner_uid.html
index 7961d5da43..454fb18379 100644
--- a/man/sd_pid_get_owner_uid.html
+++ b/man/sd_pid_get_owner_uid.html
@@ -19,7 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name — Determine session, service, owner of a session or container/VM of a specific PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259781218496"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice — Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_slice</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">slice</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676596000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
used to determine the login session identifier of a
process identified by the specified process
identifier. The session identifier is a short string,
@@ -59,32 +61,40 @@
<code class="function">sd_pid_get_session()</code> will
fail. For processes not being part of a login session
and not being a shared process of a user this function
- will fail.</p><p><code class="function">sd_pid_machine_name()</code> may
- be used to determine the name of the VM or container
- is a member of. The machine name is a short string,
- suitable for usage in file system paths. The returned
- string needs to be freed with the libc
+ will fail.</p><p><code class="function">sd_pid_get_machine_name()</code>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">pid</code> parameter of any
- of these functions is passed as 0 the operation is
- executed for the calling process.</p></div><div class="refsect1"><a name="idm259785104832"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success these calls return 0 or a positive
+ call after use.</p><p><code class="function">sd_pid_get_slice()</code> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ for details about slices. The returned string needs to
+ be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p>If the <code class="varname">pid</code> parameter of any
+ of these functions is passed as 0, the operation is
+ executed for the calling process.</p></div><div class="refsect1"><a name="idm274676555824"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success, these calls return 0 or a positive
integer. On failure, these calls return a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259785103472"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274676666736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
<code class="function">sd_pid_get_unit()</code>,
<code class="function">sd_pid_get_user_unit()</code>,
- <code class="function">sd_pid_get_owner_uid()</code> and
- <code class="function">sd_pid_get_machine_name()</code>
- interfaces are available as shared library, which can
- be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="function">sd_pid_get_owner_uid()</code>,
+ <code class="function">sd_pid_get_machine_name()</code> and
+ <code class="function">sd_pid_get_slice()</code> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file.</p><p>Note that the login session identifier as
returned by <code class="function">sd_pid_get_session()</code>
is completely unrelated to the process session
identifier as returned by
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm259785087648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm274671644288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>,
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/sd_pid_get_session.3 b/man/sd_pid_get_session.3
new file mode 100644
index 0000000000..333a01ae7d
--- /dev/null
+++ b/man/sd_pid_get_session.3
@@ -0,0 +1,109 @@
+'\" t
+.TH "SD_PID_GET_SESSION" "3" "" "systemd 208" "sd_pid_get_session"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice \- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'int\ sd_pid_get_session('u
+.BI "int sd_pid_get_session(pid_t\ " "pid" ", char**\ " "session" ");"
+.HP \w'int\ sd_pid_get_unit('u
+.BI "int sd_pid_get_unit(pid_t\ " "pid" ", char**\ " "unit" ");"
+.HP \w'int\ sd_pid_get_user_unit('u
+.BI "int sd_pid_get_user_unit(pid_t\ " "pid" ", char**\ " "unit" ");"
+.HP \w'int\ sd_pid_get_owner_uid('u
+.BI "int sd_pid_get_owner_uid(pid_t\ " "pid" ", uid_t*\ " "uid" ");"
+.HP \w'int\ sd_pid_get_machine_name('u
+.BI "int sd_pid_get_machine_name(pid_t\ " "pid" ", char**\ " "name" ");"
+.HP \w'int\ sd_pid_get_slice('u
+.BI "int sd_pid_get_slice(pid_t\ " "pid" ", char**\ " "slice" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_pid_get_session()\fR
+may be used to determine the login session identifier of a process identified by the specified process identifier\&. The session identifier is a short string, suitable for usage in file system paths\&. Note that not all processes are part of a login session (e\&.g\&. system service processes, user processes that are shared between multiple sessions of the same user, or kernel threads)\&. For processes not being part of a login session this function will fail\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_pid_get_unit()\fR
+may be used to determine the systemd system unit (i\&.e\&. system service) identifier of a process identified by the specified PID\&. The unit name is a short string, suitable for usage in file system paths\&. Note that not all processes are part of a system unit/service (e\&.g\&. user processes, or kernel threads)\&. For processes not being part of a systemd system unit this function will fail\&. (More specifically: this call will not work for processes that are part of user units, use
+\fBsd_pid_get_user_unit()\fR
+for that\&.) The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_pid_get_user_unit()\fR
+may be used to determine the systemd user unit (i\&.e\&. user service) identifier of a process identified by the specified PID\&. This is similar to
+\fBsd_pid_get_unit()\fR
+but applies to user units instead of system units\&.
+.PP
+\fBsd_pid_get_owner_uid()\fR
+may be used to determine the Unix user identifier of the owner of the session of a process identified the specified PID\&. Note that this function will succeed for user processes which are shared between multiple login sessions of the same user, where
+\fBsd_pid_get_session()\fR
+will fail\&. For processes not being part of a login session and not being a shared process of a user this function will fail\&.
+.PP
+\fBsd_pid_get_machine_name()\fR
+may be used to determine the name of the VM or container is a member of\&. The machine name is a short string, suitable for usage in file system paths\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_pid_get_slice()\fR
+may be used to determine the slice unit the process is a member of\&. See
+\fBsystemd.slice\fR(5)
+for details about slices\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+If the
+\fIpid\fR
+parameter of any of these functions is passed as 0, the operation is executed for the calling process\&.
+.SH "RETURN VALUE"
+.PP
+On success, these calls return 0 or a positive integer\&. On failure, these calls return a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_pid_get_session()\fR,
+\fBsd_pid_get_unit()\fR,
+\fBsd_pid_get_user_unit()\fR,
+\fBsd_pid_get_owner_uid()\fR,
+\fBsd_pid_get_machine_name()\fR
+and
+\fBsd_pid_get_slice()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.PP
+Note that the login session identifier as returned by
+\fBsd_pid_get_session()\fR
+is completely unrelated to the process session identifier as returned by
+\fBgetsid\fR(2)\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-login\fR(3),
+\fBsd_session_is_active\fR(3),
+\fBgetsid\fR(2),
+\fBsystemd.slice\fR(5)
diff --git a/man/sd_pid_get_session.html b/man/sd_pid_get_session.html
index 7961d5da43..454fb18379 100644
--- a/man/sd_pid_get_session.html
+++ b/man/sd_pid_get_session.html
@@ -19,7 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name — Determine session, service, owner of a session or container/VM of a specific PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259781218496"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice — Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_slice</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">slice</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676596000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
used to determine the login session identifier of a
process identified by the specified process
identifier. The session identifier is a short string,
@@ -59,32 +61,40 @@
<code class="function">sd_pid_get_session()</code> will
fail. For processes not being part of a login session
and not being a shared process of a user this function
- will fail.</p><p><code class="function">sd_pid_machine_name()</code> may
- be used to determine the name of the VM or container
- is a member of. The machine name is a short string,
- suitable for usage in file system paths. The returned
- string needs to be freed with the libc
+ will fail.</p><p><code class="function">sd_pid_get_machine_name()</code>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">pid</code> parameter of any
- of these functions is passed as 0 the operation is
- executed for the calling process.</p></div><div class="refsect1"><a name="idm259785104832"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success these calls return 0 or a positive
+ call after use.</p><p><code class="function">sd_pid_get_slice()</code> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ for details about slices. The returned string needs to
+ be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p>If the <code class="varname">pid</code> parameter of any
+ of these functions is passed as 0, the operation is
+ executed for the calling process.</p></div><div class="refsect1"><a name="idm274676555824"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success, these calls return 0 or a positive
integer. On failure, these calls return a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259785103472"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274676666736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
<code class="function">sd_pid_get_unit()</code>,
<code class="function">sd_pid_get_user_unit()</code>,
- <code class="function">sd_pid_get_owner_uid()</code> and
- <code class="function">sd_pid_get_machine_name()</code>
- interfaces are available as shared library, which can
- be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="function">sd_pid_get_owner_uid()</code>,
+ <code class="function">sd_pid_get_machine_name()</code> and
+ <code class="function">sd_pid_get_slice()</code> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file.</p><p>Note that the login session identifier as
returned by <code class="function">sd_pid_get_session()</code>
is completely unrelated to the process session
identifier as returned by
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm259785087648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm274671644288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>,
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml
index 543a5c0c72..e5c77090dd 100644
--- a/man/sd_pid_get_session.xml
+++ b/man/sd_pid_get_session.xml
@@ -48,7 +48,10 @@
<refname>sd_pid_get_user_unit</refname>
<refname>sd_pid_get_owner_uid</refname>
<refname>sd_pid_get_machine_name</refname>
- <refpurpose>Determine session, service, owner of a session or container/VM of a specific PID</refpurpose>
+ <refname>sd_pid_get_slice</refname>
+ <refpurpose>Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -84,6 +87,12 @@
<paramdef>pid_t <parameter>pid</parameter></paramdef>
<paramdef>char** <parameter>name</parameter></paramdef>
</funcprototype>
+
+ <funcprototype>
+ <funcdef>int <function>sd_pid_get_slice</function></funcdef>
+ <paramdef>pid_t <parameter>pid</parameter></paramdef>
+ <paramdef>char** <parameter>slice</parameter></paramdef>
+ </funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -138,23 +147,32 @@
and not being a shared process of a user this function
will fail.</para>
- <para><function>sd_pid_machine_name()</function> may
- be used to determine the name of the VM or container
- is a member of. The machine name is a short string,
- suitable for usage in file system paths. The returned
- string needs to be freed with the libc
+ <para><function>sd_pid_get_machine_name()</function>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
+ <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ call after use.</para>
+
+ <para><function>sd_pid_get_slice()</function> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for details about slices. The returned string needs to
+ be freed with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use.</para>
- <para>If the <literal>pid</literal> parameter of any
- of these functions is passed as 0 the operation is
+ <para>If the <varname>pid</varname> parameter of any
+ of these functions is passed as 0, the operation is
executed for the calling process.</para>
</refsect1>
<refsect1>
<title>Return Value</title>
- <para>On success these calls return 0 or a positive
+ <para>On success, these calls return 0 or a positive
integer. On failure, these calls return a negative
errno-style error code.</para>
</refsect1>
@@ -165,12 +183,12 @@
<para>The <function>sd_pid_get_session()</function>,
<function>sd_pid_get_unit()</function>,
<function>sd_pid_get_user_unit()</function>,
- <function>sd_pid_get_owner_uid()</function> and
- <function>sd_pid_get_machine_name()</function>
- interfaces are available as shared library, which can
- be compiled and linked to with the
- <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <function>sd_pid_get_owner_uid()</function>,
+ <function>sd_pid_get_machine_name()</function> and
+ <function>sd_pid_get_slice()</function> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
<para>Note that the login session identifier as
@@ -187,7 +205,8 @@
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_session_is_active</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>getsid</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>getsid</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/sd_pid_get_slice.3 b/man/sd_pid_get_slice.3
new file mode 100644
index 0000000000..8561feef16
--- /dev/null
+++ b/man/sd_pid_get_slice.3
@@ -0,0 +1 @@
+.so man3/sd_pid_get_session.3
diff --git a/man/sd_pid_get_slice.html b/man/sd_pid_get_slice.html
new file mode 100644
index 0000000000..454fb18379
--- /dev/null
+++ b/man/sd_pid_get_slice.html
@@ -0,0 +1,100 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>sd_pid_get_session</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice — Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_slice</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">slice</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676596000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
+ used to determine the login session identifier of a
+ process identified by the specified process
+ identifier. The session identifier is a short string,
+ suitable for usage in file system paths. Note that not
+ all processes are part of a login session (e.g. system
+ service processes, user processes that are shared
+ between multiple sessions of the same user, or kernel
+ threads). For processes not being part of a login
+ session this function will fail. The returned string
+ needs to be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_pid_get_unit()</code> may be
+ used to determine the systemd system unit (i.e. system
+ service) identifier of a process identified by the
+ specified PID. The unit name is a short string,
+ suitable for usage in file system paths. Note that not
+ all processes are part of a system unit/service
+ (e.g. user processes, or kernel threads). For
+ processes not being part of a systemd system unit this
+ function will fail. (More specifically: this call will
+ not work for processes that are part of user units,
+ use <code class="function">sd_pid_get_user_unit()</code> for
+ that.) The returned string needs to be freed with the
+ libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_pid_get_user_unit()</code> may
+ be used to determine the systemd user unit (i.e. user
+ service) identifier of a process identified by the
+ specified PID. This is similar to
+ <code class="function">sd_pid_get_unit()</code> but applies to
+ user units instead of system units.</p><p><code class="function">sd_pid_get_owner_uid()</code> may
+ be used to determine the Unix user identifier of the
+ owner of the session of a process identified the
+ specified PID. Note that this function will succeed
+ for user processes which are shared between multiple
+ login sessions of the same user, where
+ <code class="function">sd_pid_get_session()</code> will
+ fail. For processes not being part of a login session
+ and not being a shared process of a user this function
+ will fail.</p><p><code class="function">sd_pid_get_machine_name()</code>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_pid_get_slice()</code> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ for details about slices. The returned string needs to
+ be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p>If the <code class="varname">pid</code> parameter of any
+ of these functions is passed as 0, the operation is
+ executed for the calling process.</p></div><div class="refsect1"><a name="idm274676555824"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success, these calls return 0 or a positive
+ integer. On failure, these calls return a negative
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274676666736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
+ <code class="function">sd_pid_get_unit()</code>,
+ <code class="function">sd_pid_get_user_unit()</code>,
+ <code class="function">sd_pid_get_owner_uid()</code>,
+ <code class="function">sd_pid_get_machine_name()</code> and
+ <code class="function">sd_pid_get_slice()</code> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p><p>Note that the login session identifier as
+ returned by <code class="function">sd_pid_get_session()</code>
+ is completely unrelated to the process session
+ identifier as returned by
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm274671644288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
+ <a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>,
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ </p></div></div></body></html>
diff --git a/man/sd_pid_get_unit.3 b/man/sd_pid_get_unit.3
new file mode 100644
index 0000000000..8561feef16
--- /dev/null
+++ b/man/sd_pid_get_unit.3
@@ -0,0 +1 @@
+.so man3/sd_pid_get_session.3
diff --git a/man/sd_pid_get_unit.html b/man/sd_pid_get_unit.html
index 7961d5da43..454fb18379 100644
--- a/man/sd_pid_get_unit.html
+++ b/man/sd_pid_get_unit.html
@@ -19,7 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name — Determine session, service, owner of a session or container/VM of a specific PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259781218496"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice — Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_slice</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">slice</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676596000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
used to determine the login session identifier of a
process identified by the specified process
identifier. The session identifier is a short string,
@@ -59,32 +61,40 @@
<code class="function">sd_pid_get_session()</code> will
fail. For processes not being part of a login session
and not being a shared process of a user this function
- will fail.</p><p><code class="function">sd_pid_machine_name()</code> may
- be used to determine the name of the VM or container
- is a member of. The machine name is a short string,
- suitable for usage in file system paths. The returned
- string needs to be freed with the libc
+ will fail.</p><p><code class="function">sd_pid_get_machine_name()</code>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">pid</code> parameter of any
- of these functions is passed as 0 the operation is
- executed for the calling process.</p></div><div class="refsect1"><a name="idm259785104832"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success these calls return 0 or a positive
+ call after use.</p><p><code class="function">sd_pid_get_slice()</code> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ for details about slices. The returned string needs to
+ be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p>If the <code class="varname">pid</code> parameter of any
+ of these functions is passed as 0, the operation is
+ executed for the calling process.</p></div><div class="refsect1"><a name="idm274676555824"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success, these calls return 0 or a positive
integer. On failure, these calls return a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259785103472"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274676666736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
<code class="function">sd_pid_get_unit()</code>,
<code class="function">sd_pid_get_user_unit()</code>,
- <code class="function">sd_pid_get_owner_uid()</code> and
- <code class="function">sd_pid_get_machine_name()</code>
- interfaces are available as shared library, which can
- be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="function">sd_pid_get_owner_uid()</code>,
+ <code class="function">sd_pid_get_machine_name()</code> and
+ <code class="function">sd_pid_get_slice()</code> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file.</p><p>Note that the login session identifier as
returned by <code class="function">sd_pid_get_session()</code>
is completely unrelated to the process session
identifier as returned by
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm259785087648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm274671644288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>,
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/sd_pid_get_user_unit.3 b/man/sd_pid_get_user_unit.3
new file mode 100644
index 0000000000..8561feef16
--- /dev/null
+++ b/man/sd_pid_get_user_unit.3
@@ -0,0 +1 @@
+.so man3/sd_pid_get_session.3
diff --git a/man/sd_pid_get_user_unit.html b/man/sd_pid_get_user_unit.html
index 7961d5da43..454fb18379 100644
--- a/man/sd_pid_get_user_unit.html
+++ b/man/sd_pid_get_user_unit.html
@@ -19,7 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name — Determine session, service, owner of a session or container/VM of a specific PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259781218496"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_pid_get_session"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name, sd_pid_get_slice — Determine session, service, owner of a
+ session, container/VM or slice of a specific
+ PID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_session</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_user_unit</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">unit</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_owner_uid</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_machine_name</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">name</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_pid_get_slice</b>(</code></td><td>pid_t <var class="pdparam">pid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">slice</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274676596000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_pid_get_session()</code> may be
used to determine the login session identifier of a
process identified by the specified process
identifier. The session identifier is a short string,
@@ -59,32 +61,40 @@
<code class="function">sd_pid_get_session()</code> will
fail. For processes not being part of a login session
and not being a shared process of a user this function
- will fail.</p><p><code class="function">sd_pid_machine_name()</code> may
- be used to determine the name of the VM or container
- is a member of. The machine name is a short string,
- suitable for usage in file system paths. The returned
- string needs to be freed with the libc
+ will fail.</p><p><code class="function">sd_pid_get_machine_name()</code>
+ may be used to determine the name of the VM or
+ container is a member of. The machine name is a short
+ string, suitable for usage in file system paths. The
+ returned string needs to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">pid</code> parameter of any
- of these functions is passed as 0 the operation is
- executed for the calling process.</p></div><div class="refsect1"><a name="idm259785104832"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success these calls return 0 or a positive
+ call after use.</p><p><code class="function">sd_pid_get_slice()</code> may be
+ used to determine the slice unit the process is a
+ member of. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
+ for details about slices. The returned string needs to
+ be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p>If the <code class="varname">pid</code> parameter of any
+ of these functions is passed as 0, the operation is
+ executed for the calling process.</p></div><div class="refsect1"><a name="idm274676555824"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success, these calls return 0 or a positive
integer. On failure, these calls return a negative
- errno-style error code.</p></div><div class="refsect1"><a name="idm259785103472"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
+ errno-style error code.</p></div><div class="refsect1"><a name="idm274676666736"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_pid_get_session()</code>,
<code class="function">sd_pid_get_unit()</code>,
<code class="function">sd_pid_get_user_unit()</code>,
- <code class="function">sd_pid_get_owner_uid()</code> and
- <code class="function">sd_pid_get_machine_name()</code>
- interfaces are available as shared library, which can
- be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ <code class="function">sd_pid_get_owner_uid()</code>,
+ <code class="function">sd_pid_get_machine_name()</code> and
+ <code class="function">sd_pid_get_slice()</code> interfaces are
+ available as shared library, which can be compiled and
+ linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
file.</p><p>Note that the login session identifier as
returned by <code class="function">sd_pid_get_session()</code>
is completely unrelated to the process session
identifier as returned by
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm259785087648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>.</p></div><div class="refsect1"><a name="idm274671644288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>,
- <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>
+ <a href="getsid.html"><span class="citerefentry"><span class="refentrytitle">getsid</span>(2)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/sd_readahead.3 b/man/sd_readahead.3
new file mode 100644
index 0000000000..aed430b79a
--- /dev/null
+++ b/man/sd_readahead.3
@@ -0,0 +1,101 @@
+'\" t
+.TH "SD_READAHEAD" "3" "" "systemd 208" "sd_readahead"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_readahead \- Control ongoing disk boot\-time read\-ahead operations
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include "sd\-readahead\&.h"
+.fi
+.ft
+.HP \w'int\ sd_readahead('u
+.BI "int sd_readahead(const\ char\ *" "action" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_readahead()\fR
+may be called by programs involved with early boot\-up to control ongoing boot\-time disk read\-ahead operations\&. It may be used to terminate read\-ahead operations in case an uncommon disk access pattern is to be expected and hence read\-ahead replay or collection is unlikely to have the desired speed\-up effect on the current or future boot\-ups\&.
+.PP
+The
+\fIaction\fR
+should be one of the following strings:
+.PP
+cancel
+.RS 4
+Terminates read\-ahead data collection, and drops all read\-ahead data collected during this boot\-up\&.
+.RE
+.PP
+done
+.RS 4
+Terminates read\-ahead data collection, but keeps all read\-ahead data collected during this boot\-up around for use during subsequent boot\-ups\&.
+.RE
+.PP
+noreplay
+.RS 4
+Terminates read\-ahead replay\&.
+.RE
+.SH "RETURN VALUE"
+.PP
+On failure, these calls return a negative errno\-style error code\&. It is generally recommended to ignore the return value of this call\&.
+.SH "NOTES"
+.PP
+This function is provided by the reference implementation of APIs for controlling boot\-time read\-ahead and distributed with the systemd package\&. The algorithm it implements is simple, and can easily be reimplemented in daemons if it is important to support this interface without using the reference implementation\&.
+.PP
+Internally, this function creates a file in
+/run/systemd/readahead/
+which is then used as flag file to notify the read\-ahead subsystem\&.
+.PP
+For details about the algorithm check the liberally licensed reference implementation sources:
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/readahead/sd-readahead.c\fR\m[]
+and
+\m[blue]\fB\%http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-readahead.h\fR\m[]
+.PP
+\fBsd_readahead()\fR
+is implemented in the reference implementation\*(Aqs drop\-in
+sd\-readahead\&.c
+and
+sd\-readahead\&.h
+files\&. It is recommended that applications consuming this API copy the implementation into their source tree\&. For more details about the reference implementation see
+\fBsd-readahead\fR(3)
+.PP
+If \-DDISABLE_SYSTEMD is set during compilation, this function will always return 0 and otherwise become a NOP\&.
+.SH "EXAMPLES"
+.PP
+\fBExample\ \&1.\ \&Cancelling all read-ahead operations\fR
+.PP
+During boots where SELinux has to relabel the file system hierarchy, it will create a large amount of disk accesses that are not necessary during normal boots\&. Hence it is a good idea to disable both read\-ahead replay and read\-ahead collection\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+sd_readahead("cancel");
+sd_readahead("noreplay");
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-readahead\fR(3),
+\fBdaemon\fR(7)
diff --git a/man/sd_readahead.html b/man/sd_readahead.html
index 9e453e850e..5c6bef7453 100644
--- a/man/sd_readahead.html
+++ b/man/sd_readahead.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_readahead"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_readahead — Control ongoing disk boot-time read-ahead operations</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include "sd-readahead.h"</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_readahead</b>(</code></td><td>const char *<var class="pdparam">action</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259783404480"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_readahead()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_readahead"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_readahead — Control ongoing disk boot-time read-ahead operations</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include "sd-readahead.h"</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_readahead</b>(</code></td><td>const char *<var class="pdparam">action</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274682558800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_readahead()</code> may be
called by programs involved with early boot-up to
control ongoing boot-time disk read-ahead operations. It may be
used to terminate read-ahead operations in case an
@@ -35,9 +35,9 @@
read-ahead data collected during this
boot-up around for use during
subsequent boot-ups.</p></dd><dt id="noreplay"><span class="term">noreplay</span><a class="headerlink" title="Permalink to this term" href="#noreplay">¶</a></dt><dd><p>Terminates read-ahead
- replay.</p></dd></dl></div></div><div class="refsect1"><a name="idm259779561584"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
+ replay.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682550656"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On failure, these calls return a negative
errno-style error code. It is generally recommended to
- ignore the return value of this call.</p></div><div class="refsect1"><a name="idm259779560224"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
+ ignore the return value of this call.</p></div><div class="refsect1"><a name="idm274682549296"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This function is provided by the reference
implementation of APIs for controlling boot-time
read-ahead and distributed with the systemd
package. The algorithm it implements is simple, and
@@ -56,15 +56,15 @@
recommended that applications consuming this API copy
the implementation into their source tree. For more
details about the reference implementation see
- <a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a></p><p>If -DDISABLE_SYSTEMD is set during compilation
+ <a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a></p><p>If -DDISABLE_SYSTEMD is set during compilation,
this function will always return 0 and otherwise
- become a NOP.</p></div><div class="refsect1"><a name="idm259779552080"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm259779551408"></a><p class="title"><b>Example 1. Cancelling all read-ahead operations</b></p><div class="example-contents"><p>During boots where SELinux has to
+ become a NOP.</p></div><div class="refsect1"><a name="idm274686496128"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm274686495456"></a><p class="title"><b>Example 1. Cancelling all read-ahead operations</b></p><div class="example-contents"><p>During boots where SELinux has to
relabel the file system hierarchy, it will
create a large amount of disk accesses that
are not necessary during normal boots. Hence
it is a good idea to disable both read-ahead replay and read-ahead collection.
</p><pre class="programlisting">sd_readahead("cancel");
-sd_readahead("noreplay");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259783503488"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+sd_readahead("noreplay");</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274686493088"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a>,
<a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>
diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml
index c26d5c63e3..bb01bcfd89 100644
--- a/man/sd_readahead.xml
+++ b/man/sd_readahead.xml
@@ -142,7 +142,7 @@
details about the reference implementation see
<citerefentry><refentrytitle>sd-readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry></para>
- <para>If -DDISABLE_SYSTEMD is set during compilation
+ <para>If -DDISABLE_SYSTEMD is set during compilation,
this function will always return 0 and otherwise
become a NOP.</para>
</refsect1>
diff --git a/man/sd_seat_can_multi_session.3 b/man/sd_seat_can_multi_session.3
new file mode 100644
index 0000000000..8d8b08d572
--- /dev/null
+++ b/man/sd_seat_can_multi_session.3
@@ -0,0 +1 @@
+.so man3/sd_seat_get_active.3
diff --git a/man/sd_seat_can_multi_session.html b/man/sd_seat_can_multi_session.html
index 812d7ca02c..24bcc1b39c 100644
--- a/man/sd_seat_can_multi_session.html
+++ b/man/sd_seat_can_multi_session.html
@@ -19,29 +19,30 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_seat_get_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session — Determine state of a specific seat</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_active</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_sessions</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var>, </td></tr><tr><td> </td><td>uid_t** <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>unsigned* <var class="pdparam">n_uids</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_multi_session</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_tty</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_graphical</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259794011072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_seat_get_active()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_seat_get_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session — Determine state of a specific seat</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_active</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_sessions</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var>, </td></tr><tr><td> </td><td>uid_t** <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">n_uids</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_multi_session</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_tty</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_graphical</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274681290528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_seat_get_active()</code> may be
used to determine which session is currently active on
a seat, if there is any. Returns the session
identifier and the user identifier of the Unix user
the session is belonging to. Either the session or the
- user identifier parameter can be passed NULL, in
- case only one of the parameters shall be queried. The
- returned string needs to be freed with the libc
+ user identifier parameter can be passed
+ <code class="constant">NULL</code>, in case only one of the
+ parameters shall be queried. The returned string needs
+ to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_seat_get_sessions()</code> may
be used to determine all sessions on the specified
- seat. Returns two arrays, one (NULL terminated) with
+ seat. Returns two arrays, one (<code class="constant">NULL</code> terminated) with
the session identifiers of the sessions and one with
the user identifiers of the Unix users the sessions
belong to. An additional parameter may be used to
return the number of entries in the latter array. The
two arrays and the latter parameter may be passed as
- NULL in case these values need not to be
+ <code class="constant">NULL</code> in case these values need not to be
determined. The arrays and the strings referenced by
them need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p><code class="function">sd_seat_can_multi_session()</code>
may be used to determine whether a specific seat is
capable of multi-session, i.e. allows multiple login
@@ -51,29 +52,29 @@
functionality, i.e. is useful as a text console.</p><p><code class="function">sd_seat_can_graphical()</code> may
be used to determine whether a specific seat provides
graphics functionality, i.e. is useful as a graphics
- display.</p><p>If the <code class="literal">seat</code> parameter of any
- of these functions is passed as NULL the operation is
- executed for the seat of the session of the calling
- process, if there is any.</p></div><div class="refsect1"><a name="idm259797900912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p> On success
+ display.</p><p>If the <code class="varname">seat</code> parameter of any
+ of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the seat of the session of the calling process, if
+ there is any.</p></div><div class="refsect1"><a name="idm274681278432"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p> On success
<code class="function">sd_seat_get_active()</code>
returns 0 or a positive integer. On success
<code class="function">sd_seat_get_sessions()</code> returns
the number of entries in the session identifier
- array. If the test succeeds
+ array. If the test succeeds,
<code class="function">sd_seat_can_multi_session</code>,
<code class="function">sd_seat_can_tty</code> and
<code class="function">sd_seat_can_graphical</code> return a
positive integer, if it fails 0. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797895856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_seat_get_active()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274681265984"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_seat_get_active()</code>,
<code class="function">sd_seat_get_sessions()</code>,
<code class="function">sd_seat_can_multi_session()</code>,
<code class="function">sd_seat_can_tty()</code> and
<code class="function">sd_seat_can_grapical()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259797889376"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681259744"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_seat_get_active.3 b/man/sd_seat_get_active.3
new file mode 100644
index 0000000000..f523dee49e
--- /dev/null
+++ b/man/sd_seat_get_active.3
@@ -0,0 +1,100 @@
+'\" t
+.TH "SD_SEAT_GET_ACTIVE" "3" "" "systemd 208" "sd_seat_get_active"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session \- Determine state of a specific seat
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'int\ sd_seat_get_active('u
+.BI "int sd_seat_get_active(const\ char*\ " "seat" ", char**\ " "session" ", uid_t*\ " "uid" ");"
+.HP \w'int\ sd_seat_get_sessions('u
+.BI "int sd_seat_get_sessions(const\ char*\ " "seat" ", char***\ " "sessions" ", uid_t**\ " "uid" ", unsigned\ int*\ " "n_uids" ");"
+.HP \w'int\ sd_seat_can_multi_session('u
+.BI "int sd_seat_can_multi_session(const\ char*\ " "seat" ");"
+.HP \w'int\ sd_seat_can_tty('u
+.BI "int sd_seat_can_tty(const\ char*\ " "seat" ");"
+.HP \w'int\ sd_seat_can_graphical('u
+.BI "int sd_seat_can_graphical(const\ char*\ " "seat" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_seat_get_active()\fR
+may be used to determine which session is currently active on a seat, if there is any\&. Returns the session identifier and the user identifier of the Unix user the session is belonging to\&. Either the session or the user identifier parameter can be passed
+\fBNULL\fR, in case only one of the parameters shall be queried\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_seat_get_sessions()\fR
+may be used to determine all sessions on the specified seat\&. Returns two arrays, one (\fBNULL\fR
+terminated) with the session identifiers of the sessions and one with the user identifiers of the Unix users the sessions belong to\&. An additional parameter may be used to return the number of entries in the latter array\&. The two arrays and the latter parameter may be passed as
+\fBNULL\fR
+in case these values need not to be determined\&. The arrays and the strings referenced by them need to be freed with the libc
+\fBfree\fR(3)
+call after use\&. Note that instead of an empty array
+\fBNULL\fR
+may be returned and should be considered equivalent to an empty array\&.
+.PP
+\fBsd_seat_can_multi_session()\fR
+may be used to determine whether a specific seat is capable of multi\-session, i\&.e\&. allows multiple login sessions in parallel (with only one being active at a time)\&.
+.PP
+\fBsd_seat_can_tty()\fR
+may be used to determine whether a specific seat provides TTY functionality, i\&.e\&. is useful as a text console\&.
+.PP
+\fBsd_seat_can_graphical()\fR
+may be used to determine whether a specific seat provides graphics functionality, i\&.e\&. is useful as a graphics display\&.
+.PP
+If the
+\fIseat\fR
+parameter of any of these functions is passed as
+\fBNULL\fR, the operation is executed for the seat of the session of the calling process, if there is any\&.
+.SH "RETURN VALUE"
+.PP
+On success
+\fBsd_seat_get_active()\fR
+returns 0 or a positive integer\&. On success
+\fBsd_seat_get_sessions()\fR
+returns the number of entries in the session identifier array\&. If the test succeeds,
+\fBsd_seat_can_multi_session\fR,
+\fBsd_seat_can_tty\fR
+and
+\fBsd_seat_can_graphical\fR
+return a positive integer, if it fails 0\&. On failure, these calls return a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_seat_get_active()\fR,
+\fBsd_seat_get_sessions()\fR,
+\fBsd_seat_can_multi_session()\fR,
+\fBsd_seat_can_tty()\fR
+and
+\fBsd_seat_can_grapical()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-login\fR(3),
+\fBsd_session_get_seat\fR(3)
diff --git a/man/sd_seat_get_active.html b/man/sd_seat_get_active.html
index 812d7ca02c..24bcc1b39c 100644
--- a/man/sd_seat_get_active.html
+++ b/man/sd_seat_get_active.html
@@ -19,29 +19,30 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_seat_get_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session — Determine state of a specific seat</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_active</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_sessions</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var>, </td></tr><tr><td> </td><td>uid_t** <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>unsigned* <var class="pdparam">n_uids</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_multi_session</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_tty</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_graphical</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259794011072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_seat_get_active()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_seat_get_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session — Determine state of a specific seat</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_active</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_sessions</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var>, </td></tr><tr><td> </td><td>uid_t** <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">n_uids</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_multi_session</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_tty</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_graphical</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274681290528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_seat_get_active()</code> may be
used to determine which session is currently active on
a seat, if there is any. Returns the session
identifier and the user identifier of the Unix user
the session is belonging to. Either the session or the
- user identifier parameter can be passed NULL, in
- case only one of the parameters shall be queried. The
- returned string needs to be freed with the libc
+ user identifier parameter can be passed
+ <code class="constant">NULL</code>, in case only one of the
+ parameters shall be queried. The returned string needs
+ to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_seat_get_sessions()</code> may
be used to determine all sessions on the specified
- seat. Returns two arrays, one (NULL terminated) with
+ seat. Returns two arrays, one (<code class="constant">NULL</code> terminated) with
the session identifiers of the sessions and one with
the user identifiers of the Unix users the sessions
belong to. An additional parameter may be used to
return the number of entries in the latter array. The
two arrays and the latter parameter may be passed as
- NULL in case these values need not to be
+ <code class="constant">NULL</code> in case these values need not to be
determined. The arrays and the strings referenced by
them need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p><code class="function">sd_seat_can_multi_session()</code>
may be used to determine whether a specific seat is
capable of multi-session, i.e. allows multiple login
@@ -51,29 +52,29 @@
functionality, i.e. is useful as a text console.</p><p><code class="function">sd_seat_can_graphical()</code> may
be used to determine whether a specific seat provides
graphics functionality, i.e. is useful as a graphics
- display.</p><p>If the <code class="literal">seat</code> parameter of any
- of these functions is passed as NULL the operation is
- executed for the seat of the session of the calling
- process, if there is any.</p></div><div class="refsect1"><a name="idm259797900912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p> On success
+ display.</p><p>If the <code class="varname">seat</code> parameter of any
+ of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the seat of the session of the calling process, if
+ there is any.</p></div><div class="refsect1"><a name="idm274681278432"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p> On success
<code class="function">sd_seat_get_active()</code>
returns 0 or a positive integer. On success
<code class="function">sd_seat_get_sessions()</code> returns
the number of entries in the session identifier
- array. If the test succeeds
+ array. If the test succeeds,
<code class="function">sd_seat_can_multi_session</code>,
<code class="function">sd_seat_can_tty</code> and
<code class="function">sd_seat_can_graphical</code> return a
positive integer, if it fails 0. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797895856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_seat_get_active()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274681265984"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_seat_get_active()</code>,
<code class="function">sd_seat_get_sessions()</code>,
<code class="function">sd_seat_can_multi_session()</code>,
<code class="function">sd_seat_can_tty()</code> and
<code class="function">sd_seat_can_grapical()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259797889376"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681259744"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml
index 07e018de13..1610d3efe8 100644
--- a/man/sd_seat_get_active.xml
+++ b/man/sd_seat_get_active.xml
@@ -65,7 +65,7 @@
<paramdef>const char* <parameter>seat</parameter></paramdef>
<paramdef>char*** <parameter>sessions</parameter></paramdef>
<paramdef>uid_t** <parameter>uid</parameter></paramdef>
- <paramdef>unsigned* <parameter>n_uids</parameter></paramdef>
+ <paramdef>unsigned int* <parameter>n_uids</parameter></paramdef>
</funcprototype>
<funcprototype>
@@ -93,26 +93,27 @@
a seat, if there is any. Returns the session
identifier and the user identifier of the Unix user
the session is belonging to. Either the session or the
- user identifier parameter can be passed NULL, in
- case only one of the parameters shall be queried. The
- returned string needs to be freed with the libc
+ user identifier parameter can be passed
+ <constant>NULL</constant>, in case only one of the
+ parameters shall be queried. The returned string needs
+ to be freed with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use.</para>
<para><function>sd_seat_get_sessions()</function> may
be used to determine all sessions on the specified
- seat. Returns two arrays, one (NULL terminated) with
+ seat. Returns two arrays, one (<constant>NULL</constant> terminated) with
the session identifiers of the sessions and one with
the user identifiers of the Unix users the sessions
belong to. An additional parameter may be used to
return the number of entries in the latter array. The
two arrays and the latter parameter may be passed as
- NULL in case these values need not to be
+ <constant>NULL</constant> in case these values need not to be
determined. The arrays and the strings referenced by
them need to be freed with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <constant>NULL</constant> may be returned and should be considered
equivalent to an empty array.</para>
<para><function>sd_seat_can_multi_session()</function>
@@ -130,10 +131,11 @@
graphics functionality, i.e. is useful as a graphics
display.</para>
- <para>If the <literal>seat</literal> parameter of any
- of these functions is passed as NULL the operation is
- executed for the seat of the session of the calling
- process, if there is any.</para>
+ <para>If the <varname>seat</varname> parameter of any
+ of these functions is passed as
+ <constant>NULL</constant>, the operation is executed
+ for the seat of the session of the calling process, if
+ there is any.</para>
</refsect1>
<refsect1>
@@ -144,7 +146,7 @@
returns 0 or a positive integer. On success
<function>sd_seat_get_sessions()</function> returns
the number of entries in the session identifier
- array. If the test succeeds
+ array. If the test succeeds,
<function>sd_seat_can_multi_session</function>,
<function>sd_seat_can_tty</function> and
<function>sd_seat_can_graphical</function> return a
@@ -162,8 +164,7 @@
<function>sd_seat_can_grapical()</function> interfaces
are available as shared library, which can be compiled
and linked to with the
- <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_seat_get_sessions.3 b/man/sd_seat_get_sessions.3
new file mode 100644
index 0000000000..8d8b08d572
--- /dev/null
+++ b/man/sd_seat_get_sessions.3
@@ -0,0 +1 @@
+.so man3/sd_seat_get_active.3
diff --git a/man/sd_seat_get_sessions.html b/man/sd_seat_get_sessions.html
index 812d7ca02c..24bcc1b39c 100644
--- a/man/sd_seat_get_sessions.html
+++ b/man/sd_seat_get_sessions.html
@@ -19,29 +19,30 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_seat_get_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session — Determine state of a specific seat</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_active</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_sessions</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var>, </td></tr><tr><td> </td><td>uid_t** <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>unsigned* <var class="pdparam">n_uids</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_multi_session</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_tty</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_graphical</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259794011072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_seat_get_active()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_seat_get_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_seat_get_active, sd_seat_get_sessions, sd_seat_can_multi_session — Determine state of a specific seat</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_active</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_get_sessions</b>(</code></td><td>const char* <var class="pdparam">seat</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var>, </td></tr><tr><td> </td><td>uid_t** <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">n_uids</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_multi_session</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_tty</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_seat_can_graphical</b>(</code></td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274681290528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_seat_get_active()</code> may be
used to determine which session is currently active on
a seat, if there is any. Returns the session
identifier and the user identifier of the Unix user
the session is belonging to. Either the session or the
- user identifier parameter can be passed NULL, in
- case only one of the parameters shall be queried. The
- returned string needs to be freed with the libc
+ user identifier parameter can be passed
+ <code class="constant">NULL</code>, in case only one of the
+ parameters shall be queried. The returned string needs
+ to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_seat_get_sessions()</code> may
be used to determine all sessions on the specified
- seat. Returns two arrays, one (NULL terminated) with
+ seat. Returns two arrays, one (<code class="constant">NULL</code> terminated) with
the session identifiers of the sessions and one with
the user identifiers of the Unix users the sessions
belong to. An additional parameter may be used to
return the number of entries in the latter array. The
two arrays and the latter parameter may be passed as
- NULL in case these values need not to be
+ <code class="constant">NULL</code> in case these values need not to be
determined. The arrays and the strings referenced by
them need to be freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use. Note that instead of an empty array
- NULL may be returned and should be considered
+ <code class="constant">NULL</code> may be returned and should be considered
equivalent to an empty array.</p><p><code class="function">sd_seat_can_multi_session()</code>
may be used to determine whether a specific seat is
capable of multi-session, i.e. allows multiple login
@@ -51,29 +52,29 @@
functionality, i.e. is useful as a text console.</p><p><code class="function">sd_seat_can_graphical()</code> may
be used to determine whether a specific seat provides
graphics functionality, i.e. is useful as a graphics
- display.</p><p>If the <code class="literal">seat</code> parameter of any
- of these functions is passed as NULL the operation is
- executed for the seat of the session of the calling
- process, if there is any.</p></div><div class="refsect1"><a name="idm259797900912"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p> On success
+ display.</p><p>If the <code class="varname">seat</code> parameter of any
+ of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the seat of the session of the calling process, if
+ there is any.</p></div><div class="refsect1"><a name="idm274681278432"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p> On success
<code class="function">sd_seat_get_active()</code>
returns 0 or a positive integer. On success
<code class="function">sd_seat_get_sessions()</code> returns
the number of entries in the session identifier
- array. If the test succeeds
+ array. If the test succeeds,
<code class="function">sd_seat_can_multi_session</code>,
<code class="function">sd_seat_can_tty</code> and
<code class="function">sd_seat_can_graphical</code> return a
positive integer, if it fails 0. On failure, these
- calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm259797895856"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_seat_get_active()</code>,
+ calls return a negative errno-style error code.</p></div><div class="refsect1"><a name="idm274681265984"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_seat_get_active()</code>,
<code class="function">sd_seat_get_sessions()</code>,
<code class="function">sd_seat_can_multi_session()</code>,
<code class="function">sd_seat_can_tty()</code> and
<code class="function">sd_seat_can_grapical()</code> interfaces
are available as shared library, which can be compiled
and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259797889376"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274681259744"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a>
diff --git a/man/sd_session_get_class.3 b/man/sd_session_get_class.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_class.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_class.html b/man/sd_session_get_class.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_class.html
+++ b/man/sd_session_get_class.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_display.3 b/man/sd_session_get_display.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_display.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_display.html b/man/sd_session_get_display.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_display.html
+++ b/man/sd_session_get_display.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_seat.3 b/man/sd_session_get_seat.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_seat.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_seat.html b/man/sd_session_get_seat.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_seat.html
+++ b/man/sd_session_get_seat.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_service.3 b/man/sd_session_get_service.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_service.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_service.html b/man/sd_session_get_service.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_service.html
+++ b/man/sd_session_get_service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_state.3 b/man/sd_session_get_state.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_state.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_state.html b/man/sd_session_get_state.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_state.html
+++ b/man/sd_session_get_state.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_tty.3 b/man/sd_session_get_tty.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_tty.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_tty.html b/man/sd_session_get_tty.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_tty.html
+++ b/man/sd_session_get_tty.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_type.3 b/man/sd_session_get_type.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_type.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_type.html b/man/sd_session_get_type.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_type.html
+++ b/man/sd_session_get_type.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_uid.3 b/man/sd_session_get_uid.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_uid.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_uid.html b/man/sd_session_get_uid.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_get_uid.html
+++ b/man/sd_session_get_uid.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_get_vt.3 b/man/sd_session_get_vt.3
new file mode 100644
index 0000000000..b9ad5cd929
--- /dev/null
+++ b/man/sd_session_get_vt.3
@@ -0,0 +1 @@
+.so man3/sd_session_is_active.3
diff --git a/man/sd_session_get_vt.html b/man/sd_session_get_vt.html
new file mode 100644
index 0000000000..fdb6e84037
--- /dev/null
+++ b/man/sd_session_get_vt.html
@@ -0,0 +1,125 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>sd_session_is_active</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ be used to determine whether the session identified by
+ the specified session identifier is currently active
+ (i.e. currently in the foreground and available for
+ user input) or not.</p><p><code class="function">sd_session_get_state()</code> may
+ be used to determine the state of the session
+ identified by the specified session identifier. The
+ following states are currently known:
+ "<code class="literal">online</code>" (session logged in, but
+ session not active, i.e. not in the foreground),
+ "<code class="literal">active</code>" (session logged in and
+ active, i.e. in the foreground),
+ "<code class="literal">closing</code>" (session nominally logged
+ out, but some processes belonging to it are still
+ around). In the future additional states might be
+ defined, client code should be written to be robust in
+ regards to additional state strings being
+ returned. This function is a more generic version of
+ <code class="function">sd_session_is_active()</code>. The returned
+ string needs to be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_uid()</code> may be
+ used to determine the user identifier of the Unix user the session
+ identified by the specified session identifier belongs
+ to.</p><p><code class="function">sd_session_get_seat()</code> may
+ be used to determine the seat identifier of the seat
+ the session identified by the specified session
+ identifier belongs to. Note that not all sessions are
+ attached to a seat, this call will fail for them. The
+ returned string needs to be freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_service()</code>
+ may be used to determine the name of the service (as
+ passed during PAM session setup) that registered the
+ session identified by the specified session
+ identifier. The returned string needs to be freed with
+ the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_type()</code> may
+ be used to determine the type of the session
+ identified by the specified session identifier. The
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
+ with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_class()</code> may
+ be used to determine the class of the session
+ identified by the specified session identifier. The
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
+ with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_display()</code>
+ may be used to determine the X11 display of the
+ session identified by the specified session
+ identifier. The returned string needs to be
+ freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_tty()</code>
+ may be used to determine the TTY device of the
+ session identified by the specified session
+ identifier. The returned string needs to be
+ freed with the libc
+ <a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
+ <code class="function">sd_session_is_active()</code> returns a
+ positive integer, if it fails 0. On success
+ <code class="function">sd_session_get_state()</code>,
+ <code class="function">sd_session_get_uid()</code>,
+ <code class="function">sd_session_get_seat()</code>,
+ <code class="function">sd_session_get_service()</code>,
+ <code class="function">sd_session_get_type()</code>,
+ <code class="function">sd_session_get_class()</code>,
+ <code class="function">sd_session_get_display()</code> and
+ <code class="function">sd_session_get_tty()</code> return 0 or
+ a positive integer. On failure, these calls return a
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ <code class="function">sd_session_get_state()</code>,
+ <code class="function">sd_session_get_uid()</code>,
+ <code class="function">sd_session_get_seat()</code>,
+ <code class="function">sd_session_get_service()</code>,
+ <code class="function">sd_session_get_type()</code>,
+ <code class="function">sd_session_get_class()</code>,
+ <code class="function">sd_session_get_display()</code> and
+ <code class="function">sd_session_get_tty()</code>
+ interfaces are available as shared library, which can
+ be compiled and linked to with the
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
+ <a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
+ </p></div></div></body></html>
diff --git a/man/sd_session_is_active.3 b/man/sd_session_is_active.3
new file mode 100644
index 0000000000..cb580a4959
--- /dev/null
+++ b/man/sd_session_is_active.3
@@ -0,0 +1,153 @@
+'\" t
+.TH "SD_SESSION_IS_ACTIVE" "3" "" "systemd 208" "sd_session_is_active"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt \- Determine state of a specific session
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'int\ sd_session_is_active('u
+.BI "int sd_session_is_active(const\ char*\ " "session" ");"
+.HP \w'int\ sd_session_get_state('u
+.BI "int sd_session_get_state(const\ char*\ " "session" ", char**\ " "state" ");"
+.HP \w'int\ sd_session_get_uid('u
+.BI "int sd_session_get_uid(const\ char*\ " "session" ", uid_t*\ " "uid" ");"
+.HP \w'int\ sd_session_get_seat('u
+.BI "int sd_session_get_seat(const\ char*\ " "session" ", char**\ " "seat" ");"
+.HP \w'int\ sd_session_get_service('u
+.BI "int sd_session_get_service(const\ char*\ " "session" ", char**\ " "service" ");"
+.HP \w'int\ sd_session_get_type('u
+.BI "int sd_session_get_type(const\ char*\ " "session" ", char**\ " "type" ");"
+.HP \w'int\ sd_session_get_class('u
+.BI "int sd_session_get_class(const\ char*\ " "session" ", char**\ " "class" ");"
+.HP \w'int\ sd_session_get_display('u
+.BI "int sd_session_get_display(const\ char*\ " "session" ", char**\ " "display" ");"
+.HP \w'int\ sd_session_get_tty('u
+.BI "int sd_session_get_tty(const\ char*\ " "session" ", char**\ " "tty" ");"
+.HP \w'int\ sd_session_get_vt('u
+.BI "int sd_session_get_vt(const\ char*\ " "session" ", unsigned\ int*\ " "vt" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_session_is_active()\fR
+may be used to determine whether the session identified by the specified session identifier is currently active (i\&.e\&. currently in the foreground and available for user input) or not\&.
+.PP
+\fBsd_session_get_state()\fR
+may be used to determine the state of the session identified by the specified session identifier\&. The following states are currently known:
+"online"
+(session logged in, but session not active, i\&.e\&. not in the foreground),
+"active"
+(session logged in and active, i\&.e\&. in the foreground),
+"closing"
+(session nominally logged out, but some processes belonging to it are still around)\&. In the future additional states might be defined, client code should be written to be robust in regards to additional state strings being returned\&. This function is a more generic version of
+\fBsd_session_is_active()\fR\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_uid()\fR
+may be used to determine the user identifier of the Unix user the session identified by the specified session identifier belongs to\&.
+.PP
+\fBsd_session_get_seat()\fR
+may be used to determine the seat identifier of the seat the session identified by the specified session identifier belongs to\&. Note that not all sessions are attached to a seat, this call will fail for them\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_service()\fR
+may be used to determine the name of the service (as passed during PAM session setup) that registered the session identified by the specified session identifier\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_type()\fR
+may be used to determine the type of the session identified by the specified session identifier\&. The returned string is one of
+"x11",
+"tty"
+or
+"unspecified"
+and needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_class()\fR
+may be used to determine the class of the session identified by the specified session identifier\&. The returned string is one of
+"user",
+"greeter",
+"lock\-screen", or
+"background"
+and needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_display()\fR
+may be used to determine the X11 display of the session identified by the specified session identifier\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_tty()\fR
+may be used to determine the TTY device of the session identified by the specified session identifier\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_session_get_vt()\fR
+may be used to determine the VT number of the session identified by the specified session identifier\&. This function will return an error if the seat does not support VTs\&.
+.PP
+If the
+\fIsession\fR
+parameter of any of these functions is passed as
+\fBNULL\fR, the operation is executed for the session the calling process is a member of, if there is any\&.
+.SH "RETURN VALUE"
+.PP
+If the test succeeds,
+\fBsd_session_is_active()\fR
+returns a positive integer, if it fails 0\&. On success
+\fBsd_session_get_state()\fR,
+\fBsd_session_get_uid()\fR,
+\fBsd_session_get_seat()\fR,
+\fBsd_session_get_service()\fR,
+\fBsd_session_get_type()\fR,
+\fBsd_session_get_class()\fR,
+\fBsd_session_get_display()\fR
+and
+\fBsd_session_get_tty()\fR
+return 0 or a positive integer\&. On failure, these calls return a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_session_is_active()\fR,
+\fBsd_session_get_state()\fR,
+\fBsd_session_get_uid()\fR,
+\fBsd_session_get_seat()\fR,
+\fBsd_session_get_service()\fR,
+\fBsd_session_get_type()\fR,
+\fBsd_session_get_class()\fR,
+\fBsd_session_get_display()\fR
+and
+\fBsd_session_get_tty()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-login\fR(3),
+\fBsd_pid_get_session\fR(3)
diff --git a/man/sd_session_is_active.html b/man/sd_session_is_active.html
index 45fb894c9a..fdb6e84037 100644
--- a/man/sd_session_is_active.html
+++ b/man/sd_session_is_active.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259799547264"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_session_is_active"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_session_is_active, sd_session_get_state, sd_session_get_uid, sd_session_get_seat, sd_session_get_service, sd_session_get_type, sd_session_get_class, sd_session_get_display, sd_session_get_tty, sd_session_get_vt — Determine state of a specific session</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_is_active</b>(</code></td><td>const char* <var class="pdparam">session</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_state</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_uid</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>uid_t* <var class="pdparam">uid</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_seat</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_service</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">service</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_type</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">type</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_class</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">class</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_display</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">display</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_tty</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">tty</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_session_get_vt</b>(</code></td><td>const char* <var class="pdparam">session</var>, </td></tr><tr><td> </td><td>unsigned int* <var class="pdparam">vt</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274695276976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_session_is_active()</code> may
be used to determine whether the session identified by
the specified session identifier is currently active
(i.e. currently in the foreground and available for
@@ -27,11 +27,11 @@
be used to determine the state of the session
identified by the specified session identifier. The
following states are currently known:
- <code class="literal">online</code> (session logged in, but
+ "<code class="literal">online</code>" (session logged in, but
session not active, i.e. not in the foreground),
- <code class="literal">active</code> (session logged in and
+ "<code class="literal">active</code>" (session logged in and
active, i.e. in the foreground),
- <code class="literal">closing</code> (session nominally logged
+ "<code class="literal">closing</code>" (session nominally logged
out, but some processes belonging to it are still
around). In the future additional states might be
defined, client code should be written to be robust in
@@ -60,18 +60,18 @@
call after use.</p><p><code class="function">sd_session_get_type()</code> may
be used to determine the type of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">x11</code>,
- <code class="literal">tty</code> or
- <code class="literal">unspecified</code> and needs to be freed
+ returned string is one of "<code class="literal">x11</code>",
+ "<code class="literal">tty</code>" or
+ "<code class="literal">unspecified</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_class()</code> may
be used to determine the class of the session
identified by the specified session identifier. The
- returned string is one of <code class="literal">user</code>,
- <code class="literal">greeter</code>,
- <code class="literal">lock-screen</code>, or
- <code class="literal">background</code> and needs to be freed
+ returned string is one of "<code class="literal">user</code>",
+ "<code class="literal">greeter</code>",
+ "<code class="literal">lock-screen</code>", or
+ "<code class="literal">background</code>" and needs to be freed
with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use.</p><p><code class="function">sd_session_get_display()</code>
@@ -86,10 +86,15 @@
identifier. The returned string needs to be
freed with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
- call after use.</p><p>If the <code class="literal">session</code> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</p></div><div class="refsect1"><a name="idm259799512752"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds
+ call after use.</p><p><code class="function">sd_session_get_vt()</code>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</p><p>If the <code class="varname">session</code> parameter of
+ any of these functions is passed as
+ <code class="constant">NULL</code>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</p></div><div class="refsect1"><a name="idm274690339776"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>If the test succeeds,
<code class="function">sd_session_is_active()</code> returns a
positive integer, if it fails 0. On success
<code class="function">sd_session_get_state()</code>,
@@ -101,7 +106,7 @@
<code class="function">sd_session_get_display()</code> and
<code class="function">sd_session_get_tty()</code> return 0 or
a positive integer. On failure, these calls return a
- negative errno-style error code.</p></div><div class="refsect1"><a name="idm259794878944"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
+ negative errno-style error code.</p></div><div class="refsect1"><a name="idm274690332752"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_session_is_active()</code>,
<code class="function">sd_session_get_state()</code>,
<code class="function">sd_session_get_uid()</code>,
<code class="function">sd_session_get_seat()</code>,
@@ -112,9 +117,8 @@
<code class="function">sd_session_get_tty()</code>
interfaces are available as shared library, which can
be compiled and linked to with the
- <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259794870624"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274690324672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>
diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
index 6fa803bfa2..293ce71642 100644
--- a/man/sd_session_is_active.xml
+++ b/man/sd_session_is_active.xml
@@ -52,6 +52,7 @@
<refname>sd_session_get_class</refname>
<refname>sd_session_get_display</refname>
<refname>sd_session_get_tty</refname>
+ <refname>sd_session_get_vt</refname>
<refpurpose>Determine state of a specific session</refpurpose>
</refnamediv>
@@ -111,6 +112,12 @@
<paramdef>const char* <parameter>session</parameter></paramdef>
<paramdef>char** <parameter>tty</parameter></paramdef>
</funcprototype>
+
+ <funcprototype>
+ <funcdef>int <function>sd_session_get_vt</function></funcdef>
+ <paramdef>const char* <parameter>session</parameter></paramdef>
+ <paramdef>unsigned int* <parameter>vt</parameter></paramdef>
+ </funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -202,16 +209,23 @@
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use.</para>
- <para>If the <literal>session</literal> parameter of
- any of these functions is passed as NULL the operation
- is executed for the session the calling process is a
- member of, if there is any.</para>
+ <para><function>sd_session_get_vt()</function>
+ may be used to determine the VT number of the
+ session identified by the specified session
+ identifier. This function will return an error if
+ the seat does not support VTs.</para>
+
+ <para>If the <varname>session</varname> parameter of
+ any of these functions is passed as
+ <constant>NULL</constant>, the operation is executed
+ for the session the calling process is a member of, if
+ there is any.</para>
</refsect1>
<refsect1>
<title>Return Value</title>
- <para>If the test succeeds
+ <para>If the test succeeds,
<function>sd_session_is_active()</function> returns a
positive integer, if it fails 0. On success
<function>sd_session_get_state()</function>,
@@ -240,8 +254,7 @@
<function>sd_session_get_tty()</function>
interfaces are available as shared library, which can
be compiled and linked to with the
- <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_uid_get_seats.3 b/man/sd_uid_get_seats.3
new file mode 100644
index 0000000000..616dee5125
--- /dev/null
+++ b/man/sd_uid_get_seats.3
@@ -0,0 +1 @@
+.so man3/sd_uid_get_state.3
diff --git a/man/sd_uid_get_seats.html b/man/sd_uid_get_seats.html
index 40551e45f8..783423bc52 100644
--- a/man/sd_uid_get_seats.html
+++ b/man/sd_uid_get_seats.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259768435792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274686615328"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
used to determine the login state of a specific Unix
user identifier. The following states are currently
- known: <code class="literal">offline</code> (user not logged in
- at all), <code class="literal">lingering</code> (user not logged
+ known: "<code class="literal">offline</code>" (user not logged in
+ at all), "<code class="literal">lingering</code>" (user not logged
in, but some user services running),
- <code class="literal">online</code> (user logged in, but not
+ "<code class="literal">online</code>" (user logged in, but not
active, i.e. has no session in the foreground),
- <code class="literal">active</code> (user logged in, and has at
+ "<code class="literal">active</code>" (user logged in, and has at
least one active session, i.e. one session in the
- foreground), <code class="literal">closing</code> (user not
+ foreground), "<code class="literal">closing</code>" (user not
logged in, and not lingering, but some processes are
still around). In the future additional states might
be defined, client code should be written to be robust
@@ -42,7 +42,7 @@
or active on a specific seat. Accepts a Unix user
identifier and a seat identifier string as
parameters. The <em class="parameter"><code>require_active</code></em>
- parameter is a boolean value. If non-zero (true) this
+ parameter is a boolean value. If non-zero (true), this
function will test if the user is active (i.e. has a
session that is in the foreground and accepting user
input) on the specified seat, otherwise (false) only
@@ -56,15 +56,15 @@
currently active (&gt; 0), where the user is currently
online but possibly inactive (= 0), or
logged in at all but possibly closing the session (&lt; 0). The call returns a
- NULL terminated string array of session identifiers in
+ <code class="constant">NULL</code> terminated string array of session identifiers in
<em class="parameter"><code>sessions</code></em> which needs to be
freed by the caller with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use, including all the strings
referenced. If the string array parameter is passed as
- NULL the array will not be filled in, but the return
+ <code class="constant">NULL</code>, the array will not be filled in, but the return
code still indicates the number of current
- sessions. Note that instead of an empty array NULL may
+ sessions. Note that instead of an empty array <code class="constant">NULL</code> may
be returned and should be considered equivalent to an
empty array.</p><p>Similar, <code class="function">sd_uid_get_seats()</code>
may be used to determine the list of seats on which
@@ -73,23 +73,22 @@
multiple sessions on the same seat as well as sessions
with no attached seat and hence the number of entries
in the returned array may differ from the one returned
- by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm259772319936"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm274686574336"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_uid_get_state()</code> returns 0 or a
- positive integer. If the test succeeds
+ positive integer. If the test succeeds,
<code class="function">sd_uid_is_on_seat()</code> returns a
positive integer, if it fails
0. <code class="function">sd_uid_get_sessions()</code> and
<code class="function">sd_uid_get_seats()</code> return the
number of entries in the returned arrays. On failure,
these calls return a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259772315744"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274686570032"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
<code class="function">sd_uid_is_on_seat()</code>,
<code class="function">sd_uid_get_sessions()</code>, and
<code class="function">sd_uid_get_seats()</code> interfaces are
available as shared library, which can be compiled and
- linked to with the <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772302592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ linked to with the <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274686676912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a>
diff --git a/man/sd_uid_get_sessions.3 b/man/sd_uid_get_sessions.3
new file mode 100644
index 0000000000..616dee5125
--- /dev/null
+++ b/man/sd_uid_get_sessions.3
@@ -0,0 +1 @@
+.so man3/sd_uid_get_state.3
diff --git a/man/sd_uid_get_sessions.html b/man/sd_uid_get_sessions.html
index 40551e45f8..783423bc52 100644
--- a/man/sd_uid_get_sessions.html
+++ b/man/sd_uid_get_sessions.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259768435792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274686615328"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
used to determine the login state of a specific Unix
user identifier. The following states are currently
- known: <code class="literal">offline</code> (user not logged in
- at all), <code class="literal">lingering</code> (user not logged
+ known: "<code class="literal">offline</code>" (user not logged in
+ at all), "<code class="literal">lingering</code>" (user not logged
in, but some user services running),
- <code class="literal">online</code> (user logged in, but not
+ "<code class="literal">online</code>" (user logged in, but not
active, i.e. has no session in the foreground),
- <code class="literal">active</code> (user logged in, and has at
+ "<code class="literal">active</code>" (user logged in, and has at
least one active session, i.e. one session in the
- foreground), <code class="literal">closing</code> (user not
+ foreground), "<code class="literal">closing</code>" (user not
logged in, and not lingering, but some processes are
still around). In the future additional states might
be defined, client code should be written to be robust
@@ -42,7 +42,7 @@
or active on a specific seat. Accepts a Unix user
identifier and a seat identifier string as
parameters. The <em class="parameter"><code>require_active</code></em>
- parameter is a boolean value. If non-zero (true) this
+ parameter is a boolean value. If non-zero (true), this
function will test if the user is active (i.e. has a
session that is in the foreground and accepting user
input) on the specified seat, otherwise (false) only
@@ -56,15 +56,15 @@
currently active (&gt; 0), where the user is currently
online but possibly inactive (= 0), or
logged in at all but possibly closing the session (&lt; 0). The call returns a
- NULL terminated string array of session identifiers in
+ <code class="constant">NULL</code> terminated string array of session identifiers in
<em class="parameter"><code>sessions</code></em> which needs to be
freed by the caller with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use, including all the strings
referenced. If the string array parameter is passed as
- NULL the array will not be filled in, but the return
+ <code class="constant">NULL</code>, the array will not be filled in, but the return
code still indicates the number of current
- sessions. Note that instead of an empty array NULL may
+ sessions. Note that instead of an empty array <code class="constant">NULL</code> may
be returned and should be considered equivalent to an
empty array.</p><p>Similar, <code class="function">sd_uid_get_seats()</code>
may be used to determine the list of seats on which
@@ -73,23 +73,22 @@
multiple sessions on the same seat as well as sessions
with no attached seat and hence the number of entries
in the returned array may differ from the one returned
- by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm259772319936"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm274686574336"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_uid_get_state()</code> returns 0 or a
- positive integer. If the test succeeds
+ positive integer. If the test succeeds,
<code class="function">sd_uid_is_on_seat()</code> returns a
positive integer, if it fails
0. <code class="function">sd_uid_get_sessions()</code> and
<code class="function">sd_uid_get_seats()</code> return the
number of entries in the returned arrays. On failure,
these calls return a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259772315744"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274686570032"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
<code class="function">sd_uid_is_on_seat()</code>,
<code class="function">sd_uid_get_sessions()</code>, and
<code class="function">sd_uid_get_seats()</code> interfaces are
available as shared library, which can be compiled and
- linked to with the <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772302592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ linked to with the <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274686676912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a>
diff --git a/man/sd_uid_get_state.3 b/man/sd_uid_get_state.3
new file mode 100644
index 0000000000..c6847eb5e8
--- /dev/null
+++ b/man/sd_uid_get_state.3
@@ -0,0 +1,104 @@
+'\" t
+.TH "SD_UID_GET_STATE" "3" "" "systemd 208" "sd_uid_get_state"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats \- Determine login state of a specific Unix user ID
+.SH "SYNOPSIS"
+.sp
+.ft B
+.nf
+#include <systemd/sd\-login\&.h>
+.fi
+.ft
+.HP \w'int\ sd_uid_get_state('u
+.BI "int sd_uid_get_state(uid_t\ " "uid" ", char**\ " "state" ");"
+.HP \w'int\ sd_uid_is_on_seat('u
+.BI "int sd_uid_is_on_seat(uid_t\ " "uid" ", int\ " "require_active" ", const\ char*\ " "seat" ");"
+.HP \w'int\ sd_uid_get_sessions('u
+.BI "int sd_uid_get_sessions(uid_t\ " "uid" ", int\ " "require_active" ", char***\ " "sessions" ");"
+.HP \w'int\ sd_uid_get_seats('u
+.BI "int sd_uid_get_seats(uid_t\ " "uid" ", int\ " "require_active" ", char***\ " "seats" ");"
+.SH "DESCRIPTION"
+.PP
+\fBsd_uid_get_state()\fR
+may be used to determine the login state of a specific Unix user identifier\&. The following states are currently known:
+"offline"
+(user not logged in at all),
+"lingering"
+(user not logged in, but some user services running),
+"online"
+(user logged in, but not active, i\&.e\&. has no session in the foreground),
+"active"
+(user logged in, and has at least one active session, i\&.e\&. one session in the foreground),
+"closing"
+(user not logged in, and not lingering, but some processes are still around)\&. In the future additional states might be defined, client code should be written to be robust in regards to additional state strings being returned\&. The returned string needs to be freed with the libc
+\fBfree\fR(3)
+call after use\&.
+.PP
+\fBsd_uid_is_on_seat()\fR
+may be used to determine whether a specific user is logged in or active on a specific seat\&. Accepts a Unix user identifier and a seat identifier string as parameters\&. The
+\fIrequire_active\fR
+parameter is a boolean value\&. If non\-zero (true), this function will test if the user is active (i\&.e\&. has a session that is in the foreground and accepting user input) on the specified seat, otherwise (false) only if the user is logged in (and possibly inactive) on the specified seat\&.
+.PP
+\fBsd_uid_get_sessions()\fR
+may be used to determine the current sessions of the specified user\&. Accepts a Unix user identifier as parameter\&. The
+\fIrequire_active\fR
+parameter controls whether the returned list shall consist of only those sessions where the user is currently active (> 0), where the user is currently online but possibly inactive (= 0), or logged in at all but possibly closing the session (< 0)\&. The call returns a
+\fBNULL\fR
+terminated string array of session identifiers in
+\fIsessions\fR
+which needs to be freed by the caller with the libc
+\fBfree\fR(3)
+call after use, including all the strings referenced\&. If the string array parameter is passed as
+\fBNULL\fR, the array will not be filled in, but the return code still indicates the number of current sessions\&. Note that instead of an empty array
+\fBNULL\fR
+may be returned and should be considered equivalent to an empty array\&.
+.PP
+Similar,
+\fBsd_uid_get_seats()\fR
+may be used to determine the list of seats on which the user currently has sessions\&. Similar semantics apply, however note that the user may have multiple sessions on the same seat as well as sessions with no attached seat and hence the number of entries in the returned array may differ from the one returned by
+\fBsd_uid_get_sessions()\fR\&.
+.SH "RETURN VALUE"
+.PP
+On success
+\fBsd_uid_get_state()\fR
+returns 0 or a positive integer\&. If the test succeeds,
+\fBsd_uid_is_on_seat()\fR
+returns a positive integer, if it fails 0\&.
+\fBsd_uid_get_sessions()\fR
+and
+\fBsd_uid_get_seats()\fR
+return the number of entries in the returned arrays\&. On failure, these calls return a negative errno\-style error code\&.
+.SH "NOTES"
+.PP
+The
+\fBsd_uid_get_state()\fR,
+\fBsd_uid_is_on_seat()\fR,
+\fBsd_uid_get_sessions()\fR, and
+\fBsd_uid_get_seats()\fR
+interfaces are available as shared library, which can be compiled and linked to with the
+\fBlibsystemd\-login\fR\ \&\fBpkg-config\fR(1)
+file\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsd-login\fR(3),
+\fBsd_pid_get_owner_uid\fR(3)
diff --git a/man/sd_uid_get_state.html b/man/sd_uid_get_state.html
index 40551e45f8..783423bc52 100644
--- a/man/sd_uid_get_state.html
+++ b/man/sd_uid_get_state.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259768435792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274686615328"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
used to determine the login state of a specific Unix
user identifier. The following states are currently
- known: <code class="literal">offline</code> (user not logged in
- at all), <code class="literal">lingering</code> (user not logged
+ known: "<code class="literal">offline</code>" (user not logged in
+ at all), "<code class="literal">lingering</code>" (user not logged
in, but some user services running),
- <code class="literal">online</code> (user logged in, but not
+ "<code class="literal">online</code>" (user logged in, but not
active, i.e. has no session in the foreground),
- <code class="literal">active</code> (user logged in, and has at
+ "<code class="literal">active</code>" (user logged in, and has at
least one active session, i.e. one session in the
- foreground), <code class="literal">closing</code> (user not
+ foreground), "<code class="literal">closing</code>" (user not
logged in, and not lingering, but some processes are
still around). In the future additional states might
be defined, client code should be written to be robust
@@ -42,7 +42,7 @@
or active on a specific seat. Accepts a Unix user
identifier and a seat identifier string as
parameters. The <em class="parameter"><code>require_active</code></em>
- parameter is a boolean value. If non-zero (true) this
+ parameter is a boolean value. If non-zero (true), this
function will test if the user is active (i.e. has a
session that is in the foreground and accepting user
input) on the specified seat, otherwise (false) only
@@ -56,15 +56,15 @@
currently active (&gt; 0), where the user is currently
online but possibly inactive (= 0), or
logged in at all but possibly closing the session (&lt; 0). The call returns a
- NULL terminated string array of session identifiers in
+ <code class="constant">NULL</code> terminated string array of session identifiers in
<em class="parameter"><code>sessions</code></em> which needs to be
freed by the caller with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use, including all the strings
referenced. If the string array parameter is passed as
- NULL the array will not be filled in, but the return
+ <code class="constant">NULL</code>, the array will not be filled in, but the return
code still indicates the number of current
- sessions. Note that instead of an empty array NULL may
+ sessions. Note that instead of an empty array <code class="constant">NULL</code> may
be returned and should be considered equivalent to an
empty array.</p><p>Similar, <code class="function">sd_uid_get_seats()</code>
may be used to determine the list of seats on which
@@ -73,23 +73,22 @@
multiple sessions on the same seat as well as sessions
with no attached seat and hence the number of entries
in the returned array may differ from the one returned
- by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm259772319936"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm274686574336"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_uid_get_state()</code> returns 0 or a
- positive integer. If the test succeeds
+ positive integer. If the test succeeds,
<code class="function">sd_uid_is_on_seat()</code> returns a
positive integer, if it fails
0. <code class="function">sd_uid_get_sessions()</code> and
<code class="function">sd_uid_get_seats()</code> return the
number of entries in the returned arrays. On failure,
these calls return a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259772315744"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274686570032"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
<code class="function">sd_uid_is_on_seat()</code>,
<code class="function">sd_uid_get_sessions()</code>, and
<code class="function">sd_uid_get_seats()</code> interfaces are
available as shared library, which can be compiled and
- linked to with the <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772302592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ linked to with the <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274686676912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a>
diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml
index cc8fc0f5b6..d4d23f4f1d 100644
--- a/man/sd_uid_get_state.xml
+++ b/man/sd_uid_get_state.xml
@@ -111,7 +111,7 @@
or active on a specific seat. Accepts a Unix user
identifier and a seat identifier string as
parameters. The <parameter>require_active</parameter>
- parameter is a boolean value. If non-zero (true) this
+ parameter is a boolean value. If non-zero (true), this
function will test if the user is active (i.e. has a
session that is in the foreground and accepting user
input) on the specified seat, otherwise (false) only
@@ -127,15 +127,15 @@
currently active (&gt; 0), where the user is currently
online but possibly inactive (= 0), or
logged in at all but possibly closing the session (&lt; 0). The call returns a
- NULL terminated string array of session identifiers in
+ <constant>NULL</constant> terminated string array of session identifiers in
<parameter>sessions</parameter> which needs to be
freed by the caller with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use, including all the strings
referenced. If the string array parameter is passed as
- NULL the array will not be filled in, but the return
+ <constant>NULL</constant>, the array will not be filled in, but the return
code still indicates the number of current
- sessions. Note that instead of an empty array NULL may
+ sessions. Note that instead of an empty array <constant>NULL</constant> may
be returned and should be considered equivalent to an
empty array.</para>
@@ -154,7 +154,7 @@
<para>On success
<function>sd_uid_get_state()</function> returns 0 or a
- positive integer. If the test succeeds
+ positive integer. If the test succeeds,
<function>sd_uid_is_on_seat()</function> returns a
positive integer, if it fails
0. <function>sd_uid_get_sessions()</function> and
@@ -172,8 +172,7 @@
<function>sd_uid_get_sessions()</function>, and
<function>sd_uid_get_seats()</function> interfaces are
available as shared library, which can be compiled and
- linked to with the <literal>libsystemd-login</literal>
- <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ linked to with the <constant>libsystemd-login</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
file.</para>
</refsect1>
diff --git a/man/sd_uid_is_on_seat.3 b/man/sd_uid_is_on_seat.3
new file mode 100644
index 0000000000..616dee5125
--- /dev/null
+++ b/man/sd_uid_is_on_seat.3
@@ -0,0 +1 @@
+.so man3/sd_uid_get_state.3
diff --git a/man/sd_uid_is_on_seat.html b/man/sd_uid_is_on_seat.html
index 40551e45f8..783423bc52 100644
--- a/man/sd_uid_is_on_seat.html
+++ b/man/sd_uid_is_on_seat.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm259768435792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sd_uid_get_state"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sd_uid_get_state, sd_uid_is_on_seat, sd_uid_get_sessions, sd_uid_get_seats — Determine login state of a specific Unix user ID</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="funcsynopsis"><pre class="funcsynopsisinfo">#include &lt;systemd/sd-login.h&gt;</pre><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_state</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>char** <var class="pdparam">state</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_is_on_seat</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>const char* <var class="pdparam">seat</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_sessions</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">sessions</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div><table border="0" class="funcprototype-table" summary="Function synopsis" style="cellspacing: 0; cellpadding: 0;"><tr><td><code class="funcdef">int <b class="fsfunc">sd_uid_get_seats</b>(</code></td><td>uid_t <var class="pdparam">uid</var>, </td></tr><tr><td> </td><td>int <var class="pdparam">require_active</var>, </td></tr><tr><td> </td><td>char*** <var class="pdparam">seats</var><code>)</code>;</td></tr></table><div class="funcprototype-spacer"> </div></div></div><div class="refsect1"><a name="idm274686615328"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="function">sd_uid_get_state()</code> may be
used to determine the login state of a specific Unix
user identifier. The following states are currently
- known: <code class="literal">offline</code> (user not logged in
- at all), <code class="literal">lingering</code> (user not logged
+ known: "<code class="literal">offline</code>" (user not logged in
+ at all), "<code class="literal">lingering</code>" (user not logged
in, but some user services running),
- <code class="literal">online</code> (user logged in, but not
+ "<code class="literal">online</code>" (user logged in, but not
active, i.e. has no session in the foreground),
- <code class="literal">active</code> (user logged in, and has at
+ "<code class="literal">active</code>" (user logged in, and has at
least one active session, i.e. one session in the
- foreground), <code class="literal">closing</code> (user not
+ foreground), "<code class="literal">closing</code>" (user not
logged in, and not lingering, but some processes are
still around). In the future additional states might
be defined, client code should be written to be robust
@@ -42,7 +42,7 @@
or active on a specific seat. Accepts a Unix user
identifier and a seat identifier string as
parameters. The <em class="parameter"><code>require_active</code></em>
- parameter is a boolean value. If non-zero (true) this
+ parameter is a boolean value. If non-zero (true), this
function will test if the user is active (i.e. has a
session that is in the foreground and accepting user
input) on the specified seat, otherwise (false) only
@@ -56,15 +56,15 @@
currently active (&gt; 0), where the user is currently
online but possibly inactive (= 0), or
logged in at all but possibly closing the session (&lt; 0). The call returns a
- NULL terminated string array of session identifiers in
+ <code class="constant">NULL</code> terminated string array of session identifiers in
<em class="parameter"><code>sessions</code></em> which needs to be
freed by the caller with the libc
<a href="free.html"><span class="citerefentry"><span class="refentrytitle">free</span>(3)</span></a>
call after use, including all the strings
referenced. If the string array parameter is passed as
- NULL the array will not be filled in, but the return
+ <code class="constant">NULL</code>, the array will not be filled in, but the return
code still indicates the number of current
- sessions. Note that instead of an empty array NULL may
+ sessions. Note that instead of an empty array <code class="constant">NULL</code> may
be returned and should be considered equivalent to an
empty array.</p><p>Similar, <code class="function">sd_uid_get_seats()</code>
may be used to determine the list of seats on which
@@ -73,23 +73,22 @@
multiple sessions on the same seat as well as sessions
with no attached seat and hence the number of entries
in the returned array may differ from the one returned
- by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm259772319936"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
+ by <code class="function">sd_uid_get_sessions()</code>.</p></div><div class="refsect1"><a name="idm274686574336"></a><h2 id="Return Value">Return Value<a class="headerlink" title="Permalink to this headline" href="#Return%20Value">¶</a></h2><p>On success
<code class="function">sd_uid_get_state()</code> returns 0 or a
- positive integer. If the test succeeds
+ positive integer. If the test succeeds,
<code class="function">sd_uid_is_on_seat()</code> returns a
positive integer, if it fails
0. <code class="function">sd_uid_get_sessions()</code> and
<code class="function">sd_uid_get_seats()</code> return the
number of entries in the returned arrays. On failure,
these calls return a negative errno-style error
- code.</p></div><div class="refsect1"><a name="idm259772315744"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
+ code.</p></div><div class="refsect1"><a name="idm274686570032"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>The <code class="function">sd_uid_get_state()</code>,
<code class="function">sd_uid_is_on_seat()</code>,
<code class="function">sd_uid_get_sessions()</code>, and
<code class="function">sd_uid_get_seats()</code> interfaces are
available as shared library, which can be compiled and
- linked to with the <code class="literal">libsystemd-login</code>
- <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
- file.</p></div><div class="refsect1"><a name="idm259772302592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ linked to with the <code class="constant">libsystemd-login</code> <a href="pkg-config.html"><span class="citerefentry"><span class="refentrytitle">pkg-config</span>(1)</span></a>
+ file.</p></div><div class="refsect1"><a name="idm274686676912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>,
<a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a>
diff --git a/man/shutdown.8 b/man/shutdown.8
new file mode 100644
index 0000000000..6dbb9e7fd7
--- /dev/null
+++ b/man/shutdown.8
@@ -0,0 +1,110 @@
+'\" t
+.TH "SHUTDOWN" "8" "" "systemd 208" "shutdown"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shutdown \- Halt, power\-off or reboot the machine
+.SH "SYNOPSIS"
+.HP \w'\fBshutdown\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[TIME]\fR\fB\ \fR\fB[WALL...]\fR\ 'u
+\fBshutdown \fR\fB[OPTIONS...]\fR\fB \fR\fB[TIME]\fR\fB \fR\fB[WALL...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBshutdown\fR
+may be used to halt, power\-off or reboot the machine\&.
+.PP
+The first argument may be a time string (which is usually
+"now")\&. Optionally, this may be followed by a wall message to be sent to all logged\-in users before going down\&.
+.PP
+The time string may either be in the format
+"hh:mm"
+for hour/minutes specifying the time to execute the shutdown at, specified in 24h clock format\&. Alternatively it may be in the syntax
+"+m"
+referring to the specified number of minutes m from now\&.
+"now"
+is an alias for
+"+0", i\&.e\&. for triggering an immediate shutdown\&. If no time argument is specified,
+"+1"
+is implied\&.
+.PP
+Note that to specify a wall message you must specify a time argument, too\&.
+.PP
+If the time argument is used, 5 minutes before the system goes down the
+/run/nologin
+file is created to ensure that further logins shall not be allowed\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-halt\fR
+.RS 4
+Halt the machine\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-poweroff\fR
+.RS 4
+Power\-off the machine (the default)\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reboot\fR
+.RS 4
+Reboot the machine\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Equivalent to
+\fB\-\-poweroff\fR, unless
+\fB\-\-halt\fR
+is specified\&.
+.RE
+.PP
+\fB\-k\fR
+.RS 4
+Do not halt, power\-off, reboot, just write wall message\&.
+.RE
+.PP
+\fB\-\-no\-wall\fR
+.RS 4
+Do not send wall message before halt, power\-off, reboot\&.
+.RE
+.PP
+\fB\-c\fR
+.RS 4
+Cancel a pending shutdown\&. This may be used cancel the effect of an invocation of
+\fBshutdown\fR
+with a time argument that is not
+"+0"
+or
+"now"\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBhalt\fR(8),
+\fBwall\fR(1)
diff --git a/man/shutdown.html b/man/shutdown.html
index 1e2fd49aa2..d18b78573f 100644
--- a/man/shutdown.html
+++ b/man/shutdown.html
@@ -19,43 +19,42 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="shutdown"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>shutdown — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">shutdown [OPTIONS...] [TIME] [WALL...]</code> </p></div></div><div class="refsect1"><a name="idm259788695728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>shutdown</strong></span> may be used to halt,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="shutdown"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>shutdown — Halt, power-off or reboot the machine</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">shutdown [OPTIONS...] [TIME] [WALL...]</code> </p></div></div><div class="refsect1"><a name="idm274702164608"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>shutdown</strong></span> may be used to halt,
power-off or reboot the machine.</p><p>The first argument may be a time string (which
- is usually <code class="literal">now</code>). Optionally, this
+ is usually "<code class="literal">now</code>"). Optionally, this
may be followed by a wall message to be sent to all
logged-in users before going down.</p><p>The time string may either be in the format
- <code class="literal">hh:mm</code> for hour/minutes specifying
+ "<code class="literal">hh:mm</code>" for hour/minutes specifying
the time to execute the shutdown at, specified in 24h
clock format. Alternatively it may be in the syntax
- <code class="literal">+m</code> referring to the specified
- number of minutes m from now. <code class="literal">now</code>
- is an alias for <code class="literal">+0</code>, i.e. for
+ "<code class="literal">+m</code>" referring to the specified
+ number of minutes m from now. "<code class="literal">now</code>"
+ is an alias for "<code class="literal">+0</code>", i.e. for
triggering an immediate shutdown. If no time argument
- is specified, <code class="literal">+1</code> is
+ is specified, "<code class="literal">+1</code>" is
implied.</p><p>Note that to specify a wall message you must
specify a time argument, too.</p><p>If the time argument is used, 5 minutes
before the system goes down the
<code class="filename">/run/nologin</code> file is created to
ensure that further logins shall not be
- allowed.</p></div><div class="refsect1"><a name="idm259788686720"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ allowed.</p></div><div class="refsect1"><a name="idm274702155696"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--halt</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Halt the machine.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--poweroff</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Power-off the
machine (the default).</p></dd><dt id="-r"><span class="term"><code class="option">-r</code>, </span><span class="term"><code class="option">--reboot</code></span><a class="headerlink" title="Permalink to this term" href="#-r">¶</a></dt><dd><p>Reboot the
machine.</p></dd><dt id="-h"><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Equivalent to
<code class="option">--poweroff</code>, unless
<code class="option">--halt</code> is
- specified.</p></dd><dt id="-k"><span class="term"><code class="option">-k</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p>Don't halt, power-off,
+ specified.</p></dd><dt id="-k"><span class="term"><code class="option">-k</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p>Do not halt, power-off,
reboot, just write wall
- message.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Don't send wall
+ message.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Do not send wall
message before
halt, power-off, reboot.</p></dd><dt id="-c"><span class="term"><code class="option">-c</code></span><a class="headerlink" title="Permalink to this term" href="#-c">¶</a></dt><dd><p>Cancel a pending
shutdown. This may be used cancel the
effect of an invocation of
<span class="command"><strong>shutdown</strong></span> with a
time argument that is not
- <code class="literal">+0</code> or
- <code class="literal">now</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259792566608"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259792565424"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This is a legacy command available for
- compatibility only.</p></div><div class="refsect1"><a name="idm259792557152"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ "<code class="literal">+0</code>" or
+ "<code class="literal">now</code>".</p></dd></dl></div></div><div class="refsect1"><a name="idm274706035712"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274706034528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>,
diff --git a/man/shutdown.xml b/man/shutdown.xml
index 570383319b..795fb66328 100644
--- a/man/shutdown.xml
+++ b/man/shutdown.xml
@@ -133,7 +133,7 @@
<varlistentry>
<term><option>-k</option></term>
- <listitem><para>Don't halt, power-off,
+ <listitem><para>Do not halt, power-off,
reboot, just write wall
message.</para></listitem>
</varlistentry>
@@ -141,7 +141,7 @@
<varlistentry>
<term><option>--no-wall</option></term>
- <listitem><para>Don't send wall
+ <listitem><para>Do not send wall
message before
halt, power-off, reboot.</para></listitem>
</varlistentry>
@@ -169,13 +169,6 @@
</refsect1>
<refsect1>
- <title>Notes</title>
-
- <para>This is a legacy command available for
- compatibility only.</para>
- </refsect1>
-
- <refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/sysctl.d.5 b/man/sysctl.d.5
new file mode 100644
index 0000000000..ab01cfda22
--- /dev/null
+++ b/man/sysctl.d.5
@@ -0,0 +1,87 @@
+'\" t
+.TH "SYSCTL\&.D" "5" "" "systemd 208" "sysctl.d"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sysctl.d \- Configure kernel parameters at boot
+.SH "SYNOPSIS"
+.PP
+/etc/sysctl\&.d/*\&.conf
+.PP
+/run/sysctl\&.d/*\&.conf
+.PP
+/usr/lib/sysctl\&.d/*\&.conf
+.SH "DESCRIPTION"
+.PP
+At boot,
+\fBsystemd-sysctl.service\fR(8)
+reads configuration files from the above directories to configure
+\fBsysctl\fR(8)
+kernel parameters\&.
+.SH "CONFIGURATION FORMAT"
+.PP
+The configuration files contain a list of variable assignments, separated by newlines\&. Empty lines and lines whose first non\-whitespace character is # or ; are ignored\&.
+.PP
+Note that both / and \&. are accepted as label separators within sysctl variable names\&.
+"kernel\&.domainname=foo"
+and
+"kernel/domainname=foo"
+hence are entirely equivalent\&.
+.PP
+Each configuration file shall be named in the style of
+\fIprogram\fR\&.conf\&. Files in
+/etc/
+override files with the same name in
+/usr/lib/
+and
+/run/\&. Files in
+/run/
+override files with the same name in
+/usr/lib/\&. Packages should install their configuration files in
+/usr/lib/\&. Files in
+/etc/
+are reserved for the local administrator, who may use this logic to override the configuration files installed by vendor packages\&. All configuration files are sorted by their filename in lexicographic order, regardless in which of the directories they reside\&. If multiple files specify the same variable name, the entry in the file with the lexicographically latest name will be applied\&. It is recommended to prefix all filenames with a two\-digit number and a dash, to simplify the ordering of the files\&.
+.PP
+If the administrator wants to disable a configuration file supplied by the vendor, the recommended way is to place a symlink to
+/dev/null
+in
+/etc/sysctl\&.d/
+bearing the same filename\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&/etc/sysctl.d/domain-name.conf example:\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Set kernel YP domain name
+kernel\&.domainname=example\&.com
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-sysctl.service\fR(8),
+\fBsystemd-delta\fR(1),
+\fBsysctl\fR(8),
+\fBsysctl.conf\fR(5)
diff --git a/man/sysctl.d.html b/man/sysctl.d.html
index 1901891001..32464baae6 100644
--- a/man/sysctl.d.html
+++ b/man/sysctl.d.html
@@ -19,18 +19,18 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="sysctl.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sysctl.d — Configure kernel parameters at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/sysctl.d/*.conf</code></p><p><code class="filename">/run/sysctl.d/*.conf</code></p><p><code class="filename">/usr/lib/sysctl.d/*.conf</code></p></div><div class="refsect1"><a name="idm259771911856"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>At boot,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="sysctl.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>sysctl.d — Configure kernel parameters at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/sysctl.d/*.conf</code></p><p><code class="filename">/run/sysctl.d/*.conf</code></p><p><code class="filename">/usr/lib/sysctl.d/*.conf</code></p></div><div class="refsect1"><a name="idm274685470848"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>At boot,
<a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a>
reads configuration files from the above directories
to configure
<a href="sysctl.html"><span class="citerefentry"><span class="refentrytitle">sysctl</span>(8)</span></a>
- kernel parameters.</p></div><div class="refsect1"><a name="idm259771908848"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>The configuration files contain a list of
+ kernel parameters.</p></div><div class="refsect1"><a name="idm274685467792"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>The configuration files contain a list of
variable assignments, separated by newlines. Empty
lines and lines whose first non-whitespace character
is # or ; are ignored.</p><p>Note that both / and . are accepted as label
separators within sysctl variable
- names. <code class="literal">kernel.domainname=foo</code> and
- <code class="literal">kernel/domainname=foo</code> hence are
+ names. "<code class="literal">kernel.domainname=foo</code>" and
+ "<code class="literal">kernel/domainname=foo</code>" hence are
entirely equivalent.</p><p>Each configuration file shall be named in the
style of <code class="filename"><em class="replaceable"><code>program</code></em>.conf</code>.
Files in <code class="filename">/etc/</code> override files
@@ -44,17 +44,19 @@
administrator, who may use this logic to override the
configuration files installed by vendor packages. All
configuration files are sorted by their filename in
- alphabetical order, regardless in which of the
- directories they reside, to guarantee that a specific
- configuration file takes precedence over another file
- with an alphabetically later name, if both files
- contain the same variable setting.</p><p>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ lexicographic order, regardless in which of the
+ directories they reside. If multiple files specify the
+ same variable name, the entry in the file with the
+ lexicographically latest name will be applied. It is
+ recommended to prefix all filenames with a two-digit
+ number and a dash, to simplify the ordering of the
+ files.</p><p>If the administrator wants to disable a
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<code class="filename">/dev/null</code> in
<code class="filename">/etc/sysctl.d/</code> bearing the
- same file name.</p></div><div class="refsect1"><a name="idm259775794048"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259775793376"></a><p class="title"><b>Example 1. /etc/sysctl.d/domain-name.conf example:</b></p><div class="example-contents"><pre class="programlisting"># Set kernel YP domain name
-kernel.domainname=example.com</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259775791776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ same filename.</p></div><div class="refsect1"><a name="idm274689353296"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274689352624"></a><p class="title"><b>Example 1. /etc/sysctl.d/domain-name.conf example:</b></p><div class="example-contents"><pre class="programlisting"># Set kernel YP domain name
+kernel.domainname=example.com</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274689351024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a>,
<a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>,
diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml
index 759b8740f5..854864cffc 100644
--- a/man/sysctl.d.xml
+++ b/man/sysctl.d.xml
@@ -89,18 +89,20 @@
administrator, who may use this logic to override the
configuration files installed by vendor packages. All
configuration files are sorted by their filename in
- alphabetical order, regardless in which of the
- directories they reside, to guarantee that a specific
- configuration file takes precedence over another file
- with an alphabetically later name, if both files
- contain the same variable setting.</para>
+ lexicographic order, regardless in which of the
+ directories they reside. If multiple files specify the
+ same variable name, the entry in the file with the
+ lexicographically latest name will be applied. It is
+ recommended to prefix all filenames with a two-digit
+ number and a dash, to simplify the ordering of the
+ files.</para>
<para>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<filename>/dev/null</filename> in
<filename>/etc/sysctl.d/</filename> bearing the
- same file name.</para>
+ same filename.</para>
</refsect1>
<refsect1>
diff --git a/man/systemctl.1 b/man/systemctl.1
new file mode 100644
index 0000000000..62812fa25c
--- /dev/null
+++ b/man/systemctl.1
@@ -0,0 +1,786 @@
+'\" t
+.TH "SYSTEMCTL" "1" "" "systemd 208" "systemctl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemctl \- Control the systemd system and service manager
+.SH "SYNOPSIS"
+.HP \w'\fBsystemctl\fR\ 'u
+\fBsystemctl\fR [OPTIONS...] COMMAND [NAME...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemctl\fR
+may be used to introspect and control the state of the
+\fBsystemd\fR(1)
+system and service manager\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-type=\fR
+.RS 4
+The argument should be a comma\-separated list of unit types such as
+\fBservice\fR
+and
+\fBsocket\fR\&.
+.sp
+If one of the arguments is a unit type, when listing units, limit display to certain unit types\&. Otherwise, units of all types will be shown\&.
+.sp
+As a special case, if one of the arguments is
+\fBhelp\fR, a list of allowed values will be printed and the program will exit\&.
+.RE
+.PP
+\fB\-\-state=\fR
+.RS 4
+The argument should be a comma\-separated list of unit LOAD, SUB, or ACTIVE states\&. When listing units, show only those in specified states\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-property=\fR
+.RS 4
+When showing unit/job/manager properties with the
+\fBshow\fR
+command, limit display to certain properties as specified as argument\&. If not specified, all set properties are shown\&. The argument should be a comma\-separated list of property names, such as
+"MainPID"\&. If specified more than once, all properties with the specified names are shown\&.
+.RE
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+When listing units, show all loaded units, regardless of their state, including inactive units\&. When showing unit/job/manager properties, show all properties regardless whether they are set or not\&.
+.sp
+To list all units installed on the system, use the
+\fBlist\-unit\-files\fR
+command instead\&.
+.RE
+.PP
+\fB\-\-reverse\fR
+.RS 4
+Show reverse dependencies between units with
+\fBlist\-dependencies\fR, i\&.e\&. units with dependencies of type
+\fIWants=\fR
+or
+\fIRequires=\fR
+on the given unit\&.
+.RE
+.PP
+\fB\-\-after\fR, \fB\-\-before\fR
+.RS 4
+Show which units are started after or before with
+\fBlist\-dependencies\fR, respectively\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-full\fR
+.RS 4
+Do not ellipsize unit names, process tree entries, and truncate unit descriptions in the output of
+\fBlist\-units\fR
+and
+\fBlist\-jobs\fR\&.
+.RE
+.PP
+\fB\-\-fail\fR
+.RS 4
+If the requested operation conflicts with a pending unfinished job, fail the command\&. If this is not specified, the requested operation will replace the pending job, if necessary\&. Do not confuse with
+\fB\-\-failed\fR\&.
+.RE
+.PP
+\fB\-\-show\-types\fR
+.RS 4
+When showing sockets, show the type of the socket\&.
+.RE
+.PP
+\fB\-\-irreversible\fR
+.RS 4
+Mark this transaction\*(Aqs jobs as irreversible\&. This prevents future conflicting transactions from replacing these jobs\&. The jobs can still be cancelled using the
+\fBcancel\fR
+command\&.
+.RE
+.PP
+\fB\-\-ignore\-dependencies\fR
+.RS 4
+When enqueuing a new job, ignore all its dependencies and execute it immediately\&. If passed, no required units of the unit passed will be pulled in, and no ordering dependencies will be honored\&. This is mostly a debugging and rescue tool for the administrator and should not be used by applications\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-ignore\-inhibitors\fR
+.RS 4
+When system shutdown or a sleep state is requested, ignore inhibitor locks\&. Applications can establish inhibitor locks to avoid that certain important operations (such as CD burning or suchlike) are interrupted by system shutdown or a sleep state\&. Any user may take these locks and privileged users may override these locks\&. If any locks are taken, shutdown and sleep state requests will normally fail (regardless if privileged or not) and a list of active locks is printed\&. However, if
+\fB\-\-ignore\-inhibitors\fR
+is specified, the locks are ignored and not printed, and the operation attempted anyway, possibly requiring additional privileges\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Suppress output to standard output in
+\fBsnapshot\fR,
+\fBis\-active\fR,
+\fBis\-failed\fR,
+\fBenable\fR
+and
+\fBdisable\fR\&.
+.RE
+.PP
+\fB\-\-no\-block\fR
+.RS 4
+Do not synchronously wait for the requested operation to finish\&. If this is not specified, the job will be verified, enqueued and
+\fBsystemctl\fR
+will wait until it is completed\&. By passing this argument, it is only verified and enqueued\&.
+.RE
+.PP
+\fB\-\-no\-legend\fR
+.RS 4
+Do not print a legend, i\&.e\&. the column headers and the footer with hints\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-\-system\fR
+.RS 4
+Talk to the systemd system manager\&. (Default)
+.RE
+.PP
+\fB\-\-user\fR
+.RS 4
+Talk to the systemd manager of the calling user\&.
+.RE
+.PP
+\fB\-\-no\-wall\fR
+.RS 4
+Do not send wall message before halt, power\-off, reboot\&.
+.RE
+.PP
+\fB\-\-global\fR
+.RS 4
+When used with
+\fBenable\fR
+and
+\fBdisable\fR, operate on the global user configuration directory, thus enabling or disabling a unit file globally for all future logins of all users\&.
+.RE
+.PP
+\fB\-\-no\-reload\fR
+.RS 4
+When used with
+\fBenable\fR
+and
+\fBdisable\fR, do not implicitly reload daemon configuration after executing the changes\&.
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+When used with
+\fBstart\fR
+and related commands, disables asking for passwords\&. Background services may require input of a password or passphrase string, for example to unlock system hard disks or cryptographic certificates\&. Unless this option is specified and the command is invoked from a terminal,
+\fBsystemctl\fR
+will query the user on the terminal for the necessary secrets\&. Use this option to switch this behavior off\&. In this case, the password must be supplied by some other means (for example graphical password agents) or the service might fail\&. This also disables querying the user for authentication for privileged operations\&.
+.RE
+.PP
+\fB\-\-kill\-who=\fR
+.RS 4
+When used with
+\fBkill\fR, choose which processes to kill\&. Must be one of
+\fBmain\fR,
+\fBcontrol\fR
+or
+\fBall\fR
+to select whether to kill only the main process of the unit, the control process or all processes of the unit\&. If omitted, defaults to
+\fBall\fR\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-signal=\fR
+.RS 4
+When used with
+\fBkill\fR, choose which signal to send to selected processes\&. Must be one of the well known signal specifiers such as
+\fBSIGTERM\fR,
+\fBSIGINT\fR
+or
+\fBSIGSTOP\fR\&. If omitted, defaults to
+\fBSIGTERM\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+When used with
+\fBenable\fR, overwrite any existing conflicting symlinks\&.
+.sp
+When used with
+\fBhalt\fR,
+\fBpoweroff\fR,
+\fBreboot\fR
+or
+\fBkexec\fR, execute the selected operation without shutting down all units\&. However, all processes will be killed forcibly and all file systems are unmounted or remounted read\-only\&. This is hence a drastic but relatively safe option to request an immediate reboot\&. If
+\fB\-\-force\fR
+is specified twice for these operations, they will be executed immediately without terminating any processes or umounting any file systems\&. Warning: specifying
+\fB\-\-force\fR
+twice with any of these operations might result in data loss\&.
+.RE
+.PP
+\fB\-\-root=\fR
+.RS 4
+When used with
+\fBenable\fR/\fBdisable\fR/\fBis\-enabled\fR
+(and related commands), use alternative root path when looking for unit files\&.
+.RE
+.PP
+\fB\-\-runtime\fR
+.RS 4
+When used with
+\fBenable\fR,
+\fBdisable\fR,
+\fBis\-enabled\fR
+(and related commands), make changes only temporarily, so that they are lost on the next reboot\&. This will have the effect that changes are not made in subdirectories of
+/etc
+but in
+/run, with identical immediate effects, however, since the latter is lost on reboot, the changes are lost too\&.
+.sp
+Similar, when used with
+\fBset\-property\fR, make changes only temporarily, so that they are lost on the next reboot\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-host\fR
+.RS 4
+Execute operation remotely\&. Specify a hostname, or username and hostname separated by
+"@", to connect to\&. This will use SSH to talk to the remote systemd instance\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-privileged\fR
+.RS 4
+Acquire privileges via PolicyKit before executing the operation\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-lines=\fR
+.RS 4
+When used with
+\fBstatus\fR, controls the number of journal lines to show, counting from the most recent ones\&. Takes a positive integer argument\&. Defaults to 10\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-output=\fR
+.RS 4
+When used with
+\fBstatus\fR, controls the formatting of the journal entries that are shown\&. For the available choices, see
+\fBjournalctl\fR(1)\&. Defaults to
+"short"\&.
+.RE
+.PP
+\fB\-\-plain\fR
+.RS 4
+When used with
+\fBlist\-dependencies\fR, the output is printed as a list instead of a tree\&.
+.RE
+.SH "COMMANDS"
+.PP
+The following commands are understood:
+.SS "Unit Commands"
+.PP
+\fBlist\-units\fR
+.RS 4
+List known units (subject to limitations specified with
+\fB\-t\fR)\&.
+.sp
+This is the default command\&.
+.RE
+.PP
+\fBlist\-sockets\fR
+.RS 4
+List socket units ordered by the listening address\&. Produces output similar to
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+LISTEN UNIT ACTIVATES
+/dev/initctl systemd\-initctl\&.socket systemd\-initctl\&.service
+\&.\&.\&.
+[::]:22 sshd\&.socket sshd\&.service
+kobject\-uevent 1 systemd\-udevd\-kernel\&.socket systemd\-udevd\&.service
+
+5 sockets listed\&.
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Note: because the addresses might contains spaces, this output is not suitable for programmatic consumption\&.
+.sp
+See also the options
+\fB\-\-show\-types\fR,
+\fB\-\-all\fR, and
+\fB\-\-failed\fR\&.
+.RE
+.PP
+\fBstart \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Start (activate) one or more units specified on the command line\&.
+.RE
+.PP
+\fBstop \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Stop (deactivate) one or more units specified on the command line\&.
+.RE
+.PP
+\fBreload \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Asks all units listed on the command line to reload their configuration\&. Note that this will reload the service\-specific configuration, not the unit configuration file of systemd\&. If you want systemd to reload the configuration file of a unit, use the
+\fBdaemon\-reload\fR
+command\&. In other words: for the example case of Apache, this will reload Apache\*(Aqs
+httpd\&.conf
+in the web server, not the
+apache\&.service
+systemd unit file\&.
+.sp
+This command should not be confused with the
+\fBdaemon\-reload\fR
+or
+\fBload\fR
+commands\&.
+.RE
+.PP
+\fBrestart \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Restart one or more units specified on the command line\&. If the units are not running yet, they will be started\&.
+.RE
+.PP
+\fBtry\-restart \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Restart one or more units specified on the command line if the units are running\&. This does nothing if units are not running\&. Note that, for compatibility with Red Hat init scripts,
+\fBcondrestart\fR
+is equivalent to this command\&.
+.RE
+.PP
+\fBreload\-or\-restart \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Reload one or more units if they support it\&. If not, restart them instead\&. If the units are not running yet, they will be started\&.
+.RE
+.PP
+\fBreload\-or\-try\-restart \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Reload one or more units if they support it\&. If not, restart them instead\&. This does nothing if the units are not running\&. Note that, for compatibility with SysV init scripts,
+\fBforce\-reload\fR
+is equivalent to this command\&.
+.RE
+.PP
+\fBisolate \fR\fB\fINAME\fR\fR
+.RS 4
+Start the unit specified on the command line and its dependencies and stop all others\&.
+.sp
+This is similar to changing the runlevel in a traditional init system\&. The
+\fBisolate\fR
+command will immediately stop processes that are not enabled in the new unit, possibly including the graphical environment or terminal you are currently using\&.
+.sp
+Note that this is allowed only on units where
+\fBAllowIsolate=\fR
+is enabled\&. See
+\fBsystemd.unit\fR(5)
+for details\&.
+.RE
+.PP
+\fBkill \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Send a signal to one or more processes of the unit\&. Use
+\fB\-\-kill\-who=\fR
+to select which process to kill\&. Use
+\fB\-\-kill\-mode=\fR
+to select the kill mode and
+\fB\-\-signal=\fR
+to select the signal to send\&.
+.RE
+.PP
+\fBis\-active \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Check whether any of the specified units are active (i\&.e\&. running)\&. Returns an exit code 0 if at least one is active, non\-zero otherwise\&. Unless
+\fB\-\-quiet\fR
+is specified, this will also print the current unit state to STDOUT\&.
+.RE
+.PP
+\fBis\-failed \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Check whether any of the specified units are in a "failed" state\&. Returns an exit code 0 if at least one has failed, non\-zero otherwise\&. Unless
+\fB\-\-quiet\fR
+is specified, this will also print the current unit state to STDOUT\&.
+.RE
+.PP
+\fBstatus [\fR\fB\fINAME\fR\fR\fB\&.\&.\&.|\fR\fB\fIPID\fR\fR\fB\&.\&.\&.]\fR
+.RS 4
+Show terse runtime status information about one or more units, followed by most recent log data from the journal\&. If no units are specified, show all units (subject to limitations specified with
+\fB\-t\fR)\&. If a PID is passed, show information about the unit the process belongs to\&.
+.sp
+This function is intended to generate human\-readable output\&. If you are looking for computer\-parsable output, use
+\fBshow\fR
+instead\&.
+.RE
+.PP
+\fBshow [\fR\fB\fINAME\fR\fR\fB\&.\&.\&.|\fR\fB\fIJOB\fR\fR\fB\&.\&.\&.]\fR
+.RS 4
+Show properties of one or more units, jobs, or the manager itself\&. If no argument is specified, properties of the manager will be shown\&. If a unit name is specified, properties of the unit is shown, and if a job id is specified, properties of the job is shown\&. By default, empty properties are suppressed\&. Use
+\fB\-\-all\fR
+to show those too\&. To select specific properties to show, use
+\fB\-\-property=\fR\&. This command is intended to be used whenever computer\-parsable output is required\&. Use
+\fBstatus\fR
+if you are looking for formatted human\-readable output\&.
+.RE
+.PP
+\fBset\-property \fR\fB\fINAME\fR\fR\fB \fR\fB\fIASSIGNMENT\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Set the specified unit properties at runtime where this is supported\&. This allows changing configuration parameter properties such as resource control settings at runtime\&. Not all properties may be changed at runtime, but many resource control settings (primarily those in
+\fBsystemd.resource-control\fR(5)) may\&. The changes are applied instantly, and stored on disk for future boots, unless
+\fB\-\-runtime\fR
+is passed, in which case the settings only apply until the next reboot\&. The syntax of the property assignment follows closely the syntax of assignments in unit files\&.
+.sp
+Example:
+\fBsystemctl set\-property foobar\&.service CPUShares=777\fR
+.sp
+Note that this command allows changing multiple properties at the same time, which is preferable over setting them individually\&. Like unit file configuration settings, assigning the empty list to list parameters will reset the list\&.
+.RE
+.PP
+\fBhelp \fR\fB\fINAME\fR\fR\fB\&.\&.\&.|\fR\fB\fIPID\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Show manual pages for one or more units, if available\&. If a PID is given, the manual pages for the unit the process belongs to are shown\&.
+.RE
+.PP
+\fBreset\-failed [\fR\fB\fINAME\fR\fR\fB\&.\&.\&.]\fR
+.RS 4
+Reset the
+"failed"
+state of the specified units, or if no unit name is passed, reset the state of all units\&. When a unit fails in some way (i\&.e\&. process exiting with non\-zero error code, terminating abnormally or timing out), it will automatically enter the
+"failed"
+state and its exit code and status is recorded for introspection by the administrator until the service is restarted or reset with this command\&.
+.RE
+.PP
+\fBlist\-dependencies \fR\fB\fINAME\fR\fR
+.RS 4
+Shows required and wanted units of the specified unit\&. If no unit is specified,
+default\&.target
+is implied\&. Target units are recursively expanded\&. When
+\fB\-\-all\fR
+is passed, all other units are recursively expanded as well\&.
+.RE
+.SS "Unit File Commands"
+.PP
+\fBlist\-unit\-files\fR
+.RS 4
+List installed unit files\&.
+.RE
+.PP
+\fBenable \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Enable one or more unit files or unit file instances, as specified on the command line\&. This will create a number of symlinks as encoded in the
+"[Install]"
+sections of the unit files\&. After the symlinks have been created, the systemd configuration is reloaded (in a way that is equivalent to
+\fBdaemon\-reload\fR) to ensure the changes are taken into account immediately\&. Note that this does
+\fInot\fR
+have the effect of also starting any of the units being enabled\&. If this is desired, a separate
+\fBstart\fR
+command must be invoked for the unit\&. Also note that in case of instance enablement, symlinks named the same as instances are created in the install location, however they all point to the same template unit file\&.
+.sp
+This command will print the actions executed\&. This output may be suppressed by passing
+\fB\-\-quiet\fR\&.
+.sp
+Note that this operation creates only the suggested symlinks for the units\&. While this command is the recommended way to manipulate the unit configuration directory, the administrator is free to make additional changes manually by placing or removing symlinks in the directory\&. This is particularly useful to create configurations that deviate from the suggested default installation\&. In this case, the administrator must make sure to invoke
+\fBdaemon\-reload\fR
+manually as necessary to ensure the changes are taken into account\&.
+.sp
+Enabling units should not be confused with starting (activating) units, as done by the
+\fBstart\fR
+command\&. Enabling and starting units is orthogonal: units may be enabled without being started and started without being enabled\&. Enabling simply hooks the unit into various suggested places (for example, so that the unit is automatically started on boot or when a particular kind of hardware is plugged in)\&. Starting actually spawns the daemon process (in case of service units), or binds the socket (in case of socket units), and so on\&.
+.sp
+Depending on whether
+\fB\-\-system\fR,
+\fB\-\-user\fR,
+\fB\-\-runtime\fR, or\fB\-\-global\fR, is specified, this enables the unit for the system, for the calling user only, for only this boot of the system, or for all future logins of all users, or only this boot\&. Note that in the last case, no systemd daemon configuration is reloaded\&.
+.RE
+.PP
+\fBdisable \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Disables one or more units\&. This removes all symlinks to the specified unit files from the unit configuration directory, and hence undoes the changes made by
+\fBenable\fR\&. Note however that this removes all symlinks to the unit files (i\&.e\&. including manual additions), not just those actually created by
+\fBenable\fR\&. This call implicitly reloads the systemd daemon configuration after completing the disabling of the units\&. Note that this command does not implicitly stop the units that are being disabled\&. If this is desired, an additional
+\fBstop\fR
+command should be executed afterwards\&.
+.sp
+This command will print the actions executed\&. This output may be suppressed by passing
+\fB\-\-quiet\fR\&.
+.sp
+This command honors
+\fB\-\-system\fR,
+\fB\-\-user\fR,
+\fB\-\-runtime\fR,
+\fB\-\-global\fR
+in a similar way as
+\fBenable\fR\&.
+.RE
+.PP
+\fBis\-enabled \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Checks whether any of the specified unit files are enabled (as with
+\fBenable\fR)\&. Returns an exit code of 0 if at least one is enabled, non\-zero otherwise\&. Prints the current enable status\&. To suppress this output, use
+\fB\-\-quiet\fR\&.
+.RE
+.PP
+\fBreenable \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Reenable one or more unit files, as specified on the command line\&. This is a combination of
+\fBdisable\fR
+and
+\fBenable\fR
+and is useful to reset the symlinks a unit is enabled with to the defaults configured in the
+"[Install]"
+section of the unit file\&.
+.RE
+.PP
+\fBpreset \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Reset one or more unit files, as specified on the command line, to the defaults configured in the preset policy files\&. This has the same effect as
+\fBdisable\fR
+or
+\fBenable\fR, depending how the unit is listed in the preset files\&. For more information on the preset policy format, see
+\fBsystemd.preset\fR(5)\&. For more information on the concept of presets, please consult the
+\m[blue]\fBPreset\fR\m[]\&\s-2\u[1]\d\s+2
+document\&.
+.RE
+.PP
+\fBmask \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Mask one or more unit files, as specified on the command line\&. This will link these units to
+/dev/null, making it impossible to start them\&. This is a stronger version of
+\fBdisable\fR, since it prohibits all kinds of activation of the unit, including manual activation\&. Use this option with care\&. This honors the
+\fB\-\-runtime\fR
+option, to only mask temporarily until the next reoobt of the system\&.
+.RE
+.PP
+\fBunmask \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Unmask one or more unit files, as specified on the command line\&. This will undo the effect of
+\fBmask\fR\&.
+.RE
+.PP
+\fBlink \fR\fB\fIFILENAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Link a unit file that is not in the unit file search paths into the unit file search path\&. This requires an absolute path to a unit file\&. The effect of this can be undone with
+\fBdisable\fR\&. The effect of this command is that a unit file is available for
+\fBstart\fR
+and other commands although it is not installed directly in the unit search path\&.
+.RE
+.PP
+\fBget\-default\fR
+.RS 4
+Get the default target specified via
+default\&.target
+link\&.
+.RE
+.PP
+\fBset\-default \fR\fB\fINAME\fR\fR
+.RS 4
+Set the default target to boot into\&. Command links
+default\&.target
+to the given unit\&.
+.RE
+.SS "Job Commands"
+.PP
+\fBlist\-jobs\fR
+.RS 4
+List jobs that are in progress\&.
+.RE
+.PP
+\fBcancel \fR\fB\fIJOB\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Cancel one or more jobs specified on the command line by their numeric job IDs\&. If no job ID is specified, cancel all pending jobs\&.
+.RE
+.SS "Snapshot Commands"
+.PP
+\fBsnapshot [\fR\fB\fINAME\fR\fR\fB]\fR
+.RS 4
+Create a snapshot\&. If a snapshot name is specified, the new snapshot will be named after it\&. If none is specified, an automatic snapshot name is generated\&. In either case, the snapshot name used is printed to STDOUT, unless
+\fB\-\-quiet\fR
+is specified\&.
+.sp
+A snapshot refers to a saved state of the systemd manager\&. It is implemented itself as a unit that is generated dynamically with this command and has dependencies on all units active at the time\&. At a later time, the user may return to this state by using the
+\fBisolate\fR
+command on the snapshot unit\&.
+.sp
+Snapshots are only useful for saving and restoring which units are running or are stopped, they do not save/restore any other state\&. Snapshots are dynamic and lost on reboot\&.
+.RE
+.PP
+\fBdelete \fR\fB\fINAME\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Remove a snapshot previously created with
+\fBsnapshot\fR\&.
+.RE
+.SS "Environment Commands"
+.PP
+\fBshow\-environment\fR
+.RS 4
+Dump the systemd manager environment block\&. The environment block will be dumped in straight\-forward form suitable for sourcing into a shell script\&. This environment block will be passed to all processes the manager spawns\&.
+.RE
+.PP
+\fBset\-environment \fR\fB\fIVARIABLE=VALUE\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Set one or more systemd manager environment variables, as specified on the command line\&.
+.RE
+.PP
+\fBunset\-environment \fR\fB\fIVARIABLE\fR\fR\fB\&.\&.\&.\fR
+.RS 4
+Unset one or more systemd manager environment variables\&. If only a variable name is specified, it will be removed regardless of its value\&. If a variable and a value are specified, the variable is only removed if it has the specified value\&.
+.RE
+.SS "Manager Lifecycle Commands"
+.PP
+\fBdaemon\-reload\fR
+.RS 4
+Reload systemd manager configuration\&. This will reload all unit files and recreate the entire dependency tree\&. While the daemon is being reloaded, all sockets systemd listens on on behalf of user configuration will stay accessible\&.
+.sp
+This command should not be confused with the
+\fBload\fR
+or
+\fBreload\fR
+commands\&.
+.RE
+.PP
+\fBdaemon\-reexec\fR
+.RS 4
+Reexecute the systemd manager\&. This will serialize the manager state, reexecute the process and deserialize the state again\&. This command is of little use except for debugging and package upgrades\&. Sometimes, it might be helpful as a heavy\-weight
+\fBdaemon\-reload\fR\&. While the daemon is being reexecuted, all sockets systemd listening on behalf of user configuration will stay accessible\&.
+.RE
+.SS "System Commands"
+.PP
+\fBdefault\fR
+.RS 4
+Enter default mode\&. This is mostly equivalent to
+\fBisolate default\&.target\fR\&.
+.RE
+.PP
+\fBrescue\fR
+.RS 4
+Enter rescue mode\&. This is mostly equivalent to
+\fBisolate rescue\&.target\fR, but also prints a wall message to all users\&.
+.RE
+.PP
+\fBemergency\fR
+.RS 4
+Enter emergency mode\&. This is mostly equivalent to
+\fBisolate emergency\&.target\fR, but also prints a wall message to all users\&.
+.RE
+.PP
+\fBhalt\fR
+.RS 4
+Shut down and halt the system\&. This is mostly equivalent to
+\fBstart halt\&.target \-\-irreversible\fR, but also prints a wall message to all users\&. If combined with
+\fB\-\-force\fR, shutdown of all running services is skipped, however all processes are killed and all file systems are unmounted or mounted read\-only, immediately followed by the system halt\&. If
+\fB\-\-force\fR
+is specified twice, the operation is immediately executed without terminating any processes or unmounting any file systems\&. This may result in data loss\&.
+.RE
+.PP
+\fBpoweroff\fR
+.RS 4
+Shut down and power\-off the system\&. This is mostly equivalent to
+\fBstart poweroff\&.target \-\-irreversible\fR, but also prints a wall message to all users\&. If combined with
+\fB\-\-force\fR, shutdown of all running services is skipped, however all processes are killed and all file systems are unmounted or mounted read\-only, immediately followed by the powering off\&. If
+\fB\-\-force\fR
+is specified twice, the operation is immediately executed without terminating any processes or unmounting any file systems\&. This may result in data loss\&.
+.RE
+.PP
+\fBreboot\fR
+.RS 4
+Shut down and reboot the system\&. This is mostly equivalent to
+\fBstart reboot\&.target \-\-irreversible\fR, but also prints a wall message to all users\&. If combined with
+\fB\-\-force\fR, shutdown of all running services is skipped, however all processes are killed and all file systems are unmounted or mounted read\-only, immediately followed by the reboot\&. If
+\fB\-\-force\fR
+is specified twice, the operation is immediately executed without terminating any processes or unmounting any file systems\&. This may result in data loss\&.
+.RE
+.PP
+\fBkexec\fR
+.RS 4
+Shut down and reboot the system via kexec\&. This is mostly equivalent to
+\fBstart kexec\&.target \-\-irreversible\fR, but also prints a wall message to all users\&. If combined with
+\fB\-\-force\fR, shutdown of all running services is skipped, however all processes are killed and all file systems are unmounted or mounted read\-only, immediately followed by the reboot\&.
+.RE
+.PP
+\fBexit\fR
+.RS 4
+Ask the systemd manager to quit\&. This is only supported for user service managers (i\&.e\&. in conjunction with the
+\fB\-\-user\fR
+option) and will fail otherwise\&.
+.RE
+.PP
+\fBsuspend\fR
+.RS 4
+Suspend the system\&. This will trigger activation of the special
+suspend\&.target
+target\&.
+.RE
+.PP
+\fBhibernate\fR
+.RS 4
+Hibernate the system\&. This will trigger activation of the special
+hibernate\&.target
+target\&.
+.RE
+.PP
+\fBhybrid\-sleep\fR
+.RS 4
+Hibernate and suspend the system\&. This will trigger activation of the special
+hybrid\-sleep\&.target
+target\&.
+.RE
+.PP
+\fBswitch\-root \fR\fB\fIROOT\fR\fR\fB [\fR\fB\fIINIT\fR\fR\fB]\fR
+.RS 4
+Switches to a different root directory and executes a new system manager process below it\&. This is intended for usage in initial RAM disks ("initrd"), and will transition from the initrd\*(Aqs system manager process (a\&.k\&.a "init" process) to the main system manager process\&. This call takes two arguments: the directory that is to become the new root directory, and the path to the new system manager binary below it to execute as PID 1\&. If the latter is omitted or the empty string, a systemd binary will automatically be searched for and used as init\&. If the system manager path is omitted or equal to the empty string, the state of the initrd\*(Aqs system manager process is passed to the main system manager, which allows later introspection of the state of the services involved in the initrd boot\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemadm\fR(1),
+\fBjournalctl\fR(1),
+\fBloginctl\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsystemd.resource-management\fR(5),
+\fBsystemd.special\fR(7),
+\fBwall\fR(1),
+\fBsystemd.preset\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+Preset
+.RS 4
+\%http://freedesktop.org/wiki/Software/systemd/Preset
+.RE
diff --git a/man/systemctl.html b/man/systemctl.html
index 87494c12c6..1f59d1e410 100644
--- a/man/systemctl.html
+++ b/man/systemctl.html
@@ -19,27 +19,25 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemctl — Control the systemd system and service manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemctl</code> [OPTIONS...] COMMAND [NAME...]</p></div></div><div class="refsect1"><a name="idm259765356752"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemctl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemctl — Control the systemd system and service manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemctl</code> [OPTIONS...] COMMAND [NAME...]</p></div></div><div class="refsect1"><a name="idm274682870016"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemctl</strong></span> may be used to
introspect and control the state of the
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
- system and service manager.</p></div><div class="refsect1"><a name="idm259765354160"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
- text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version string and exits.</p></dd><dt id="-t"><span class="term"><code class="option">-t</code>, </span><span class="term"><code class="option">--type=</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p>The argument should be a comma separated list of unit
+ system and service manager.</p></div><div class="refsect1"><a name="idm274682867424"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version string and exits.</p></dd><dt id="-t"><span class="term"><code class="option">-t</code>, </span><span class="term"><code class="option">--type=</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p>The argument should be a comma-separated list of unit
types such as <code class="option">service</code> and
- <code class="option">socket</code>, or unit load states such as
- <code class="option">loaded</code> and <code class="option">masked</code>
- (types and states can be mixed).</p><p>If one of the arguments is a unit type, when listing
- units, limit display to certain unit types. Otherwise units
- of all types will be shown.</p><p>If one of the arguments is a unit load state, when
- listing units, limit display to certain unit
- types. Otherwise units of in all load states will be
- shown.</p><p>As a special case, if one of the arguments is
+ <code class="option">socket</code>.
+ </p><p>If one of the arguments is a unit type, when listing
+ units, limit display to certain unit types. Otherwise, units
+ of all types will be shown.</p><p>As a special case, if one of the arguments is
<code class="option">help</code>, a list of allowed values will be
- printed and the program will exit.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>When showing unit/job/manager properties with the
+ printed and the program will exit.</p></dd><dt id="--state="><span class="term"><code class="option">--state=</code></span><a class="headerlink" title="Permalink to this term" href="#--state=">¶</a></dt><dd><p>The argument should be a comma-separated list of unit LOAD,
+ SUB, or ACTIVE states. When listing units, show only those
+ in specified states.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>When showing unit/job/manager properties with the
<span class="command"><strong>show</strong></span> command, limit display to certain
- properties as specified as argument. If not specified all
+ properties as specified as argument. If not specified, all
set properties are shown. The argument should be a
comma-separated list of property names, such as
- <code class="literal">MainPID</code>. If specified more than once all
+ "<code class="literal">MainPID</code>". If specified more than once, all
properties with the specified names are shown.</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p>When listing units, show all loaded units, regardless
of their state, including inactive units. When showing
unit/job/manager properties, show all properties regardless
@@ -48,21 +46,20 @@
<span class="command"><strong>list-dependencies</strong></span>, i.e. units with
dependencies of type <code class="varname">Wants=</code> or
<code class="varname">Requires=</code> on the given unit.
- </p></dd><dt id="--after"><span class="term"><code class="option">--after</code>, </span><span class="term"><code class="option">--before</code></span><a class="headerlink" title="Permalink to this term" href="#--after">¶</a></dt><dd><p>Show which units are started after, resp. before
- with <span class="command"><strong>list-dependencies</strong></span>.
- </p></dd><dt id="--failed"><span class="term"><code class="option">--failed</code></span><a class="headerlink" title="Permalink to this term" href="#--failed">¶</a></dt><dd><p>When listing units, show only failed units. Do not
- confuse with <code class="option">--fail</code>.</p></dd><dt id="--full"><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#--full">¶</a></dt><dd><p>Do not ellipsize unit names, cgroup members, and
+ </p></dd><dt id="--after"><span class="term"><code class="option">--after</code>, </span><span class="term"><code class="option">--before</code></span><a class="headerlink" title="Permalink to this term" href="#--after">¶</a></dt><dd><p>Show which units are started after or before
+ with <span class="command"><strong>list-dependencies</strong></span>, respectively.
+ </p></dd><dt id="-l"><span class="term"><code class="option">-l</code>, </span><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p>Do not ellipsize unit names, process tree entries, and
truncate unit descriptions in the output of
<span class="command"><strong>list-units</strong></span> and
<span class="command"><strong>list-jobs</strong></span>.</p></dd><dt id="--fail"><span class="term"><code class="option">--fail</code></span><a class="headerlink" title="Permalink to this term" href="#--fail">¶</a></dt><dd><p>If the requested operation conflicts with a pending
- unfinished job, fail the command. If this is not specified
+ unfinished job, fail the command. If this is not specified,
the requested operation will replace the pending job, if
necessary. Do not confuse with
<code class="option">--failed</code>.</p></dd><dt id="--show-types"><span class="term"><code class="option">--show-types</code></span><a class="headerlink" title="Permalink to this term" href="#--show-types">¶</a></dt><dd><p>When showing sockets, show the type of the socket.</p></dd><dt id="--irreversible"><span class="term"><code class="option">--irreversible</code></span><a class="headerlink" title="Permalink to this term" href="#--irreversible">¶</a></dt><dd><p>Mark this transaction's jobs as irreversible. This prevents
future conflicting transactions from replacing these jobs.
The jobs can still be cancelled using the <span class="command"><strong>cancel</strong></span>
- command.</p></dd><dt id="--ignore-dependencies"><span class="term"><code class="option">--ignore-dependencies</code></span><a class="headerlink" title="Permalink to this term" href="#--ignore-dependencies">¶</a></dt><dd><p>When enqueuing a new job ignore all its dependencies
- and execute it immediately. If passed no required units of
+ command.</p></dd><dt id="--ignore-dependencies"><span class="term"><code class="option">--ignore-dependencies</code></span><a class="headerlink" title="Permalink to this term" href="#--ignore-dependencies">¶</a></dt><dd><p>When enqueuing a new job, ignore all its dependencies
+ and execute it immediately. If passed, no required units of
the unit passed will be pulled in, and no ordering
dependencies will be honored. This is mostly a debugging and
rescue tool for the administrator and should not be used by
@@ -74,8 +71,8 @@
users may override these locks. If any locks are taken,
shutdown and sleep state requests will normally fail
(regardless if privileged or not) and a list of active locks
- is printed. However if <code class="option">--ignore-inhibitors</code>
- is specified the locks are ignored and not printed, and the
+ is printed. However, if <code class="option">--ignore-inhibitors</code>
+ is specified, the locks are ignored and not printed, and the
operation attempted anyway, possibly requiring additional
privileges.</p></dd><dt id="-q"><span class="term"><code class="option">-q</code>, </span><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#-q">¶</a></dt><dd><p>Suppress output to standard output in
<span class="command"><strong>snapshot</strong></span>,
@@ -83,12 +80,12 @@
<span class="command"><strong>is-failed</strong></span>,
<span class="command"><strong>enable</strong></span> and
<span class="command"><strong>disable</strong></span>.</p></dd><dt id="--no-block"><span class="term"><code class="option">--no-block</code></span><a class="headerlink" title="Permalink to this term" href="#--no-block">¶</a></dt><dd><p>Do not synchronously wait for the requested operation
- to finish. If this is not specified the job will be
+ to finish. If this is not specified, the job will be
verified, enqueued and <span class="command"><strong>systemctl</strong></span> will
- wait until it is completed. By passing this argument it is
+ wait until it is completed. By passing this argument, it is
only verified and enqueued.</p></dd><dt id="--no-legend"><span class="term"><code class="option">--no-legend</code></span><a class="headerlink" title="Permalink to this term" href="#--no-legend">¶</a></dt><dd><p>Do not print a legend, i.e. the column headers and
the footer with hints.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a pager.</p></dd><dt id="--system"><span class="term"><code class="option">--system</code></span><a class="headerlink" title="Permalink to this term" href="#--system">¶</a></dt><dd><p>Talk to the systemd system manager. (Default)</p></dd><dt id="--user"><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--user">¶</a></dt><dd><p>Talk to the systemd manager of the calling
- user.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Don't send wall message before halt, power-off,
+ user.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Do not send wall message before halt, power-off,
reboot.</p></dd><dt id="--global"><span class="term"><code class="option">--global</code></span><a class="headerlink" title="Permalink to this term" href="#--global">¶</a></dt><dd><p>When used with <span class="command"><strong>enable</strong></span> and
<span class="command"><strong>disable</strong></span>, operate on the global user
configuration directory, thus enabling or disabling a unit
@@ -99,10 +96,10 @@
may require input of a password or passphrase string, for
example to unlock system hard disks or cryptographic
certificates. Unless this option is specified and the
- command is invoked from a terminal
+ command is invoked from a terminal,
<span class="command"><strong>systemctl</strong></span> will query the user on the
terminal for the necessary secrets. Use this option to
- switch this behavior off. In this case the password must be
+ switch this behavior off. In this case, the password must be
supplied by some other means (for example graphical password
agents) or the service might fail. This also disables
querying the user for authentication for privileged
@@ -110,15 +107,15 @@
processes to kill. Must be one of <code class="option">main</code>,
<code class="option">control</code> or <code class="option">all</code> to select
whether to kill only the main process of the unit, the
- control process or all processes of the unit. If omitted
+ control process or all processes of the unit. If omitted,
defaults to <code class="option">all</code>.</p></dd><dt id="-s"><span class="term"><code class="option">-s</code>, </span><span class="term"><code class="option">--signal=</code></span><a class="headerlink" title="Permalink to this term" href="#-s">¶</a></dt><dd><p>When used with <span class="command"><strong>kill</strong></span>, choose which
signal to send to selected processes. Must be one of the
- well known signal specifiers such as SIGTERM, SIGINT or
- SIGSTOP. If omitted defaults to
+ well known signal specifiers such as <code class="constant">SIGTERM</code>, <code class="constant">SIGINT</code> or
+ <code class="constant">SIGSTOP</code>. If omitted, defaults to
<code class="option">SIGTERM</code>.</p></dd><dt id="-f"><span class="term"><code class="option">-f</code>, </span><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#-f">¶</a></dt><dd><p>When used with <span class="command"><strong>enable</strong></span>, overwrite
any existing conflicting symlinks.</p><p>When used with <span class="command"><strong>halt</strong></span>,
<span class="command"><strong>poweroff</strong></span>, <span class="command"><strong>reboot</strong></span> or
- <span class="command"><strong>kexec</strong></span> execute the selected operation
+ <span class="command"><strong>kexec</strong></span>, execute the selected operation
without shutting down all units. However, all processes will
be killed forcibly and all file systems are unmounted or
remounted read-only. This is hence a drastic but relatively
@@ -139,27 +136,24 @@
<code class="filename">/etc</code> but in <code class="filename">/run</code>,
with identical immediate effects, however, since the latter
is lost on reboot, the changes are lost too.</p><p>Similar, when used with
- <span class="command"><strong>set-cgroup-attr</strong></span>,
- <span class="command"><strong>unset-cgroup-attr</strong></span>,
- <span class="command"><strong>set-cgroup</strong></span> and
- <span class="command"><strong>unset-cgroup</strong></span>, make changes only
+ <span class="command"><strong>set-property</strong></span>, make changes only
temporarily, so that they are lost on the next
reboot.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute operation remotely. Specify a hostname, or
- username and hostname separated by @, to connect to. This
+ username and hostname separated by "<code class="literal">@</code>", to connect to. This
will use SSH to talk to the remote systemd
instance.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Acquire privileges via PolicyKit before executing the
- operation.</p></dd><dt id="-n"><span class="term"><code class="option">-n</code>, </span><span class="term"><code class="option">--lines=</code></span><a class="headerlink" title="Permalink to this term" href="#-n">¶</a></dt><dd><p>When used with <span class="command"><strong>status</strong></span> controls the
+ operation.</p></dd><dt id="-n"><span class="term"><code class="option">-n</code>, </span><span class="term"><code class="option">--lines=</code></span><a class="headerlink" title="Permalink to this term" href="#-n">¶</a></dt><dd><p>When used with <span class="command"><strong>status</strong></span>, controls the
number of journal lines to show, counting from the most
recent ones. Takes a positive integer argument. Defaults to
- 10.</p></dd><dt id="-o"><span class="term"><code class="option">-o</code>, </span><span class="term"><code class="option">--output=</code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p>When used with <span class="command"><strong>status</strong></span> controls the
+ 10.</p></dd><dt id="-o"><span class="term"><code class="option">-o</code>, </span><span class="term"><code class="option">--output=</code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p>When used with <span class="command"><strong>status</strong></span>, controls the
formatting of the journal entries that are shown. For the
- available choices see
+ available choices, see
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>.
- Defaults to <code class="literal">short</code>.</p></dd><dt id="--plain"><span class="term"><code class="option">--plain</code></span><a class="headerlink" title="Permalink to this term" href="#--plain">¶</a></dt><dd><p>When used with <span class="command"><strong>list-dependencies</strong></span>
- the output is printed as a list instead of a tree.</p></dd></dl></div></div><div class="refsect1"><a name="idm259764225648"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="list-units"><span class="term"><span class="command"><strong>list-units</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-units">¶</a></dt><dd><p>List known units (subject to limitations specified
- with <code class="option">-t</code>).</p><p>This is the default command.</p></dd><dt id="list-sockets"><span class="term"><span class="command"><strong>list-sockets</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-sockets">¶</a></dt><dd><p>List socket units ordered by the listening address. Produces output
- similar to
- </p><pre class="programlisting">
+ Defaults to "<code class="literal">short</code>".</p></dd><dt id="--plain"><span class="term"><code class="option">--plain</code></span><a class="headerlink" title="Permalink to this term" href="#--plain">¶</a></dt><dd><p>When used with <span class="command"><strong>list-dependencies</strong></span>,
+ the output is printed as a list instead of a tree.</p></dd></dl></div></div><div class="refsect1"><a name="idm274681742048"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood:</p><div class="refsect2"><a name="idm274681741024"></a><h3 id="Unit Commands">Unit Commands<a class="headerlink" title="Permalink to this headline" href="#Unit%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="list-units"><span class="term"><span class="command"><strong>list-units</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-units">¶</a></dt><dd><p>List known units (subject to limitations specified
+ with <code class="option">-t</code>).</p><p>This is the default command.</p></dd><dt id="list-sockets"><span class="term"><span class="command"><strong>list-sockets</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-sockets">¶</a></dt><dd><p>List socket units ordered by the listening address. Produces output
+ similar to
+ </p><pre class="programlisting">
LISTEN UNIT ACTIVATES
/dev/initctl systemd-initctl.socket systemd-initctl.service
...
@@ -167,359 +161,303 @@ LISTEN UNIT ACTIVATES
kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
5 sockets listed.
- </pre><p>
- Note: because the addresses might contains spaces, this output
- is not suitable for programatic consumption.
- </p><p>See also the options <code class="option">--show-types</code>,
- <code class="option">--all</code>, and <code class="option">--failed</code>.</p></dd><dt id="start NAME..."><span class="term"><span class="command"><strong>start <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#start%20NAME...">¶</a></dt><dd><p>Start (activate) one or more units specified on the
- command line.</p></dd><dt id="stop NAME..."><span class="term"><span class="command"><strong>stop <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#stop%20NAME...">¶</a></dt><dd><p>Stop (deactivate) one or more units specified on the
- command line.</p></dd><dt id="reload NAME..."><span class="term"><span class="command"><strong>reload <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reload%20NAME...">¶</a></dt><dd><p>Asks all units listed on the command line to reload
- their configuration. Note that this will reload the
- service-specific configuration, not the unit configuration
- file of systemd. If you want systemd to reload the
- configuration file of a unit use the
- <span class="command"><strong>daemon-reload</strong></span> command. In other words:
- for the example case of Apache, this will reload Apache's
- <code class="filename">httpd.conf</code> in the web server, not the
- <code class="filename">apache.service</code> systemd unit
- file. </p><p>This command should not be confused with the
- <span class="command"><strong>daemon-reload</strong></span> or <span class="command"><strong>load</strong></span>
- commands.</p></dd><dt id="restart NAME..."><span class="term"><span class="command"><strong>restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#restart%20NAME...">¶</a></dt><dd><p>Restart one or more units specified on the command
- line. If the units are not running yet they will be
- started.</p></dd><dt id="try-restart NAME..."><span class="term"><span class="command"><strong>try-restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#try-restart%20NAME...">¶</a></dt><dd><p>Restart one or more units specified on the command
- line if the units are running. Do nothing if units are not
- running. Note that for compatibility with Red Hat init
- scripts <span class="command"><strong>condrestart</strong></span> is equivalent to this
- command.</p></dd><dt id="reload-or-restart NAME..."><span class="term"><span class="command"><strong>reload-or-restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reload-or-restart%20NAME...">¶</a></dt><dd><p>Reload one or more units if they support it. If not,
- restart them instead. If the units are not running yet they
- will be started.</p></dd><dt id="reload-or-try-restart NAME..."><span class="term"><span class="command"><strong>reload-or-try-restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reload-or-try-restart%20NAME...">¶</a></dt><dd><p>Reload one or more units if they support it. If not,
- restart them instead. Do nothing if the units are not
- running. Note that for compatibility with SysV init scripts
- <span class="command"><strong>force-reload</strong></span> is equivalent to this
- command.</p></dd><dt id="isolate NAME"><span class="term"><span class="command"><strong>isolate <em class="replaceable"><code>NAME</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#isolate%20NAME">¶</a></dt><dd><p>Start the unit specified on the command line and its
- dependencies and stop all others.</p><p>This is similar to changing the runlevel in a
- traditional init system. The <span class="command"><strong>isolate</strong></span>
- command will immediately stop processes that are not enabled
- in the new unit, possibly including the graphical
- environment or terminal you are currently using.</p><p>Note that this is allowed only on units where
- <code class="option">AllowIsolate=</code> is enabled. See
- <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
- for details.</p></dd><dt id="kill NAME..."><span class="term"><span class="command"><strong>kill <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kill%20NAME...">¶</a></dt><dd><p>Send a signal to one or more processes of the
- unit. Use <code class="option">--kill-who=</code> to select which
- process to kill. Use <code class="option">--kill-mode=</code> to select
- the kill mode and <code class="option">--signal=</code> to select the
- signal to send.</p></dd><dt id="is-active NAME..."><span class="term"><span class="command"><strong>is-active <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#is-active%20NAME...">¶</a></dt><dd><p>Check whether any of the specified units are active
- (i.e. running). Returns an exit code 0 if at least one is
- active, non-zero otherwise. Unless <code class="option">--quiet</code>
- is specified this will also print the current unit state to
- STDOUT.</p></dd><dt id="is-failed NAME..."><span class="term"><span class="command"><strong>is-failed <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#is-failed%20NAME...">¶</a></dt><dd><p>Check whether any of the specified units are failed.
- Returns an exit code 0 if at least one is failed, non-zero
- otherwise. Unless <code class="option">--quiet</code> is specified this
- will also print the current unit state to
- STDOUT.</p></dd><dt id="status [NAME...|PID...]"><span class="term"><span class="command"><strong>status [<em class="replaceable"><code>NAME</code></em>...|<em class="replaceable"><code>PID</code></em>...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status%20%5BNAME...%7CPID...%5D">¶</a></dt><dd><p>Show terse runtime status information about one or
- more units, followed by most recent log data from the
- journal. If no units are specified, show all units (subject
- to limitations specified with <code class="option">-t</code>). If a PID
- is passed show information about the unit the process
- belongs to.</p><p>This function is intended to generate human-readable
- output. If you are looking for computer-parsable output, use
- <span class="command"><strong>show</strong></span> instead.</p></dd><dt id="show [NAME...|JOB...]"><span class="term"><span class="command"><strong>show [<em class="replaceable"><code>NAME</code></em>...|<em class="replaceable"><code>JOB</code></em>...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show%20%5BNAME...%7CJOB...%5D">¶</a></dt><dd><p>Show properties of one or more units, jobs, or the
- manager itself. If no argument is specified properties of
- the manager will be shown. If a unit name is specified
- properties of the unit is shown, and if a job id is
- specified properties of the job is shown. By default, empty
- properties are suppressed. Use <code class="option">--all</code> to
- show those too. To select specific properties to show use
- <code class="option">--property=</code>. This command is intended to be
- used whenever computer-parsable output is required. Use
- <span class="command"><strong>status</strong></span> if you are looking for formatted
- human-readable output.</p></dd><dt id="get-cgroup-attr NAME ATTRIBUTE..."><span class="term"><span class="command"><strong>get-cgroup-attr <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>ATTRIBUTE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#get-cgroup-attr%20NAME%20ATTRIBUTE...">¶</a></dt><dd><p>Retrieve the specified control group attributes of the
- specified unit. Takes a unit name and one or more attribute
- names such as <code class="literal">cpu.shares</code>. This will
- output the current values of the specified attributes,
- separated by new-lines. For attributes that take list of
- items the output will be new-line separated, too. This
- operation will always try to retrieve the data in question
- from the kernel first, and if that is not available use the
- configured values instead. Instead of low-level control
- group attribute names high-level pretty names may be used,
- as used for unit execution environment configuration, see
- <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
- for details. For example, passing
- <code class="literal">memory.limit_in_bytes</code> and
- <code class="literal">MemoryLimit</code> is equivalent.</p></dd><dt id="set-cgroup-attr NAME ATTRIBUTE VALUE..."><span class="term"><span class="command"><strong>set-cgroup-attr <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>ATTRIBUTE</code></em> <em class="replaceable"><code>VALUE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-cgroup-attr%20NAME%20ATTRIBUTE%20VALUE...">¶</a></dt><dd><p>Set the specified control group attribute of the
- specified unit to the specified value. Takes a unit
- name and an attribute name such as
- <code class="literal">cpu.shares</code>, plus one or more values
- (multiple values may only be used for attributes that take
- multiple values). This operation will immediately update the
- kernel attribute for this unit and persistently store this
- setting for later reboots (unless <code class="option">--runtime</code>
- is passed, in which case the setting is not saved
- persistently and only valid until the next reboot.) Instead
- of low-level control group attribute names high-level pretty
- names may be used, as used for unit execution environment
- configuration, see
- <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
- for details. For example, passing
- <code class="literal">memory.limit_in_bytes</code> and
- <code class="literal">MemoryLimit</code> is equivalent. This operation
- will implicitly create a control group for the unit in the
- controller the attribute belongs to, if needed. For
- attributes that take multiple values, this operation will
- append the specified values to the previously set values
- list (use <span class="command"><strong>unset-cgroup-attr</strong></span> to reset the
- list explicitly). For attributes that take a single value
- only the list will be reset implicitly.</p></dd><dt id="unset-cgroup-attr NAME ATTRIBUTE..."><span class="term"><span class="command"><strong>unset-cgroup-attr <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>ATTRIBUTE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#unset-cgroup-attr%20NAME%20ATTRIBUTE...">¶</a></dt><dd><p>Unset the specified control group attributes
- of the specified unit. Takes a unit name and one or more
- attribut names such as <code class="literal">cpu.shares</code>. This
- operation might or might not have an immediate effect on the
- current kernel attribute value. This will remove any
- persistently stored configuration values for this attribute
- (as set with <span class="command"><strong>set-cgroup-attr</strong></span> before),
- unless <code class="option">--runtime</code> is passed, in which case the
- configuration is reset only until the next reboot. Again,
- high-level control group attributes may be used instead of the
- low-level kernel ones. For attributes which take multiple
- values, all currently set values are reset.</p></dd><dt id="set-cgroup NAME CGROUP..."><span class="term"><span class="command"><strong>set-cgroup <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>CGROUP</code></em>...</strong></span>, </span><span class="term"><span class="command"><strong>unset-cgroup <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>CGROUP</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-cgroup%20NAME%20CGROUP...">¶</a></dt><dd><p>Add or remove a unit to/from a specific
- control group hierarchy and/or control group path. Takes a
- unit name, plus a control group specification in the syntax
- <em class="replaceable"><code>CONTROLLER</code></em>:<em class="replaceable"><code>PATH</code></em>
- or <em class="replaceable"><code>CONTROLLER</code></em>. In the latter syntax
- (where the path is omitted) the default unit control group
- path is implied. Examples: <code class="literal">cpu</code> or
- <code class="literal">cpu:/foo/bar</code>. If a unit is removed from a
- control group hierarchy all its processes will be moved to the
- root group of the hierarchy and all control group attributes
- will be reset. These operations are immediately reflected in
- the kernel hierarchy, and stored persistently to disk (unless
- <code class="option">--runtime</code> is passed).</p></dd><dt id="help NAME...|PID..."><span class="term"><span class="command"><strong>help <em class="replaceable"><code>NAME</code></em>...|<em class="replaceable"><code>PID</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#help%20NAME...%7CPID...">¶</a></dt><dd><p>Show manual pages for one or more units, if
- available. If a PID is passed the manual pages for the unit
- the process of the PID belongs to is
- shown.</p></dd><dt id="reset-failed [NAME...]"><span class="term"><span class="command"><strong>reset-failed [<em class="replaceable"><code>NAME</code></em>...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reset-failed%20%5BNAME...%5D">¶</a></dt><dd><p>Reset the <code class="literal">failed</code> state of the
- specified units, or if no unit name is passed of all
- units. When a unit fails in some way (i.e. process exiting
- with non-zero error code, terminating abnormally or timing
- out) it will automatically enter the
- <code class="literal">failed</code> state and its exit code and status
- is recorded for introspection by the administrator until the
- service is restarted or reset with this command.</p></dd><dt id="list-unit-files"><span class="term"><span class="command"><strong>list-unit-files</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-unit-files">¶</a></dt><dd><p>List installed unit files.</p></dd><dt id="enable NAME..."><span class="term"><span class="command"><strong>enable <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#enable%20NAME...">¶</a></dt><dd><p>Enable one or more unit files or unit file instances,
- as specified on the command line. This will create a number
- of symlinks as encoded in the <code class="literal">[Install]</code>
- sections of the unit files. After the symlinks have been
- created the systemd configuration is reloaded (in a way that
- is equivalent to <span class="command"><strong>daemon-reload</strong></span>) to ensure
- the changes are taken into account immediately. Note that
- this does not have the effect that any of the units enabled
- are also started at the same time. If this is desired a
- separate <span class="command"><strong>start</strong></span> command must be invoked
- for the unit. Also note that in case of instance enablement,
- symlinks named same as instances are created in install
- location, however they all point to the same template unit
- file.</p><p>This command will print the actions executed. This
- output may be suppressed by passing <code class="option">--quiet</code>.
- </p><p>Note that this operation creates only the suggested
- symlinks for the units. While this command is the
- recommended way to manipulate the unit configuration
- directory, the administrator is free to make additional
- changes manually, by placing or removing symlinks in the
- directory. This is particularly useful to create
- configurations that deviate from the suggested default
- installation. In this case the administrator must make sure
- to invoke <span class="command"><strong>daemon-reload</strong></span> manually as
- necessary, to ensure his changes are taken into account.
- </p><p>Enabling units should not be confused with starting
- (activating) units, as done by the <span class="command"><strong>start</strong></span>
- command. Enabling and starting units is orthogonal: units
- may be enabled without being started and started without
- being enabled. Enabling simply hooks the unit into various
- suggested places (for example, so that the unit is
- automatically started on boot or when a particular kind of
- hardware is plugged in). Starting actually spawns the daemon
- process (in case of service units), or binds the socket (in
- case of socket units), and so on.</p><p>Depending on whether <code class="option">--system</code>,
- <code class="option">--user</code> or <code class="option">--global</code> is
- specified this enables the unit for the system, for the
- calling user only or for all future logins of all
- users. Note that in the last case no systemd daemon
- configuration is reloaded.</p></dd><dt id="disable NAME..."><span class="term"><span class="command"><strong>disable <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#disable%20NAME...">¶</a></dt><dd><p>Disables one or more units. This removes all symlinks
- to the specified unit files from the unit configuration
- directory, and hence undoes the changes made by
- <span class="command"><strong>enable</strong></span>. Note however that this removes
- all symlinks to the unit files (i.e. including manual
- additions), not just those actually created by
- <span class="command"><strong>enable</strong></span>. This call implicitly reloads the
- systemd daemon configuration after completing the disabling
- of the units. Note that this command does not implicitly
- stop the units that are being disabled. If this is desired
- an additional <span class="command"><strong>stop</strong></span> command should be
- executed afterwards.</p><p>This command will print the actions executed. This
- output may be suppressed by passing <code class="option">--quiet</code>.
- </p><p>This command honors <code class="option">--system</code>,
- <code class="option">--user</code>, <code class="option">--global</code> in a
- similar way as <span class="command"><strong>enable</strong></span>.</p></dd><dt id="is-enabled NAME..."><span class="term"><span class="command"><strong>is-enabled <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#is-enabled%20NAME...">¶</a></dt><dd><p>Checks whether any of the specified unit files are
- enabled (as with <span class="command"><strong>enable</strong></span>). Returns an exit
- code of 0 if at least one is enabled, non-zero
- otherwise. Prints the current enable status. To suppress
- this output use <code class="option">--quiet</code>.</p></dd><dt id="reenable NAME..."><span class="term"><span class="command"><strong>reenable <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reenable%20NAME...">¶</a></dt><dd><p>Reenable one or more unit files, as specified on the
- command line. This is a combination of
- <span class="command"><strong>disable</strong></span> and <span class="command"><strong>enable</strong></span> and
- is useful to reset the symlinks a unit is enabled with to
- the defaults configured in the <code class="literal">[Install]</code>
- section of the unit file.</p></dd><dt id="preset NAME..."><span class="term"><span class="command"><strong>preset <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#preset%20NAME...">¶</a></dt><dd><p>Reset one or more unit files, as specified on the
- command line, to the defaults configured in the preset
- policy files. This has the same effect as
- <span class="command"><strong>disable</strong></span> or <span class="command"><strong>enable</strong></span>,
- depending how the unit is listed in the preset files. For
- more information on preset policy format see
- <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>.
- For more information on the concept of presets please
- consult the
- <a class="ulink" href="http://freedesktop.org/wiki/Software/systemd/Preset" target="_top">Preset</a>
- document.</p></dd><dt id="mask NAME..."><span class="term"><span class="command"><strong>mask <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#mask%20NAME...">¶</a></dt><dd><p>Mask one or more unit files, as specified on the
- command line. This will link these units to
- <code class="filename">/dev/null</code>, making it impossible to
- start them. This is a stronger version of
- <span class="command"><strong>disable</strong></span>, since it prohibits all kinds of
- activation of the unit, including manual activation. Use
- this option with care.</p></dd><dt id="unmask NAME..."><span class="term"><span class="command"><strong>unmask <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#unmask%20NAME...">¶</a></dt><dd><p>Unmask one or more unit files, as specified on the
- command line. This will undo the effect of
- <span class="command"><strong>mask</strong></span>.</p></dd><dt id="link FILENAME..."><span class="term"><span class="command"><strong>link <em class="replaceable"><code>FILENAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#link%20FILENAME...">¶</a></dt><dd><p>Link a unit file that is not in the unit file search
- paths into the unit file search path. This requires an
- absolute path to a unit file. The effect of this can be
- undone with <span class="command"><strong>disable</strong></span>. The effect of this
- command is that a unit file is available for
- <span class="command"><strong>start</strong></span> and other commands although it
- isn't installed directly in the unit search path.</p></dd><dt id="load NAME..."><span class="term"><span class="command"><strong>load <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#load%20NAME...">¶</a></dt><dd><p>Load one or more units specified on the command
- line. This will simply load their configuration from disk,
- but not start them. To start them you need to use the
- <span class="command"><strong>start</strong></span> command which will implicitly load
- a unit that has not been loaded yet. Note that systemd
- garbage collects loaded units that are not active or
- referenced by an active unit. This means that units loaded
- this way will usually not stay loaded for long. Also note
- that this command cannot be used to reload unit
- configuration. Use the <span class="command"><strong>daemon-reload</strong></span>
- command for that. All in all, this command is of little use
- except for debugging.</p><p>This command should not be confused with the
- <span class="command"><strong>daemon-reload</strong></span> or
- <span class="command"><strong>reload</strong></span>.</p></dd><dt id="list-jobs"><span class="term"><span class="command"><strong>list-jobs</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-jobs">¶</a></dt><dd><p>List jobs that are in progress.</p></dd><dt id="cancel JOB..."><span class="term"><span class="command"><strong>cancel <em class="replaceable"><code>JOB</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#cancel%20JOB...">¶</a></dt><dd><p>Cancel one or more jobs specified on the command line
- by their numeric job IDs. If no job id is specified, cancel
- all pending jobs.</p></dd><dt id="dump"><span class="term"><span class="command"><strong>dump</strong></span></span><a class="headerlink" title="Permalink to this term" href="#dump">¶</a></dt><dd><p>Dump server status. This will output a (usually very
- long) human readable manager status dump. Its format is
- subject to change without notice and should not be parsed by
- applications.</p></dd><dt id="list-dependencies NAME"><span class="term"><span class="command"><strong>list-dependencies <em class="replaceable"><code>NAME</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-dependencies%20NAME">¶</a></dt><dd><p>Shows required and wanted units of the specified
- unit. If no unit is specified
- <code class="filename">default.target</code> is implied. Target units
- are recursively expanded. When <code class="option">--all</code> is
- passed all other units are recursively expanded as
- well.</p></dd><dt id="snapshot [NAME]"><span class="term"><span class="command"><strong>snapshot [<em class="replaceable"><code>NAME</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#snapshot%20%5BNAME%5D">¶</a></dt><dd><p>Create a snapshot. If a snapshot name is specified,
- the new snapshot will be named after it. If none is
- specified an automatic snapshot name is generated. In either
- case, the snapshot name used is printed to STDOUT, unless
- <code class="option">--quiet</code> is specified.</p><p>A snapshot refers to a saved state of the systemd
- manager. It is implemented itself as a unit that is
- generated dynamically with this command and has dependencies
- on all units active at the time. At a later time the user
- may return to this state by using the
- <span class="command"><strong>isolate</strong></span> command on the snapshot unit.
- </p><p>Snapshots are only useful for saving and restoring
- which units are running or are stopped, they do not
- save/restore any other state. Snapshots are dynamic and lost
- on reboot.</p></dd><dt id="delete NAME..."><span class="term"><span class="command"><strong>delete <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#delete%20NAME...">¶</a></dt><dd><p>Remove a snapshot previously created with
- <span class="command"><strong>snapshot</strong></span>.</p></dd><dt id="daemon-reload"><span class="term"><span class="command"><strong>daemon-reload</strong></span></span><a class="headerlink" title="Permalink to this term" href="#daemon-reload">¶</a></dt><dd><p>Reload systemd manager configuration. This will reload
- all unit files and recreate the entire dependency
- tree. While the daemon is reloaded, all sockets systemd
- listens on on behalf of user configuration will stay
- accessible.</p><p>This command should not be confused
- with the <span class="command"><strong>load</strong></span> or
- <span class="command"><strong>reload</strong></span> commands.</p></dd><dt id="daemon-reexec"><span class="term"><span class="command"><strong>daemon-reexec</strong></span></span><a class="headerlink" title="Permalink to this term" href="#daemon-reexec">¶</a></dt><dd><p>Reexecute the systemd manager. This will serialize the
- manager state, reexecute the process and deserialize the
- state again. This command is of little use except for
- debugging and package upgrades. Sometimes it might be
- helpful as a heavy-weight <span class="command"><strong>daemon-reload</strong></span>.
- While the daemon is reexecuted all sockets systemd listens
- on on behalf of user configuration will stay accessible.
- </p></dd><dt id="show-environment"><span class="term"><span class="command"><strong>show-environment</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show-environment">¶</a></dt><dd><p>Dump the systemd manager environment block. The
- environment block will be dumped in straight-forward form
- suitable for sourcing into a shell script. This environment
- block will be passed to all processes the manager
- spawns.</p></dd><dt id="set-environment VARIABLE=VALUE..."><span class="term"><span class="command"><strong>set-environment <em class="replaceable"><code>VARIABLE=VALUE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-environment%20VARIABLE=VALUE...">¶</a></dt><dd><p>Set one or more systemd manager environment variables,
- as specified on the command line.</p></dd><dt id="unset-environment VARIABLE..."><span class="term"><span class="command"><strong>unset-environment <em class="replaceable"><code>VARIABLE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#unset-environment%20VARIABLE...">¶</a></dt><dd><p>Unset one or more systemd manager environment
- variables. If only a variable name is specified it will be
- removed regardless of its value. If a variable and a value
- are specified the variable is only removed if it has the
- specified value.</p></dd><dt id="default"><span class="term"><span class="command"><strong>default</strong></span></span><a class="headerlink" title="Permalink to this term" href="#default">¶</a></dt><dd><p>Enter default mode. This is mostly equivalent to
- <span class="command"><strong>isolate default.target</strong></span>.</p></dd><dt id="rescue"><span class="term"><span class="command"><strong>rescue</strong></span></span><a class="headerlink" title="Permalink to this term" href="#rescue">¶</a></dt><dd><p>Enter rescue mode. This is mostly equivalent to
- <span class="command"><strong>isolate rescue.target</strong></span> but also prints a
- wall message to all users.</p></dd><dt id="emergency"><span class="term"><span class="command"><strong>emergency</strong></span></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p>Enter emergency mode. This is mostly equivalent to
- <span class="command"><strong>isolate emergency.target</strong></span> but also prints
- a wall message to all users.</p></dd><dt id="halt"><span class="term"><span class="command"><strong>halt</strong></span></span><a class="headerlink" title="Permalink to this term" href="#halt">¶</a></dt><dd><p>Shut down and halt the system. This is mostly equivalent to
- <span class="command"><strong>start halt.target --irreversible</strong></span> but also
- prints a wall message to all users. If combined with
- <code class="option">--force</code> shutdown of all running services is
- skipped, however all processes are killed and all file
- systems are unmounted or mounted read-only, immediately
- followed by the system halt. If <code class="option">--force</code> is
- specified twice the operation is immediately executed
- without terminating any processes or unmounting any file
- systems. This may result in data loss.</p></dd><dt id="poweroff"><span class="term"><span class="command"><strong>poweroff</strong></span></span><a class="headerlink" title="Permalink to this term" href="#poweroff">¶</a></dt><dd><p>Shut down and power-off the system. This is mostly
- equivalent to <span class="command"><strong>start poweroff.target --irreversible</strong></span>
- but also prints a wall message to all users. If combined with
- <code class="option">--force</code> shutdown of all running services is
- skipped, however all processes are killed and all file
- systems are unmounted or mounted read-only, immediately
- followed by the powering off. If <code class="option">--force</code> is
- specified twice the operation is immediately executed
- without terminating any processes or unmounting any file
- systems. This may result in data loss.</p></dd><dt id="reboot"><span class="term"><span class="command"><strong>reboot</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reboot">¶</a></dt><dd><p>Shut down and reboot the system. This is mostly
- equivalent to <span class="command"><strong>start reboot.target --irreversible</strong></span>
- but also prints a wall message to all users. If combined with
- <code class="option">--force</code> shutdown of all running services is
- skipped, however all processes are killed and all file
- systems are unmounted or mounted read-only, immediately
- followed by the reboot. If <code class="option">--force</code> is
- specified twice the operation is immediately executed
- without terminating any processes or unmounting any file
- systems. This may result in data loss.</p></dd><dt id="kexec"><span class="term"><span class="command"><strong>kexec</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kexec">¶</a></dt><dd><p>Shut down and reboot the system via kexec. This is
- mostly equivalent to <span class="command"><strong>start kexec.target --irreversible</strong></span>
- but also prints a wall message to all users. If combined
- with <code class="option">--force</code> shutdown of all running
- services is skipped, however all processes are killed and
- all file systems are unmounted or mounted read-only,
- immediately followed by the reboot.</p></dd><dt id="exit"><span class="term"><span class="command"><strong>exit</strong></span></span><a class="headerlink" title="Permalink to this term" href="#exit">¶</a></dt><dd><p>Ask the systemd manager to quit. This is only
- supported for user service managers (i.e. in conjunction
- with the <code class="option">--user</code> option) and will fail
- otherwise.</p></dd><dt id="suspend"><span class="term"><span class="command"><strong>suspend</strong></span></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>Suspend the system. This will trigger activation of
- the special <code class="filename">suspend.target</code> target.
- </p></dd><dt id="hibernate"><span class="term"><span class="command"><strong>hibernate</strong></span></span><a class="headerlink" title="Permalink to this term" href="#hibernate">¶</a></dt><dd><p>Hibernate the system. This will trigger activation of
- the special <code class="filename">hibernate.target</code> target.
- </p></dd><dt id="hybrid-sleep"><span class="term"><span class="command"><strong>hybrid-sleep</strong></span></span><a class="headerlink" title="Permalink to this term" href="#hybrid-sleep">¶</a></dt><dd><p>Hibernate and suspend the system. This will trigger
- activation of the special
- <code class="filename">hybrid-sleep.target</code> target.</p></dd><dt id="switch-root ROOT [INIT]"><span class="term"><span class="command"><strong>switch-root <em class="replaceable"><code>ROOT</code></em> [<em class="replaceable"><code>INIT</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#switch-root%20ROOT%20%5BINIT%5D">¶</a></dt><dd><p>Switches to a different root directory and executes a
- new system manager process below it. This is intended for
- usage in initial RAM disks ("initrd"), and will transition
- from the initrd's system manager process (a.k.a "init"
- process) to the main system manager process. Takes two
- arguments: the directory to make the new root directory, and
- the path to the new system manager binary below it to
- execute as PID 1. If the latter is omitted or the empty
- string, a systemd binary will automatically be searched for
- and used as init. If the system manager path is omitted or
- equal to the empty string the state of the initrd's system
- manager process is passed to the main system manager, which
- allows later introspection of the state of the services
- involved in the initrd boot.</p></dd></dl></div></div><div class="refsect1"><a name="idm259764017200"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259764015968"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when <code class="option">--no-pager</code> is not
+ </pre><p>
+ Note: because the addresses might contains spaces, this output
+ is not suitable for programmatic consumption.
+ </p><p>See also the options <code class="option">--show-types</code>,
+ <code class="option">--all</code>, and <code class="option">--failed</code>.</p></dd><dt id="start NAME..."><span class="term"><span class="command"><strong>start <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#start%20NAME...">¶</a></dt><dd><p>Start (activate) one or more units specified on the
+ command line.</p></dd><dt id="stop NAME..."><span class="term"><span class="command"><strong>stop <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#stop%20NAME...">¶</a></dt><dd><p>Stop (deactivate) one or more units specified on the
+ command line.</p></dd><dt id="reload NAME..."><span class="term"><span class="command"><strong>reload <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reload%20NAME...">¶</a></dt><dd><p>Asks all units listed on the command line to reload
+ their configuration. Note that this will reload the
+ service-specific configuration, not the unit configuration
+ file of systemd. If you want systemd to reload the
+ configuration file of a unit, use the
+ <span class="command"><strong>daemon-reload</strong></span> command. In other words:
+ for the example case of Apache, this will reload Apache's
+ <code class="filename">httpd.conf</code> in the web server, not the
+ <code class="filename">apache.service</code> systemd unit
+ file.</p><p>This command should not be confused with the
+ <span class="command"><strong>daemon-reload</strong></span> or <span class="command"><strong>load</strong></span>
+ commands.</p></dd><dt id="restart NAME..."><span class="term"><span class="command"><strong>restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#restart%20NAME...">¶</a></dt><dd><p>Restart one or more units specified on the command
+ line. If the units are not running yet, they will be
+ started.</p></dd><dt id="try-restart NAME..."><span class="term"><span class="command"><strong>try-restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#try-restart%20NAME...">¶</a></dt><dd><p>Restart one or more units specified on the command
+ line if the units are running. This does nothing if units are not
+ running. Note that, for compatibility with Red Hat init
+ scripts, <span class="command"><strong>condrestart</strong></span> is equivalent to this
+ command.</p></dd><dt id="reload-or-restart NAME..."><span class="term"><span class="command"><strong>reload-or-restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reload-or-restart%20NAME...">¶</a></dt><dd><p>Reload one or more units if they support it. If not,
+ restart them instead. If the units are not running yet, they
+ will be started.</p></dd><dt id="reload-or-try-restart NAME..."><span class="term"><span class="command"><strong>reload-or-try-restart <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reload-or-try-restart%20NAME...">¶</a></dt><dd><p>Reload one or more units if they support it. If not,
+ restart them instead. This does nothing if the units are not
+ running. Note that, for compatibility with SysV init scripts,
+ <span class="command"><strong>force-reload</strong></span> is equivalent to this
+ command.</p></dd><dt id="isolate NAME"><span class="term"><span class="command"><strong>isolate <em class="replaceable"><code>NAME</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#isolate%20NAME">¶</a></dt><dd><p>Start the unit specified on the command line and its
+ dependencies and stop all others.</p><p>This is similar to changing the runlevel in a
+ traditional init system. The <span class="command"><strong>isolate</strong></span>
+ command will immediately stop processes that are not enabled
+ in the new unit, possibly including the graphical
+ environment or terminal you are currently using.</p><p>Note that this is allowed only on units where
+ <code class="option">AllowIsolate=</code> is enabled. See
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
+ for details.</p></dd><dt id="kill NAME..."><span class="term"><span class="command"><strong>kill <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kill%20NAME...">¶</a></dt><dd><p>Send a signal to one or more processes of the
+ unit. Use <code class="option">--kill-who=</code> to select which
+ process to kill. Use <code class="option">--kill-mode=</code> to select
+ the kill mode and <code class="option">--signal=</code> to select the
+ signal to send.</p></dd><dt id="is-active NAME..."><span class="term"><span class="command"><strong>is-active <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#is-active%20NAME...">¶</a></dt><dd><p>Check whether any of the specified units are active
+ (i.e. running). Returns an exit code 0 if at least one is
+ active, non-zero otherwise. Unless <code class="option">--quiet</code>
+ is specified, this will also print the current unit state to
+ STDOUT.</p></dd><dt id="is-failed NAME..."><span class="term"><span class="command"><strong>is-failed <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#is-failed%20NAME...">¶</a></dt><dd><p>Check whether any of the specified units are in a "failed" state.
+ Returns an exit code 0 if at least one has failed, non-zero
+ otherwise. Unless <code class="option">--quiet</code> is specified, this
+ will also print the current unit state to
+ STDOUT.</p></dd><dt id="status [NAME...|PID...]"><span class="term"><span class="command"><strong>status [<em class="replaceable"><code>NAME</code></em>...|<em class="replaceable"><code>PID</code></em>...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status%20%5BNAME...%7CPID...%5D">¶</a></dt><dd><p>Show terse runtime status information about one or
+ more units, followed by most recent log data from the
+ journal. If no units are specified, show all units (subject
+ to limitations specified with <code class="option">-t</code>). If a PID
+ is passed, show information about the unit the process
+ belongs to.</p><p>This function is intended to generate human-readable
+ output. If you are looking for computer-parsable output, use
+ <span class="command"><strong>show</strong></span> instead.</p></dd><dt id="show [NAME...|JOB...]"><span class="term"><span class="command"><strong>show [<em class="replaceable"><code>NAME</code></em>...|<em class="replaceable"><code>JOB</code></em>...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show%20%5BNAME...%7CJOB...%5D">¶</a></dt><dd><p>Show properties of one or more units, jobs, or the
+ manager itself. If no argument is specified, properties of
+ the manager will be shown. If a unit name is specified,
+ properties of the unit is shown, and if a job id is
+ specified, properties of the job is shown. By default, empty
+ properties are suppressed. Use <code class="option">--all</code> to
+ show those too. To select specific properties to show, use
+ <code class="option">--property=</code>. This command is intended to be
+ used whenever computer-parsable output is required. Use
+ <span class="command"><strong>status</strong></span> if you are looking for formatted
+ human-readable output.</p></dd><dt id="set-property NAME ASSIGNMENT..."><span class="term"><span class="command"><strong>set-property <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>ASSIGNMENT</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-property%20NAME%20ASSIGNMENT...">¶</a></dt><dd><p>Set the specified unit properties at runtime where
+ this is supported. This allows changing configuration
+ parameter properties such as resource control settings at
+ runtime. Not all properties may be changed at runtime, but
+ many resource control settings (primarily those in
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>)
+ may. The changes are applied instantly, and stored on disk
+ for future boots, unless <code class="option">--runtime</code> is
+ passed, in which case the settings only apply until the
+ next reboot. The syntax of the property assignment follows
+ closely the syntax of assignments in unit files.</p><p>Example: <span class="command"><strong>systemctl set-property foobar.service CPUShares=777</strong></span></p><p>Note that this command allows changing multiple
+ properties at the same time, which is preferable over
+ setting them individually. Like unit file configuration
+ settings, assigning the empty list to list parameters will
+ reset the list.</p></dd><dt id="help NAME...|PID..."><span class="term"><span class="command"><strong>help <em class="replaceable"><code>NAME</code></em>...|<em class="replaceable"><code>PID</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#help%20NAME...%7CPID...">¶</a></dt><dd><p>Show manual pages for one or more units, if
+ available. If a PID is given, the manual pages for the unit
+ the process belongs to are shown.</p></dd><dt id="reset-failed [NAME...]"><span class="term"><span class="command"><strong>reset-failed [<em class="replaceable"><code>NAME</code></em>...]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reset-failed%20%5BNAME...%5D">¶</a></dt><dd><p>Reset the "<code class="literal">failed</code>" state of the
+ specified units, or if no unit name is passed, reset the state of all
+ units. When a unit fails in some way (i.e. process exiting
+ with non-zero error code, terminating abnormally or timing
+ out), it will automatically enter the
+ "<code class="literal">failed</code>" state and its exit code and status
+ is recorded for introspection by the administrator until the
+ service is restarted or reset with this command.</p></dd><dt id="list-dependencies NAME"><span class="term"><span class="command"><strong>list-dependencies <em class="replaceable"><code>NAME</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-dependencies%20NAME">¶</a></dt><dd><p>Shows required and wanted units of the specified
+ unit. If no unit is specified,
+ <code class="filename">default.target</code> is implied. Target units
+ are recursively expanded. When <code class="option">--all</code> is
+ passed, all other units are recursively expanded as
+ well.</p></dd></dl></div></div><div class="refsect2"><a name="idm274681669712"></a><h3 id="Unit File Commands">Unit File Commands<a class="headerlink" title="Permalink to this headline" href="#Unit%20File%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="list-unit-files"><span class="term"><span class="command"><strong>list-unit-files</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-unit-files">¶</a></dt><dd><p>List installed unit files.</p></dd><dt id="enable NAME..."><span class="term"><span class="command"><strong>enable <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#enable%20NAME...">¶</a></dt><dd><p>Enable one or more unit files or unit file instances,
+ as specified on the command line. This will create a number
+ of symlinks as encoded in the "<code class="literal">[Install]</code>"
+ sections of the unit files. After the symlinks have been
+ created, the systemd configuration is reloaded (in a way that
+ is equivalent to <span class="command"><strong>daemon-reload</strong></span>) to ensure
+ the changes are taken into account immediately. Note that
+ this does <span class="emphasis"><em>not</em></span> have the effect of also
+ starting any of the units being enabled. If this
+ is desired, a separate <span class="command"><strong>start</strong></span> command must
+ be invoked for the unit. Also note that in case of instance
+ enablement, symlinks named the same as instances are created in
+ the install location, however they all point to the same
+ template unit file.</p><p>This command will print the actions executed. This
+ output may be suppressed by passing <code class="option">--quiet</code>.
+ </p><p>Note that this operation creates only the suggested
+ symlinks for the units. While this command is the
+ recommended way to manipulate the unit configuration
+ directory, the administrator is free to make additional
+ changes manually by placing or removing symlinks in the
+ directory. This is particularly useful to create
+ configurations that deviate from the suggested default
+ installation. In this case, the administrator must make sure
+ to invoke <span class="command"><strong>daemon-reload</strong></span> manually as
+ necessary to ensure the changes are taken into account.
+ </p><p>Enabling units should not be confused with starting
+ (activating) units, as done by the <span class="command"><strong>start</strong></span>
+ command. Enabling and starting units is orthogonal: units
+ may be enabled without being started and started without
+ being enabled. Enabling simply hooks the unit into various
+ suggested places (for example, so that the unit is
+ automatically started on boot or when a particular kind of
+ hardware is plugged in). Starting actually spawns the daemon
+ process (in case of service units), or binds the socket (in
+ case of socket units), and so on.</p><p>Depending on whether <code class="option">--system</code>,
+ <code class="option">--user</code>, <code class="option">--runtime</code>,
+ or<code class="option">--global</code>, is specified, this enables the unit
+ for the system, for the calling user only, for only this boot of
+ the system, or for all future logins of all users, or only this
+ boot. Note that in the last case, no systemd daemon
+ configuration is reloaded.</p></dd><dt id="disable NAME..."><span class="term"><span class="command"><strong>disable <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#disable%20NAME...">¶</a></dt><dd><p>Disables one or more units. This removes all symlinks
+ to the specified unit files from the unit configuration
+ directory, and hence undoes the changes made by
+ <span class="command"><strong>enable</strong></span>. Note however that this removes
+ all symlinks to the unit files (i.e. including manual
+ additions), not just those actually created by
+ <span class="command"><strong>enable</strong></span>. This call implicitly reloads the
+ systemd daemon configuration after completing the disabling
+ of the units. Note that this command does not implicitly
+ stop the units that are being disabled. If this is desired,
+ an additional <span class="command"><strong>stop</strong></span> command should be
+ executed afterwards.</p><p>This command will print the actions executed. This
+ output may be suppressed by passing <code class="option">--quiet</code>.
+ </p><p>This command honors <code class="option">--system</code>,
+ <code class="option">--user</code>, <code class="option">--runtime</code>,
+ <code class="option">--global</code> in a similar way as
+ <span class="command"><strong>enable</strong></span>.</p></dd><dt id="is-enabled NAME..."><span class="term"><span class="command"><strong>is-enabled <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#is-enabled%20NAME...">¶</a></dt><dd><p>Checks whether any of the specified unit files are
+ enabled (as with <span class="command"><strong>enable</strong></span>). Returns an exit
+ code of 0 if at least one is enabled, non-zero
+ otherwise. Prints the current enable status. To suppress
+ this output, use <code class="option">--quiet</code>.</p></dd><dt id="reenable NAME..."><span class="term"><span class="command"><strong>reenable <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reenable%20NAME...">¶</a></dt><dd><p>Reenable one or more unit files, as specified on the
+ command line. This is a combination of
+ <span class="command"><strong>disable</strong></span> and <span class="command"><strong>enable</strong></span> and
+ is useful to reset the symlinks a unit is enabled with to
+ the defaults configured in the "<code class="literal">[Install]</code>"
+ section of the unit file.</p></dd><dt id="preset NAME..."><span class="term"><span class="command"><strong>preset <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#preset%20NAME...">¶</a></dt><dd><p>Reset one or more unit files, as specified on the
+ command line, to the defaults configured in the preset
+ policy files. This has the same effect as
+ <span class="command"><strong>disable</strong></span> or <span class="command"><strong>enable</strong></span>,
+ depending how the unit is listed in the preset files. For
+ more information on the preset policy format, see
+ <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>.
+ For more information on the concept of presets, please
+ consult the
+ <a class="ulink" href="http://freedesktop.org/wiki/Software/systemd/Preset" target="_top">Preset</a>
+ document.</p></dd><dt id="mask NAME..."><span class="term"><span class="command"><strong>mask <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#mask%20NAME...">¶</a></dt><dd><p>Mask one or more unit files, as specified on the
+ command line. This will link these units to
+ <code class="filename">/dev/null</code>, making it impossible to
+ start them. This is a stronger version of
+ <span class="command"><strong>disable</strong></span>, since it prohibits all kinds of
+ activation of the unit, including manual activation. Use
+ this option with care. This honors the
+ <code class="option">--runtime</code> option, to only mask temporarily
+ until the next reoobt of the system.</p></dd><dt id="unmask NAME..."><span class="term"><span class="command"><strong>unmask <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#unmask%20NAME...">¶</a></dt><dd><p>Unmask one or more unit files, as specified on the
+ command line. This will undo the effect of
+ <span class="command"><strong>mask</strong></span>.</p></dd><dt id="link FILENAME..."><span class="term"><span class="command"><strong>link <em class="replaceable"><code>FILENAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#link%20FILENAME...">¶</a></dt><dd><p>Link a unit file that is not in the unit file search
+ paths into the unit file search path. This requires an
+ absolute path to a unit file. The effect of this can be
+ undone with <span class="command"><strong>disable</strong></span>. The effect of this
+ command is that a unit file is available for
+ <span class="command"><strong>start</strong></span> and other commands although it
+ is not installed directly in the unit search path.</p></dd><dt id="get-default"><span class="term"><span class="command"><strong>get-default</strong></span></span><a class="headerlink" title="Permalink to this term" href="#get-default">¶</a></dt><dd><p>Get the default target specified
+ via <code class="filename">default.target</code> link.</p></dd><dt id="set-default NAME"><span class="term"><span class="command"><strong>set-default <em class="replaceable"><code>NAME</code></em></strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-default%20NAME">¶</a></dt><dd><p>Set the default target to boot into. Command links
+ <code class="filename">default.target</code> to the given unit.</p></dd></dl></div></div><div class="refsect2"><a name="idm274681607504"></a><h3 id="Job Commands">Job Commands<a class="headerlink" title="Permalink to this headline" href="#Job%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="list-jobs"><span class="term"><span class="command"><strong>list-jobs</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-jobs">¶</a></dt><dd><p>List jobs that are in progress.</p></dd><dt id="cancel JOB..."><span class="term"><span class="command"><strong>cancel <em class="replaceable"><code>JOB</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#cancel%20JOB...">¶</a></dt><dd><p>Cancel one or more jobs specified on the command line
+ by their numeric job IDs. If no job ID is specified, cancel
+ all pending jobs.</p></dd></dl></div></div><div class="refsect2"><a name="idm274681601984"></a><h3 id="Snapshot Commands">Snapshot Commands<a class="headerlink" title="Permalink to this headline" href="#Snapshot%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="snapshot [NAME]"><span class="term"><span class="command"><strong>snapshot [<em class="replaceable"><code>NAME</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#snapshot%20%5BNAME%5D">¶</a></dt><dd><p>Create a snapshot. If a snapshot name is specified,
+ the new snapshot will be named after it. If none is
+ specified, an automatic snapshot name is generated. In either
+ case, the snapshot name used is printed to STDOUT, unless
+ <code class="option">--quiet</code> is specified.</p><p>A snapshot refers to a saved state of the systemd
+ manager. It is implemented itself as a unit that is
+ generated dynamically with this command and has dependencies
+ on all units active at the time. At a later time, the user
+ may return to this state by using the
+ <span class="command"><strong>isolate</strong></span> command on the snapshot unit.
+ </p><p>Snapshots are only useful for saving and restoring
+ which units are running or are stopped, they do not
+ save/restore any other state. Snapshots are dynamic and lost
+ on reboot.</p></dd><dt id="delete NAME..."><span class="term"><span class="command"><strong>delete <em class="replaceable"><code>NAME</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#delete%20NAME...">¶</a></dt><dd><p>Remove a snapshot previously created with
+ <span class="command"><strong>snapshot</strong></span>.</p></dd></dl></div></div><div class="refsect2"><a name="idm274681593008"></a><h3 id="Environment Commands">Environment Commands<a class="headerlink" title="Permalink to this headline" href="#Environment%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="show-environment"><span class="term"><span class="command"><strong>show-environment</strong></span></span><a class="headerlink" title="Permalink to this term" href="#show-environment">¶</a></dt><dd><p>Dump the systemd manager environment block. The
+ environment block will be dumped in straight-forward form
+ suitable for sourcing into a shell script. This environment
+ block will be passed to all processes the manager
+ spawns.</p></dd><dt id="set-environment VARIABLE=VALUE..."><span class="term"><span class="command"><strong>set-environment <em class="replaceable"><code>VARIABLE=VALUE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-environment%20VARIABLE=VALUE...">¶</a></dt><dd><p>Set one or more systemd manager environment variables,
+ as specified on the command line.</p></dd><dt id="unset-environment VARIABLE..."><span class="term"><span class="command"><strong>unset-environment <em class="replaceable"><code>VARIABLE</code></em>...</strong></span></span><a class="headerlink" title="Permalink to this term" href="#unset-environment%20VARIABLE...">¶</a></dt><dd><p>Unset one or more systemd manager environment
+ variables. If only a variable name is specified, it will be
+ removed regardless of its value. If a variable and a value
+ are specified, the variable is only removed if it has the
+ specified value.</p></dd></dl></div></div><div class="refsect2"><a name="idm274681584672"></a><h3 id="Manager Lifecycle Commands">Manager Lifecycle Commands<a class="headerlink" title="Permalink to this headline" href="#Manager%20Lifecycle%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="daemon-reload"><span class="term"><span class="command"><strong>daemon-reload</strong></span></span><a class="headerlink" title="Permalink to this term" href="#daemon-reload">¶</a></dt><dd><p>Reload systemd manager configuration. This will reload
+ all unit files and recreate the entire dependency
+ tree. While the daemon is being reloaded, all sockets systemd
+ listens on on behalf of user configuration will stay
+ accessible.</p><p>This command should not be confused
+ with the <span class="command"><strong>load</strong></span> or
+ <span class="command"><strong>reload</strong></span> commands.</p></dd><dt id="daemon-reexec"><span class="term"><span class="command"><strong>daemon-reexec</strong></span></span><a class="headerlink" title="Permalink to this term" href="#daemon-reexec">¶</a></dt><dd><p>Reexecute the systemd manager. This will serialize the
+ manager state, reexecute the process and deserialize the
+ state again. This command is of little use except for
+ debugging and package upgrades. Sometimes, it might be
+ helpful as a heavy-weight <span class="command"><strong>daemon-reload</strong></span>.
+ While the daemon is being reexecuted, all sockets systemd listening
+ on behalf of user configuration will stay accessible.
+ </p></dd></dl></div></div><div class="refsect2"><a name="idm274681576608"></a><h3 id="System Commands">System Commands<a class="headerlink" title="Permalink to this headline" href="#System%20Commands">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="default"><span class="term"><span class="command"><strong>default</strong></span></span><a class="headerlink" title="Permalink to this term" href="#default">¶</a></dt><dd><p>Enter default mode. This is mostly equivalent to
+ <span class="command"><strong>isolate default.target</strong></span>.</p></dd><dt id="rescue"><span class="term"><span class="command"><strong>rescue</strong></span></span><a class="headerlink" title="Permalink to this term" href="#rescue">¶</a></dt><dd><p>Enter rescue mode. This is mostly equivalent to
+ <span class="command"><strong>isolate rescue.target</strong></span>, but also prints a
+ wall message to all users.</p></dd><dt id="emergency"><span class="term"><span class="command"><strong>emergency</strong></span></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p>Enter emergency mode. This is mostly equivalent to
+ <span class="command"><strong>isolate emergency.target</strong></span>, but also prints
+ a wall message to all users.</p></dd><dt id="halt"><span class="term"><span class="command"><strong>halt</strong></span></span><a class="headerlink" title="Permalink to this term" href="#halt">¶</a></dt><dd><p>Shut down and halt the system. This is mostly equivalent to
+ <span class="command"><strong>start halt.target --irreversible</strong></span>, but also
+ prints a wall message to all users. If combined with
+ <code class="option">--force</code>, shutdown of all running services is
+ skipped, however all processes are killed and all file
+ systems are unmounted or mounted read-only, immediately
+ followed by the system halt. If <code class="option">--force</code> is
+ specified twice, the operation is immediately executed
+ without terminating any processes or unmounting any file
+ systems. This may result in data loss.</p></dd><dt id="poweroff"><span class="term"><span class="command"><strong>poweroff</strong></span></span><a class="headerlink" title="Permalink to this term" href="#poweroff">¶</a></dt><dd><p>Shut down and power-off the system. This is mostly
+ equivalent to <span class="command"><strong>start poweroff.target --irreversible</strong></span>,
+ but also prints a wall message to all users. If combined with
+ <code class="option">--force</code>, shutdown of all running services is
+ skipped, however all processes are killed and all file
+ systems are unmounted or mounted read-only, immediately
+ followed by the powering off. If <code class="option">--force</code> is
+ specified twice, the operation is immediately executed
+ without terminating any processes or unmounting any file
+ systems. This may result in data loss.</p></dd><dt id="reboot"><span class="term"><span class="command"><strong>reboot</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reboot">¶</a></dt><dd><p>Shut down and reboot the system. This is mostly
+ equivalent to <span class="command"><strong>start reboot.target --irreversible</strong></span>,
+ but also prints a wall message to all users. If combined with
+ <code class="option">--force</code>, shutdown of all running services is
+ skipped, however all processes are killed and all file
+ systems are unmounted or mounted read-only, immediately
+ followed by the reboot. If <code class="option">--force</code> is
+ specified twice, the operation is immediately executed
+ without terminating any processes or unmounting any file
+ systems. This may result in data loss.</p></dd><dt id="kexec"><span class="term"><span class="command"><strong>kexec</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kexec">¶</a></dt><dd><p>Shut down and reboot the system via kexec. This is
+ mostly equivalent to <span class="command"><strong>start kexec.target --irreversible</strong></span>,
+ but also prints a wall message to all users. If combined
+ with <code class="option">--force</code>, shutdown of all running
+ services is skipped, however all processes are killed and
+ all file systems are unmounted or mounted read-only,
+ immediately followed by the reboot.</p></dd><dt id="exit"><span class="term"><span class="command"><strong>exit</strong></span></span><a class="headerlink" title="Permalink to this term" href="#exit">¶</a></dt><dd><p>Ask the systemd manager to quit. This is only
+ supported for user service managers (i.e. in conjunction
+ with the <code class="option">--user</code> option) and will fail
+ otherwise.</p></dd><dt id="suspend"><span class="term"><span class="command"><strong>suspend</strong></span></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>Suspend the system. This will trigger activation of
+ the special <code class="filename">suspend.target</code> target.
+ </p></dd><dt id="hibernate"><span class="term"><span class="command"><strong>hibernate</strong></span></span><a class="headerlink" title="Permalink to this term" href="#hibernate">¶</a></dt><dd><p>Hibernate the system. This will trigger activation of
+ the special <code class="filename">hibernate.target</code> target.
+ </p></dd><dt id="hybrid-sleep"><span class="term"><span class="command"><strong>hybrid-sleep</strong></span></span><a class="headerlink" title="Permalink to this term" href="#hybrid-sleep">¶</a></dt><dd><p>Hibernate and suspend the system. This will trigger
+ activation of the special
+ <code class="filename">hybrid-sleep.target</code> target.</p></dd><dt id="switch-root ROOT [INIT]"><span class="term"><span class="command"><strong>switch-root <em class="replaceable"><code>ROOT</code></em> [<em class="replaceable"><code>INIT</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#switch-root%20ROOT%20%5BINIT%5D">¶</a></dt><dd><p>Switches to a different root directory and executes a
+ new system manager process below it. This is intended for
+ usage in initial RAM disks ("initrd"), and will transition
+ from the initrd's system manager process (a.k.a "init"
+ process) to the main system manager process. This call takes two
+ arguments: the directory that is to become the new root directory, and
+ the path to the new system manager binary below it to
+ execute as PID 1. If the latter is omitted or the empty
+ string, a systemd binary will automatically be searched for
+ and used as init. If the system manager path is omitted or
+ equal to the empty string, the state of the initrd's system
+ manager process is passed to the main system manager, which
+ allows later introspection of the state of the services
+ involved in the initrd boot.</p></dd></dl></div></div></div><div class="refsect1"><a name="idm274681538192"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success, 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274681536960"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when <code class="option">--no-pager</code> is not
given; overrides <code class="varname">$PAGER</code>. Setting this to
- an empty string or the value <code class="literal">cat</code> is
+ an empty string or the value "<code class="literal">cat</code>" is
equivalent to passing
- <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259764011056"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274681532048"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemadm.html"><span class="citerefentry"><span class="refentrytitle">systemadm</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
+ <a href="systemd.resource-management.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-management</span>(5)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
<a href="wall.html"><span class="citerefentry"><span class="refentrytitle">wall</span>(1)</span></a>,
<a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>
diff --git a/man/systemctl.xml b/man/systemctl.xml
index 0afb0cc626..e789d4b629 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -92,21 +92,15 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--type=</option></term>
<listitem>
- <para>The argument should be a comma separated list of unit
+ <para>The argument should be a comma-separated list of unit
types such as <option>service</option> and
- <option>socket</option>, or unit load states such as
- <option>loaded</option> and <option>masked</option>
- (types and states can be mixed).</para>
+ <option>socket</option>.
+ </para>
<para>If one of the arguments is a unit type, when listing
- units, limit display to certain unit types. Otherwise units
+ units, limit display to certain unit types. Otherwise, units
of all types will be shown.</para>
- <para>If one of the arguments is a unit load state, when
- listing units, limit display to certain unit
- types. Otherwise units of in all load states will be
- shown.</para>
-
<para>As a special case, if one of the arguments is
<option>help</option>, a list of allowed values will be
printed and the program will exit.</para>
@@ -114,16 +108,26 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
</varlistentry>
<varlistentry>
+ <term><option>--state=</option></term>
+
+ <listitem>
+ <para>The argument should be a comma-separated list of unit LOAD,
+ SUB, or ACTIVE states. When listing units, show only those
+ in specified states.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>-p</option></term>
<term><option>--property=</option></term>
<listitem>
<para>When showing unit/job/manager properties with the
<command>show</command> command, limit display to certain
- properties as specified as argument. If not specified all
+ properties as specified as argument. If not specified, all
set properties are shown. The argument should be a
comma-separated list of property names, such as
- <literal>MainPID</literal>. If specified more than once all
+ <literal>MainPID</literal>. If specified more than once, all
properties with the specified names are shown.</para>
</listitem>
</varlistentry>
@@ -159,26 +163,18 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--before</option></term>
<listitem>
- <para>Show which units are started after, resp. before
- with <command>list-dependencies</command>.
+ <para>Show which units are started after or before
+ with <command>list-dependencies</command>, respectively.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>--failed</option></term>
-
- <listitem>
- <para>When listing units, show only failed units. Do not
- confuse with <option>--fail</option>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
+ <term><option>-l</option></term>
<term><option>--full</option></term>
<listitem>
- <para>Do not ellipsize unit names, cgroup members, and
+ <para>Do not ellipsize unit names, process tree entries, and
truncate unit descriptions in the output of
<command>list-units</command> and
<command>list-jobs</command>.</para>
@@ -190,7 +186,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<listitem>
<para>If the requested operation conflicts with a pending
- unfinished job, fail the command. If this is not specified
+ unfinished job, fail the command. If this is not specified,
the requested operation will replace the pending job, if
necessary. Do not confuse with
<option>--failed</option>.</para>
@@ -220,8 +216,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--ignore-dependencies</option></term>
<listitem>
- <para>When enqueuing a new job ignore all its dependencies
- and execute it immediately. If passed no required units of
+ <para>When enqueuing a new job, ignore all its dependencies
+ and execute it immediately. If passed, no required units of
the unit passed will be pulled in, and no ordering
dependencies will be honored. This is mostly a debugging and
rescue tool for the administrator and should not be used by
@@ -242,8 +238,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
users may override these locks. If any locks are taken,
shutdown and sleep state requests will normally fail
(regardless if privileged or not) and a list of active locks
- is printed. However if <option>--ignore-inhibitors</option>
- is specified the locks are ignored and not printed, and the
+ is printed. However, if <option>--ignore-inhibitors</option>
+ is specified, the locks are ignored and not printed, and the
operation attempted anyway, possibly requiring additional
privileges.</para>
</listitem>
@@ -268,9 +264,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<listitem>
<para>Do not synchronously wait for the requested operation
- to finish. If this is not specified the job will be
+ to finish. If this is not specified, the job will be
verified, enqueued and <command>systemctl</command> will
- wait until it is completed. By passing this argument it is
+ wait until it is completed. By passing this argument, it is
only verified and enqueued.</para>
</listitem>
</varlistentry>
@@ -313,7 +309,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--no-wall</option></term>
<listitem>
- <para>Don't send wall message before halt, power-off,
+ <para>Do not send wall message before halt, power-off,
reboot.</para>
</listitem>
</varlistentry>
@@ -348,10 +344,10 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
may require input of a password or passphrase string, for
example to unlock system hard disks or cryptographic
certificates. Unless this option is specified and the
- command is invoked from a terminal
+ command is invoked from a terminal,
<command>systemctl</command> will query the user on the
terminal for the necessary secrets. Use this option to
- switch this behavior off. In this case the password must be
+ switch this behavior off. In this case, the password must be
supplied by some other means (for example graphical password
agents) or the service might fail. This also disables
querying the user for authentication for privileged
@@ -368,7 +364,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
processes to kill. Must be one of <option>main</option>,
<option>control</option> or <option>all</option> to select
whether to kill only the main process of the unit, the
- control process or all processes of the unit. If omitted
+ control process or all processes of the unit. If omitted,
defaults to <option>all</option>.</para>
</listitem>
@@ -381,8 +377,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<listitem>
<para>When used with <command>kill</command>, choose which
signal to send to selected processes. Must be one of the
- well known signal specifiers such as SIGTERM, SIGINT or
- SIGSTOP. If omitted defaults to
+ well known signal specifiers such as <constant>SIGTERM</constant>, <constant>SIGINT</constant> or
+ <constant>SIGSTOP</constant>. If omitted, defaults to
<option>SIGTERM</option>.</para>
</listitem>
</varlistentry>
@@ -397,7 +393,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<para>When used with <command>halt</command>,
<command>poweroff</command>, <command>reboot</command> or
- <command>kexec</command> execute the selected operation
+ <command>kexec</command>, execute the selected operation
without shutting down all units. However, all processes will
be killed forcibly and all file systems are unmounted or
remounted read-only. This is hence a drastic but relatively
@@ -437,10 +433,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
is lost on reboot, the changes are lost too.</para>
<para>Similar, when used with
- <command>set-cgroup-attr</command>,
- <command>unset-cgroup-attr</command>,
- <command>set-cgroup</command> and
- <command>unset-cgroup</command>, make changes only
+ <command>set-property</command>, make changes only
temporarily, so that they are lost on the next
reboot.</para>
</listitem>
@@ -452,7 +445,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<listitem>
<para>Execute operation remotely. Specify a hostname, or
- username and hostname separated by @, to connect to. This
+ username and hostname separated by <literal>@</literal>, to connect to. This
will use SSH to talk to the remote systemd
instance.</para>
</listitem>
@@ -473,7 +466,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--lines=</option></term>
<listitem>
- <para>When used with <command>status</command> controls the
+ <para>When used with <command>status</command>, controls the
number of journal lines to show, counting from the most
recent ones. Takes a positive integer argument. Defaults to
10.</para>
@@ -485,9 +478,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--output=</option></term>
<listitem>
- <para>When used with <command>status</command> controls the
+ <para>When used with <command>status</command>, controls the
formatting of the journal entries that are shown. For the
- available choices see
+ available choices, see
<citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
Defaults to <literal>short</literal>.</para>
</listitem>
@@ -497,7 +490,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<term><option>--plain</option></term>
<listitem>
- <para>When used with <command>list-dependencies</command>
+ <para>When used with <command>list-dependencies</command>,
the output is printed as a list instead of a tree.</para>
</listitem>
</varlistentry>
@@ -510,25 +503,28 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<para>The following commands are understood:</para>
- <variablelist>
- <varlistentry>
- <term><command>list-units</command></term>
+ <refsect2>
+ <title>Unit Commands</title>
- <listitem>
- <para>List known units (subject to limitations specified
- with <option>-t</option>).</para>
+ <variablelist>
+ <varlistentry>
+ <term><command>list-units</command></term>
- <para>This is the default command.</para>
- </listitem>
- </varlistentry>
+ <listitem>
+ <para>List known units (subject to limitations specified
+ with <option>-t</option>).</para>
- <varlistentry>
- <term><command>list-sockets</command></term>
+ <para>This is the default command.</para>
+ </listitem>
+ </varlistentry>
- <listitem>
- <para>List socket units ordered by the listening address. Produces output
- similar to
- <programlisting>
+ <varlistentry>
+ <term><command>list-sockets</command></term>
+
+ <listitem>
+ <para>List socket units ordered by the listening address. Produces output
+ similar to
+ <programlisting>
LISTEN UNIT ACTIVATES
/dev/initctl systemd-initctl.socket systemd-initctl.service
...
@@ -536,769 +532,735 @@ LISTEN UNIT ACTIVATES
kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
5 sockets listed.
- </programlisting>
- Note: because the addresses might contains spaces, this output
- is not suitable for programatic consumption.
- </para>
-
- <para>See also the options <option>--show-types</option>,
- <option>--all</option>, and <option>--failed</option>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>start <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Start (activate) one or more units specified on the
- command line.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>stop <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Stop (deactivate) one or more units specified on the
- command line.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>reload <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Asks all units listed on the command line to reload
- their configuration. Note that this will reload the
- service-specific configuration, not the unit configuration
- file of systemd. If you want systemd to reload the
- configuration file of a unit use the
- <command>daemon-reload</command> command. In other words:
- for the example case of Apache, this will reload Apache's
- <filename>httpd.conf</filename> in the web server, not the
- <filename>apache.service</filename> systemd unit
- file. </para>
-
- <para>This command should not be confused with the
- <command>daemon-reload</command> or <command>load</command>
- commands.</para>
- </listitem>
-
- </varlistentry>
- <varlistentry>
- <term><command>restart <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Restart one or more units specified on the command
- line. If the units are not running yet they will be
- started.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>try-restart <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Restart one or more units specified on the command
- line if the units are running. Do nothing if units are not
- running. Note that for compatibility with Red Hat init
- scripts <command>condrestart</command> is equivalent to this
- command.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>reload-or-restart <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Reload one or more units if they support it. If not,
- restart them instead. If the units are not running yet they
- will be started.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>reload-or-try-restart <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Reload one or more units if they support it. If not,
- restart them instead. Do nothing if the units are not
- running. Note that for compatibility with SysV init scripts
- <command>force-reload</command> is equivalent to this
- command.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>isolate <replaceable>NAME</replaceable></command></term>
-
- <listitem>
- <para>Start the unit specified on the command line and its
- dependencies and stop all others.</para>
-
- <para>This is similar to changing the runlevel in a
- traditional init system. The <command>isolate</command>
- command will immediately stop processes that are not enabled
- in the new unit, possibly including the graphical
- environment or terminal you are currently using.</para>
-
- <para>Note that this is allowed only on units where
- <option>AllowIsolate=</option> is enabled. See
- <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>kill <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Send a signal to one or more processes of the
- unit. Use <option>--kill-who=</option> to select which
- process to kill. Use <option>--kill-mode=</option> to select
- the kill mode and <option>--signal=</option> to select the
- signal to send.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>is-active <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Check whether any of the specified units are active
- (i.e. running). Returns an exit code 0 if at least one is
- active, non-zero otherwise. Unless <option>--quiet</option>
- is specified this will also print the current unit state to
- STDOUT.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>is-failed <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Check whether any of the specified units are failed.
- Returns an exit code 0 if at least one is failed, non-zero
- otherwise. Unless <option>--quiet</option> is specified this
- will also print the current unit state to
- STDOUT.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>status [<replaceable>NAME</replaceable>...|<replaceable>PID</replaceable>...]</command></term>
-
- <listitem>
- <para>Show terse runtime status information about one or
- more units, followed by most recent log data from the
- journal. If no units are specified, show all units (subject
- to limitations specified with <option>-t</option>). If a PID
- is passed show information about the unit the process
- belongs to.</para>
-
- <para>This function is intended to generate human-readable
- output. If you are looking for computer-parsable output, use
- <command>show</command> instead.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>show [<replaceable>NAME</replaceable>...|<replaceable>JOB</replaceable>...]</command></term>
-
- <listitem>
- <para>Show properties of one or more units, jobs, or the
- manager itself. If no argument is specified properties of
- the manager will be shown. If a unit name is specified
- properties of the unit is shown, and if a job id is
- specified properties of the job is shown. By default, empty
- properties are suppressed. Use <option>--all</option> to
- show those too. To select specific properties to show use
- <option>--property=</option>. This command is intended to be
- used whenever computer-parsable output is required. Use
- <command>status</command> if you are looking for formatted
- human-readable output.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>get-cgroup-attr <replaceable>NAME</replaceable> <replaceable>ATTRIBUTE</replaceable>...</command></term>
-
- <listitem>
- <para>Retrieve the specified control group attributes of the
- specified unit. Takes a unit name and one or more attribute
- names such as <literal>cpu.shares</literal>. This will
- output the current values of the specified attributes,
- separated by new-lines. For attributes that take list of
- items the output will be new-line separated, too. This
- operation will always try to retrieve the data in question
- from the kernel first, and if that is not available use the
- configured values instead. Instead of low-level control
- group attribute names high-level pretty names may be used,
- as used for unit execution environment configuration, see
- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details. For example, passing
- <literal>memory.limit_in_bytes</literal> and
- <literal>MemoryLimit</literal> is equivalent.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>set-cgroup-attr <replaceable>NAME</replaceable> <replaceable>ATTRIBUTE</replaceable> <replaceable>VALUE</replaceable>...</command></term>
-
- <listitem>
- <para>Set the specified control group attribute of the
- specified unit to the specified value. Takes a unit
- name and an attribute name such as
- <literal>cpu.shares</literal>, plus one or more values
- (multiple values may only be used for attributes that take
- multiple values). This operation will immediately update the
- kernel attribute for this unit and persistently store this
- setting for later reboots (unless <option>--runtime</option>
- is passed, in which case the setting is not saved
- persistently and only valid until the next reboot.) Instead
- of low-level control group attribute names high-level pretty
- names may be used, as used for unit execution environment
- configuration, see
- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details. For example, passing
- <literal>memory.limit_in_bytes</literal> and
- <literal>MemoryLimit</literal> is equivalent. This operation
- will implicitly create a control group for the unit in the
- controller the attribute belongs to, if needed. For
- attributes that take multiple values, this operation will
- append the specified values to the previously set values
- list (use <command>unset-cgroup-attr</command> to reset the
- list explicitly). For attributes that take a single value
- only the list will be reset implicitly.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>unset-cgroup-attr <replaceable>NAME</replaceable> <replaceable>ATTRIBUTE</replaceable>...</command></term>
-
- <listitem><para>Unset the specified control group attributes
- of the specified unit. Takes a unit name and one or more
- attribut names such as <literal>cpu.shares</literal>. This
- operation might or might not have an immediate effect on the
- current kernel attribute value. This will remove any
- persistently stored configuration values for this attribute
- (as set with <command>set-cgroup-attr</command> before),
- unless <option>--runtime</option> is passed, in which case the
- configuration is reset only until the next reboot. Again,
- high-level control group attributes may be used instead of the
- low-level kernel ones. For attributes which take multiple
- values, all currently set values are reset.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>set-cgroup <replaceable>NAME</replaceable> <replaceable>CGROUP</replaceable>...</command></term>
- <term><command>unset-cgroup <replaceable>NAME</replaceable> <replaceable>CGROUP</replaceable>...</command></term>
-
- <listitem><para>Add or remove a unit to/from a specific
- control group hierarchy and/or control group path. Takes a
- unit name, plus a control group specification in the syntax
- <replaceable>CONTROLLER</replaceable>:<replaceable>PATH</replaceable>
- or <replaceable>CONTROLLER</replaceable>. In the latter syntax
- (where the path is omitted) the default unit control group
- path is implied. Examples: <literal>cpu</literal> or
- <literal>cpu:/foo/bar</literal>. If a unit is removed from a
- control group hierarchy all its processes will be moved to the
- root group of the hierarchy and all control group attributes
- will be reset. These operations are immediately reflected in
- the kernel hierarchy, and stored persistently to disk (unless
- <option>--runtime</option> is passed).</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>help <replaceable>NAME</replaceable>...|<replaceable>PID</replaceable>...</command></term>
-
- <listitem>
- <para>Show manual pages for one or more units, if
- available. If a PID is passed the manual pages for the unit
- the process of the PID belongs to is
- shown.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>reset-failed [<replaceable>NAME</replaceable>...]</command></term>
-
- <listitem>
- <para>Reset the <literal>failed</literal> state of the
- specified units, or if no unit name is passed of all
- units. When a unit fails in some way (i.e. process exiting
- with non-zero error code, terminating abnormally or timing
- out) it will automatically enter the
- <literal>failed</literal> state and its exit code and status
- is recorded for introspection by the administrator until the
- service is restarted or reset with this command.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>list-unit-files</command></term>
-
- <listitem>
- <para>List installed unit files.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>enable <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Enable one or more unit files or unit file instances,
- as specified on the command line. This will create a number
- of symlinks as encoded in the <literal>[Install]</literal>
- sections of the unit files. After the symlinks have been
- created the systemd configuration is reloaded (in a way that
- is equivalent to <command>daemon-reload</command>) to ensure
- the changes are taken into account immediately. Note that
- this does not have the effect that any of the units enabled
- are also started at the same time. If this is desired a
- separate <command>start</command> command must be invoked
- for the unit. Also note that in case of instance enablement,
- symlinks named same as instances are created in install
- location, however they all point to the same template unit
- file.</para>
-
- <para>This command will print the actions executed. This
- output may be suppressed by passing <option>--quiet</option>.
- </para>
-
- <para>Note that this operation creates only the suggested
- symlinks for the units. While this command is the
- recommended way to manipulate the unit configuration
- directory, the administrator is free to make additional
- changes manually, by placing or removing symlinks in the
- directory. This is particularly useful to create
- configurations that deviate from the suggested default
- installation. In this case the administrator must make sure
- to invoke <command>daemon-reload</command> manually as
- necessary, to ensure his changes are taken into account.
- </para>
-
- <para>Enabling units should not be confused with starting
- (activating) units, as done by the <command>start</command>
- command. Enabling and starting units is orthogonal: units
- may be enabled without being started and started without
- being enabled. Enabling simply hooks the unit into various
- suggested places (for example, so that the unit is
- automatically started on boot or when a particular kind of
- hardware is plugged in). Starting actually spawns the daemon
- process (in case of service units), or binds the socket (in
- case of socket units), and so on.</para>
-
- <para>Depending on whether <option>--system</option>,
- <option>--user</option> or <option>--global</option> is
- specified this enables the unit for the system, for the
- calling user only or for all future logins of all
- users. Note that in the last case no systemd daemon
- configuration is reloaded.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>disable <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Disables one or more units. This removes all symlinks
- to the specified unit files from the unit configuration
- directory, and hence undoes the changes made by
- <command>enable</command>. Note however that this removes
- all symlinks to the unit files (i.e. including manual
- additions), not just those actually created by
- <command>enable</command>. This call implicitly reloads the
- systemd daemon configuration after completing the disabling
- of the units. Note that this command does not implicitly
- stop the units that are being disabled. If this is desired
- an additional <command>stop</command> command should be
- executed afterwards.</para>
-
- <para>This command will print the actions executed. This
- output may be suppressed by passing <option>--quiet</option>.
- </para>
-
- <para>This command honors <option>--system</option>,
- <option>--user</option>, <option>--global</option> in a
- similar way as <command>enable</command>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>is-enabled <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Checks whether any of the specified unit files are
- enabled (as with <command>enable</command>). Returns an exit
- code of 0 if at least one is enabled, non-zero
- otherwise. Prints the current enable status. To suppress
- this output use <option>--quiet</option>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>reenable <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Reenable one or more unit files, as specified on the
- command line. This is a combination of
- <command>disable</command> and <command>enable</command> and
- is useful to reset the symlinks a unit is enabled with to
- the defaults configured in the <literal>[Install]</literal>
- section of the unit file.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>preset <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Reset one or more unit files, as specified on the
- command line, to the defaults configured in the preset
- policy files. This has the same effect as
- <command>disable</command> or <command>enable</command>,
- depending how the unit is listed in the preset files. For
- more information on preset policy format see
- <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
- For more information on the concept of presets please
- consult the
- <ulink url="http://freedesktop.org/wiki/Software/systemd/Preset">Preset</ulink>
- document.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>mask <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Mask one or more unit files, as specified on the
- command line. This will link these units to
- <filename>/dev/null</filename>, making it impossible to
- start them. This is a stronger version of
- <command>disable</command>, since it prohibits all kinds of
- activation of the unit, including manual activation. Use
- this option with care.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>unmask <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Unmask one or more unit files, as specified on the
- command line. This will undo the effect of
- <command>mask</command>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>link <replaceable>FILENAME</replaceable>...</command></term>
-
- <listitem>
- <para>Link a unit file that is not in the unit file search
- paths into the unit file search path. This requires an
- absolute path to a unit file. The effect of this can be
- undone with <command>disable</command>. The effect of this
- command is that a unit file is available for
- <command>start</command> and other commands although it
- isn't installed directly in the unit search path.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>load <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Load one or more units specified on the command
- line. This will simply load their configuration from disk,
- but not start them. To start them you need to use the
- <command>start</command> command which will implicitly load
- a unit that has not been loaded yet. Note that systemd
- garbage collects loaded units that are not active or
- referenced by an active unit. This means that units loaded
- this way will usually not stay loaded for long. Also note
- that this command cannot be used to reload unit
- configuration. Use the <command>daemon-reload</command>
- command for that. All in all, this command is of little use
- except for debugging.</para>
-
- <para>This command should not be confused with the
- <command>daemon-reload</command> or
- <command>reload</command>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>list-jobs</command></term>
-
- <listitem>
- <para>List jobs that are in progress.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>cancel <replaceable>JOB</replaceable>...</command></term>
-
- <listitem>
- <para>Cancel one or more jobs specified on the command line
- by their numeric job IDs. If no job id is specified, cancel
- all pending jobs.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>dump</command></term>
-
- <listitem>
- <para>Dump server status. This will output a (usually very
- long) human readable manager status dump. Its format is
- subject to change without notice and should not be parsed by
- applications.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>list-dependencies <replaceable>NAME</replaceable></command></term>
-
- <listitem>
- <para>Shows required and wanted units of the specified
- unit. If no unit is specified
- <filename>default.target</filename> is implied. Target units
- are recursively expanded. When <option>--all</option> is
- passed all other units are recursively expanded as
- well.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>snapshot [<replaceable>NAME</replaceable>]</command></term>
-
- <listitem>
- <para>Create a snapshot. If a snapshot name is specified,
- the new snapshot will be named after it. If none is
- specified an automatic snapshot name is generated. In either
- case, the snapshot name used is printed to STDOUT, unless
- <option>--quiet</option> is specified.</para>
-
- <para>A snapshot refers to a saved state of the systemd
- manager. It is implemented itself as a unit that is
- generated dynamically with this command and has dependencies
- on all units active at the time. At a later time the user
- may return to this state by using the
- <command>isolate</command> command on the snapshot unit.
- </para>
-
- <para>Snapshots are only useful for saving and restoring
- which units are running or are stopped, they do not
- save/restore any other state. Snapshots are dynamic and lost
- on reboot.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>delete <replaceable>NAME</replaceable>...</command></term>
-
- <listitem>
- <para>Remove a snapshot previously created with
- <command>snapshot</command>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>daemon-reload</command></term>
-
- <listitem>
- <para>Reload systemd manager configuration. This will reload
- all unit files and recreate the entire dependency
- tree. While the daemon is reloaded, all sockets systemd
- listens on on behalf of user configuration will stay
- accessible.</para> <para>This command should not be confused
- with the <command>load</command> or
- <command>reload</command> commands.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>daemon-reexec</command></term>
-
- <listitem>
- <para>Reexecute the systemd manager. This will serialize the
- manager state, reexecute the process and deserialize the
- state again. This command is of little use except for
- debugging and package upgrades. Sometimes it might be
- helpful as a heavy-weight <command>daemon-reload</command>.
- While the daemon is reexecuted all sockets systemd listens
- on on behalf of user configuration will stay accessible.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>show-environment</command></term>
-
- <listitem>
- <para>Dump the systemd manager environment block. The
- environment block will be dumped in straight-forward form
- suitable for sourcing into a shell script. This environment
- block will be passed to all processes the manager
- spawns.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>set-environment <replaceable>VARIABLE=VALUE</replaceable>...</command></term>
-
- <listitem>
- <para>Set one or more systemd manager environment variables,
- as specified on the command line.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>unset-environment <replaceable>VARIABLE</replaceable>...</command></term>
-
- <listitem>
- <para>Unset one or more systemd manager environment
- variables. If only a variable name is specified it will be
- removed regardless of its value. If a variable and a value
- are specified the variable is only removed if it has the
- specified value.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>default</command></term>
-
- <listitem>
- <para>Enter default mode. This is mostly equivalent to
- <command>isolate default.target</command>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>rescue</command></term>
-
- <listitem>
- <para>Enter rescue mode. This is mostly equivalent to
- <command>isolate rescue.target</command> but also prints a
- wall message to all users.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>emergency</command></term>
-
- <listitem>
- <para>Enter emergency mode. This is mostly equivalent to
- <command>isolate emergency.target</command> but also prints
- a wall message to all users.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>halt</command></term>
-
- <listitem>
- <para>Shut down and halt the system. This is mostly equivalent to
- <command>start halt.target --irreversible</command> but also
- prints a wall message to all users. If combined with
- <option>--force</option> shutdown of all running services is
- skipped, however all processes are killed and all file
- systems are unmounted or mounted read-only, immediately
- followed by the system halt. If <option>--force</option> is
- specified twice the operation is immediately executed
- without terminating any processes or unmounting any file
- systems. This may result in data loss.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>poweroff</command></term>
-
- <listitem>
- <para>Shut down and power-off the system. This is mostly
- equivalent to <command>start poweroff.target --irreversible</command>
- but also prints a wall message to all users. If combined with
- <option>--force</option> shutdown of all running services is
- skipped, however all processes are killed and all file
- systems are unmounted or mounted read-only, immediately
- followed by the powering off. If <option>--force</option> is
- specified twice the operation is immediately executed
- without terminating any processes or unmounting any file
- systems. This may result in data loss.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>reboot</command></term>
-
- <listitem>
- <para>Shut down and reboot the system. This is mostly
- equivalent to <command>start reboot.target --irreversible</command>
- but also prints a wall message to all users. If combined with
- <option>--force</option> shutdown of all running services is
- skipped, however all processes are killed and all file
- systems are unmounted or mounted read-only, immediately
- followed by the reboot. If <option>--force</option> is
- specified twice the operation is immediately executed
- without terminating any processes or unmounting any file
- systems. This may result in data loss.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>kexec</command></term>
-
- <listitem>
- <para>Shut down and reboot the system via kexec. This is
- mostly equivalent to <command>start kexec.target --irreversible</command>
- but also prints a wall message to all users. If combined
- with <option>--force</option> shutdown of all running
- services is skipped, however all processes are killed and
- all file systems are unmounted or mounted read-only,
- immediately followed by the reboot.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>exit</command></term>
-
- <listitem>
- <para>Ask the systemd manager to quit. This is only
- supported for user service managers (i.e. in conjunction
- with the <option>--user</option> option) and will fail
- otherwise.</para>
- </listitem>
-
- </varlistentry>
- <varlistentry>
- <term><command>suspend</command></term>
-
- <listitem>
- <para>Suspend the system. This will trigger activation of
- the special <filename>suspend.target</filename> target.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>hibernate</command></term>
-
- <listitem>
- <para>Hibernate the system. This will trigger activation of
- the special <filename>hibernate.target</filename> target.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>hybrid-sleep</command></term>
-
- <listitem>
- <para>Hibernate and suspend the system. This will trigger
- activation of the special
- <filename>hybrid-sleep.target</filename> target.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><command>switch-root <replaceable>ROOT</replaceable> [<replaceable>INIT</replaceable>]</command></term>
-
- <listitem>
- <para>Switches to a different root directory and executes a
- new system manager process below it. This is intended for
- usage in initial RAM disks ("initrd"), and will transition
- from the initrd's system manager process (a.k.a "init"
- process) to the main system manager process. Takes two
- arguments: the directory to make the new root directory, and
- the path to the new system manager binary below it to
- execute as PID 1. If the latter is omitted or the empty
- string, a systemd binary will automatically be searched for
- and used as init. If the system manager path is omitted or
- equal to the empty string the state of the initrd's system
- manager process is passed to the main system manager, which
- allows later introspection of the state of the services
- involved in the initrd boot.</para>
- </listitem>
- </varlistentry>
- </variablelist>
+ </programlisting>
+ Note: because the addresses might contains spaces, this output
+ is not suitable for programmatic consumption.
+ </para>
+
+ <para>See also the options <option>--show-types</option>,
+ <option>--all</option>, and <option>--failed</option>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>start <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Start (activate) one or more units specified on the
+ command line.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>stop <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Stop (deactivate) one or more units specified on the
+ command line.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>reload <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Asks all units listed on the command line to reload
+ their configuration. Note that this will reload the
+ service-specific configuration, not the unit configuration
+ file of systemd. If you want systemd to reload the
+ configuration file of a unit, use the
+ <command>daemon-reload</command> command. In other words:
+ for the example case of Apache, this will reload Apache's
+ <filename>httpd.conf</filename> in the web server, not the
+ <filename>apache.service</filename> systemd unit
+ file.</para>
+
+ <para>This command should not be confused with the
+ <command>daemon-reload</command> or <command>load</command>
+ commands.</para>
+ </listitem>
+
+ </varlistentry>
+ <varlistentry>
+ <term><command>restart <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Restart one or more units specified on the command
+ line. If the units are not running yet, they will be
+ started.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>try-restart <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Restart one or more units specified on the command
+ line if the units are running. This does nothing if units are not
+ running. Note that, for compatibility with Red Hat init
+ scripts, <command>condrestart</command> is equivalent to this
+ command.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>reload-or-restart <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Reload one or more units if they support it. If not,
+ restart them instead. If the units are not running yet, they
+ will be started.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>reload-or-try-restart <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Reload one or more units if they support it. If not,
+ restart them instead. This does nothing if the units are not
+ running. Note that, for compatibility with SysV init scripts,
+ <command>force-reload</command> is equivalent to this
+ command.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>isolate <replaceable>NAME</replaceable></command></term>
+
+ <listitem>
+ <para>Start the unit specified on the command line and its
+ dependencies and stop all others.</para>
+
+ <para>This is similar to changing the runlevel in a
+ traditional init system. The <command>isolate</command>
+ command will immediately stop processes that are not enabled
+ in the new unit, possibly including the graphical
+ environment or terminal you are currently using.</para>
+
+ <para>Note that this is allowed only on units where
+ <option>AllowIsolate=</option> is enabled. See
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for details.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>kill <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Send a signal to one or more processes of the
+ unit. Use <option>--kill-who=</option> to select which
+ process to kill. Use <option>--kill-mode=</option> to select
+ the kill mode and <option>--signal=</option> to select the
+ signal to send.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>is-active <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Check whether any of the specified units are active
+ (i.e. running). Returns an exit code 0 if at least one is
+ active, non-zero otherwise. Unless <option>--quiet</option>
+ is specified, this will also print the current unit state to
+ STDOUT.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>is-failed <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Check whether any of the specified units are in a "failed" state.
+ Returns an exit code 0 if at least one has failed, non-zero
+ otherwise. Unless <option>--quiet</option> is specified, this
+ will also print the current unit state to
+ STDOUT.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>status [<replaceable>NAME</replaceable>...|<replaceable>PID</replaceable>...]</command></term>
+
+ <listitem>
+ <para>Show terse runtime status information about one or
+ more units, followed by most recent log data from the
+ journal. If no units are specified, show all units (subject
+ to limitations specified with <option>-t</option>). If a PID
+ is passed, show information about the unit the process
+ belongs to.</para>
+
+ <para>This function is intended to generate human-readable
+ output. If you are looking for computer-parsable output, use
+ <command>show</command> instead.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>show [<replaceable>NAME</replaceable>...|<replaceable>JOB</replaceable>...]</command></term>
+
+ <listitem>
+ <para>Show properties of one or more units, jobs, or the
+ manager itself. If no argument is specified, properties of
+ the manager will be shown. If a unit name is specified,
+ properties of the unit is shown, and if a job id is
+ specified, properties of the job is shown. By default, empty
+ properties are suppressed. Use <option>--all</option> to
+ show those too. To select specific properties to show, use
+ <option>--property=</option>. This command is intended to be
+ used whenever computer-parsable output is required. Use
+ <command>status</command> if you are looking for formatted
+ human-readable output.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>set-property <replaceable>NAME</replaceable> <replaceable>ASSIGNMENT</replaceable>...</command></term>
+
+ <listitem>
+ <para>Set the specified unit properties at runtime where
+ this is supported. This allows changing configuration
+ parameter properties such as resource control settings at
+ runtime. Not all properties may be changed at runtime, but
+ many resource control settings (primarily those in
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
+ may. The changes are applied instantly, and stored on disk
+ for future boots, unless <option>--runtime</option> is
+ passed, in which case the settings only apply until the
+ next reboot. The syntax of the property assignment follows
+ closely the syntax of assignments in unit files.</para>
+
+ <para>Example: <command>systemctl set-property foobar.service CPUShares=777</command></para>
+
+ <para>Note that this command allows changing multiple
+ properties at the same time, which is preferable over
+ setting them individually. Like unit file configuration
+ settings, assigning the empty list to list parameters will
+ reset the list.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>help <replaceable>NAME</replaceable>...|<replaceable>PID</replaceable>...</command></term>
+
+ <listitem>
+ <para>Show manual pages for one or more units, if
+ available. If a PID is given, the manual pages for the unit
+ the process belongs to are shown.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>reset-failed [<replaceable>NAME</replaceable>...]</command></term>
+
+ <listitem>
+ <para>Reset the <literal>failed</literal> state of the
+ specified units, or if no unit name is passed, reset the state of all
+ units. When a unit fails in some way (i.e. process exiting
+ with non-zero error code, terminating abnormally or timing
+ out), it will automatically enter the
+ <literal>failed</literal> state and its exit code and status
+ is recorded for introspection by the administrator until the
+ service is restarted or reset with this command.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>list-dependencies <replaceable>NAME</replaceable></command></term>
+
+ <listitem>
+ <para>Shows required and wanted units of the specified
+ unit. If no unit is specified,
+ <filename>default.target</filename> is implied. Target units
+ are recursively expanded. When <option>--all</option> is
+ passed, all other units are recursively expanded as
+ well.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Unit File Commands</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>list-unit-files</command></term>
+
+ <listitem>
+ <para>List installed unit files.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>enable <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Enable one or more unit files or unit file instances,
+ as specified on the command line. This will create a number
+ of symlinks as encoded in the <literal>[Install]</literal>
+ sections of the unit files. After the symlinks have been
+ created, the systemd configuration is reloaded (in a way that
+ is equivalent to <command>daemon-reload</command>) to ensure
+ the changes are taken into account immediately. Note that
+ this does <emphasis>not</emphasis> have the effect of also
+ starting any of the units being enabled. If this
+ is desired, a separate <command>start</command> command must
+ be invoked for the unit. Also note that in case of instance
+ enablement, symlinks named the same as instances are created in
+ the install location, however they all point to the same
+ template unit file.</para>
+
+ <para>This command will print the actions executed. This
+ output may be suppressed by passing <option>--quiet</option>.
+ </para>
+
+ <para>Note that this operation creates only the suggested
+ symlinks for the units. While this command is the
+ recommended way to manipulate the unit configuration
+ directory, the administrator is free to make additional
+ changes manually by placing or removing symlinks in the
+ directory. This is particularly useful to create
+ configurations that deviate from the suggested default
+ installation. In this case, the administrator must make sure
+ to invoke <command>daemon-reload</command> manually as
+ necessary to ensure the changes are taken into account.
+ </para>
+
+ <para>Enabling units should not be confused with starting
+ (activating) units, as done by the <command>start</command>
+ command. Enabling and starting units is orthogonal: units
+ may be enabled without being started and started without
+ being enabled. Enabling simply hooks the unit into various
+ suggested places (for example, so that the unit is
+ automatically started on boot or when a particular kind of
+ hardware is plugged in). Starting actually spawns the daemon
+ process (in case of service units), or binds the socket (in
+ case of socket units), and so on.</para>
+
+ <para>Depending on whether <option>--system</option>,
+ <option>--user</option>, <option>--runtime</option>,
+ or<option>--global</option>, is specified, this enables the unit
+ for the system, for the calling user only, for only this boot of
+ the system, or for all future logins of all users, or only this
+ boot. Note that in the last case, no systemd daemon
+ configuration is reloaded.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>disable <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Disables one or more units. This removes all symlinks
+ to the specified unit files from the unit configuration
+ directory, and hence undoes the changes made by
+ <command>enable</command>. Note however that this removes
+ all symlinks to the unit files (i.e. including manual
+ additions), not just those actually created by
+ <command>enable</command>. This call implicitly reloads the
+ systemd daemon configuration after completing the disabling
+ of the units. Note that this command does not implicitly
+ stop the units that are being disabled. If this is desired,
+ an additional <command>stop</command> command should be
+ executed afterwards.</para>
+
+ <para>This command will print the actions executed. This
+ output may be suppressed by passing <option>--quiet</option>.
+ </para>
+
+ <para>This command honors <option>--system</option>,
+ <option>--user</option>, <option>--runtime</option>,
+ <option>--global</option> in a similar way as
+ <command>enable</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>is-enabled <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Checks whether any of the specified unit files are
+ enabled (as with <command>enable</command>). Returns an exit
+ code of 0 if at least one is enabled, non-zero
+ otherwise. Prints the current enable status. To suppress
+ this output, use <option>--quiet</option>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>reenable <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Reenable one or more unit files, as specified on the
+ command line. This is a combination of
+ <command>disable</command> and <command>enable</command> and
+ is useful to reset the symlinks a unit is enabled with to
+ the defaults configured in the <literal>[Install]</literal>
+ section of the unit file.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>preset <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Reset one or more unit files, as specified on the
+ command line, to the defaults configured in the preset
+ policy files. This has the same effect as
+ <command>disable</command> or <command>enable</command>,
+ depending how the unit is listed in the preset files. For
+ more information on the preset policy format, see
+ <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ For more information on the concept of presets, please
+ consult the
+ <ulink url="http://freedesktop.org/wiki/Software/systemd/Preset">Preset</ulink>
+ document.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>mask <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Mask one or more unit files, as specified on the
+ command line. This will link these units to
+ <filename>/dev/null</filename>, making it impossible to
+ start them. This is a stronger version of
+ <command>disable</command>, since it prohibits all kinds of
+ activation of the unit, including manual activation. Use
+ this option with care. This honors the
+ <option>--runtime</option> option, to only mask temporarily
+ until the next reoobt of the system.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>unmask <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Unmask one or more unit files, as specified on the
+ command line. This will undo the effect of
+ <command>mask</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>link <replaceable>FILENAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Link a unit file that is not in the unit file search
+ paths into the unit file search path. This requires an
+ absolute path to a unit file. The effect of this can be
+ undone with <command>disable</command>. The effect of this
+ command is that a unit file is available for
+ <command>start</command> and other commands although it
+ is not installed directly in the unit search path.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>get-default</command></term>
+
+ <listitem>
+ <para>Get the default target specified
+ via <filename>default.target</filename> link.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><command>set-default <replaceable>NAME</replaceable></command></term>
+
+ <listitem>
+ <para>Set the default target to boot into. Command links
+ <filename>default.target</filename> to the given unit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Job Commands</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>list-jobs</command></term>
+
+ <listitem>
+ <para>List jobs that are in progress.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>cancel <replaceable>JOB</replaceable>...</command></term>
+
+ <listitem>
+ <para>Cancel one or more jobs specified on the command line
+ by their numeric job IDs. If no job ID is specified, cancel
+ all pending jobs.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Snapshot Commands</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>snapshot [<replaceable>NAME</replaceable>]</command></term>
+
+ <listitem>
+ <para>Create a snapshot. If a snapshot name is specified,
+ the new snapshot will be named after it. If none is
+ specified, an automatic snapshot name is generated. In either
+ case, the snapshot name used is printed to STDOUT, unless
+ <option>--quiet</option> is specified.</para>
+
+ <para>A snapshot refers to a saved state of the systemd
+ manager. It is implemented itself as a unit that is
+ generated dynamically with this command and has dependencies
+ on all units active at the time. At a later time, the user
+ may return to this state by using the
+ <command>isolate</command> command on the snapshot unit.
+ </para>
+
+ <para>Snapshots are only useful for saving and restoring
+ which units are running or are stopped, they do not
+ save/restore any other state. Snapshots are dynamic and lost
+ on reboot.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>delete <replaceable>NAME</replaceable>...</command></term>
+
+ <listitem>
+ <para>Remove a snapshot previously created with
+ <command>snapshot</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Environment Commands</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>show-environment</command></term>
+
+ <listitem>
+ <para>Dump the systemd manager environment block. The
+ environment block will be dumped in straight-forward form
+ suitable for sourcing into a shell script. This environment
+ block will be passed to all processes the manager
+ spawns.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>set-environment <replaceable>VARIABLE=VALUE</replaceable>...</command></term>
+
+ <listitem>
+ <para>Set one or more systemd manager environment variables,
+ as specified on the command line.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>unset-environment <replaceable>VARIABLE</replaceable>...</command></term>
+
+ <listitem>
+ <para>Unset one or more systemd manager environment
+ variables. If only a variable name is specified, it will be
+ removed regardless of its value. If a variable and a value
+ are specified, the variable is only removed if it has the
+ specified value.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>Manager Lifecycle Commands</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>daemon-reload</command></term>
+
+ <listitem>
+ <para>Reload systemd manager configuration. This will reload
+ all unit files and recreate the entire dependency
+ tree. While the daemon is being reloaded, all sockets systemd
+ listens on on behalf of user configuration will stay
+ accessible.</para> <para>This command should not be confused
+ with the <command>load</command> or
+ <command>reload</command> commands.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>daemon-reexec</command></term>
+
+ <listitem>
+ <para>Reexecute the systemd manager. This will serialize the
+ manager state, reexecute the process and deserialize the
+ state again. This command is of little use except for
+ debugging and package upgrades. Sometimes, it might be
+ helpful as a heavy-weight <command>daemon-reload</command>.
+ While the daemon is being reexecuted, all sockets systemd listening
+ on behalf of user configuration will stay accessible.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2>
+ <title>System Commands</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><command>default</command></term>
+
+ <listitem>
+ <para>Enter default mode. This is mostly equivalent to
+ <command>isolate default.target</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>rescue</command></term>
+
+ <listitem>
+ <para>Enter rescue mode. This is mostly equivalent to
+ <command>isolate rescue.target</command>, but also prints a
+ wall message to all users.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>emergency</command></term>
+
+ <listitem>
+ <para>Enter emergency mode. This is mostly equivalent to
+ <command>isolate emergency.target</command>, but also prints
+ a wall message to all users.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>halt</command></term>
+
+ <listitem>
+ <para>Shut down and halt the system. This is mostly equivalent to
+ <command>start halt.target --irreversible</command>, but also
+ prints a wall message to all users. If combined with
+ <option>--force</option>, shutdown of all running services is
+ skipped, however all processes are killed and all file
+ systems are unmounted or mounted read-only, immediately
+ followed by the system halt. If <option>--force</option> is
+ specified twice, the operation is immediately executed
+ without terminating any processes or unmounting any file
+ systems. This may result in data loss.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>poweroff</command></term>
+
+ <listitem>
+ <para>Shut down and power-off the system. This is mostly
+ equivalent to <command>start poweroff.target --irreversible</command>,
+ but also prints a wall message to all users. If combined with
+ <option>--force</option>, shutdown of all running services is
+ skipped, however all processes are killed and all file
+ systems are unmounted or mounted read-only, immediately
+ followed by the powering off. If <option>--force</option> is
+ specified twice, the operation is immediately executed
+ without terminating any processes or unmounting any file
+ systems. This may result in data loss.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>reboot</command></term>
+
+ <listitem>
+ <para>Shut down and reboot the system. This is mostly
+ equivalent to <command>start reboot.target --irreversible</command>,
+ but also prints a wall message to all users. If combined with
+ <option>--force</option>, shutdown of all running services is
+ skipped, however all processes are killed and all file
+ systems are unmounted or mounted read-only, immediately
+ followed by the reboot. If <option>--force</option> is
+ specified twice, the operation is immediately executed
+ without terminating any processes or unmounting any file
+ systems. This may result in data loss.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>kexec</command></term>
+
+ <listitem>
+ <para>Shut down and reboot the system via kexec. This is
+ mostly equivalent to <command>start kexec.target --irreversible</command>,
+ but also prints a wall message to all users. If combined
+ with <option>--force</option>, shutdown of all running
+ services is skipped, however all processes are killed and
+ all file systems are unmounted or mounted read-only,
+ immediately followed by the reboot.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>exit</command></term>
+
+ <listitem>
+ <para>Ask the systemd manager to quit. This is only
+ supported for user service managers (i.e. in conjunction
+ with the <option>--user</option> option) and will fail
+ otherwise.</para>
+ </listitem>
+
+ </varlistentry>
+ <varlistentry>
+ <term><command>suspend</command></term>
+
+ <listitem>
+ <para>Suspend the system. This will trigger activation of
+ the special <filename>suspend.target</filename> target.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>hibernate</command></term>
+
+ <listitem>
+ <para>Hibernate the system. This will trigger activation of
+ the special <filename>hibernate.target</filename> target.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>hybrid-sleep</command></term>
+
+ <listitem>
+ <para>Hibernate and suspend the system. This will trigger
+ activation of the special
+ <filename>hybrid-sleep.target</filename> target.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><command>switch-root <replaceable>ROOT</replaceable> [<replaceable>INIT</replaceable>]</command></term>
+
+ <listitem>
+ <para>Switches to a different root directory and executes a
+ new system manager process below it. This is intended for
+ usage in initial RAM disks ("initrd"), and will transition
+ from the initrd's system manager process (a.k.a "init"
+ process) to the main system manager process. This call takes two
+ arguments: the directory that is to become the new root directory, and
+ the path to the new system manager binary below it to
+ execute as PID 1. If the latter is omitted or the empty
+ string, a systemd binary will automatically be searched for
+ and used as init. If the system manager path is omitted or
+ equal to the empty string, the state of the initrd's system
+ manager process is passed to the main system manager, which
+ allows later introspection of the state of the services
+ involved in the initrd boot.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
</refsect1>
<refsect1>
<title>Exit status</title>
- <para>On success 0 is returned, a non-zero failure
+ <para>On success, 0 is returned, a non-zero failure
code otherwise.</para>
</refsect1>
@@ -1328,6 +1290,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-management</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>wall</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>
diff --git a/man/systemd-activate.8 b/man/systemd-activate.8
new file mode 100644
index 0000000000..5802836c3e
--- /dev/null
+++ b/man/systemd-activate.8
@@ -0,0 +1,124 @@
+'\" t
+.TH "SYSTEMD\-ACTIVATE" "8" "" "systemd 208" "systemd-activate"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-activate \- Test socket activation of daemons
+.SH "SYNOPSIS"
+.HP \w'\fB/usr/lib/systemd/systemd\-activate\fR\ 'u
+\fB/usr/lib/systemd/systemd\-activate\fR [OPTIONS...] \fIdaemon\fR [OPTIONS...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-activate\fR
+can be used to launch a socket activated daemon from the command\-line for testing purposes\&. It can also be used to launch single instances of the daemon per connection (inetd\-style)\&.
+.PP
+The daemon to launch and its options should be specifed after options intended for
+\fBsystemd\-activate\fR\&.
+.PP
+If the
+\fB\-a\fR
+option is given, file descriptor of the connection will be used as the standard input and output of the launched process\&. Otherwise, standard input and output will be inherited, and sockets will be passed through file descriptors 3 and higher\&. Sockets passed through
+\fI$LISTEN_FDS\fR
+to
+\fBsystemd\-activate\fR
+will be passed through to the dameon, in the original positions\&. Other sockets specified with
+\fB\-\-listen\fR
+will use consecutive descriptors\&.
+.SH "OPTIONS"
+.PP
+\fB\-\-help\fR, \fB\-h\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-l \fR\fB\fIaddress\fR\fR, \fB\-\-listen=\fR\fB\fIaddress\fR\fR
+.RS 4
+Listen on this
+\fIaddress\fR\&. Takes a string like
+"2000"
+or
+"127\&.0\&.0\&.1:2001"\&.
+.RE
+.PP
+\fB\-a\fR, \fB\-\-accept\fR
+.RS 4
+Launch a separate instance of daemon per connection and pass the connection socket as standard input and standard output\&.
+.RE
+.PP
+\fB\-E \fR\fB\fIVAR\fR\fR\fB[=\fIVALUE\fR]\fR, \fB\-\-environment=\fR\fB\fIVAR\fR\fR\fB[=\fIVALUE\fR]\fR
+.RS 4
+Add this variable to the environment of the launched process\&. If
+\fIVAR\fR
+is followed by
+"=", assume that it is a variable\(envalue pair\&. Otherwise, obtain the value from the environment of
+\fBsystemd\-activate\fR
+itself\&.
+.RE
+.SH "ENVIRONMENT VARIABLES"
+.PP
+\fI$LISTEN_FDS\fR, \fI$LISTEN_PID\fR
+.RS 4
+See
+\fBsd_listen_fds\fR(3)\&.
+.RE
+.PP
+\fI$SYSTEMD_LOG_TARGET\fR, \fI$SYSTEMD_LOG_LEVEL\fR, \fI$SYSTEMD_LOG_COLOR\fR, \fI$SYSTEMD_LOG_LOCATION\fR
+.RS 4
+Same as in
+\fBsystemd\fR(1)\&.
+.RE
+.SH "EXAMPLE 1"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ /usr/lib/systemd/systemd\-activate \-l 2000 \-a cat
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This runs an echo server on port 2000\&.
+.SH "EXAMPLE 2"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ /usr/lib/systemd/systemd\-activate \-l 19531 /usr/lib/systemd/systemd\-journal\-gatewayd
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This runs a socket activated instance of
+\fBsystemd-journal-gatewayd\fR(8)\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.socket\fR(5),
+\fBsystemd.service\fR(5),
+\fBcat\fR(1)
diff --git a/man/systemd-activate.html b/man/systemd-activate.html
index abd19ba2a9..fb176bf901 100644
--- a/man/systemd-activate.html
+++ b/man/systemd-activate.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-activate"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-activate — Test socket activation of daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-activate</code> [OPTIONS...] <em class="replaceable"><code>daemon</code></em> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm259774162496"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-activate</strong></span> can be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-activate"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-activate — Test socket activation of daemons</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-activate</code> [OPTIONS...] <em class="replaceable"><code>daemon</code></em> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm274683381920"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-activate</strong></span> can be used to
launch a socket activated daemon from the command-line for
testing purposes. It can also be used to launch single instances
of the daemon per connection (inetd-style).
@@ -33,21 +33,21 @@
to <span class="command"><strong>systemd-activate</strong></span> will be passed through to
the dameon, in the original positions. Other sockets specified
with <code class="option">--listen</code> will use consecutive descriptors.
- </p></div><div class="refsect1"><a name="idm259774156560"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ </p></div><div class="refsect1"><a name="idm274683375984"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="-l address"><span class="term"><code class="option">-l <em class="replaceable"><code>address</code></em></code>, </span><span class="term"><code class="option">--listen=<em class="replaceable"><code>address</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-l%20address">¶</a></dt><dd><p>Listen on this <em class="replaceable"><code>address</code></em>.
- Takes a string like <code class="literal">2000</code> or
- <code class="literal">127.0.0.1:2001</code>.</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--accept</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p>Launch a separate instance of daemon per
+ Takes a string like "<code class="literal">2000</code>" or
+ "<code class="literal">127.0.0.1:2001</code>".</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--accept</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p>Launch a separate instance of daemon per
connection and pass the connection socket as standard input
and standard output.</p></dd><dt id="-E VAR=VALUE"><span class="term"><code class="option">-E <em class="replaceable"><code>VAR</code></em>[<span class="optional">=<em class="replaceable"><code>VALUE</code></em></span>]</code>, </span><span class="term"><code class="option">--environment=<em class="replaceable"><code>VAR</code></em>[<span class="optional">=<em class="replaceable"><code>VALUE</code></em></span>]</code></span><a class="headerlink" title="Permalink to this term" href="#-E%20VAR=VALUE">¶</a></dt><dd><p>Add this variable to the environment of the
launched process. If <em class="replaceable"><code>VAR</code></em> is
- followed by <code class="literal">=</code> assume that it is a
- variable–value pair. Otherwise obtain the value from the
+ followed by "<code class="literal">=</code>", assume that it is a
+ variable–value pair. Otherwise, obtain the value from the
environment of <span class="command"><strong>systemd-activate</strong></span> itself.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259778092528"></a><h2 id="Environment variables">Environment variables<a class="headerlink" title="Permalink to this headline" href="#Environment%20variables">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$LISTEN_FDS"><span class="term"><code class="varname">$LISTEN_FDS</code>, </span><span class="term"><code class="varname">$LISTEN_PID</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_FDS">¶</a></dt><dd><p>See
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274687263440"></a><h2 id="Environment variables">Environment variables<a class="headerlink" title="Permalink to this headline" href="#Environment%20variables">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$LISTEN_FDS"><span class="term"><code class="varname">$LISTEN_FDS</code>, </span><span class="term"><code class="varname">$LISTEN_PID</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_FDS">¶</a></dt><dd><p>See
<a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>.</p></dd><dt id="$SYSTEMD_LOG_TARGET"><span class="term"><code class="varname">$SYSTEMD_LOG_TARGET</code>, </span><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code>, </span><span class="term"><code class="varname">$SYSTEMD_LOG_COLOR</code>, </span><span class="term"><code class="varname">$SYSTEMD_LOG_LOCATION</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_TARGET">¶</a></dt><dd><p>Same as in
- <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259778077056"></a><h2 id="Example 1">Example 1<a class="headerlink" title="Permalink to this headline" href="#Example%201">¶</a></h2><pre class="programlisting">$ /usr/lib/systemd/systemd-activate -l 2000 -a cat</pre><p>This runs an echo server on port 2000.</p></div><div class="refsect1"><a name="idm259778075168"></a><h2 id="Example 2">Example 2<a class="headerlink" title="Permalink to this headline" href="#Example%202">¶</a></h2><pre class="programlisting">$ /usr/lib/systemd/systemd-activate -l 19531 /usr/lib/systemd/systemd-journal-gatewayd</pre><p>This runs a socket activated instance of
- <a href="systemd-journal-gatewayd.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259778072512"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274687247824"></a><h2 id="Example 1">Example 1<a class="headerlink" title="Permalink to this headline" href="#Example%201">¶</a></h2><pre class="programlisting">$ /usr/lib/systemd/systemd-activate -l 2000 -a cat</pre><p>This runs an echo server on port 2000.</p></div><div class="refsect1"><a name="idm274687246048"></a><h2 id="Example 2">Example 2<a class="headerlink" title="Permalink to this headline" href="#Example%202">¶</a></h2><pre class="programlisting">$ /usr/lib/systemd/systemd-activate -l 19531 /usr/lib/systemd/systemd-journal-gatewayd</pre><p>This runs a socket activated instance of
+ <a href="systemd-journal-gatewayd.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274687243392"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>,
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
diff --git a/man/systemd-activate.xml b/man/systemd-activate.xml
index b62cf44ec4..d48774d9d6 100644
--- a/man/systemd-activate.xml
+++ b/man/systemd-activate.xml
@@ -123,8 +123,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
<listitem><para>Add this variable to the environment of the
launched process. If <replaceable>VAR</replaceable> is
- followed by <literal>=</literal> assume that it is a
- variable–value pair. Otherwise obtain the value from the
+ followed by <literal>=</literal>, assume that it is a
+ variable–value pair. Otherwise, obtain the value from the
environment of <command>systemd-activate</command> itself.
</para></listitem>
</varlistentry>
diff --git a/man/systemd-analyze.1 b/man/systemd-analyze.1
new file mode 100644
index 0000000000..b404a9c251
--- /dev/null
+++ b/man/systemd-analyze.1
@@ -0,0 +1,192 @@
+'\" t
+.TH "SYSTEMD\-ANALYZE" "1" "" "systemd 208" "systemd-analyze"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-analyze \- Analyze system boot\-up performance
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] [time]
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] blame
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] critical\-chain [\fIUNIT\fR...]
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] plot [>\ file\&.svg]
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] dot [\fIPATTERN\fR...] [>\ file\&.dot]
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] dump
+.HP \w'\fBsystemd\-analyze\fR\ 'u
+\fBsystemd\-analyze\fR [OPTIONS...] set\-log\-level [\fILEVEL\fR]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-analyze\fR
+may be used to determine system boot\-up performance statistics and retrieve other state and tracing information from the system and service manager\&.
+.PP
+\fBsystemd\-analyze time\fR
+prints the time spent in the kernel before userspace has been reached, the time spent in the initial RAM disk (initrd) before normal system userspace has been reached, and the time normal system userspace took to initialize\&. Note that these measurements simply measure the time passed up to the point where all system services have been spawned, but not necessarily until they fully finished initialization or the disk is idle\&.
+.PP
+\fBsystemd\-analyze blame\fR
+prints a list of all running units, ordered by the time they took to initialize\&. This information may be used to optimize boot\-up times\&. Note that the output might be misleading as the initialization of one service might be slow simply because it waits for the initialization of another service to complete\&.
+.PP
+\fBsystemd\-analyze critical\-chain [\fR\fB\fIUNIT\&.\&.\&.\fR\fR\fB]\fR
+prints a tree of the time\-critical chain of units (for each of the specified
+\fIUNIT\fRs or for the default target otherwise)\&. The time after the unit is active or started is printed after the "@" character\&. The time the unit takes to start is printed after the "+" character\&. Note that the output might be misleading as the initialization of one service might depend on socket activation and because of the parallel execution of units\&.
+.PP
+\fBsystemd\-analyze plot\fR
+prints an SVG graphic detailing which system services have been started at what time, highlighting the time they spent on initialization\&.
+.PP
+\fBsystemd\-analyze dot\fR
+generates textual dependency graph description in dot format for further processing with the GraphViz
+\fBdot\fR(1)
+tool\&. Use a command line like
+\fBsystemd\-analyze dot | dot \-Tsvg > systemd\&.svg\fR
+to generate a graphical dependency tree\&. Unless
+\fB\-\-order\fR
+or
+\fB\-\-require\fR
+is passed, the generated graph will show both ordering and requirement dependencies\&. Optional pattern globbing style specifications (e\&.g\&.
+*\&.target) may be given at the end\&. A unit dependency is included in the graph if any of these patterns match either the origin or destination node\&.
+.PP
+\fBsystemd\-analyze dump\fR
+outputs a (usually very long) human\-readable serialization of the complete server state\&. Its format is subject to change without notice and should not be parsed by applications\&.
+.PP
+\fBsystemd\-analyze set\-log\-level \fR\fB\fILEVEL\fR\fR
+changes the current log level of the
+\fBsystemd\fR
+daemon to
+\fILEVEL\fR
+(accepts the same values as
+\fB\-\-log\-level=\fR
+described in
+\fBsystemd\fR(1))\&.
+.PP
+If no command is passed,
+\fBsystemd\-analyze time\fR
+is implied\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-user\fR
+.RS 4
+Shows performance data of user sessions instead of the system manager\&.
+.RE
+.PP
+\fB\-\-order\fR, \fB\-\-require\fR
+.RS 4
+When used in conjunction with the
+\fBdot\fR
+command (see above), selects which dependencies are shown in the dependency graph\&. If
+\fB\-\-order\fR
+is passed, only dependencies of type
+\fIAfter=\fR
+or
+\fIBefore=\fR
+are shown\&. If
+\fB\-\-require\fR
+is passed, only dependencies of type
+\fIRequires=\fR,
+\fIRequiresOverridable=\fR,
+\fIRequisite=\fR,
+\fIRequisiteOverridable=\fR,
+\fIWants=\fR
+and
+\fIConflicts=\fR
+are shown\&. If neither is passed, this shows dependencies of all these types\&.
+.RE
+.PP
+\fB\-\-from\-pattern=\fR, \fB\-\-to\-pattern=\fR
+.RS 4
+When used in conjunction with the
+\fBdot\fR
+command (see above), this selects which relationships are shown in the dependency graph\&. They both require
+\fBglob\fR(7)
+patterns as arguments, which are matched against left\-hand and right\-hand, respectively, nodes of a relationship\&. Each of these can be used more than once, which means a unit name must match one of the given values\&.
+.RE
+.PP
+\fB\-\-fuzz=\fR\fItimespan\fR
+.RS 4
+When used in conjunction with the
+\fBcritical\-chain\fR
+command (see above), also show units, which finished
+\fItimespan\fR
+earlier, than the latest unit in the same level\&. The unit of
+\fItimespan\fR
+is seconds unless specified with a different unit, e\&.g\&. "50ms"\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "EXAMPLES"
+.PP
+This plots all dependencies of any unit whose name starts with
+"avahi\-daemon\&.":
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ systemd\-analyze dot \*(Aqavahi\-daemon\&.*\*(Aq | dot \-Tsvg > avahi\&.svg
+$ eog avahi\&.svg
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This plots the dependencies between all known target units:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+systemd\-analyze dot \-\-to\-pattern=\*(Aq*\&.target\*(Aq \-\-from\-pattern=\*(Aq*\&.target\*(Aq | dot \-Tsvg > targets\&.svg
+$ eog targets\&.svg
+.fi
+.if n \{\
+.RE
+.\}
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1)
diff --git a/man/systemd-analyze.html b/man/systemd-analyze.html
index 54c5cf43ab..a5e0109f49 100644
--- a/man/systemd-analyze.html
+++ b/man/systemd-analyze.html
@@ -19,13 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-analyze"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-analyze — Analyze system boot-up performance</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-analyze [OPTIONS...] time</code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze [OPTIONS...] blame </code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze [OPTIONS...] critical-chain </code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze [OPTIONS...] plot [&gt; file.svg]</code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze [OPTIONS...] dot [pattern...] </code> </p></div></div><div class="refsect1"><a name="idm259795164352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-analyze</strong></span> may be used
- to determine system boot-up performance of the current
- boot.</p><p><span class="command"><strong>systemd-analyze time</strong></span>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-analyze"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-analyze — Analyze system boot-up performance</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] [time]</p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] blame </p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] critical-chain [<em class="replaceable"><code>UNIT</code></em>...]</p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] plot [&gt; file.svg]</p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] dot [<em class="replaceable"><code>PATTERN</code></em>...] [&gt; file.dot]</p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] dump </p></div><div class="cmdsynopsis"><p><code class="command">systemd-analyze</code> [OPTIONS...] set-log-level [<em class="replaceable"><code>LEVEL</code></em>]</p></div></div><div class="refsect1"><a name="idm274682235296"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-analyze</strong></span> may be used
+ to determine system boot-up performance statistics and
+ retrieve other state and tracing information from the
+ system and service manager.</p><p><span class="command"><strong>systemd-analyze time</strong></span>
prints the time spent in the kernel before
userspace has been reached, the time spent in the
initial RAM disk (initrd) before normal system
- userspace has been reached and the time normal system
+ userspace has been reached, and the time normal system
userspace took to initialize. Note that these
measurements simply measure the time passed up to the
point where all system services have been spawned, but
@@ -36,8 +37,10 @@
optimize boot-up times. Note that the output might be
misleading as the initialization of one service might
be slow simply because it waits for the initialization
- of another service to complete.</p><p><span class="command"><strong>systemd-analyze critical-chain</strong></span>
- prints a tree of the time critical chain of units.
+ of another service to complete.</p><p><span class="command"><strong>systemd-analyze critical-chain [<em class="replaceable"><code>UNIT...</code></em>]</strong></span>
+ prints a tree of the time-critical chain of units
+ (for each of the specified <em class="replaceable"><code>UNIT</code></em>s
+ or for the default target otherwise).
The time after the unit is active or started is printed
after the "@" character. The time the unit takes to
start is printed after the "+" character.
@@ -47,7 +50,7 @@
of units.</p><p><span class="command"><strong>systemd-analyze plot</strong></span> prints
an SVG graphic detailing which system services have
been started at what time, highlighting the time they
- spent on initialization.</p><p><span class="command"><strong>systemd-analyze dot</strong></span> Generate
+ spent on initialization.</p><p><span class="command"><strong>systemd-analyze dot</strong></span> generates
textual dependency graph description in dot format for
further processing with the GraphViz
<a href="dot.html"><span class="citerefentry"><span class="refentrytitle">dot</span>(1)</span></a>
@@ -55,14 +58,24 @@
dot | dot -Tsvg &gt; systemd.svg</strong></span> to generate a
graphical dependency tree. Unless
<code class="option">--order</code> or <code class="option">--require</code>
- is passed the generated graph will show both ordering
+ is passed, the generated graph will show both ordering
and requirement dependencies. Optional pattern
globbing style specifications
(e.g. <code class="filename">*.target</code>) may be given at
the end. A unit dependency is included in the graph if
any of these patterns match either the origin or
- destination node.</p><p>If no command is passed <span class="command"><strong>systemd-analyze
- time</strong></span> is implied.</p></div><div class="refsect1"><a name="idm259799104080"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ destination node.</p><p><span class="command"><strong>systemd-analyze dump</strong></span> outputs
+ a (usually very long) human-readable serialization of
+ the complete server state. Its format is subject to
+ change without notice and should not be parsed by
+ applications.</p><p><span class="command"><strong>systemd-analyze set-log-level
+ <em class="replaceable"><code>LEVEL</code></em></strong></span> changes the
+ current log level of the <span class="command"><strong>systemd</strong></span>
+ daemon to <em class="replaceable"><code>LEVEL</code></em> (accepts
+ the same values as <code class="option">--log-level=</code>
+ described in
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>).</p><p>If no command is passed, <span class="command"><strong>systemd-analyze
+ time</strong></span> is implied.</p></div><div class="refsect1"><a name="idm274682209024"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--user"><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--user">¶</a></dt><dd><p>Shows performance data
of user sessions instead of the system
manager.</p></dd><dt id="--order"><span class="term"><code class="option">--order</code>, </span><span class="term"><code class="option">--require</code></span><a class="headerlink" title="Permalink to this term" href="#--order">¶</a></dt><dd><p>When used in
@@ -70,33 +83,33 @@
<span class="command"><strong>dot</strong></span> command (see
above), selects which dependencies are
shown in the dependency graph. If
- <code class="option">--order</code> is passed
+ <code class="option">--order</code> is passed,
only dependencies of type
<code class="varname">After=</code> or
<code class="varname">Before=</code> are
shown. If <code class="option">--require</code>
- is passed only dependencies of type
+ is passed, only dependencies of type
<code class="varname">Requires=</code>,
<code class="varname">RequiresOverridable=</code>,
<code class="varname">Requisite=</code>,
<code class="varname">RequisiteOverridable=</code>,
<code class="varname">Wants=</code> and
<code class="varname">Conflicts=</code> are
- shown. If neither is passed, shows
+ shown. If neither is passed, this shows
dependencies of all these
types.</p></dd><dt id="--from-pattern="><span class="term"><code class="option">--from-pattern=</code>, </span><span class="term"><code class="option">--to-pattern=</code></span><a class="headerlink" title="Permalink to this term" href="#--from-pattern=">¶</a></dt><dd><p>When used in
conjunction with the
<span class="command"><strong>dot</strong></span> command (see
- above), selects which relationships
+ above), this selects which relationships
are shown in the dependency graph.
They both require
<a href="glob.html"><span class="citerefentry"><span class="refentrytitle">glob</span>(7)</span></a>
patterns as arguments, which are
- matched against lefthand and
- righthand, respectively, nodes of a
+ matched against left-hand and
+ right-hand, respectively, nodes of a
relationship. Each of these can be
- used more than once which means a
- unit name must match one of given
+ used more than once, which means a
+ unit name must match one of the given
values.</p></dd><dt id="--fuzz=timespan"><span class="term"><code class="option">--fuzz=</code><em class="replaceable"><code>timespan</code></em></span><a class="headerlink" title="Permalink to this term" href="#--fuzz=timespan">¶</a></dt><dd><p>When used in conjunction
with the <span class="command"><strong>critical-chain</strong></span>
command (see above), also show units, which
@@ -104,11 +117,15 @@
latest unit in the same level. The unit of
<em class="replaceable"><code>timespan</code></em> is seconds
unless specified with a different unit,
- i.e. "50ms".</p></dd></dl></div></div><div class="refsect1"><a name="idm259799075808"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259799074624"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>This plots all dependencies of any unit whose
+ e.g. "50ms".</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a pager.</p></dd></dl></div></div><div class="refsect1"><a name="idm274677273488"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274677272336"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>This plots all dependencies of any unit whose
name starts with "<code class="literal">avahi-daemon.</code>":</p><pre class="programlisting">$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg &gt; avahi.svg
-$ eog avahi.svg</pre><p>This plots the dependencies between all known target units:</p><pre class="programlisting">systemd-analyze dot --to-pattern='*.target' --from-patter='*.target' | dot -Tsvg &gt; targets.svg
-$ eog targets.svg</pre></div><div class="refsect1"><a name="idm259799070928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+$ eog avahi.svg</pre><p>This plots the dependencies between all known target units:</p><pre class="programlisting">systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg &gt; targets.svg
+$ eog targets.svg</pre></div><div class="refsect1"><a name="idm274677268800"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when <code class="option">--no-pager</code> is not
+ given; overrides <code class="varname">$PAGER</code>. Setting this to
+ an empty string or the value "<code class="literal">cat</code>" is
+ equivalent to passing
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274677263728"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
index ae45bfcf31..aefbfc8af7 100644
--- a/man/systemd-analyze.xml
+++ b/man/systemd-analyze.xml
@@ -55,19 +55,44 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>systemd-analyze <arg choice="opt" rep="repeat">OPTIONS</arg> time</command>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg>time</arg>
</cmdsynopsis>
<cmdsynopsis>
- <command>systemd-analyze <arg choice="opt" rep="repeat">OPTIONS</arg> blame </command>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">blame</arg>
</cmdsynopsis>
<cmdsynopsis>
- <command>systemd-analyze <arg choice="opt" rep="repeat">OPTIONS</arg> critical-chain </command>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">critical-chain</arg>
+ <arg choice="opt" rep="repeat"><replaceable>UNIT</replaceable></arg>
</cmdsynopsis>
<cmdsynopsis>
- <command>systemd-analyze <arg choice="opt" rep="repeat">OPTIONS</arg> plot <arg choice="opt">&gt; file.svg</arg></command>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">plot</arg>
+ <arg choice="opt">&gt; file.svg</arg>
</cmdsynopsis>
<cmdsynopsis>
- <command>systemd-analyze <arg choice="opt" rep="repeat">OPTIONS</arg> dot <arg choice="opt">pattern...</arg> </command>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">dot</arg>
+ <arg choice="opt" rep="repeat"><replaceable>PATTERN</replaceable></arg>
+ <arg choice="opt">&gt; file.dot</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">dump</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">set-log-level</arg>
+ <arg choice="opt"><replaceable>LEVEL</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -75,14 +100,15 @@
<title>Description</title>
<para><command>systemd-analyze</command> may be used
- to determine system boot-up performance of the current
- boot.</para>
+ to determine system boot-up performance statistics and
+ retrieve other state and tracing information from the
+ system and service manager.</para>
<para><command>systemd-analyze time</command>
prints the time spent in the kernel before
userspace has been reached, the time spent in the
initial RAM disk (initrd) before normal system
- userspace has been reached and the time normal system
+ userspace has been reached, and the time normal system
userspace took to initialize. Note that these
measurements simply measure the time passed up to the
point where all system services have been spawned, but
@@ -97,8 +123,10 @@
be slow simply because it waits for the initialization
of another service to complete.</para>
- <para><command>systemd-analyze critical-chain</command>
- prints a tree of the time critical chain of units.
+ <para><command>systemd-analyze critical-chain [<replaceable>UNIT...</replaceable>]</command>
+ prints a tree of the time-critical chain of units
+ (for each of the specified <replaceable>UNIT</replaceable>s
+ or for the default target otherwise).
The time after the unit is active or started is printed
after the "@" character. The time the unit takes to
start is printed after the "+" character.
@@ -112,7 +140,7 @@
been started at what time, highlighting the time they
spent on initialization.</para>
- <para><command>systemd-analyze dot</command> Generate
+ <para><command>systemd-analyze dot</command> generates
textual dependency graph description in dot format for
further processing with the GraphViz
<citerefentry><refentrytitle>dot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
@@ -120,7 +148,7 @@
dot | dot -Tsvg > systemd.svg</command> to generate a
graphical dependency tree. Unless
<option>--order</option> or <option>--require</option>
- is passed the generated graph will show both ordering
+ is passed, the generated graph will show both ordering
and requirement dependencies. Optional pattern
globbing style specifications
(e.g. <filename>*.target</filename>) may be given at
@@ -128,7 +156,21 @@
any of these patterns match either the origin or
destination node.</para>
- <para>If no command is passed <command>systemd-analyze
+ <para><command>systemd-analyze dump</command> outputs
+ a (usually very long) human-readable serialization of
+ the complete server state. Its format is subject to
+ change without notice and should not be parsed by
+ applications.</para>
+
+ <para><command>systemd-analyze set-log-level
+ <replaceable>LEVEL</replaceable></command> changes the
+ current log level of the <command>systemd</command>
+ daemon to <replaceable>LEVEL</replaceable> (accepts
+ the same values as <option>--log-level=</option>
+ described in
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).</para>
+
+ <para>If no command is passed, <command>systemd-analyze
time</command> is implied.</para>
</refsect1>
@@ -164,19 +206,19 @@
<command>dot</command> command (see
above), selects which dependencies are
shown in the dependency graph. If
- <option>--order</option> is passed
+ <option>--order</option> is passed,
only dependencies of type
<varname>After=</varname> or
<varname>Before=</varname> are
shown. If <option>--require</option>
- is passed only dependencies of type
+ is passed, only dependencies of type
<varname>Requires=</varname>,
<varname>RequiresOverridable=</varname>,
<varname>Requisite=</varname>,
<varname>RequisiteOverridable=</varname>,
<varname>Wants=</varname> and
<varname>Conflicts=</varname> are
- shown. If neither is passed, shows
+ shown. If neither is passed, this shows
dependencies of all these
types.</para></listitem>
</varlistentry>
@@ -188,16 +230,16 @@
<listitem><para>When used in
conjunction with the
<command>dot</command> command (see
- above), selects which relationships
+ above), this selects which relationships
are shown in the dependency graph.
They both require
<citerefentry><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>
patterns as arguments, which are
- matched against lefthand and
- righthand, respectively, nodes of a
+ matched against left-hand and
+ right-hand, respectively, nodes of a
relationship. Each of these can be
- used more than once which means a
- unit name must match one of given
+ used more than once, which means a
+ unit name must match one of the given
values.</para></listitem>
</varlistentry>
@@ -211,7 +253,15 @@
latest unit in the same level. The unit of
<replaceable>timespan</replaceable> is seconds
unless specified with a different unit,
- i.e. "50ms".</para></listitem>
+ e.g. "50ms".</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--no-pager</option></term>
+
+ <listitem>
+ <para>Do not pipe output into a pager.</para>
+ </listitem>
</varlistentry>
</variablelist>
@@ -228,20 +278,38 @@
<title>Examples</title>
<para>This plots all dependencies of any unit whose
- name starts with "<literal>avahi-daemon.</literal>":</para>
+ name starts with <literal>avahi-daemon.</literal>:</para>
<programlisting>$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg
$ eog avahi.svg</programlisting>
<para>This plots the dependencies between all known target units:</para>
- <programlisting>systemd-analyze dot --to-pattern='*.target' --from-patter='*.target' | dot -Tsvg > targets.svg
+ <programlisting>systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg
$ eog targets.svg</programlisting>
</refsect1>
<refsect1>
+ <title>Environment</title>
+
+ <variablelist class='environment-variables'>
+ <varlistentry>
+ <term><varname>$SYSTEMD_PAGER</varname></term>
+
+ <listitem>
+ <para>Pager to use when <option>--no-pager</option> is not
+ given; overrides <varname>$PAGER</varname>. Setting this to
+ an empty string or the value <literal>cat</literal> is
+ equivalent to passing
+ <option>--no-pager</option>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/systemd-ask-password-console.path.8 b/man/systemd-ask-password-console.path.8
new file mode 100644
index 0000000000..0a4ecb5b9a
--- /dev/null
+++ b/man/systemd-ask-password-console.path.8
@@ -0,0 +1 @@
+.so man8/systemd-ask-password-console.service.8
diff --git a/man/systemd-ask-password-console.path.html b/man/systemd-ask-password-console.path.html
index caa9d9eea8..e76049fe25 100644
--- a/man/systemd-ask-password-console.path.html
+++ b/man/systemd-ask-password-console.path.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
- console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm259780152160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
+ console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm274699819472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
is a system service that queries the user for system
passwords (such as hard disk encryption keys and SSL
certificate passphrases) on the console. It is
@@ -37,7 +37,7 @@
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>
with either the <span class="command"><strong>--watch --console</strong></span>
or <span class="command"><strong>--watch --wall</strong></span> command line
- parameters.</p></div><div class="refsect1"><a name="idm259780144528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ parameters.</p></div><div class="refsect1"><a name="idm274699811888"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>,
<a href="wall.html"><span class="citerefentry"><span class="refentrytitle">wall</span>(1)</span></a>
diff --git a/man/systemd-ask-password-console.service.8 b/man/systemd-ask-password-console.service.8
new file mode 100644
index 0000000000..15ed8173fe
--- /dev/null
+++ b/man/systemd-ask-password-console.service.8
@@ -0,0 +1,62 @@
+'\" t
+.TH "SYSTEMD\-ASK\-PASSWORD\-CONSOLE\&.SERVICE" "8" "" "systemd 208" "systemd-ask-password-console.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path \- Query the user for system passwords on the console and via wall
+.SH "SYNOPSIS"
+.PP
+systemd\-ask\-password\-console\&.service
+.PP
+systemd\-ask\-password\-console\&.path
+.PP
+systemd\-ask\-password\-wall\&.service
+.PP
+systemd\-ask\-password\-wall\&.path
+.SH "DESCRIPTION"
+.PP
+systemd\-ask\-password\-console\&.service
+is a system service that queries the user for system passwords (such as hard disk encryption keys and SSL certificate passphrases) on the console\&. It is intended to be used during boot to ensure proper handling of passwords necessary for boot\&.
+systemd\-ask\-password\-wall\&.service
+is a system service that informs all logged in users for system passwords via
+\fBwall\fR(1)\&. It is intended to be used after boot to ensure that users are properly notified\&.
+.PP
+See the
+\m[blue]\fBdeveloper documentation\fR\m[]\&\s-2\u[1]\d\s+2
+for more information about the system password logic\&.
+.PP
+Note that these services invoke
+\fBsystemd-tty-ask-password-agent\fR(1)
+with either the
+\fB\-\-watch \-\-console\fR
+or
+\fB\-\-watch \-\-wall\fR
+command line parameters\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-tty-ask-password-agent\fR(1),
+\fBwall\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+developer documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
+.RE
diff --git a/man/systemd-ask-password-console.service.html b/man/systemd-ask-password-console.service.html
index caa9d9eea8..e76049fe25 100644
--- a/man/systemd-ask-password-console.service.html
+++ b/man/systemd-ask-password-console.service.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
- console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm259780152160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
+ console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm274699819472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
is a system service that queries the user for system
passwords (such as hard disk encryption keys and SSL
certificate passphrases) on the console. It is
@@ -37,7 +37,7 @@
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>
with either the <span class="command"><strong>--watch --console</strong></span>
or <span class="command"><strong>--watch --wall</strong></span> command line
- parameters.</p></div><div class="refsect1"><a name="idm259780144528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ parameters.</p></div><div class="refsect1"><a name="idm274699811888"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>,
<a href="wall.html"><span class="citerefentry"><span class="refentrytitle">wall</span>(1)</span></a>
diff --git a/man/systemd-ask-password-wall.path.8 b/man/systemd-ask-password-wall.path.8
new file mode 100644
index 0000000000..0a4ecb5b9a
--- /dev/null
+++ b/man/systemd-ask-password-wall.path.8
@@ -0,0 +1 @@
+.so man8/systemd-ask-password-console.service.8
diff --git a/man/systemd-ask-password-wall.path.html b/man/systemd-ask-password-wall.path.html
index caa9d9eea8..e76049fe25 100644
--- a/man/systemd-ask-password-wall.path.html
+++ b/man/systemd-ask-password-wall.path.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
- console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm259780152160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
+ console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm274699819472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
is a system service that queries the user for system
passwords (such as hard disk encryption keys and SSL
certificate passphrases) on the console. It is
@@ -37,7 +37,7 @@
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>
with either the <span class="command"><strong>--watch --console</strong></span>
or <span class="command"><strong>--watch --wall</strong></span> command line
- parameters.</p></div><div class="refsect1"><a name="idm259780144528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ parameters.</p></div><div class="refsect1"><a name="idm274699811888"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>,
<a href="wall.html"><span class="citerefentry"><span class="refentrytitle">wall</span>(1)</span></a>
diff --git a/man/systemd-ask-password-wall.service.8 b/man/systemd-ask-password-wall.service.8
new file mode 100644
index 0000000000..0a4ecb5b9a
--- /dev/null
+++ b/man/systemd-ask-password-wall.service.8
@@ -0,0 +1 @@
+.so man8/systemd-ask-password-console.service.8
diff --git a/man/systemd-ask-password-wall.service.html b/man/systemd-ask-password-wall.service.html
index caa9d9eea8..e76049fe25 100644
--- a/man/systemd-ask-password-wall.service.html
+++ b/man/systemd-ask-password-wall.service.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
- console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm259780152160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-ask-password-console.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password-console.service, systemd-ask-password-console.path, systemd-ask-password-wall.service, systemd-ask-password-wall.path — Query the user for system passwords on the
+ console and via wall</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-ask-password-console.service</code></p><p><code class="filename">systemd-ask-password-console.path</code></p><p><code class="filename">systemd-ask-password-wall.service</code></p><p><code class="filename">systemd-ask-password-wall.path</code></p></div><div class="refsect1"><a name="idm274699819472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-ask-password-console.service</code>
is a system service that queries the user for system
passwords (such as hard disk encryption keys and SSL
certificate passphrases) on the console. It is
@@ -37,7 +37,7 @@
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>
with either the <span class="command"><strong>--watch --console</strong></span>
or <span class="command"><strong>--watch --wall</strong></span> command line
- parameters.</p></div><div class="refsect1"><a name="idm259780144528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ parameters.</p></div><div class="refsect1"><a name="idm274699811888"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>,
<a href="wall.html"><span class="citerefentry"><span class="refentrytitle">wall</span>(1)</span></a>
diff --git a/man/systemd-ask-password.1 b/man/systemd-ask-password.1
new file mode 100644
index 0000000000..ce44ee66f6
--- /dev/null
+++ b/man/systemd-ask-password.1
@@ -0,0 +1,101 @@
+'\" t
+.TH "SYSTEMD\-ASK\-PASSWORD" "1" "" "systemd 208" "systemd-ask-password"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-ask-password \- Query the user for a system password
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-ask\-password\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[MESSAGE]\fR\ 'u
+\fBsystemd\-ask\-password \fR\fB[OPTIONS...]\fR\fB \fR\fB[MESSAGE]\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-ask\-password\fR
+may be used to query a system password or passphrase from the user, using a question message specified on the command line\&. When run from a TTY it will query a password on the TTY and print it to STDOUT\&. When run with no TTY or with
+\fB\-\-no\-tty\fR
+it will query the password system\-wide and allow active users to respond via several agents\&. The latter is only available to privileged processes\&.
+.PP
+The purpose of this tool is to query system\-wide passwords \-\- that is passwords not attached to a specific user account\&. Examples include: unlocking encrypted hard disks when they are plugged in or at boot, entering an SSL certificate passphrase for web and VPN servers\&.
+.PP
+Existing agents are: a boot\-time password agent asking the user for passwords using Plymouth; a boot\-time password agent querying the user directly on the console; an agent requesting password input via a
+\fBwall\fR(1)
+message; an agent suitable for running in a GNOME session; a command line agent which can be started temporarily to process queued password requests; a TTY agent that is temporarily spawned during
+\fBsystemctl\fR(1)
+invocations\&.
+.PP
+Additional password agents may be implemented according to the
+\m[blue]\fBsystemd Password Agent Specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.PP
+If a password is queried on a TTY, the user may press TAB to hide the asterisks normally shown for each character typed\&. Pressing Backspace as first key achieves the same effect\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-icon=\fR
+.RS 4
+Specify an icon name alongside the password query, which may be used in all agents supporting graphical display\&. The icon name should follow the
+\m[blue]\fBXDG Icon Naming Specification\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.RE
+.PP
+\fB\-\-timeout=\fR
+.RS 4
+Specify the query timeout in seconds\&. Defaults to 90s\&. A timeout of 0 waits indefinitely\&.
+.RE
+.PP
+\fB\-\-no\-tty\fR
+.RS 4
+Never ask for password on current TTY even if one is available\&. Always use agent system\&.
+.RE
+.PP
+\fB\-\-accept\-cached\fR
+.RS 4
+If passed, accept cached passwords, i\&.e\&. passwords previously typed in\&.
+.RE
+.PP
+\fB\-\-multiple\fR
+.RS 4
+When used in conjunction with
+\fB\-\-accept\-cached\fR
+accept multiple passwords\&. This will output one password per line\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBplymouth\fR(8),
+\fBwall\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+systemd Password Agent Specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
+.RE
+.IP " 2." 4
+XDG Icon Naming Specification
+.RS 4
+\%http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
+.RE
diff --git a/man/systemd-ask-password.html b/man/systemd-ask-password.html
index 456a5ad6b2..81100393d7 100644
--- a/man/systemd-ask-password.html
+++ b/man/systemd-ask-password.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-ask-password"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password — Query the user for a system password</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-ask-password [OPTIONS...] [MESSAGE]</code> </p></div></div><div class="refsect1"><a name="idm259797424784"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-ask-password</strong></span> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-ask-password"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-ask-password — Query the user for a system password</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-ask-password [OPTIONS...] [MESSAGE]</code> </p></div></div><div class="refsect1"><a name="idm274691492736"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-ask-password</strong></span> may be
used to query a system password or passphrase from the
user, using a question message specified on the
command line. When run from a TTY it will query a
@@ -44,10 +44,10 @@
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
invocations.</p><p>Additional password agents may be implemented
according to the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents" target="_top">systemd
- Password Agent Specification</a>.</p><p>If a password is queried on a TTY the user may
+ Password Agent Specification</a>.</p><p>If a password is queried on a TTY, the user may
press TAB to hide the asterisks normally shown for
each character typed. Pressing Backspace as first key
- achieves the same effect.</p></div><div class="refsect1"><a name="idm259797417088"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ achieves the same effect.</p></div><div class="refsect1"><a name="idm274691485040"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--icon="><span class="term"><code class="option">--icon=</code></span><a class="headerlink" title="Permalink to this term" href="#--icon=">¶</a></dt><dd><p>Specify an icon name
alongside the password query, which may
be used in all agents supporting
@@ -60,15 +60,15 @@
</p></dd><dt id="--no-tty"><span class="term"><code class="option">--no-tty</code></span><a class="headerlink" title="Permalink to this term" href="#--no-tty">¶</a></dt><dd><p>Never ask for password
on current TTY even if one is
available. Always use agent
- system.</p></dd><dt id="--accept-cached"><span class="term"><code class="option">--accept-cached</code></span><a class="headerlink" title="Permalink to this term" href="#--accept-cached">¶</a></dt><dd><p>If passed accept
+ system.</p></dd><dt id="--accept-cached"><span class="term"><code class="option">--accept-cached</code></span><a class="headerlink" title="Permalink to this term" href="#--accept-cached">¶</a></dt><dd><p>If passed, accept
cached passwords, i.e. passwords
previously typed in.</p></dd><dt id="--multiple"><span class="term"><code class="option">--multiple</code></span><a class="headerlink" title="Permalink to this term" href="#--multiple">¶</a></dt><dd><p>When used in
conjunction with
<code class="option">--accept-cached</code>
accept multiple passwords. This will
output one password per
- line.</p></dd></dl></div></div><div class="refsect1"><a name="idm259801356992"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259801355808"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ line.</p></dd></dl></div></div><div class="refsect1"><a name="idm274695372080"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274695370896"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="plymouth.html"><span class="citerefentry"><span class="refentrytitle">plymouth</span>(8)</span></a>,
diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
index 563f9d5d61..8af328dcfa 100644
--- a/man/systemd-ask-password.xml
+++ b/man/systemd-ask-password.xml
@@ -90,7 +90,7 @@
url="http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents">systemd
Password Agent Specification</ulink>.</para>
- <para>If a password is queried on a TTY the user may
+ <para>If a password is queried on a TTY, the user may
press TAB to hide the asterisks normally shown for
each character typed. Pressing Backspace as first key
achieves the same effect.</para>
@@ -145,7 +145,7 @@
<varlistentry>
<term><option>--accept-cached</option></term>
- <listitem><para>If passed accept
+ <listitem><para>If passed, accept
cached passwords, i.e. passwords
previously typed in.</para></listitem>
</varlistentry>
diff --git a/man/systemd-backlight.8 b/man/systemd-backlight.8
new file mode 100644
index 0000000000..b38f121075
--- /dev/null
+++ b/man/systemd-backlight.8
@@ -0,0 +1 @@
+.so man8/systemd-backlight@.service.8
diff --git a/man/systemd-backlight.html b/man/systemd-backlight.html
new file mode 100644
index 0000000000..925e388d30
--- /dev/null
+++ b/man/systemd-backlight.html
@@ -0,0 +1,30 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-backlight@.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-backlight@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-backlight@.service, systemd-backlight — Load and save the display backlight brightness at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-backlight@.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-backlight</code></p></div><div class="refsect1"><a name="idm274676001888"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-backlight@.service</code>
+ is a service that restores the display backlight
+ brightness at early-boot and saves it at shutdown. On
+ disk, the backlight brightness is stored in
+ <code class="filename">/var/lib/backlight/</code>. Note that by
+ default, only firmware backlight devices are
+ saved/restored.</p></div><div class="refsect1"><a name="idm274675052752"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
+ </p></div></div></body></html>
diff --git a/man/systemd-backlight@.service.8 b/man/systemd-backlight@.service.8
new file mode 100644
index 0000000000..38c251753a
--- /dev/null
+++ b/man/systemd-backlight@.service.8
@@ -0,0 +1,36 @@
+'\" t
+.TH "SYSTEMD\-BACKLIGHT@\&.SERVICE" "8" "" "systemd 208" "systemd-backlight@.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-backlight@.service, systemd-backlight \- Load and save the display backlight brightness at boot and shutdown
+.SH "SYNOPSIS"
+.PP
+systemd\-backlight@\&.service
+.PP
+/usr/lib/systemd/systemd\-backlight
+.SH "DESCRIPTION"
+.PP
+systemd\-backlight@\&.service
+is a service that restores the display backlight brightness at early\-boot and saves it at shutdown\&. On disk, the backlight brightness is stored in
+/var/lib/backlight/\&. Note that by default, only firmware backlight devices are saved/restored\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1)
diff --git a/man/systemd-backlight@.service.html b/man/systemd-backlight@.service.html
new file mode 100644
index 0000000000..925e388d30
--- /dev/null
+++ b/man/systemd-backlight@.service.html
@@ -0,0 +1,30 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-backlight@.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-backlight@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-backlight@.service, systemd-backlight — Load and save the display backlight brightness at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-backlight@.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-backlight</code></p></div><div class="refsect1"><a name="idm274676001888"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-backlight@.service</code>
+ is a service that restores the display backlight
+ brightness at early-boot and saves it at shutdown. On
+ disk, the backlight brightness is stored in
+ <code class="filename">/var/lib/backlight/</code>. Note that by
+ default, only firmware backlight devices are
+ saved/restored.</p></div><div class="refsect1"><a name="idm274675052752"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
+ </p></div></div></body></html>
diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml
new file mode 100644
index 0000000000..2b73625e91
--- /dev/null
+++ b/man/systemd-backlight@.service.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!--
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+<refentry id="systemd-backlight@.service" conditional='ENABLE_BACKLIGHT'>
+
+ <refentryinfo>
+ <title>systemd-backlight@.service</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd-backlight@.service</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd-backlight@.service</refname>
+ <refname>systemd-backlight</refname>
+ <refpurpose>Load and save the display backlight brightness at boot and shutdown</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename>systemd-backlight@.service</filename></para>
+ <para><filename>/usr/lib/systemd/systemd-backlight</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><filename>systemd-backlight@.service</filename>
+ is a service that restores the display backlight
+ brightness at early-boot and saves it at shutdown. On
+ disk, the backlight brightness is stored in
+ <filename>/var/lib/backlight/</filename>. Note that by
+ default, only firmware backlight devices are
+ saved/restored.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd-binfmt.8 b/man/systemd-binfmt.8
new file mode 100644
index 0000000000..a6707d726e
--- /dev/null
+++ b/man/systemd-binfmt.8
@@ -0,0 +1 @@
+.so man8/systemd-binfmt.service.8
diff --git a/man/systemd-binfmt.html b/man/systemd-binfmt.html
index f58fc8966e..f7b7be4366 100644
--- a/man/systemd-binfmt.html
+++ b/man/systemd-binfmt.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-binfmt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-binfmt.service, systemd-binfmt — Configure additional binary formats for executables at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-binfmt.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-binfmt</code></p></div><div class="refsect1"><a name="idm259787146160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-binfmt.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-binfmt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-binfmt.service, systemd-binfmt — Configure additional binary formats for executables at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-binfmt.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-binfmt</code></p></div><div class="refsect1"><a name="idm274685525088"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-binfmt.service</code> is
an early-boot service that registers additional binary
formats for executables in the kernel.</p><p>See
<a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259783599216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ service.</p></div><div class="refsect1"><a name="idm274687545056"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>,
<a href="wine.html"><span class="citerefentry"><span class="refentrytitle">wine</span>(8)</span></a>
diff --git a/man/systemd-binfmt.service.8 b/man/systemd-binfmt.service.8
new file mode 100644
index 0000000000..e2ad218d87
--- /dev/null
+++ b/man/systemd-binfmt.service.8
@@ -0,0 +1,41 @@
+'\" t
+.TH "SYSTEMD\-BINFMT\&.SERVICE" "8" "" "systemd 208" "systemd-binfmt.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-binfmt.service, systemd-binfmt \- Configure additional binary formats for executables at boot
+.SH "SYNOPSIS"
+.PP
+systemd\-binfmt\&.service
+.PP
+/usr/lib/systemd/systemd\-binfmt
+.SH "DESCRIPTION"
+.PP
+systemd\-binfmt\&.service
+is an early\-boot service that registers additional binary formats for executables in the kernel\&.
+.PP
+See
+\fBbinfmt.d\fR(5)
+for information about the configuration of this service\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBbinfmt.d\fR(5),
+\fBwine\fR(8)
diff --git a/man/systemd-binfmt.service.html b/man/systemd-binfmt.service.html
index f58fc8966e..f7b7be4366 100644
--- a/man/systemd-binfmt.service.html
+++ b/man/systemd-binfmt.service.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-binfmt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-binfmt.service, systemd-binfmt — Configure additional binary formats for executables at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-binfmt.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-binfmt</code></p></div><div class="refsect1"><a name="idm259787146160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-binfmt.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-binfmt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-binfmt.service, systemd-binfmt — Configure additional binary formats for executables at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-binfmt.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-binfmt</code></p></div><div class="refsect1"><a name="idm274685525088"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-binfmt.service</code> is
an early-boot service that registers additional binary
formats for executables in the kernel.</p><p>See
<a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259783599216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ service.</p></div><div class="refsect1"><a name="idm274687545056"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>,
<a href="wine.html"><span class="citerefentry"><span class="refentrytitle">wine</span>(8)</span></a>
diff --git a/man/systemd-bootchart.1 b/man/systemd-bootchart.1
new file mode 100644
index 0000000000..a4e6cfbedb
--- /dev/null
+++ b/man/systemd-bootchart.1
@@ -0,0 +1,184 @@
+'\" t
+.TH "SYSTEMD\-BOOTCHART" "1" "" "systemd 208" "systemd-bootchart"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-bootchart \- Boot performance graphing tool
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-bootchart\fR
+is a tool, usually run at system startup, that collects the CPU load, disk load, memory usage, as well as per\-process information from a running system\&. Collected results are output as an SVG graph\&. Normally, systemd\-bootchart is invoked by the kernel by passing
+\fBinit=\fR\fB/usr/lib/systemd/systemd\-bootchart\fR
+on the kernel commandline\&. systemd\-bootchart will then fork the real init off to resume normal system startup, while monitoring and logging startup information in the background\&.
+.PP
+After collecting a certain amount of data (usually 15\-30 seconds, default 20 s) the logging stops and a graph is generated from the logged information\&. This graph contains vital clues as to which resources are being used, in which order, and where possible problems exist in the startup sequence of the system\&. It is essentially a more detailed version of the
+\fBsystemd\-analyze\fR\fBplot\fR
+function\&.
+.PP
+Of course, bootchart can also be used at any moment in time to collect and graph some data for an amount of time\&. It is recommended to use the
+\fB\-\-rel\fR
+switch in this case\&.
+.PP
+Bootchart does not require root privileges, and will happily run as a normal user\&.
+.PP
+Bootchart graphs are by default written time\-stamped in
+/run/log
+and saved to the journal with
+\fIMESSAGE_ID=9f26aa562cf440c2b16c773d0479b518\fR\&. Journal field
+\fIBOOTCHART=\fR
+contains the bootchart in SVG format\&.
+.SH "INVOCATION"
+.PP
+\fBsystemd\-bootchart\fR
+can be invoked in several different ways:
+.PP
+\fIKernel invocation\fR
+.RS 4
+The kernel can invoke
+\fBsystemd\-bootchart\fR
+instead of the init process\&. In turn,
+\fBsystemd\-bootchart\fR
+will invoke
+\fB/sbin/init\fR\&.
+.RE
+.PP
+\fIStarted as a standalone program\fR
+.RS 4
+One can execute
+\fBsystemd\-bootchart\fR
+as normal application from the commandline\&. In this mode it is highly recommended to pass the
+\fB\-r\fR
+flag in order to not graph the time elapsed since boot and before systemd\-bootchart was started, as it may result in extremely large graphs\&.
+.RE
+.SH "OPTIONS"
+.PP
+These options can also be set in the
+/etc/systemd/bootchart\&.conf
+file\&. See
+\fBbootchart.conf\fR(5)\&.
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-sample \fR\fB\fIN\fR\fR
+.RS 4
+Specify the number of samples,
+\fIN\fR, to record\&. Samples will be recorded at intervals defined with
+\fB\-\-freq\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-freq \fR\fB\fIf\fR\fR
+.RS 4
+Specify the sample log frequency, a positive real
+\fIf\fR, in Hz\&. Most systems can cope with values up to 25\-50 without creating too much overhead\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-rel\fR
+.RS 4
+Use relative times instead of absolute times\&. This is useful for using bootchart at post\-boot time to profile an already booted system\&. Without this option the graph would become extremely large\&. If set, the horizontal axis starts at the first recorded sample instead of time 0\&.0\&.
+.RE
+.PP
+\fB\-F\fR, \fB\-\-no\-filter\fR
+.RS 4
+Disable filtering of tasks that did not contribute significantly to the boot\&. Processes that are too short\-lived (only seen in one sample) or that do not consume any significant CPU time (less than 0\&.001 s) will not be displayed in the output graph\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-cmdline\fR
+.RS 4
+Display the full command line with arguments of processes, instead of only the process name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-output \fR\fB\fIpath\fR\fR
+.RS 4
+Specify the output directory for the graphs\&. By default, bootchart writes the graphs to
+/run/log\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-init \fR\fB\fIpath\fR\fR
+.RS 4
+Use this init binary\&. Defaults to
+\fB/sbin/init\fR\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-pss\fR
+.RS 4
+Enable logging and graphing of processes\*(Aq PSS (Proportional Set Size) memory consumption\&. See
+filesystems/proc\&.txt
+in the kernel documentation for an explanation of this field\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-entropy\fR
+.RS 4
+Enable logging and graphing of the kernel random entropy pool size\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-scale\-x \fR\fB\fIN\fR\fR
+.RS 4
+Horizontal scaling factor for all variable graph components\&.
+.RE
+.PP
+\fB\-y\fR, \fB\-\-scale\-y \fR\fB\fIN\fR\fR
+.RS 4
+Vertical scaling factor for all variable graph components\&.
+.RE
+.SH "OUTPUT"
+.PP
+\fBsystemd\-bootchart\fR
+generates SVG graphs\&. In order to render those on a graphical display any SVG capable viewer can be used\&. It should be noted that the SVG render engines in most browsers (including Chrome and Firefox) are many times faster than dedicated graphical applications like Gimp and Inkscape\&. Just point your browser at
+\m[blue]\fB\%file:///run/log/\fR\m[]!
+.SH "HISTORY"
+.PP
+This version of bootchart was implemented from scratch, but is inspired by former bootchart incantations:
+.PP
+\fIOriginal bash\fR
+.RS 4
+The original bash/shell code implemented bootchart\&. This version created a compressed tarball for processing with external applications\&. This version did not graph anything, only generated data\&.
+.RE
+.PP
+\fIUbuntu C Implementation\fR
+.RS 4
+This version replaced the shell version with a fast and efficient data logger, but also did not graph the data\&.
+.RE
+.PP
+\fIJava bootchart\fR
+.RS 4
+This was the original graphing application for charting the data, written in java\&.
+.RE
+.PP
+\fIpybootchartgui\&.py\fR
+.RS 4
+pybootchart created a graph from the data collected by either the bash or C version\&.
+.RE
+.PP
+The version of bootchart you are using now combines both the data collection and the charting into a single application, making it more efficient and simpler\&. There are no longer any timing issues with the data collector and the grapher, as the graphing cannot be run until the data has been collected\&. Also, the data kept in memory is reduced to the absolute minimum needed\&.
+.SH "SEE ALSO"
+.PP
+\fBbootchart.conf\fR(5)
+.SH "BUGS"
+.PP
+systemd\-bootchart does not get the model information for the hard drive unless the root device is specified with
+root=/dev/sdxY\&. Using UUIDs or PARTUUIDs will boot fine, but the hard drive model will not be added to the chart\&.
+.PP
+For bugs, please contact the author and current maintainer:
+.RS 4
+Auke Kok <auke\-jan\&.h\&.kok@intel\&.com>
+.RE
diff --git a/man/systemd-bootchart.html b/man/systemd-bootchart.html
index 7e2938231f..1a0ae7c089 100644
--- a/man/systemd-bootchart.html
+++ b/man/systemd-bootchart.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-bootchart"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-bootchart — Boot performance graphing tool</p></div><div class="refsect1"><a name="idm259795713408"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-bootchart"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-bootchart — Boot performance graphing tool</p></div><div class="refsect1"><a name="idm274688710768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>
<span class="command"><strong>systemd-bootchart</strong></span> is a
tool, usually run at system startup, that
collects the CPU load, disk load, memory
@@ -59,7 +59,7 @@
<code class="varname">MESSAGE_ID=9f26aa562cf440c2b16c773d0479b518</code>.
Journal field <code class="varname">BOOTCHART=</code> contains
the bootchart in SVG format.
- </p></div><div class="refsect1"><a name="idm259791900416"></a><h2 id="Invocation">Invocation<a class="headerlink" title="Permalink to this headline" href="#Invocation">¶</a></h2><p><span class="command"><strong>systemd-bootchart</strong></span> can be invoked in several different ways:</p><div class="variablelist"><dl class="variablelist"><dt id="Kernel invocation"><span class="term"><span class="emphasis"><em>Kernel invocation</em></span></span><a class="headerlink" title="Permalink to this term" href="#Kernel%20invocation">¶</a></dt><dd><p>The kernel can invoke
+ </p></div><div class="refsect1"><a name="idm274688576112"></a><h2 id="Invocation">Invocation<a class="headerlink" title="Permalink to this headline" href="#Invocation">¶</a></h2><p><span class="command"><strong>systemd-bootchart</strong></span> can be invoked in several different ways:</p><div class="variablelist"><dl class="variablelist"><dt id="Kernel invocation"><span class="term"><span class="emphasis"><em>Kernel invocation</em></span></span><a class="headerlink" title="Permalink to this term" href="#Kernel%20invocation">¶</a></dt><dd><p>The kernel can invoke
<span class="command"><strong>systemd-bootchart</strong></span>
instead of the init process. In turn,
<span class="command"><strong>systemd-bootchart</strong></span>
@@ -73,7 +73,7 @@
not graph the time elapsed since boot
and before systemd-bootchart was
started, as it may result in extremely
- large graphs. </p></dd></dl></div></div><div class="refsect1"><a name="idm259795847344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>These options can also be set in the
+ large graphs. </p></dd></dl></div></div><div class="refsect1"><a name="idm274688768400"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>These options can also be set in the
<code class="filename">/etc/systemd/bootchart.conf</code>
file. See
<a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>.
@@ -96,7 +96,7 @@
0.001 s) will not be displayed in the output graph.
</p></dd><dt id="-C"><span class="term"><code class="option">-C</code>, </span><span class="term"><code class="option">--cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#-C">¶</a></dt><dd><p>Display the full command line with arguments of processes,
instead of only the process name.
- </p></dd><dt id="-o"><span class="term"><code class="option">-o</code>, </span><span class="term"><code class="option">--output <em class="replaceable"><code>path</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p>Specify the output folder for the
+ </p></dd><dt id="-o"><span class="term"><code class="option">-o</code>, </span><span class="term"><code class="option">--output <em class="replaceable"><code>path</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p>Specify the output directory for the
graphs. By default, bootchart writes the graphs to
<code class="filename">/run/log</code>.</p></dd><dt id="-i"><span class="term"><code class="option">-i</code>, </span><span class="term"><code class="option">--init <em class="replaceable"><code>path</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-i">¶</a></dt><dd><p>Use this init binary. Defaults to
<span class="command"><strong>/sbin/init</strong></span>.
@@ -108,12 +108,12 @@
</p></dd><dt id="-e"><span class="term"><code class="option">-e</code>, </span><span class="term"><code class="option">--entropy</code></span><a class="headerlink" title="Permalink to this term" href="#-e">¶</a></dt><dd><p>Enable logging and graphing
of the kernel random entropy pool size.</p></dd><dt id="-x"><span class="term"><code class="option">-x</code>, </span><span class="term"><code class="option">--scale-x <em class="replaceable"><code>N</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-x">¶</a></dt><dd><p>Horizontal scaling factor for all variable
graph components.</p></dd><dt id="-y"><span class="term"><code class="option">-y</code>, </span><span class="term"><code class="option">--scale-y <em class="replaceable"><code>N</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-y">¶</a></dt><dd><p>Vertical scaling factor for all variable
- graph components.</p></dd></dl></div></div><div class="refsect1"><a name="idm259795805600"></a><h2 id="Output">Output<a class="headerlink" title="Permalink to this headline" href="#Output">¶</a></h2><p><span class="command"><strong>systemd-bootchart</strong></span> generates SVG graphs. In order to render those
+ graph components.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688727120"></a><h2 id="Output">Output<a class="headerlink" title="Permalink to this headline" href="#Output">¶</a></h2><p><span class="command"><strong>systemd-bootchart</strong></span> generates SVG graphs. In order to render those
on a graphical display any SVG capable viewer can be used. It should be
noted that the SVG render engines in most browsers (including Chrome
and Firefox) are many times faster than dedicated graphical applications
like Gimp and Inkscape. Just point your browser at <a class="ulink" href="file:///run/log/" target="_top">file:///run/log/</a>!
- </p></div><div class="refsect1"><a name="idm259795802896"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p>This version of bootchart was implemented from
+ </p></div><div class="refsect1"><a name="idm274688724416"></a><h2 id="History">History<a class="headerlink" title="Permalink to this headline" href="#History">¶</a></h2><p>This version of bootchart was implemented from
scratch, but is inspired by former bootchart
incantations:</p><div class="variablelist"><dl class="variablelist"><dt id="Original bash"><span class="term"><span class="emphasis"><em>Original bash</em></span></span><a class="headerlink" title="Permalink to this term" href="#Original%20bash">¶</a></dt><dd><p>The original bash/shell code implemented
bootchart. This version created a compressed tarball for
@@ -127,9 +127,9 @@
efficient and simpler. There are no longer any timing issues with the data
collector and the grapher, as the graphing cannot be run until the data
has been collected. Also, the data kept in memory is reduced to the absolute
- minimum needed.</p></div><div class="refsect1"><a name="idm259795913728"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ minimum needed.</p></div><div class="refsect1"><a name="idm274688834880"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>
- </p></div><div class="refsect1"><a name="idm259795911744"></a><h2 id="Bugs">Bugs<a class="headerlink" title="Permalink to this headline" href="#Bugs">¶</a></h2><p>systemd-bootchart does not get the model information for the hard drive
+ </p></div><div class="refsect1"><a name="idm274688832896"></a><h2 id="Bugs">Bugs<a class="headerlink" title="Permalink to this headline" href="#Bugs">¶</a></h2><p>systemd-bootchart does not get the model information for the hard drive
unless the root device is specified with <code class="code">root=/dev/sdxY</code>. Using
UUIDs or PARTUUIDs will boot fine, but the hard drive model will not be
added to the chart.</p><p>For bugs, please contact the author and current maintainer:</p><table border="0" summary="Simple list" class="simplelist"><tr><td>Auke Kok <code class="email">&lt;<a class="email" href="mailto:auke-jan.h.kok@intel.com">auke-jan.h.kok@intel.com</a>&gt;</code></td></tr></table></div></div></body></html>
diff --git a/man/systemd-bootchart.xml b/man/systemd-bootchart.xml
index 8de4c69a2d..ae432b563f 100644
--- a/man/systemd-bootchart.xml
+++ b/man/systemd-bootchart.xml
@@ -203,7 +203,7 @@
<varlistentry>
<term><option>-o</option></term>
<term><option>--output <replaceable>path</replaceable></option></term>
- <listitem><para>Specify the output folder for the
+ <listitem><para>Specify the output directory for the
graphs. By default, bootchart writes the graphs to
<filename>/run/log</filename>.</para></listitem>
</varlistentry>
diff --git a/man/systemd-cat.1 b/man/systemd-cat.1
new file mode 100644
index 0000000000..24a25780bd
--- /dev/null
+++ b/man/systemd-cat.1
@@ -0,0 +1,123 @@
+'\" t
+.TH "SYSTEMD\-CAT" "1" "" "systemd 208" "systemd-cat"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-cat \- Connect a pipeline or program\*(Aqs output with the journal
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-cat\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[COMMAND]\fR\fB\ \fR\fB[ARGUMENTS...]\fR\ 'u
+\fBsystemd\-cat \fR\fB[OPTIONS...]\fR\fB \fR\fB[COMMAND]\fR\fB \fR\fB[ARGUMENTS...]\fR
+.HP \w'\fBsystemd\-cat\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBsystemd\-cat \fR\fB[OPTIONS...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-cat\fR
+may be used to connect STDOUT and STDERR of a process with the journal, or as a filter tool in a shell pipeline to pass the output the previous pipeline element generates to the journal\&.
+.PP
+If no parameter is passed,
+\fBsystemd\-cat\fR
+will write everything it reads from standard input (STDIN) to the journal\&.
+.PP
+If parameters are passed, they are executed as command line with standard output (STDOUT) and standard error output (STDERR) connected to the journal, so that all it writes is stored in the journal\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-identifier=\fR
+.RS 4
+Specify a short string that is used to identify the logging tool\&. If not specified, no identification string is written to the journal\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-priority=\fR
+.RS 4
+Specify the default priority level for the logged messages\&. Pass one of
+"emerg",
+"alert",
+"crit",
+"err",
+"warning",
+"notice",
+"info",
+"debug", or a value between 0 and 7 (corresponding to the same named levels)\&. These priority values are the same as defined by
+\fBsyslog\fR(3)\&. Defaults to
+"info"\&. Note that this simply controls the default, individual lines may be logged with different levels if they are prefixed accordingly\&. For details see
+\fB\-\-level\-prefix=\fR
+below\&.
+.RE
+.PP
+\fB\-\-level\-prefix=\fR
+.RS 4
+Controls whether lines read are parsed for syslog priority level prefixes\&. If enabled (the default), a line prefixed with a priority prefix such as
+"<5>"
+is logged at priority 5 ("notice"), and similar for the other priority levels\&. Takes a boolean argument\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "EXAMPLES"
+.PP
+\fBExample\ \&1.\ \&Invoke a program\fR
+.PP
+This calls
+/bin/ls
+with STDOUT/STDERR connected to the journal:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# systemd\-cat ls
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBExample\ \&2.\ \&Usage in a shell pipeline\fR
+.PP
+This builds a shell pipeline also invoking
+/bin/ls
+and writes the output it generates to the journal:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# ls | systemd\-cat
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Even though the two examples have very similar effects the first is preferable since only one process is running at a time, and both STDOUT and STDERR are captured while in the second example only STDOUT is captured\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBlogger\fR(1)
diff --git a/man/systemd-cat.html b/man/systemd-cat.html
index 1d9ba543a4..2123541c91 100644
--- a/man/systemd-cat.html
+++ b/man/systemd-cat.html
@@ -19,37 +19,37 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-cat"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cat — Connect a pipeline or program's output with the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-cat [OPTIONS...] [COMMAND] [ARGUMENTS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-cat [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm259782951152"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-cat</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-cat"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cat — Connect a pipeline or program's output with the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-cat [OPTIONS...] [COMMAND] [ARGUMENTS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-cat [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm274700570000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-cat</strong></span> may be used to
connect STDOUT and STDERR of a process with the
journal, or as a filter tool in a shell pipeline to
pass the output the previous pipeline element
- generates to the journal.</p><p>If no parameter is passed
+ generates to the journal.</p><p>If no parameter is passed,
<span class="command"><strong>systemd-cat</strong></span> will write
- everything it reads from standard input (STDIN) to the journal.</p><p>If parameters are passed they are executed as
+ everything it reads from standard input (STDIN) to the journal.</p><p>If parameters are passed, they are executed as
command line with standard output (STDOUT) and standard
error output (STDERR) connected to the journal, so
- that all it writes is stored in the journal.</p></div><div class="refsect1"><a name="idm259782947312"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ that all it writes is stored in the journal.</p></div><div class="refsect1"><a name="idm274700566160"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="-t"><span class="term"><code class="option">-t</code>, </span><span class="term"><code class="option">--identifier=</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p>Specify a short string
that is used to identify the logging
- tool. If not specified no identifying
+ tool. If not specified, no identification
string is written to the journal.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--priority=</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>Specify the default
priority level for the logged
messages. Pass one of
- <code class="literal">emerg</code>,
- <code class="literal">alert</code>,
- <code class="literal">crit</code>,
- <code class="literal">err</code>,
- <code class="literal">warning</code>,
- <code class="literal">notice</code>,
- <code class="literal">info</code>,
- <code class="literal">debug</code>, or a
+ "<code class="literal">emerg</code>",
+ "<code class="literal">alert</code>",
+ "<code class="literal">crit</code>",
+ "<code class="literal">err</code>",
+ "<code class="literal">warning</code>",
+ "<code class="literal">notice</code>",
+ "<code class="literal">info</code>",
+ "<code class="literal">debug</code>", or a
value between 0 and 7 (corresponding
to the same named levels). These
priority values are the same as
defined by
<a href="syslog.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>. Defaults
- to <code class="literal">info</code>. Note that
+ to "<code class="literal">info</code>". Note that
this simply controls the default,
individual lines may be logged with
different levels if they are prefixed
@@ -58,24 +58,24 @@
below.</p></dd><dt id="--level-prefix="><span class="term"><code class="option">--level-prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--level-prefix=">¶</a></dt><dd><p>Controls whether lines
read are parsed for syslog priority
level prefixes. If enabled (the
- default) a line prefixed with a
+ default), a line prefixed with a
priority prefix such as
- <code class="literal">&lt;5&gt;</code> is logged
+ "<code class="literal">&lt;5&gt;</code>" is logged
at priority 5
- (<code class="literal">notice</code>), and
+ ("<code class="literal">notice</code>"), and
similar for the other priority
levels. Takes a boolean
- argument.</p></dd></dl></div></div><div class="refsect1"><a name="idm259786878736"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259786877552"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm259786876880"></a><p class="title"><b>Example 1. Invoke a program</b></p><div class="example-contents"><p>This calls <code class="filename">/bin/ls</code>
+ argument.</p></dd></dl></div></div><div class="refsect1"><a name="idm274704441952"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274704440768"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><div class="example"><a name="idm274704440096"></a><p class="title"><b>Example 1. Invoke a program</b></p><div class="example-contents"><p>This calls <code class="filename">/bin/ls</code>
with STDOUT/STDERR connected to the
- journal:</p><pre class="programlisting"># systemd-cat ls</pre></div></div><br class="example-break"><div class="example"><a name="idm259786866608"></a><p class="title"><b>Example 2. Usage in a shell pipeline</b></p><div class="example-contents"><p>This builds a shell pipeline also
+ journal:</p><pre class="programlisting"># systemd-cat ls</pre></div></div><br class="example-break"><div class="example"><a name="idm274704429952"></a><p class="title"><b>Example 2. Usage in a shell pipeline</b></p><div class="example-contents"><p>This builds a shell pipeline also
invoking <code class="filename">/bin/ls</code> and
writes the output it generates to the
journal:</p><pre class="programlisting"># ls | systemd-cat</pre></div></div><br class="example-break"><p>Even though the two examples have very similar
effects the first is preferable since only one process
is running at a time, and both STDOUT and STDERR are
captured while in the second example only STDOUT is
- captured.</p></div><div class="refsect1"><a name="idm259786863104"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ captured.</p></div><div class="refsect1"><a name="idm274704426448"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="logger.html"><span class="citerefentry"><span class="refentrytitle">logger</span>(1)</span></a>
diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml
index 876ebfa3cc..ffb1dfd50b 100644
--- a/man/systemd-cat.xml
+++ b/man/systemd-cat.xml
@@ -65,11 +65,11 @@
pass the output the previous pipeline element
generates to the journal.</para>
- <para>If no parameter is passed
+ <para>If no parameter is passed,
<command>systemd-cat</command> will write
everything it reads from standard input (STDIN) to the journal.</para>
- <para>If parameters are passed they are executed as
+ <para>If parameters are passed, they are executed as
command line with standard output (STDOUT) and standard
error output (STDERR) connected to the journal, so
that all it writes is stored in the journal.</para>
@@ -102,7 +102,7 @@
<listitem><para>Specify a short string
that is used to identify the logging
- tool. If not specified no identifying
+ tool. If not specified, no identification
string is written to the journal.</para></listitem>
</varlistentry>
@@ -141,7 +141,7 @@
<listitem><para>Controls whether lines
read are parsed for syslog priority
level prefixes. If enabled (the
- default) a line prefixed with a
+ default), a line prefixed with a
priority prefix such as
<literal>&lt;5&gt;</literal> is logged
at priority 5
diff --git a/man/systemd-cgls.1 b/man/systemd-cgls.1
new file mode 100644
index 0000000000..5d2a326313
--- /dev/null
+++ b/man/systemd-cgls.1
@@ -0,0 +1,82 @@
+'\" t
+.TH "SYSTEMD\-CGLS" "1" "" "systemd 208" "systemd-cgls"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-cgls \- Recursively show control group contents
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-cgls\fR\ 'u
+\fBsystemd\-cgls\fR [OPTIONS...] [CGROUP...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-cgls\fR
+recursively shows the contents of the selected Linux control group hierarchy in a tree\&. If arguments are specified, shows all member processes of the specified control groups plus all their subgroups and their members\&. The control groups may either be specified by their full file paths or are assumed in the systemd control group hierarchy\&. If no argument is specified and the current working directory is beneath the control group mount point
+/sys/fs/cgroup, shows the contents of the control group the working directory refers to\&. Otherwise, the full systemd control group hierarchy is shown\&.
+.PP
+By default, empty control groups are not shown\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-\-all\fR
+.RS 4
+Do not hide empty control groups in the output\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-full\fR
+.RS 4
+Do not ellipsize process tree members\&.
+.RE
+.PP
+\fB\-k\fR
+.RS 4
+Include kernel threads in output\&.
+.RE
+.PP
+\fB\-m \fR\fB\fIMACHINE\fR\fR, \fB\-\-machine=\fR\fB\fIMACHINE\fR\fR
+.RS 4
+Limit control groups shown to the part corresponding to the container
+\fIMACHINE\fR\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-nspawn\fR(1),
+\fBps\fR(1)
diff --git a/man/systemd-cgls.html b/man/systemd-cgls.html
index 479f9b2d22..3b8b94bf26 100644
--- a/man/systemd-cgls.html
+++ b/man/systemd-cgls.html
@@ -19,31 +19,31 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-cgls"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cgls — Recursively show control group contents</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-cgls</code> [OPTIONS...] [CGROUP...]</p></div></div><div class="refsect1"><a name="idm259795324432"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-cgls</strong></span> recursively
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-cgls"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cgls — Recursively show control group contents</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-cgls</code> [OPTIONS...] [CGROUP...]</p></div></div><div class="refsect1"><a name="idm274683189440"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-cgls</strong></span> recursively
shows the contents of the selected Linux control group
- hierarchy in a tree. If arguments are specified shows
+ hierarchy in a tree. If arguments are specified, shows
all member processes of the specified control groups
plus all their subgroups and their members. The
control groups may either be specified by their full
file paths or are assumed in the systemd control group
hierarchy. If no argument is specified and the current
working directory is beneath the control group mount
- point <code class="filename">/sys/fs/cgroup</code> shows the contents
+ point <code class="filename">/sys/fs/cgroup</code>, shows the contents
of the control group the working directory refers
- to. Otherwise the full systemd control group hierarchy
- is shown.</p><p>By default empty control groups are not
- shown.</p></div><div class="refsect1"><a name="idm259795320816"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ to. Otherwise, the full systemd control group hierarchy
+ is shown.</p><p>By default, empty control groups are not
+ shown.</p></div><div class="refsect1"><a name="idm274683185808"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
- pager.</p></dd><dt id="--all"><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#--all">¶</a></dt><dd><p>Don't hide empty
+ pager.</p></dd><dt id="--all"><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#--all">¶</a></dt><dd><p>Do not hide empty
control groups in the
- output.</p></dd><dt id="--full"><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#--full">¶</a></dt><dd><p>Do not ellipsize cgroup
- members.</p></dd><dt id="-k"><span class="term"><code class="option">-k</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p>Include kernel
- threads in output.</p></dd><dt id="-m MACHINE"><span class="term"><code class="option">-m <em class="replaceable"><code>MACHINE</code></em></code>, </span><span class="term"><code class="option">--machine=<em class="replaceable"><code>MACHINE</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-m%20MACHINE">¶</a></dt><dd><p>Limit cgroups shown to
+ output.</p></dd><dt id="-l"><span class="term"><code class="option">-l</code>, </span><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p>Do not ellipsize
+ process tree members.</p></dd><dt id="-k"><span class="term"><code class="option">-k</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p>Include kernel
+ threads in output.</p></dd><dt id="-m MACHINE"><span class="term"><code class="option">-m <em class="replaceable"><code>MACHINE</code></em></code>, </span><span class="term"><code class="option">--machine=<em class="replaceable"><code>MACHINE</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#-m%20MACHINE">¶</a></dt><dd><p>Limit control groups shown to
the part corresponding to the
container <em class="replaceable"><code>MACHINE</code></em>.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259795382848"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259795381664"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274687068288"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274687067104"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>,
diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
index 6249d05a8c..432706bcbc 100644
--- a/man/systemd-cgls.xml
+++ b/man/systemd-cgls.xml
@@ -60,19 +60,19 @@
<para><command>systemd-cgls</command> recursively
shows the contents of the selected Linux control group
- hierarchy in a tree. If arguments are specified shows
+ hierarchy in a tree. If arguments are specified, shows
all member processes of the specified control groups
plus all their subgroups and their members. The
control groups may either be specified by their full
file paths or are assumed in the systemd control group
hierarchy. If no argument is specified and the current
working directory is beneath the control group mount
- point <filename>/sys/fs/cgroup</filename> shows the contents
+ point <filename>/sys/fs/cgroup</filename>, shows the contents
of the control group the working directory refers
- to. Otherwise the full systemd control group hierarchy
+ to. Otherwise, the full systemd control group hierarchy
is shown.</para>
- <para>By default empty control groups are not
+ <para>By default, empty control groups are not
shown.</para>
</refsect1>
@@ -107,16 +107,17 @@
<varlistentry>
<term><option>--all</option></term>
- <listitem><para>Don't hide empty
+ <listitem><para>Do not hide empty
control groups in the
output.</para></listitem>
</varlistentry>
<varlistentry>
+ <term><option>-l</option></term>
<term><option>--full</option></term>
- <listitem><para>Do not ellipsize cgroup
- members.</para>
+ <listitem><para>Do not ellipsize
+ process tree members.</para>
</listitem>
</varlistentry>
@@ -131,7 +132,7 @@
<term><option>-m <replaceable>MACHINE</replaceable></option></term>
<term><option>--machine=<replaceable>MACHINE</replaceable></option></term>
- <listitem><para>Limit cgroups shown to
+ <listitem><para>Limit control groups shown to
the part corresponding to the
container <replaceable>MACHINE</replaceable>.
</para></listitem>
diff --git a/man/systemd-cgtop.1 b/man/systemd-cgtop.1
new file mode 100644
index 0000000000..095c57e910
--- /dev/null
+++ b/man/systemd-cgtop.1
@@ -0,0 +1,168 @@
+'\" t
+.TH "SYSTEMD\-CGTOP" "1" "" "systemd 208" "systemd-cgtop"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-cgtop \- Show top control groups by their resource usage
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-cgtop\fR\ 'u
+\fBsystemd\-cgtop\fR [OPTIONS...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-cgtop\fR
+shows the top control groups of the local Linux control group hierarchy, ordered by their CPU, memory, or disk I/O load\&. The display is refreshed in regular intervals (by default every 1s), similar in style to
+\fBtop\fR(1)\&. If
+\fBsystemd\-cgtop\fR
+is not connected to a tty, only one iteration is performed and no columns headers are printed\&. This mode is suitable for scripting\&.
+.PP
+Resource usage is only accounted for control groups in the relevant hierarchy, i\&.e\&. CPU usage is only accounted for control groups in the
+"cpuacct"
+hierarchy, memory usage only for those in
+"memory"
+and disk I/O usage for those in
+"blkio"\&. If resource monitoring for these resources is required, it is recommended to add the
+\fICPUAccounting=1\fR,
+\fIMemoryAccounting=1\fR
+and
+\fIBlockIOAccounting=1\fR
+settings in the unit files in question (See
+\fBsystemd.resource-control\fR(5)
+for details)\&.
+.PP
+To emphasize this: unless
+"CPUAccounting=1",
+"MemoryAccounting=1"
+and
+"BlockIOAccounting=1"
+are enabled for the services in question no resource accounting will be available for system services and the data shown by
+\fBsystemd\-cgtop\fR
+will be incomplete\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a version string and exits\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Order by control group path name\&.
+.RE
+.PP
+\fB\-t\fR
+.RS 4
+Order by number of tasks in control group (i\&.e\&. threads and processes)\&.
+.RE
+.PP
+\fB\-c\fR
+.RS 4
+Order by CPU load\&.
+.RE
+.PP
+\fB\-m\fR
+.RS 4
+Order by memory usage\&.
+.RE
+.PP
+\fB\-i\fR
+.RS 4
+Order by disk I/O load\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-batch\fR
+.RS 4
+Run in "batch" mode: do not accept input and run until the iteration limit set with
+\fB\-\-iterations\fR
+is exhausted or until killed\&. This mode could be useful for sending output from
+\fBsystemd\-cgtop\fR
+to other programs or to a file\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-iterations=\fR
+.RS 4
+Perform only this many iterations\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delay=\fR
+.RS 4
+Specify refresh delay in seconds (or if one of
+"ms",
+"us",
+"min"
+is specified as unit in this time unit)\&.
+.RE
+.PP
+\fB\-\-depth=\fR
+.RS 4
+Maximum control group tree traversal depth\&. Specifies how deep
+\fBsystemd\-cgtop\fR
+shall traverse the control group hierarchies\&. If 0 is specified, only the root group is monitored\&. For 1, only the first level of control groups is monitored, and so on\&. Defaults to 3\&.
+.RE
+.SH "KEYS"
+.PP
+\fBsystemd\-cgtop\fR
+is an interactive tool and may be controlled via user input using the following keys:
+.PP
+h
+.RS 4
+Shows a short help text\&.
+.RE
+.PP
+SPACE
+.RS 4
+Immediately refresh output\&.
+.RE
+.PP
+q
+.RS 4
+Terminate the program\&.
+.RE
+.PP
+p, t, c, m, i
+.RS 4
+Sort the control groups by path, number of tasks, CPU load, memory usage, or IO load, respectively\&.
+.RE
+.PP
+%
+.RS 4
+Toggle between showing CPU time as time or percentage\&.
+.RE
+.PP
++, \-
+.RS 4
+Increase or decrease refresh delay, respectively\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-cgls\fR(1),
+\fBsystemd.resource-control\fR(5),
+\fBtop\fR(1)
diff --git a/man/systemd-cgtop.html b/man/systemd-cgtop.html
index 7d27df8860..7b2ca01ccc 100644
--- a/man/systemd-cgtop.html
+++ b/man/systemd-cgtop.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-cgtop"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cgtop — Show top control groups by their resource usage</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-cgtop</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm259772793312"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-cgtop</strong></span> shows the top
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-cgtop"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cgtop — Show top control groups by their resource usage</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-cgtop</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm274686307536"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-cgtop</strong></span> shows the top
control groups of the local Linux control group
hierarchy, ordered by their CPU, memory, or disk I/O load. The
display is refreshed in regular intervals (by default
@@ -31,31 +31,24 @@
scripting.</p><p>Resource usage is only accounted for control
groups in the relevant hierarchy, i.e. CPU usage is
only accounted for control groups in the
- <code class="literal">cpuacct</code> hierarchy, memory usage
- only for those in <code class="literal">memory</code> and disk
- I/O usage for those in
- <code class="literal">blkio</code>. <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
- by default places all services in their own control
- group in the <code class="literal">cpuacct</code> hierarchy, but
- not in <code class="literal">memory</code> nor
- <code class="literal">blkio</code>. If resource monitoring for
- these resources is required it is recommended to add
- <code class="literal">blkio</code> and <code class="literal">memory</code>
- to the <code class="varname">DefaultControllers=</code> setting
- in <code class="filename">/etc/systemd/system.conf</code> (see
- <a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>
- for details). Alternatively, it is possible to enable
- resource accounting individually for services, by
- making use of the <code class="varname">ControlGroup=</code>
- option in the unit files (See
- <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
+ "<code class="literal">cpuacct</code>" hierarchy, memory usage
+ only for those in "<code class="literal">memory</code>" and disk
+ I/O usage for those in "<code class="literal">blkio</code>". If
+ resource monitoring for these resources is required,
+ it is recommended to add the
+ <code class="varname">CPUAccounting=1</code>,
+ <code class="varname">MemoryAccounting=1</code> and
+ <code class="varname">BlockIOAccounting=1</code> settings in the
+ unit files in question (See
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>
for details).</p><p>To emphasize this: unless
- <code class="literal">blkio</code> and <code class="literal">memory</code>
- are enabled for the services in question with either
- of the options suggested above no resource accounting
- will be available for system services and the data shown
- by <span class="command"><strong>systemd-cgtop</strong></span> will be
- incomplete.</p></div><div class="refsect1"><a name="idm259772852464"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ "<code class="literal">CPUAccounting=1</code>",
+ "<code class="literal">MemoryAccounting=1</code>" and
+ "<code class="literal">BlockIOAccounting=1</code>" are enabled for
+ the services in question no resource accounting will
+ be available for system services and the data shown by
+ <span class="command"><strong>systemd-cgtop</strong></span> will be
+ incomplete.</p></div><div class="refsect1"><a name="idm274686295344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a version string and
exits.</p></dd><dt id="-p"><span class="term"><code class="option">-p</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p>Order by control group
path name.</p></dd><dt id="-t"><span class="term"><code class="option">-t</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p>Order by number of
@@ -71,19 +64,19 @@
file.</p></dd><dt id="-n"><span class="term"><code class="option">-n</code>, </span><span class="term"><code class="option">--iterations=</code></span><a class="headerlink" title="Permalink to this term" href="#-n">¶</a></dt><dd><p>Perform only this many
iterations.</p></dd><dt id="-d"><span class="term"><code class="option">-d</code>, </span><span class="term"><code class="option">--delay=</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p>Specify refresh delay
in seconds (or if one of
- <code class="literal">ms</code>,
- <code class="literal">us</code>,
- <code class="literal">min</code> is specified as
+ "<code class="literal">ms</code>",
+ "<code class="literal">us</code>",
+ "<code class="literal">min</code>" is specified as
unit in this time
unit).</p></dd><dt id="--depth="><span class="term"><code class="option">--depth=</code></span><a class="headerlink" title="Permalink to this term" href="#--depth=">¶</a></dt><dd><p>Maximum control group
tree traversal depth. Specifies how
deep <span class="command"><strong>systemd-cgtop</strong></span>
shall traverse the control group
- hierarchies. If 0 is specified only
- the root group is monitored, for 1
+ hierarchies. If 0 is specified, only
+ the root group is monitored. For 1,
only the first level of control groups
is monitored, and so on. Defaults to
- 3.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772819696"></a><h2 id="Keys">Keys<a class="headerlink" title="Permalink to this headline" href="#Keys">¶</a></h2><p><span class="command"><strong>systemd-cgtop</strong></span> is an
+ 3.</p></dd></dl></div></div><div class="refsect1"><a name="idm274690160080"></a><h2 id="Keys">Keys<a class="headerlink" title="Permalink to this headline" href="#Keys">¶</a></h2><p><span class="command"><strong>systemd-cgtop</strong></span> is an
interactive tool and may be controlled via user input
using the following keys:</p><div class="variablelist"><dl class="variablelist"><dt id="h"><span class="term">h</span><a class="headerlink" title="Permalink to this term" href="#h">¶</a></dt><dd><p>Shows a short help text.</p></dd><dt id="SPACE"><span class="term">SPACE</span><a class="headerlink" title="Permalink to this term" href="#SPACE">¶</a></dt><dd><p>Immediately refresh output.</p></dd><dt id="q"><span class="term">q</span><a class="headerlink" title="Permalink to this term" href="#q">¶</a></dt><dd><p>Terminate the program.</p></dd><dt id="p"><span class="term">p, </span><span class="term">t, </span><span class="term">c, </span><span class="term">m, </span><span class="term">i</span><a class="headerlink" title="Permalink to this term" href="#p">¶</a></dt><dd><p>Sort the control groups
by path, number of tasks, CPU load,
@@ -91,10 +84,11 @@
load, respectively.</p></dd><dt id="%"><span class="term">%</span><a class="headerlink" title="Permalink to this term" href="#%">¶</a></dt><dd><p>Toggle between showing CPU time as
time or percentage.</p></dd><dt id="+"><span class="term">+, </span><span class="term">-</span><a class="headerlink" title="Permalink to this term" href="#+">¶</a></dt><dd><p>Increase
or decrease refresh
- delay, respectively.</p></dd></dl></div></div><div class="refsect1"><a name="idm259767894624"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259767893472"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ delay, respectively.</p></dd></dl></div></div><div class="refsect1"><a name="idm274690147536"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274690146352"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
<a href="top.html"><span class="citerefentry"><span class="refentrytitle">top</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml
index e765172234..7faedfbfdb 100644
--- a/man/systemd-cgtop.xml
+++ b/man/systemd-cgtop.xml
@@ -73,30 +73,23 @@
only accounted for control groups in the
<literal>cpuacct</literal> hierarchy, memory usage
only for those in <literal>memory</literal> and disk
- I/O usage for those in
- <literal>blkio</literal>. <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
- by default places all services in their own control
- group in the <literal>cpuacct</literal> hierarchy, but
- not in <literal>memory</literal> nor
- <literal>blkio</literal>. If resource monitoring for
- these resources is required it is recommended to add
- <literal>blkio</literal> and <literal>memory</literal>
- to the <varname>DefaultControllers=</varname> setting
- in <filename>/etc/systemd/system.conf</filename> (see
- <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details). Alternatively, it is possible to enable
- resource accounting individually for services, by
- making use of the <varname>ControlGroup=</varname>
- option in the unit files (See
- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ I/O usage for those in <literal>blkio</literal>. If
+ resource monitoring for these resources is required,
+ it is recommended to add the
+ <varname>CPUAccounting=1</varname>,
+ <varname>MemoryAccounting=1</varname> and
+ <varname>BlockIOAccounting=1</varname> settings in the
+ unit files in question (See
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details).</para>
<para>To emphasize this: unless
- <literal>blkio</literal> and <literal>memory</literal>
- are enabled for the services in question with either
- of the options suggested above no resource accounting
- will be available for system services and the data shown
- by <command>systemd-cgtop</command> will be
+ <literal>CPUAccounting=1</literal>,
+ <literal>MemoryAccounting=1</literal> and
+ <literal>BlockIOAccounting=1</literal> are enabled for
+ the services in question no resource accounting will
+ be available for system services and the data shown by
+ <command>systemd-cgtop</command> will be
incomplete.</para>
</refsect1>
@@ -197,8 +190,8 @@
tree traversal depth. Specifies how
deep <command>systemd-cgtop</command>
shall traverse the control group
- hierarchies. If 0 is specified only
- the root group is monitored, for 1
+ hierarchies. If 0 is specified, only
+ the root group is monitored. For 1,
only the first level of control groups
is monitored, and so on. Defaults to
3.</para></listitem>
@@ -281,6 +274,7 @@
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>top</refentrytitle><manvolnum>1</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd-coredumpctl.1 b/man/systemd-coredumpctl.1
new file mode 100644
index 0000000000..bf0a5192e1
--- /dev/null
+++ b/man/systemd-coredumpctl.1
@@ -0,0 +1,118 @@
+'\" t
+.TH "SYSTEMD\-COREDUMPCTL" "1" "" "systemd 208" "systemd-coredumpctl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-coredumpctl \- Retrieve coredumps from the journal
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-coredumpctl\fR\ 'u
+\fBsystemd\-coredumpctl\fR [OPTIONS...] {COMMAND} [PID|COMM|EXE|MATCH...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-coredumpctl\fR
+may be used to retrieve coredumps from
+\fBsystemd-journald\fR(8)\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Print a short help text and exit\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print a short version string and exit\&.
+.RE
+.PP
+\fB\-F\fR, \fB\-\-field=\fR
+.RS 4
+Print all possible data values the specified field takes in matching coredump entries of the journal\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-output=FILE\fR
+.RS 4
+Write the core to
+\fBFILE\fR\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output of
+\fBlist\fR
+into a pager\&.
+.RE
+.PP
+\fB\-\-no\-legend\fR
+.RS 4
+Do not print the column headers\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fBlist\fR
+.RS 4
+List coredumps captured in the journal matching specified characteristics\&.
+.RE
+.PP
+\fBdump\fR
+.RS 4
+Extract the last coredump matching specified characteristics\&. Coredump will be written on stdout, unless an output file is specified with
+\fB\-o/\-\-output\fR\&.
+.RE
+.PP
+\fBgdb\fR
+.RS 4
+Invoke the GNU debugger on the last coredump matching specified characteristics\&.
+.RE
+.SH "MATCHING"
+.PP
+Match can be:
+.PP
+\fIPID\fR
+.RS 4
+Process ID of the process that dumped core\&. An integer\&.
+.RE
+.PP
+\fICOMM\fR
+.RS 4
+Name of the executable (matches
+\fBCOREDUMP_COMM=\fR)\&. Must not contain slashes\&.
+.RE
+.PP
+\fIEXE\fR
+.RS 4
+Path to the executable (matches
+\fBCOREDUMP_EXE=\fR)\&. Must contain at least one slash\&.
+.RE
+.PP
+\fIMATCH\fR
+.RS 4
+General journalctl predicates (see
+\fBjournalctl\fR(1))\&. Must contain an equals sign\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&. Not finding any matching coredumps is treated as failure\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd-journald.service\fR(8),
+\fBgdb\fR(1)
diff --git a/man/systemd-coredumpctl.html b/man/systemd-coredumpctl.html
index a59b22b651..983bc71bbf 100644
--- a/man/systemd-coredumpctl.html
+++ b/man/systemd-coredumpctl.html
@@ -19,9 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-coredumpctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-coredumpctl — Retrieve coredumps from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-coredumpctl</code> [OPTIONS...] {COMMAND} [PID|COMM|EXE|MATCH...]</p></div></div><div class="refsect1"><a name="idm259785085984"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-coredumpctl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-coredumpctl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-coredumpctl — Retrieve coredumps from the journal</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-coredumpctl</code> [OPTIONS...] {COMMAND} [PID|COMM|EXE|MATCH...]</p></div></div><div class="refsect1"><a name="idm274687297584"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-coredumpctl</strong></span> may be used to
retrieve coredumps from
- <a href="systemd-journald.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259785083392"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Print a short help
+ <a href="systemd-journald.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274687294992"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Print a short help
text and exit.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print a short version
string and exit.</p></dd><dt id="-F"><span class="term"><code class="option">-F</code>, </span><span class="term"><code class="option">--field=</code></span><a class="headerlink" title="Permalink to this term" href="#-F">¶</a></dt><dd><p>Print all possible
data values the specified field
@@ -39,7 +39,7 @@
</p></dd><dt id="gdb"><span class="term"><span class="command"><strong>gdb</strong></span></span><a class="headerlink" title="Permalink to this term" href="#gdb">¶</a></dt><dd><p>Invoke the GNU
debugger on the last coredump matching
specified characteristics.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259789018752"></a><h2 id="Matching">Matching<a class="headerlink" title="Permalink to this headline" href="#Matching">¶</a></h2><p>Match can be:</p><div class="variablelist"><dl class="variablelist"><dt id="PID"><span class="term"><em class="replaceable"><code>PID</code></em></span><a class="headerlink" title="Permalink to this term" href="#PID">¶</a></dt><dd><p>Process ID of the
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274687350576"></a><h2 id="Matching">Matching<a class="headerlink" title="Permalink to this headline" href="#Matching">¶</a></h2><p>Match can be:</p><div class="variablelist"><dl class="variablelist"><dt id="PID"><span class="term"><em class="replaceable"><code>PID</code></em></span><a class="headerlink" title="Permalink to this term" href="#PID">¶</a></dt><dd><p>Process ID of the
process that dumped
core. An integer.</p></dd><dt id="COMM"><span class="term"><em class="replaceable"><code>COMM</code></em></span><a class="headerlink" title="Permalink to this term" href="#COMM">¶</a></dt><dd><p>Name of the executable
(matches <code class="option">COREDUMP_COMM=</code>).
@@ -50,10 +50,10 @@
</p></dd><dt id="MATCH"><span class="term"><em class="replaceable"><code>MATCH</code></em></span><a class="headerlink" title="Permalink to this term" href="#MATCH">¶</a></dt><dd><p>General journalctl predicates
(see <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>).
Must contain an equals sign.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259789001936"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274687334256"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
code otherwise. Not finding any matching coredumps is treated
- as failure.
- </p></div><div class="refsect1"><a name="idm259789000592"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ as failure.
+ </p></div><div class="refsect1"><a name="idm274687332896"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>,
<a href="gdb.html"><span class="citerefentry"><span class="refentrytitle">gdb</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-coredumpctl.xml b/man/systemd-coredumpctl.xml
index 02b688606c..9ccb67d12d 100644
--- a/man/systemd-coredumpctl.xml
+++ b/man/systemd-coredumpctl.xml
@@ -202,8 +202,8 @@
<title>Exit status</title>
<para>On success 0 is returned, a non-zero failure
code otherwise. Not finding any matching coredumps is treated
- as failure.
- </para>
+ as failure.
+ </para>
</refsect1>
<refsect1>
diff --git a/man/systemd-cryptsetup-generator.8 b/man/systemd-cryptsetup-generator.8
new file mode 100644
index 0000000000..8fd503cd38
--- /dev/null
+++ b/man/systemd-cryptsetup-generator.8
@@ -0,0 +1,124 @@
+'\" t
+.TH "SYSTEMD\-CRYPTSETUP\-GENERATOR" "8" "" "systemd 208" "systemd-cryptsetup-generator"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-cryptsetup-generator \- Unit generator for /etc/crypttab
+.SH "SYNOPSIS"
+.PP
+/usr/lib/systemd/system\-generators/systemd\-cryptsetup\-generator
+.SH "DESCRIPTION"
+.PP
+systemd\-cryptsetup\-generator
+is a generator that translates
+/etc/crypttab
+into native systemd units early at boot and when configuration of the system manager is reloaded\&. This will create
+\fBsystemd-cryptsetup@.service\fR(8)
+units as necessary\&.
+.PP
+systemd\-cryptsetup\-generator
+implements the
+\m[blue]\fBgenerator specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "KERNEL COMMAND LINE"
+.PP
+systemd\-cryptsetup\-generator
+understands the following kernel command line parameters:
+.PP
+\fIluks=\fR, \fIrd\&.luks=\fR
+.RS 4
+Takes a boolean argument\&. Defaults to
+"yes"\&. If
+"no", disables the generator entirely\&.
+\fIrd\&.luks=\fR
+is honored only by initial RAM disk (initrd) while
+\fIluks=\fR
+is honored by both the main system and the initrd\&.
+.RE
+.PP
+\fIluks\&.crypttab=\fR, \fIrd\&.luks\&.crypttab=\fR
+.RS 4
+Takes a boolean argument\&. Defaults to
+"yes"\&. If
+"no", causes the generator to ignore any devices configured in
+/etc/crypttab
+(\fIluks\&.uuid=\fR
+will still work however)\&.
+\fIrd\&.luks\&.crypttab=\fR
+is honored only by initial RAM disk (initrd) while
+\fIluks\&.crypttab=\fR
+is honored by both the main system and the initrd\&.
+.RE
+.PP
+\fIluks\&.uuid=\fR, \fIrd\&.luks\&.uuid=\fR
+.RS 4
+Takes a LUKS super block UUID as argument\&. This will activate the specified device as part of the boot process as if it was listed in
+/etc/fstab\&. This option may be specified more than once in order to set up multiple devices\&.
+\fIrd\&.luks\&.uuid=\fR
+is honored only by initial RAM disk (initrd) while
+\fIluks\&.uuid=\fR
+is honored by both the main system and the initrd\&.
+.sp
+If /etc/crypttab contains entries with the same UUID, then the options for this entry will be used\&.
+.sp
+If /etc/crypttab exists, only those UUID specified on the kernel command line will be activated in the initrd or the real root\&.
+.RE
+.PP
+\fIluks\&.options=\fR, \fIrd\&.luks\&.options=\fR
+.RS 4
+Takes a LUKS super block UUID followed by an \*(Aq=\*(Aq and a string of options separated by commas as argument\&. This will override the options for the given UUID\&.
+.sp
+If only a list of options, without an UUID, is specified, they apply to any UUIDs not specified elsewhere, and without an entry in /etc/crypttab\&.
+.sp
+\fIrd\&.luks\&.options=\fR
+is honored only by initial RAM disk (initrd) while
+\fIluks\&.options=\fR
+is honored by both the main system and the initrd\&.
+.RE
+.PP
+\fIluks\&.key=\fR, \fIrd\&.luks\&.key=\fR
+.RS 4
+Takes a password file as argument\&.
+.sp
+For those entries specified with
+\fIrd\&.luks\&.uuid=\fR
+or
+\fIluks\&.uuid=\fR, the password file will be set to the password file specified by
+\fIrd\&.luks\&.key=\fR
+or
+\fIluks\&.key\fR
+.sp
+\fIrd\&.luks\&.key=\fR
+is honored only by initial RAM disk (initrd) while
+\fIluks\&.key=\fR
+is honored by both the main system and the initrd\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBcrypttab\fR(5),
+\fBsystemd-cryptsetup@.service\fR(8),
+\fBcryptsetup\fR(8),
+\fBsystemd-fstab-generator\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+generator specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
diff --git a/man/systemd-cryptsetup-generator.html b/man/systemd-cryptsetup-generator.html
index d8cb9cc47f..695d6db153 100644
--- a/man/systemd-cryptsetup-generator.html
+++ b/man/systemd-cryptsetup-generator.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-cryptsetup-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cryptsetup-generator — Unit generator for <code class="filename">/etc/crypttab</code></p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-cryptsetup-generator</code></p></div><div class="refsect1"><a name="idm259772367392"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-cryptsetup-generator</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-cryptsetup-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cryptsetup-generator — Unit generator for <code class="filename">/etc/crypttab</code></p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-cryptsetup-generator</code></p></div><div class="refsect1"><a name="idm274700993088"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-cryptsetup-generator</code>
is a generator that translates
<code class="filename">/etc/crypttab</code> into native systemd
units early at boot and when configuration of the
@@ -27,11 +27,11 @@
<a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a>
units as necessary.</p><p><code class="filename">systemd-cryptsetup-generator</code>
implements the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Generators" target="_top">generator
- specification</a>.</p></div><div class="refsect1"><a name="idm259772434096"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-cryptsetup-generator</code> understands
+ specification</a>.</p></div><div class="refsect1"><a name="idm274703119120"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-cryptsetup-generator</code> understands
the following kernel command line parameters:</p><div class="variablelist"><dl class="variablelist"><dt id="luks="><span class="term"><code class="varname">luks=</code>, </span><span class="term"><code class="varname">rd.luks=</code></span><a class="headerlink" title="Permalink to this term" href="#luks=">¶</a></dt><dd><p>Takes a boolean
argument. Defaults to
- <code class="literal">yes</code>. If
- <code class="literal">no</code> disables the
+ "<code class="literal">yes</code>". If
+ "<code class="literal">no</code>", disables the
generator
entirely. <code class="varname">rd.luks=</code>
is honored only by initial RAM disk
@@ -40,8 +40,8 @@
by both the main system and the
initrd. </p></dd><dt id="luks.crypttab="><span class="term"><code class="varname">luks.crypttab=</code>, </span><span class="term"><code class="varname">rd.luks.crypttab=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.crypttab=">¶</a></dt><dd><p>Takes a boolean
argument. Defaults to
- <code class="literal">yes</code>. If
- <code class="literal">no</code> causes the
+ "<code class="literal">yes</code>". If
+ "<code class="literal">no</code>", causes the
generator to ignore any devices
configured in
<code class="filename">/etc/crypttab</code>
@@ -69,7 +69,20 @@
the same UUID, then the options for this entry
will be used.</p><p>If /etc/crypttab exists, only those UUID
specified on the kernel command line
- will be activated in the initrd or the real root.</p></dd><dt id="luks.key="><span class="term"><code class="varname">luks.key=</code>, </span><span class="term"><code class="varname">rd.luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.key=">¶</a></dt><dd><p>Takes a password file as argument.</p><p>For those entries specified with
+ will be activated in the initrd or the real root.</p></dd><dt id="luks.options="><span class="term"><code class="varname">luks.options=</code>, </span><span class="term"><code class="varname">rd.luks.options=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.options=">¶</a></dt><dd><p>Takes a LUKS super
+ block UUID followed by an '=' and a string
+ of options separated by commas as argument.
+ This will override the options for the given
+ UUID.</p><p>If only a list of options, without an
+ UUID, is specified, they apply to any UUIDs not
+ specified elsewhere, and without an entry in
+ /etc/crypttab.</p><p>
+ <code class="varname">rd.luks.options=</code>
+ is honored only by initial RAM disk
+ (initrd) while
+ <code class="varname">luks.options=</code> is
+ honored by both the main system and
+ the initrd.</p></dd><dt id="luks.key="><span class="term"><code class="varname">luks.key=</code>, </span><span class="term"><code class="varname">rd.luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.key=">¶</a></dt><dd><p>Takes a password file as argument.</p><p>For those entries specified with
<code class="varname">rd.luks.uuid=</code> or <code class="varname">luks.uuid=</code>,
the password file will be set to the password file specified by
<code class="varname">rd.luks.key=</code> or <code class="varname">luks.key</code></p><p><code class="varname">rd.luks.key=</code>
@@ -77,7 +90,7 @@
(initrd) while
<code class="varname">luks.key=</code> is
honored by both the main system and
- the initrd.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772529200"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ the initrd.</p></dd></dl></div></div><div class="refsect1"><a name="idm274703381568"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>,
<a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a>,
diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml
index 7950032941..d6b7e49f13 100644
--- a/man/systemd-cryptsetup-generator.xml
+++ b/man/systemd-cryptsetup-generator.xml
@@ -80,7 +80,7 @@
<listitem><para>Takes a boolean
argument. Defaults to
<literal>yes</literal>. If
- <literal>no</literal> disables the
+ <literal>no</literal>, disables the
generator
entirely. <varname>rd.luks=</varname>
is honored only by initial RAM disk
@@ -97,7 +97,7 @@
<listitem><para>Takes a boolean
argument. Defaults to
<literal>yes</literal>. If
- <literal>no</literal> causes the
+ <literal>no</literal>, causes the
generator to ignore any devices
configured in
<filename>/etc/crypttab</filename>
@@ -137,6 +137,29 @@
will be activated in the initrd or the real root.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>luks.options=</varname></term>
+ <term><varname>rd.luks.options=</varname></term>
+
+ <listitem><para>Takes a LUKS super
+ block UUID followed by an '=' and a string
+ of options separated by commas as argument.
+ This will override the options for the given
+ UUID.</para>
+ <para>If only a list of options, without an
+ UUID, is specified, they apply to any UUIDs not
+ specified elsewhere, and without an entry in
+ /etc/crypttab.</para><para>
+ <varname>rd.luks.options=</varname>
+ is honored only by initial RAM disk
+ (initrd) while
+ <varname>luks.options=</varname> is
+ honored by both the main system and
+ the initrd.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>luks.key=</varname></term>
<term><varname>rd.luks.key=</varname></term>
diff --git a/man/systemd-cryptsetup.8 b/man/systemd-cryptsetup.8
new file mode 100644
index 0000000000..eeffdfe588
--- /dev/null
+++ b/man/systemd-cryptsetup.8
@@ -0,0 +1 @@
+.so man8/systemd-cryptsetup@.service.8
diff --git a/man/systemd-cryptsetup.html b/man/systemd-cryptsetup.html
index 6e95aa6d95..c255ecddd8 100644
--- a/man/systemd-cryptsetup.html
+++ b/man/systemd-cryptsetup.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-cryptsetup@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cryptsetup@.service, systemd-cryptsetup — Full disk decryption logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-cryptsetup@.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-cryptsetup</code></p></div><div class="refsect1"><a name="idm259781229568"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-cryptsetup@.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-cryptsetup@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cryptsetup@.service, systemd-cryptsetup — Full disk decryption logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-cryptsetup@.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-cryptsetup</code></p></div><div class="refsect1"><a name="idm274691400704"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-cryptsetup@.service</code>
is a service responsible for setting up encrypted
block devices. It is instantiated for each device that
requires decryption for access.</p><p><code class="filename">systemd-cryptsetup@.service</code>
@@ -31,7 +31,7 @@
<code class="filename">/etc/crypttab</code> is translated into
<code class="filename">systemd-cryptsetup@.service</code> units
by
- <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259777510640"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274690233120"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>,
<a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>,
diff --git a/man/systemd-cryptsetup@.service.8 b/man/systemd-cryptsetup@.service.8
new file mode 100644
index 0000000000..835d050e96
--- /dev/null
+++ b/man/systemd-cryptsetup@.service.8
@@ -0,0 +1,55 @@
+'\" t
+.TH "SYSTEMD\-CRYPTSETUP@\&.SERVICE" "8" "" "systemd 208" "systemd-cryptsetup@.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-cryptsetup@.service, systemd-cryptsetup \- Full disk decryption logic
+.SH "SYNOPSIS"
+.PP
+systemd\-cryptsetup@\&.service
+.PP
+/usr/lib/systemd/systemd\-cryptsetup
+.SH "DESCRIPTION"
+.PP
+systemd\-cryptsetup@\&.service
+is a service responsible for setting up encrypted block devices\&. It is instantiated for each device that requires decryption for access\&.
+.PP
+systemd\-cryptsetup@\&.service
+will ask for hard disk passwords via the
+\m[blue]\fBpassword agent logic\fR\m[]\&\s-2\u[1]\d\s+2, in order to query the user for the password using the right mechanism at boot and during runtime\&.
+.PP
+At early boot and when the system manager configuration is reloaded this
+/etc/crypttab
+is translated into
+systemd\-cryptsetup@\&.service
+units by
+\fBsystemd-cryptsetup-generator\fR(8)\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-cryptsetup-generator\fR(8),
+\fBcrypttab\fR(5),
+\fBcryptsetup\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+password agent logic
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
+.RE
diff --git a/man/systemd-cryptsetup@.service.html b/man/systemd-cryptsetup@.service.html
index 6e95aa6d95..c255ecddd8 100644
--- a/man/systemd-cryptsetup@.service.html
+++ b/man/systemd-cryptsetup@.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-cryptsetup@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cryptsetup@.service, systemd-cryptsetup — Full disk decryption logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-cryptsetup@.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-cryptsetup</code></p></div><div class="refsect1"><a name="idm259781229568"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-cryptsetup@.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-cryptsetup@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-cryptsetup@.service, systemd-cryptsetup — Full disk decryption logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-cryptsetup@.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-cryptsetup</code></p></div><div class="refsect1"><a name="idm274691400704"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-cryptsetup@.service</code>
is a service responsible for setting up encrypted
block devices. It is instantiated for each device that
requires decryption for access.</p><p><code class="filename">systemd-cryptsetup@.service</code>
@@ -31,7 +31,7 @@
<code class="filename">/etc/crypttab</code> is translated into
<code class="filename">systemd-cryptsetup@.service</code> units
by
- <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm259777510640"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274690233120"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>,
<a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>,
diff --git a/man/systemd-delta.1 b/man/systemd-delta.1
new file mode 100644
index 0000000000..ad2fc1de4c
--- /dev/null
+++ b/man/systemd-delta.1
@@ -0,0 +1,111 @@
+'\" t
+.TH "SYSTEMD\-DELTA" "1" "" "systemd 208" "systemd-delta"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-delta \- Find overridden configuration files
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-delta\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[SUFFIX...]\fR\ 'u
+\fBsystemd\-delta \fR\fB[OPTIONS...]\fR\fB \fR\fB[SUFFIX...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-delta\fR
+may be used to identify and compare configuration files in
+/etc
+that override default counterparts in
+/usr\&. The command line argument can be one or more name of a subdirectories of
+/etc
+or
+/usr/lib
+to compare, such as
+tmpfiles\&.d,
+sysctl\&.d
+or
+systemd/system\&.
+.PP
+When no argument is specified a number of well\-known subdirectories are searched for overridden files\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-type=\fR
+.RS 4
+When listing the differences, only list those that are asked for\&. The list itself is a comma\-separated list of desired difference types\&.
+.sp
+Recognized types are:
+.PP
+\fImasked\fR
+.RS 4
+Show masked files
+.RE
+.PP
+\fIequivalent\fR
+.RS 4
+Show overridden files that while overridden, do not differ in content\&.
+.RE
+.PP
+\fIredirected\fR
+.RS 4
+Show files that are redirected to another\&.
+.RE
+.PP
+\fIoverridden\fR
+.RS 4
+Show overridden, and changed files\&.
+.RE
+.PP
+\fIextended\fR
+.RS 4
+Show *\&.conf files in drop\-in directories for units\&.
+.RE
+.PP
+\fIunchanged\fR
+.RS 4
+Show unmodified files too\&.
+.RE
+.sp
+.RE
+.PP
+\fB\-\-diff=\fR
+.RS 4
+When showing modified files, when a file is overridden show a diff as well\&. This option takes a boolean argument\&. If omitted, it defaults to
+\fBtrue\fR\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1)
diff --git a/man/systemd-delta.html b/man/systemd-delta.html
index 7b33f2d88c..7a6484bd14 100644
--- a/man/systemd-delta.html
+++ b/man/systemd-delta.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-delta"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-delta — Find overridden configuration files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-delta [OPTIONS...] [SUFFIX...]</code> </p></div></div><div class="refsect1"><a name="idm259781865104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-delta</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-delta"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-delta — Find overridden configuration files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-delta [OPTIONS...] [SUFFIX...]</code> </p></div></div><div class="refsect1"><a name="idm274676709696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-delta</strong></span> may be used to
identify and compare configuration files in
<code class="filename">/etc</code> that override default
counterparts in <code class="filename">/usr</code>. The command
@@ -29,7 +29,7 @@
<code class="filename">tmpfiles.d</code>, <code class="filename">sysctl.d</code> or
<code class="filename">systemd/system</code>.</p><p>When no argument is specified a number of
well-known subdirectories are searched for overridden
- files.</p></div><div class="refsect1"><a name="idm259781734976"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ files.</p></div><div class="refsect1"><a name="idm274676702256"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
pager.</p></dd><dt id="-t"><span class="term"><code class="option">-t</code>, </span><span class="term"><code class="option">--type=</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p>When listing the
@@ -42,13 +42,14 @@
files that while overridden, do
not differ in content.</p></dd><dt id="redirected"><span class="term"><code class="varname">redirected</code></span><a class="headerlink" title="Permalink to this term" href="#redirected">¶</a></dt><dd><p>Show files that
are redirected to another.</p></dd><dt id="overridden"><span class="term"><code class="varname">overridden</code></span><a class="headerlink" title="Permalink to this term" href="#overridden">¶</a></dt><dd><p>Show overridden,
- and changed files.</p></dd><dt id="unchanged"><span class="term"><code class="varname">unchanged</code></span><a class="headerlink" title="Permalink to this term" href="#unchanged">¶</a></dt><dd><p>Show unmodified
+ and changed files.</p></dd><dt id="extended"><span class="term"><code class="varname">extended</code></span><a class="headerlink" title="Permalink to this term" href="#extended">¶</a></dt><dd><p>Show *.conf files in drop-in
+ directories for units.</p></dd><dt id="unchanged"><span class="term"><code class="varname">unchanged</code></span><a class="headerlink" title="Permalink to this term" href="#unchanged">¶</a></dt><dd><p>Show unmodified
files too.</p></dd></dl></div><p>
</p></dd><dt id="--diff="><span class="term"><code class="option">--diff=</code></span><a class="headerlink" title="Permalink to this term" href="#--diff=">¶</a></dt><dd><p>When showing modified
files, when a file is overridden show a
diff as well. This option takes a
- boolean argument. If omitted it defaults
- to <code class="option">true</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259781914560"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259781913376"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ boolean argument. If omitted, it defaults
+ to <code class="option">true</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274680578384"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274680577200"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml
index 9293c9b462..413ebd8de8 100644
--- a/man/systemd-delta.xml
+++ b/man/systemd-delta.xml
@@ -141,6 +141,13 @@
</varlistentry>
<varlistentry>
+ <term><varname>extended</varname></term>
+
+ <listitem><para>Show *.conf files in drop-in
+ directories for units.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>unchanged</varname></term>
<listitem><para>Show unmodified
@@ -156,7 +163,7 @@
<listitem><para>When showing modified
files, when a file is overridden show a
diff as well. This option takes a
- boolean argument. If omitted it defaults
+ boolean argument. If omitted, it defaults
to <option>true</option>.</para></listitem>
</varlistentry>
diff --git a/man/systemd-detect-virt.1 b/man/systemd-detect-virt.1
new file mode 100644
index 0000000000..a0a087077d
--- /dev/null
+++ b/man/systemd-detect-virt.1
@@ -0,0 +1,85 @@
+'\" t
+.TH "SYSTEMD\-DETECT\-VIRT" "1" "" "systemd 208" "systemd-detect-virt"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-detect-virt \- Detect execution in a virtualized environment
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-detect\-virt\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBsystemd\-detect\-virt \fR\fB[OPTIONS...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-detect\-virt\fR
+detects execution in a virtualized environment\&. It identifies the virtualization technology and can distinguish full VM virtualization from container virtualization\&.
+.PP
+When executed without
+\fB\-\-quiet\fR
+will print a short identifier for the detected virtualization technology\&. The following technologies are currently identified:
+\fIqemu\fR,
+\fIkvm\fR,
+\fIvmware\fR,
+\fImicrosoft\fR,
+\fIoracle\fR,
+\fIxen\fR,
+\fIbochs\fR,
+\fIchroot\fR,
+\fIuml\fR,
+\fIopenvz\fR,
+\fIlxc\fR,
+\fIlxc\-libvirt\fR,
+\fIsystemd\-nspawn\fR\&.
+.PP
+If multiple virtualization solutions are used, only the "innermost" is detected and identified\&. That means if both VM virtualization and container virtualization are used in conjunction, only the latter will be identified (unless
+\fB\-\-vm\fR
+is passed)\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-container\fR
+.RS 4
+Only detects container virtualization (i\&.e\&. shared kernel virtualization)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-vm\fR
+.RS 4
+Only detects VM virtualization (i\&.e\&. full hardware virtualization)\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Suppress output of the virtualization technology identifier\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+If a virtualization technology is detected, 0 is returned, a non\-zero code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1)
diff --git a/man/systemd-detect-virt.html b/man/systemd-detect-virt.html
index d0b10effd1..314075ef3a 100644
--- a/man/systemd-detect-virt.html
+++ b/man/systemd-detect-virt.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-detect-virt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-detect-virt — Detect execution in a virtualized environment</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-detect-virt [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm259798803792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-detect-virt</strong></span> detects
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-detect-virt"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-detect-virt — Detect execution in a virtualized environment</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-detect-virt [OPTIONS...]</code> </p></div></div><div class="refsect1"><a name="idm274688049920"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-detect-virt</strong></span> detects
execution in a virtualized environment. It identifies
the virtualization technology and can distinguish full
VM virtualization from container
@@ -31,14 +31,15 @@
<code class="varname">microsoft</code>,
<code class="varname">oracle</code>, <code class="varname">xen</code>,
<code class="varname">bochs</code>, <code class="varname">chroot</code>,
+ <code class="varname">uml</code>,
<code class="varname">openvz</code>, <code class="varname">lxc</code>,
<code class="varname">lxc-libvirt</code>,
- <code class="varname">systemd-nspawn</code>.</p><p>If multiple virtualization solutions are used
+ <code class="varname">systemd-nspawn</code>.</p><p>If multiple virtualization solutions are used,
only the "innermost" is detected and identified. That
means if both VM virtualization and container
- virtualization are used in conjunction only the latter
+ virtualization are used in conjunction, only the latter
will be identified (unless <code class="option">--vm</code> is
- passed).</p></div><div class="refsect1"><a name="idm259798722624"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ passed).</p></div><div class="refsect1"><a name="idm274688040176"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="-c"><span class="term"><code class="option">-c</code>, </span><span class="term"><code class="option">--container</code></span><a class="headerlink" title="Permalink to this term" href="#-c">¶</a></dt><dd><p>Only detects container
virtualization (i.e. shared kernel
@@ -46,7 +47,7 @@
virtualization (i.e. full hardware
virtualization).</p></dd><dt id="-q"><span class="term"><code class="option">-q</code>, </span><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#-q">¶</a></dt><dd><p>Suppress output of the
virtualization technology
- identifier.</p></dd></dl></div></div><div class="refsect1"><a name="idm259798859232"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>If a virtualization technology is detected 0 is
- returned, a non-zero code otherwise.</p></div><div class="refsect1"><a name="idm259798857936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ identifier.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691929808"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>If a virtualization technology is detected, 0 is
+ returned, a non-zero code otherwise.</p></div><div class="refsect1"><a name="idm274691928512"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml
index 762b6ab992..69785ceffa 100644
--- a/man/systemd-detect-virt.xml
+++ b/man/systemd-detect-virt.xml
@@ -70,14 +70,15 @@
<varname>microsoft</varname>,
<varname>oracle</varname>, <varname>xen</varname>,
<varname>bochs</varname>, <varname>chroot</varname>,
+ <varname>uml</varname>,
<varname>openvz</varname>, <varname>lxc</varname>,
<varname>lxc-libvirt</varname>,
<varname>systemd-nspawn</varname>.</para>
- <para>If multiple virtualization solutions are used
+ <para>If multiple virtualization solutions are used,
only the "innermost" is detected and identified. That
means if both VM virtualization and container
- virtualization are used in conjunction only the latter
+ virtualization are used in conjunction, only the latter
will be identified (unless <option>--vm</option> is
passed).</para>
</refsect1>
@@ -137,7 +138,7 @@
<refsect1>
<title>Exit status</title>
- <para>If a virtualization technology is detected 0 is
+ <para>If a virtualization technology is detected, 0 is
returned, a non-zero code otherwise.</para>
</refsect1>
diff --git a/man/systemd-efi-boot-generator.8 b/man/systemd-efi-boot-generator.8
new file mode 100644
index 0000000000..4b9993e432
--- /dev/null
+++ b/man/systemd-efi-boot-generator.8
@@ -0,0 +1,54 @@
+'\" t
+.TH "SYSTEMD\-EFI\-BOOT\-GENERATOR" "8" "" "systemd 208" "systemd-efi-boot-generator"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-efi-boot-generator \- Generator for automatically mounting the EFI System Partition used by the current boot to /boot
+.SH "SYNOPSIS"
+.PP
+/usr/lib/systemd/system\-generators/systemd\-efi\-boot\-generator
+.SH "DESCRIPTION"
+.PP
+systemd\-efi\-boot\-generator
+is a generator that automatically creates mount and automount units for the EFI System Partition (ESP), mounting it to
+/boot\&. Note that this generator will execute no operation on non\-EFI systems, on systems where the boot loader does not communicate the used ESP to the OS, on systems where
+/boot
+is an explicitly configured mount (for example, listed in
+\fBfstab\fR(5)) or where the
+/boot
+mount point is non\-empty\&. Since this generator creates an automount unit, the mount will only be activated on\-demand, when accessed\&.
+.PP
+systemd\-efi\-boot\-generator
+implements the
+\m[blue]\fBgenerator specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.mount\fR(5),
+\fBsystemd.automount\fR(5),
+\fBsystemd-gpt-auto-generator\fR(8),
+\fBgummiboot\fR(8),
+\fBfstab\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+generator specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
diff --git a/man/systemd-efi-boot-generator.html b/man/systemd-efi-boot-generator.html
new file mode 100644
index 0000000000..b917e4699b
--- /dev/null
+++ b/man/systemd-efi-boot-generator.html
@@ -0,0 +1,44 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-efi-boot-generator</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-efi-boot-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-efi-boot-generator — Generator for automatically mounting the
+ EFI System Partition used by the current boot to
+ <code class="filename">/boot</code></p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-efi-boot-generator</code></p></div><div class="refsect1"><a name="idm274672055456"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-efi-boot-generator</code>
+ is a generator that automatically creates mount and
+ automount units for the EFI System Partition (ESP),
+ mounting it to <code class="filename">/boot</code>. Note that
+ this generator will execute no operation on non-EFI
+ systems, on systems where the boot loader does not
+ communicate the used ESP to the OS, on systems where
+ <code class="filename">/boot</code> is an explicitly configured
+ mount (for example, listed in <a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>) or where the <code class="filename">/boot</code> mount
+ point is non-empty. Since this generator creates an
+ automount unit, the mount will only be activated
+ on-demand, when accessed.</p><p><code class="filename">systemd-efi-boot-generator</code>
+ implements the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Generators" target="_top">generator
+ specification</a>.</p></div><div class="refsect1"><a name="idm274672048432"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
+ <a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>,
+ <a href="systemd-gpt-auto-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a>,
+ <a href="gummiboot.html"><span class="citerefentry"><span class="refentrytitle">gummiboot</span>(8)</span></a>,
+ <a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
+ </p></div></div></body></html>
diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml
new file mode 100644
index 0000000000..3a79dfb8df
--- /dev/null
+++ b/man/systemd-efi-boot-generator.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!--
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+<refentry id="systemd-efi-boot-generator">
+
+ <refentryinfo>
+ <title>systemd-efi-boot-generator</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd-efi-boot-generator</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd-efi-boot-generator</refname>
+ <refpurpose>Generator for automatically mounting the
+ EFI System Partition used by the current boot to
+ <filename>/boot</filename></refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename>/usr/lib/systemd/system-generators/systemd-efi-boot-generator</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><filename>systemd-efi-boot-generator</filename>
+ is a generator that automatically creates mount and
+ automount units for the EFI System Partition (ESP),
+ mounting it to <filename>/boot</filename>. Note that
+ this generator will execute no operation on non-EFI
+ systems, on systems where the boot loader does not
+ communicate the used ESP to the OS, on systems where
+ <filename>/boot</filename> is an explicitly configured
+ mount (for example, listed in <citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>) or where the <filename>/boot</filename> mount
+ point is non-empty. Since this generator creates an
+ automount unit, the mount will only be activated
+ on-demand, when accessed.</para>
+
+ <para><filename>systemd-efi-boot-generator</filename>
+ implements the <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator
+ specification</ulink>.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>gummiboot</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd-fsck-root.service.8 b/man/systemd-fsck-root.service.8
new file mode 100644
index 0000000000..15699307c8
--- /dev/null
+++ b/man/systemd-fsck-root.service.8
@@ -0,0 +1 @@
+.so man8/systemd-fsck@.service.8
diff --git a/man/systemd-fsck-root.service.html b/man/systemd-fsck-root.service.html
index 3ab6dda85a..d853435120 100644
--- a/man/systemd-fsck-root.service.html
+++ b/man/systemd-fsck-root.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-fsck@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck — File system checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-fsck@.service</code></p><p><code class="filename">systemd-fsck-root.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-fsck</code></p></div><div class="refsect1"><a name="idm259786485936"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fsck@.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-fsck@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck — File system checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-fsck@.service</code></p><p><code class="filename">systemd-fsck-root.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-fsck</code></p></div><div class="refsect1"><a name="idm274678369888"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fsck@.service</code> is a
service responsible for file system checks. It is
instantiated for each device that requires a file
system
@@ -27,22 +27,22 @@
responsible for file system checks on the root
file system.</p><p><code class="filename">systemd-fsck</code> will
forward file system checking progress to the
- console. If a file system check fails emergency mode
+ console. If a file system check fails, emergency mode
is activated, by isolating to
- <code class="filename">emergency.target</code>.</p></div><div class="refsect1"><a name="idm259786481328"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fsck</code> understands
+ <code class="filename">emergency.target</code>.</p></div><div class="refsect1"><a name="idm274678365280"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fsck</code> understands
one kernel command line parameter:</p><div class="variablelist"><dl class="variablelist"><dt id="fsck.mode="><span class="term"><code class="varname">fsck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#fsck.mode=">¶</a></dt><dd><p>One of
- <code class="literal">auto</code>,
- <code class="literal">force</code>,
- <code class="literal">skip</code>. Controls the
+ "<code class="literal">auto</code>",
+ "<code class="literal">force</code>",
+ "<code class="literal">skip</code>". Controls the
mode of operation. The default is
- <code class="literal">auto</code>, and ensures
+ "<code class="literal">auto</code>", and ensures
that file system checks are done when
the file system checker deems them
- necessary. <code class="literal">force</code>
+ necessary. "<code class="literal">force</code>"
unconditionally results in full file
- system checks. <code class="literal">skip</code>
+ system checks. "<code class="literal">skip</code>"
skips any file system
- checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm259786548960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682257536"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="fsck.html"><span class="citerefentry"><span class="refentrytitle">fsck</span>(8)</span></a>,
<a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a>
diff --git a/man/systemd-fsck.8 b/man/systemd-fsck.8
new file mode 100644
index 0000000000..15699307c8
--- /dev/null
+++ b/man/systemd-fsck.8
@@ -0,0 +1 @@
+.so man8/systemd-fsck@.service.8
diff --git a/man/systemd-fsck.html b/man/systemd-fsck.html
index 3ab6dda85a..d853435120 100644
--- a/man/systemd-fsck.html
+++ b/man/systemd-fsck.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-fsck@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck — File system checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-fsck@.service</code></p><p><code class="filename">systemd-fsck-root.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-fsck</code></p></div><div class="refsect1"><a name="idm259786485936"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fsck@.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-fsck@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck — File system checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-fsck@.service</code></p><p><code class="filename">systemd-fsck-root.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-fsck</code></p></div><div class="refsect1"><a name="idm274678369888"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fsck@.service</code> is a
service responsible for file system checks. It is
instantiated for each device that requires a file
system
@@ -27,22 +27,22 @@
responsible for file system checks on the root
file system.</p><p><code class="filename">systemd-fsck</code> will
forward file system checking progress to the
- console. If a file system check fails emergency mode
+ console. If a file system check fails, emergency mode
is activated, by isolating to
- <code class="filename">emergency.target</code>.</p></div><div class="refsect1"><a name="idm259786481328"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fsck</code> understands
+ <code class="filename">emergency.target</code>.</p></div><div class="refsect1"><a name="idm274678365280"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fsck</code> understands
one kernel command line parameter:</p><div class="variablelist"><dl class="variablelist"><dt id="fsck.mode="><span class="term"><code class="varname">fsck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#fsck.mode=">¶</a></dt><dd><p>One of
- <code class="literal">auto</code>,
- <code class="literal">force</code>,
- <code class="literal">skip</code>. Controls the
+ "<code class="literal">auto</code>",
+ "<code class="literal">force</code>",
+ "<code class="literal">skip</code>". Controls the
mode of operation. The default is
- <code class="literal">auto</code>, and ensures
+ "<code class="literal">auto</code>", and ensures
that file system checks are done when
the file system checker deems them
- necessary. <code class="literal">force</code>
+ necessary. "<code class="literal">force</code>"
unconditionally results in full file
- system checks. <code class="literal">skip</code>
+ system checks. "<code class="literal">skip</code>"
skips any file system
- checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm259786548960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682257536"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="fsck.html"><span class="citerefentry"><span class="refentrytitle">fsck</span>(8)</span></a>,
<a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a>
diff --git a/man/systemd-fsck@.service.8 b/man/systemd-fsck@.service.8
new file mode 100644
index 0000000000..68189a7f81
--- /dev/null
+++ b/man/systemd-fsck@.service.8
@@ -0,0 +1,62 @@
+'\" t
+.TH "SYSTEMD\-FSCK@\&.SERVICE" "8" "" "systemd 208" "systemd-fsck@.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck \- File system checker logic
+.SH "SYNOPSIS"
+.PP
+systemd\-fsck@\&.service
+.PP
+systemd\-fsck\-root\&.service
+.PP
+/usr/lib/systemd/systemd\-fsck
+.SH "DESCRIPTION"
+.PP
+systemd\-fsck@\&.service
+is a service responsible for file system checks\&. It is instantiated for each device that requires a file system check\&.
+systemd\-fsck\-root\&.service
+is responsible for file system checks on the root file system\&.
+.PP
+systemd\-fsck
+will forward file system checking progress to the console\&. If a file system check fails, emergency mode is activated, by isolating to
+emergency\&.target\&.
+.SH "KERNEL COMMAND LINE"
+.PP
+systemd\-fsck
+understands one kernel command line parameter:
+.PP
+\fIfsck\&.mode=\fR
+.RS 4
+One of
+"auto",
+"force",
+"skip"\&. Controls the mode of operation\&. The default is
+"auto", and ensures that file system checks are done when the file system checker deems them necessary\&.
+"force"
+unconditionally results in full file system checks\&.
+"skip"
+skips any file system checks\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBfsck\fR(8),
+\fBsystemd-quotacheck.service\fR(8)
diff --git a/man/systemd-fsck@.service.html b/man/systemd-fsck@.service.html
index 3ab6dda85a..d853435120 100644
--- a/man/systemd-fsck@.service.html
+++ b/man/systemd-fsck@.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-fsck@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck — File system checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-fsck@.service</code></p><p><code class="filename">systemd-fsck-root.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-fsck</code></p></div><div class="refsect1"><a name="idm259786485936"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fsck@.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-fsck@.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fsck@.service, systemd-fsck-root.service, systemd-fsck — File system checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-fsck@.service</code></p><p><code class="filename">systemd-fsck-root.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-fsck</code></p></div><div class="refsect1"><a name="idm274678369888"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fsck@.service</code> is a
service responsible for file system checks. It is
instantiated for each device that requires a file
system
@@ -27,22 +27,22 @@
responsible for file system checks on the root
file system.</p><p><code class="filename">systemd-fsck</code> will
forward file system checking progress to the
- console. If a file system check fails emergency mode
+ console. If a file system check fails, emergency mode
is activated, by isolating to
- <code class="filename">emergency.target</code>.</p></div><div class="refsect1"><a name="idm259786481328"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fsck</code> understands
+ <code class="filename">emergency.target</code>.</p></div><div class="refsect1"><a name="idm274678365280"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fsck</code> understands
one kernel command line parameter:</p><div class="variablelist"><dl class="variablelist"><dt id="fsck.mode="><span class="term"><code class="varname">fsck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#fsck.mode=">¶</a></dt><dd><p>One of
- <code class="literal">auto</code>,
- <code class="literal">force</code>,
- <code class="literal">skip</code>. Controls the
+ "<code class="literal">auto</code>",
+ "<code class="literal">force</code>",
+ "<code class="literal">skip</code>". Controls the
mode of operation. The default is
- <code class="literal">auto</code>, and ensures
+ "<code class="literal">auto</code>", and ensures
that file system checks are done when
the file system checker deems them
- necessary. <code class="literal">force</code>
+ necessary. "<code class="literal">force</code>"
unconditionally results in full file
- system checks. <code class="literal">skip</code>
+ system checks. "<code class="literal">skip</code>"
skips any file system
- checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm259786548960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682257536"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="fsck.html"><span class="citerefentry"><span class="refentrytitle">fsck</span>(8)</span></a>,
<a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a>
diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml
index 4d6464c2b8..e934352f19 100644
--- a/man/systemd-fsck@.service.xml
+++ b/man/systemd-fsck@.service.xml
@@ -66,7 +66,7 @@
<para><filename>systemd-fsck</filename> will
forward file system checking progress to the
- console. If a file system check fails emergency mode
+ console. If a file system check fails, emergency mode
is activated, by isolating to
<filename>emergency.target</filename>.</para>
</refsect1>
diff --git a/man/systemd-fstab-generator.8 b/man/systemd-fstab-generator.8
new file mode 100644
index 0000000000..63ac7c7148
--- /dev/null
+++ b/man/systemd-fstab-generator.8
@@ -0,0 +1,75 @@
+'\" t
+.TH "SYSTEMD\-FSTAB\-GENERATOR" "8" "" "systemd 208" "systemd-fstab-generator"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-fstab-generator \- Unit generator for /etc/fstab
+.SH "SYNOPSIS"
+.PP
+/usr/lib/systemd/system\-generators/systemd\-fstab\-generator
+.SH "DESCRIPTION"
+.PP
+systemd\-fstab\-generator
+is a generator that translates
+/etc/fstab
+(see
+\fBfstab\fR(5)
+for details) into native systemd units early at boot and when configuration of the system manager is reloaded\&. This will instantiate mount and swap units as necessary\&.
+.PP
+See
+\fBsystemd.mount\fR(5)
+and
+\fBsystemd.swap\fR(5)
+for more information about special
+/etc/fstab
+mount options this generator understands\&.
+.PP
+systemd\-fstab\-generator
+implements the
+\m[blue]\fBgenerator specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "KERNEL COMMAND LINE"
+.PP
+systemd\-fstab\-generator
+understands the following kernel command line parameters:
+.PP
+\fIfstab=\fR, \fIrd\&.fstab=\fR
+.RS 4
+Takes a boolean argument\&. Defaults to
+"yes"\&. If
+"no", causes the generator to ignore any mounts or swaps configured in
+/etc/fstab\&.
+\fIrd\&.fstab=\fR
+is honored only by initial RAM disk (initrd) while
+\fIfstab=\fR
+is honored by both the main system and the initrd\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBfstab\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd-cryptsetup-generator\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+generator specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
diff --git a/man/systemd-fstab-generator.html b/man/systemd-fstab-generator.html
index d438e3d8c1..f6ac52fbf2 100644
--- a/man/systemd-fstab-generator.html
+++ b/man/systemd-fstab-generator.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-fstab-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fstab-generator — Unit generator for /etc/fstab</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-fstab-generator</code></p></div><div class="refsect1"><a name="idm259776756160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fstab-generator</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-fstab-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-fstab-generator — Unit generator for /etc/fstab</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-fstab-generator</code></p></div><div class="refsect1"><a name="idm274704377824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-fstab-generator</code> is
a generator that translates
<code class="filename">/etc/fstab</code> (see
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
@@ -34,11 +34,11 @@
<code class="filename">/etc/fstab</code> mount options this
generator understands.</p><p><code class="filename">systemd-fstab-generator</code>
implements the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Generators" target="_top">generator
- specification</a>.</p></div><div class="refsect1"><a name="idm259776676624"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fstab-generator</code> understands
+ specification</a>.</p></div><div class="refsect1"><a name="idm274704369952"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-fstab-generator</code> understands
the following kernel command line parameters:</p><div class="variablelist"><dl class="variablelist"><dt id="fstab="><span class="term"><code class="varname">fstab=</code>, </span><span class="term"><code class="varname">rd.fstab=</code></span><a class="headerlink" title="Permalink to this term" href="#fstab=">¶</a></dt><dd><p>Takes a boolean
argument. Defaults to
- <code class="literal">yes</code>. If
- <code class="literal">no</code> causes the
+ "<code class="literal">yes</code>". If
+ "<code class="literal">no</code>", causes the
generator to ignore any mounts or swaps
configured in
<code class="filename">/etc/fstab</code>. <code class="varname">rd.fstab=</code>
@@ -46,7 +46,7 @@
(initrd) while
<code class="varname">fstab=</code> is
honored by both the main system and
- the initrd. </p></dd></dl></div></div><div class="refsect1"><a name="idm259776816736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ the initrd. </p></dd></dl></div></div><div class="refsect1"><a name="idm274708263024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>,
<a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml
index 4bd25bfa8f..9ca16c7ea1 100644
--- a/man/systemd-fstab-generator.xml
+++ b/man/systemd-fstab-generator.xml
@@ -90,7 +90,7 @@
<listitem><para>Takes a boolean
argument. Defaults to
<literal>yes</literal>. If
- <literal>no</literal> causes the
+ <literal>no</literal>, causes the
generator to ignore any mounts or swaps
configured in
<filename>/etc/fstab</filename>. <varname>rd.fstab=</varname>
diff --git a/man/systemd-getty-generator.8 b/man/systemd-getty-generator.8
new file mode 100644
index 0000000000..ab0e979c8f
--- /dev/null
+++ b/man/systemd-getty-generator.8
@@ -0,0 +1,69 @@
+'\" t
+.TH "SYSTEMD\-GETTY\-GENERATOR" "8" "" "systemd 208" "systemd-getty-generator"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-getty-generator \- Generator for enabling getty instances on the console
+.SH "SYNOPSIS"
+.PP
+/usr/lib/systemd/system\-generators/systemd\-getty\-generator
+.SH "DESCRIPTION"
+.PP
+systemd\-getty\-generator
+is a generator that automatically instantiates
+serial\-getty@\&.service
+on the kernel console
+/dev/console
+if that is not directed to the virtual console subsystem\&. It will also instantiate
+serial\-getty@\&.service
+instances for virtualizer consoles, if execution in a virtualized environment is detected\&. This should ensure that the user is shown a login prompt at the right place, regardless in which environment the system is started\&. For example, it is sufficient to redirect the kernel console with a kernel command line argument such as
+\fIconsole=\fR
+to get both kernel messages and a getty prompt on a serial TTY\&. See
+\m[blue]\fBkernel\-parameters\&.txt\fR\m[]\&\s-2\u[1]\d\s+2
+for more information on the
+\fIconsole=\fR
+kernel parameter\&.
+.PP
+systemd\-getty\-generator
+implements the
+\m[blue]\fBgenerator specification\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.PP
+Further information about configuration of gettys you may find in
+\m[blue]\fBsystemd for Administrators, Part XVI: Gettys on Serial Consoles (and Elsewhere)\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBagetty\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+kernel-parameters.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/kernel-parameters.txt
+.RE
+.IP " 2." 4
+generator specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
+.IP " 3." 4
+systemd for Administrators, Part XVI: Gettys on Serial Consoles (and Elsewhere)
+.RS 4
+\%http://0pointer.de/blog/projects/serial-console.html
+.RE
diff --git a/man/systemd-getty-generator.html b/man/systemd-getty-generator.html
index 572e03f7b5..deeccbb098 100644
--- a/man/systemd-getty-generator.html
+++ b/man/systemd-getty-generator.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-getty-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-getty-generator — Generator for enabling getty instances on
- the console</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-getty-generator</code></p></div><div class="refsect1"><a name="idm259801368992"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-getty-generator</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-getty-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-getty-generator — Generator for enabling getty instances on
+ the console</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-getty-generator</code></p></div><div class="refsect1"><a name="idm274691712992"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-getty-generator</code> is
a generator that automatically instantiates
<code class="filename">serial-getty@.service</code> on the
kernel console <code class="filename">/dev/console</code> if
@@ -42,7 +42,7 @@
specification</a>.</p><p>Further information about configuration of
gettys you may find in <a class="ulink" href="http://0pointer.de/blog/projects/serial-console.html" target="_top">systemd
for Administrators, Part XVI: Gettys on Serial
- Consoles (and Elsewhere)</a>.</p></div><div class="refsect1"><a name="idm259801288224"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ Consoles (and Elsewhere)</a>.</p></div><div class="refsect1"><a name="idm274691703920"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="agetty.html"><span class="citerefentry"><span class="refentrytitle">agetty</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-gpt-auto-generator.8 b/man/systemd-gpt-auto-generator.8
new file mode 100644
index 0000000000..028e5d9889
--- /dev/null
+++ b/man/systemd-gpt-auto-generator.8
@@ -0,0 +1,60 @@
+'\" t
+.TH "SYSTEMD\-GPT\-AUTO\-GENERATOR" "8" "" "systemd 208" "systemd-gpt-auto-generator"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-gpt-auto-generator \- Generator for automatically discovering and mounting /home as well as discovering and enabling swap partitions, based on GPT partition type GUIDs\&.
+.SH "SYNOPSIS"
+.PP
+/usr/lib/systemd/system\-generators/systemd\-gpt\-auto\-generator
+.SH "DESCRIPTION"
+.PP
+systemd\-gpt\-auto\-generator
+is a generator that automatically discovers
+/home
+and swap partitions and creates mount and swap units for them, based on the the partition type GUIDs of GUID partition tables (GPT)\&. Note that this generator will execute no operation on non\-GPT systems, on systems where the units are explicitly configured (for example, listed in
+\fBfstab\fR(5)) or where the mount point is non\-empty\&.
+.PP
+This generator will only look for partitions on the same physical disk the root file system is stored on\&. This generator has no effect on systems where the root file system is distributed on multiple disks, for example via btrfs RAID\&.
+.PP
+This generator is useful for centralizing file system configuration in the partition table and making manual configuration in
+/etc/fstab
+or suchlike unnecessary\&.
+.PP
+This generator looks for swap partitions using GPT type 0657fd6d\-a4ab\-43c4\-84e50933c84b4f4f\&. It looks for
+/home
+partitions using GPT type 933ac7e1\-2eb4\-4f13\-b8440e14e2aef915\&.
+.PP
+systemd\-gpt\-auto\-generator
+implements the
+\m[blue]\fBgenerator specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.mount\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd-efi-boot-generator\fR(8),
+\fBfstab\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+generator specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
diff --git a/man/systemd-gpt-auto-generator.html b/man/systemd-gpt-auto-generator.html
new file mode 100644
index 0000000000..1556346107
--- /dev/null
+++ b/man/systemd-gpt-auto-generator.html
@@ -0,0 +1,54 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-gpt-auto-generator</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-gpt-auto-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-gpt-auto-generator — Generator for automatically discovering
+ and mounting <code class="filename">/home</code> as well as
+ discovering and enabling swap partitions, based on GPT
+ partition type GUIDs.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-gpt-auto-generator</code></p></div><div class="refsect1"><a name="idm274691678976"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-gpt-auto-generator</code>
+ is a generator that automatically discovers
+ <code class="filename">/home</code> and swap partitions and
+ creates mount and swap units for them, based on the
+ the partition type GUIDs of GUID partition tables
+ (GPT). Note that this generator will execute no
+ operation on non-GPT systems, on systems where the
+ units are explicitly configured (for example, listed
+ in
+ <a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>)
+ or where the mount point is non-empty.</p><p>This generator will only look for partitions on
+ the same physical disk the root file system is stored
+ on. This generator has no effect on systems where the
+ root file system is distributed on multiple disks, for
+ example via btrfs RAID.</p><p>This generator is useful for centralizing file
+ system configuration in the partition table and making
+ manual configuration in
+ <code class="filename">/etc/fstab</code> or suchlike
+ unnecessary.</p><p>This generator looks for swap partitions using
+ GPT type 0657fd6d-a4ab-43c4-84e50933c84b4f4f. It looks
+ for <code class="filename">/home</code> partitions using GPT
+ type 933ac7e1-2eb4-4f13-b8440e14e2aef915.</p><p><code class="filename">systemd-gpt-auto-generator</code>
+ implements the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Generators" target="_top">generator
+ specification</a>.</p></div><div class="refsect1"><a name="idm274691670384"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
+ <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>,
+ <a href="systemd-efi-boot-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-efi-boot-generator</span>(8)</span></a>,
+ <a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
+ </p></div></div></body></html>
diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml
new file mode 100644
index 0000000000..95c0c35046
--- /dev/null
+++ b/man/systemd-gpt-auto-generator.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!--
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+<refentry id="systemd-gpt-auto-generator">
+
+ <refentryinfo>
+ <title>systemd-gpt-auto-generator</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd-gpt-auto-generator</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd-gpt-auto-generator</refname>
+ <refpurpose>Generator for automatically discovering
+ and mounting <filename>/home</filename> as well as
+ discovering and enabling swap partitions, based on GPT
+ partition type GUIDs.</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename>/usr/lib/systemd/system-generators/systemd-gpt-auto-generator</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><filename>systemd-gpt-auto-generator</filename>
+ is a generator that automatically discovers
+ <filename>/home</filename> and swap partitions and
+ creates mount and swap units for them, based on the
+ the partition type GUIDs of GUID partition tables
+ (GPT). Note that this generator will execute no
+ operation on non-GPT systems, on systems where the
+ units are explicitly configured (for example, listed
+ in
+ <citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
+ or where the mount point is non-empty.</para>
+
+ <para>This generator will only look for partitions on
+ the same physical disk the root file system is stored
+ on. This generator has no effect on systems where the
+ root file system is distributed on multiple disks, for
+ example via btrfs RAID.</para>
+
+ <para>This generator is useful for centralizing file
+ system configuration in the partition table and making
+ manual configuration in
+ <filename>/etc/fstab</filename> or suchlike
+ unnecessary.</para>
+
+ <para>This generator looks for swap partitions using
+ GPT type 0657fd6d-a4ab-43c4-84e50933c84b4f4f. It looks
+ for <filename>/home</filename> partitions using GPT
+ type 933ac7e1-2eb4-4f13-b8440e14e2aef915.</para>
+
+ <para><filename>systemd-gpt-auto-generator</filename>
+ implements the <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator
+ specification</ulink>.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-efi-boot-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd-halt.service.8 b/man/systemd-halt.service.8
new file mode 100644
index 0000000000..93549aa3e8
--- /dev/null
+++ b/man/systemd-halt.service.8
@@ -0,0 +1,79 @@
+'\" t
+.TH "SYSTEMD\-HALT\&.SERVICE" "8" "" "systemd 208" "systemd-halt.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown \- System shutdown logic
+.SH "SYNOPSIS"
+.PP
+systemd\-halt\&.service
+.PP
+systemd\-poweroff\&.service
+.PP
+systemd\-reboot\&.service
+.PP
+systemd\-kexec\&.service
+.PP
+/usr/lib/systemd/systemd\-shutdown
+.SH "DESCRIPTION"
+.PP
+systemd\-halt\&.service
+is a system service that is pulled in by
+halt\&.target
+and is responsible for the actual system halt\&. Similar,
+systemd\-poweroff\&.service
+is pulled in by
+poweroff\&.target,
+systemd\-reboot\&.service
+by
+reboot\&.target
+and
+systemd\-kexec\&.service
+by
+kexec\&.target
+to execute the respective actions\&.
+.PP
+When these services are run they ensure that PID 1 is replaced by the
+/usr/lib/systemd/systemd\-shutdown
+tool which is then responsible for the actual shutdown\&. Before shutting down this binary will try to unmount all remaining file systems, disable all remaining swap devices, detach all remaining storage devices and kill all remaining processes\&.
+.PP
+Immediately before executing the actual system halt/poweroff/reboot/kexec
+systemd\-shutdown
+will run all executables in
+/usr/lib/systemd/system\-shutdown/
+and pass one arguments to them: either
+"halt",
+"poweroff",
+"reboot"
+or
+"kexec", depending on the chosen action\&. All executables in this directory are executed in parallel, and execution of the action is not continued before all executables finished\&.
+.PP
+Note that
+systemd\-halt\&.service
+(and the related units) should never be executed directly\&. Instead, trigger system shutdown with a command such as
+"systemctl halt"
+or suchlike\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd.special\fR(7),
+\fBreboot\fR(2),
+\fBsystemd-suspend.service\fR(8)
diff --git a/man/systemd-halt.service.html b/man/systemd-halt.service.html
index 97fda1b23d..6b6a783e47 100644
--- a/man/systemd-halt.service.html
+++ b/man/systemd-halt.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm259768592160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm274689319632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
system service that is pulled in by
<code class="filename">halt.target</code> and is responsible
for the actual system halt. Similar,
@@ -53,7 +53,7 @@
related units) should never be executed
directly. Instead, trigger system shutdown with a
command such as "<code class="literal">systemctl halt</code>" or
- suchlike.</p></div><div class="refsect1"><a name="idm259768653216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ suchlike.</p></div><div class="refsect1"><a name="idm274693257936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml
index 6a6bfdc7d7..812281e60d 100644
--- a/man/systemd-halt.service.xml
+++ b/man/systemd-halt.service.xml
@@ -89,10 +89,10 @@
executables in
<filename>/usr/lib/systemd/system-shutdown/</filename>
and pass one arguments to them: either
- "<literal>halt</literal>",
- "<literal>poweroff</literal>",
- "<literal>reboot</literal>" or
- "<literal>kexec</literal>", depending on the chosen
+ <literal>halt</literal>,
+ <literal>poweroff</literal>,
+ <literal>reboot</literal> or
+ <literal>kexec</literal>, depending on the chosen
action. All executables in this directory are executed
in parallel, and execution of the action is not
continued before all executables finished.</para>
@@ -101,7 +101,7 @@
<filename>systemd-halt.service</filename> (and the
related units) should never be executed
directly. Instead, trigger system shutdown with a
- command such as "<literal>systemctl halt</literal>" or
+ command such as <literal>systemctl halt</literal> or
suchlike.</para>
</refsect1>
diff --git a/man/systemd-hibernate.service.8 b/man/systemd-hibernate.service.8
new file mode 100644
index 0000000000..ff3177737d
--- /dev/null
+++ b/man/systemd-hibernate.service.8
@@ -0,0 +1 @@
+.so man8/systemd-suspend.service.8
diff --git a/man/systemd-hibernate.service.html b/man/systemd-hibernate.service.html
index 0e5a2476d3..ef16bec4f4 100644
--- a/man/systemd-hibernate.service.html
+++ b/man/systemd-hibernate.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm259781854720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm274689275296"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
a system service that is pulled in by
<code class="filename">suspend.target</code> and is responsible
for the actual system suspend. Similarly,
@@ -50,7 +50,7 @@
<code class="filename">/usr/lib/systemd/system-sleep/</code>
are intended for local use only and should be
considered hacks. If applications want to be notified
- of system suspend/hibernation and resume there are
+ of system suspend/hibernation and resume, there are
much nicer interfaces available.</p><p>Note that
<code class="filename">systemd-suspend.service</code>,
<code class="filename">systemd-hibernate.service</code>, and
@@ -62,14 +62,14 @@
"<code class="literal">mem</code>" into
<code class="filename">/sys/power/state</code>, to trigger the
actual system suspend. What exactly is written
- where can be configured in the <code class="literal">[Sleep]</code>
+ where can be configured in the "<code class="literal">[Sleep]</code>"
section of <code class="filename">/etc/systemd/sleep.conf</code>.
See <a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>.
- </p></div><div class="refsect1"><a name="idm259785791520"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
+ </p></div><div class="refsect1"><a name="idm274693205200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
following commands:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Print a short help
text and exit.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print the systemd version
identifier and exit.</p></dd><dt id="suspend"><span class="term"><code class="option">suspend</code>, </span><span class="term"><code class="option">hibernate</code>, </span><span class="term"><code class="option">hybrid-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>Suspend, hibernate, or
- put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm259785775920"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693189440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>,
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
diff --git a/man/systemd-hostnamed.8 b/man/systemd-hostnamed.8
new file mode 100644
index 0000000000..3690f5f53c
--- /dev/null
+++ b/man/systemd-hostnamed.8
@@ -0,0 +1 @@
+.so man8/systemd-hostnamed.service.8
diff --git a/man/systemd-hostnamed.html b/man/systemd-hostnamed.html
index c76bf493b8..d5923085d1 100644
--- a/man/systemd-hostnamed.html
+++ b/man/systemd-hostnamed.html
@@ -19,16 +19,16 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-hostnamed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-hostnamed.service, systemd-hostnamed — Hostname bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-hostnamed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-hostnamed</code></p></div><div class="refsect1"><a name="idm259781684160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-hostnamed</code> is a system
- service that may be used as mechanism to change the
- system hostname. <code class="filename">systemd-hostnamed</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-hostnamed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-hostnamed.service, systemd-hostnamed — Host name bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-hostnamed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-hostnamed</code></p></div><div class="refsect1"><a name="idm274706256080"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-hostnamed</code> is a system
+ service that may be used as a mechanism to change the
+ system's hostname. <code class="filename">systemd-hostnamed</code> is
automatically activated on request and terminates
itself when it is unused.</p><p>The tool
<a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>
- is a command line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/hostnamed" target="_top">
+ is a command-line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/hostnamed" target="_top">
developer documentation</a> for information about
the APIs <code class="filename">systemd-hostnamed</code>
- provides.</p></div><div class="refsect1"><a name="idm259781678416"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ provides.</p></div><div class="refsect1"><a name="idm274706250336"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>,
<a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a>,
diff --git a/man/systemd-hostnamed.service.8 b/man/systemd-hostnamed.service.8
new file mode 100644
index 0000000000..87bf098587
--- /dev/null
+++ b/man/systemd-hostnamed.service.8
@@ -0,0 +1,57 @@
+'\" t
+.TH "SYSTEMD\-HOSTNAMED\&.SERVICE" "8" "" "systemd 208" "systemd-hostnamed.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-hostnamed.service, systemd-hostnamed \- Host name bus mechanism
+.SH "SYNOPSIS"
+.PP
+systemd\-hostnamed\&.service
+.PP
+/usr/lib/systemd/systemd\-hostnamed
+.SH "DESCRIPTION"
+.PP
+systemd\-hostnamed
+is a system service that may be used as a mechanism to change the system\*(Aqs hostname\&.
+systemd\-hostnamed
+is automatically activated on request and terminates itself when it is unused\&.
+.PP
+The tool
+\fBhostnamectl\fR(1)
+is a command\-line client to this service\&.
+.PP
+See the
+\m[blue]\fBdeveloper documentation\fR\m[]\&\s-2\u[1]\d\s+2
+for information about the APIs
+systemd\-hostnamed
+provides\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBhostname\fR(5),
+\fBmachine-info\fR(5),
+\fBhostnamectl\fR(1),
+\fBsethostname\fR(2)
+.SH "NOTES"
+.IP " 1." 4
+developer documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/hostnamed
+.RE
diff --git a/man/systemd-hostnamed.service.html b/man/systemd-hostnamed.service.html
index c76bf493b8..d5923085d1 100644
--- a/man/systemd-hostnamed.service.html
+++ b/man/systemd-hostnamed.service.html
@@ -19,16 +19,16 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-hostnamed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-hostnamed.service, systemd-hostnamed — Hostname bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-hostnamed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-hostnamed</code></p></div><div class="refsect1"><a name="idm259781684160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-hostnamed</code> is a system
- service that may be used as mechanism to change the
- system hostname. <code class="filename">systemd-hostnamed</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-hostnamed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-hostnamed.service, systemd-hostnamed — Host name bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-hostnamed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-hostnamed</code></p></div><div class="refsect1"><a name="idm274706256080"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-hostnamed</code> is a system
+ service that may be used as a mechanism to change the
+ system's hostname. <code class="filename">systemd-hostnamed</code> is
automatically activated on request and terminates
itself when it is unused.</p><p>The tool
<a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>
- is a command line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/hostnamed" target="_top">
+ is a command-line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/hostnamed" target="_top">
developer documentation</a> for information about
the APIs <code class="filename">systemd-hostnamed</code>
- provides.</p></div><div class="refsect1"><a name="idm259781678416"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ provides.</p></div><div class="refsect1"><a name="idm274706250336"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>,
<a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a>,
diff --git a/man/systemd-hostnamed.service.xml b/man/systemd-hostnamed.service.xml
index fe64a62fbe..bdd3a51cc9 100644
--- a/man/systemd-hostnamed.service.xml
+++ b/man/systemd-hostnamed.service.xml
@@ -45,7 +45,7 @@
<refnamediv>
<refname>systemd-hostnamed.service</refname>
<refname>systemd-hostnamed</refname>
- <refpurpose>Hostname bus mechanism</refpurpose>
+ <refpurpose>Host name bus mechanism</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -57,14 +57,14 @@
<title>Description</title>
<para><filename>systemd-hostnamed</filename> is a system
- service that may be used as mechanism to change the
- system hostname. <filename>systemd-hostnamed</filename> is
+ service that may be used as a mechanism to change the
+ system's hostname. <filename>systemd-hostnamed</filename> is
automatically activated on request and terminates
itself when it is unused.</para>
<para>The tool
<citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
- is a command line client to this service.</para>
+ is a command-line client to this service.</para>
<para>See the <ulink
url="http://www.freedesktop.org/wiki/Software/systemd/hostnamed">
diff --git a/man/systemd-hybrid-sleep.service.8 b/man/systemd-hybrid-sleep.service.8
new file mode 100644
index 0000000000..ff3177737d
--- /dev/null
+++ b/man/systemd-hybrid-sleep.service.8
@@ -0,0 +1 @@
+.so man8/systemd-suspend.service.8
diff --git a/man/systemd-hybrid-sleep.service.html b/man/systemd-hybrid-sleep.service.html
index 0e5a2476d3..ef16bec4f4 100644
--- a/man/systemd-hybrid-sleep.service.html
+++ b/man/systemd-hybrid-sleep.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm259781854720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm274689275296"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
a system service that is pulled in by
<code class="filename">suspend.target</code> and is responsible
for the actual system suspend. Similarly,
@@ -50,7 +50,7 @@
<code class="filename">/usr/lib/systemd/system-sleep/</code>
are intended for local use only and should be
considered hacks. If applications want to be notified
- of system suspend/hibernation and resume there are
+ of system suspend/hibernation and resume, there are
much nicer interfaces available.</p><p>Note that
<code class="filename">systemd-suspend.service</code>,
<code class="filename">systemd-hibernate.service</code>, and
@@ -62,14 +62,14 @@
"<code class="literal">mem</code>" into
<code class="filename">/sys/power/state</code>, to trigger the
actual system suspend. What exactly is written
- where can be configured in the <code class="literal">[Sleep]</code>
+ where can be configured in the "<code class="literal">[Sleep]</code>"
section of <code class="filename">/etc/systemd/sleep.conf</code>.
See <a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>.
- </p></div><div class="refsect1"><a name="idm259785791520"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
+ </p></div><div class="refsect1"><a name="idm274693205200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
following commands:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Print a short help
text and exit.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print the systemd version
identifier and exit.</p></dd><dt id="suspend"><span class="term"><code class="option">suspend</code>, </span><span class="term"><code class="option">hibernate</code>, </span><span class="term"><code class="option">hybrid-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>Suspend, hibernate, or
- put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm259785775920"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693189440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>,
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
diff --git a/man/systemd-inhibit.1 b/man/systemd-inhibit.1
new file mode 100644
index 0000000000..7769cecfec
--- /dev/null
+++ b/man/systemd-inhibit.1
@@ -0,0 +1,126 @@
+'\" t
+.TH "SYSTEMD\-INHIBIT" "1" "" "systemd 208" "systemd-inhibit"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-inhibit \- Execute a program with an inhibition lock taken
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-inhibit\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[COMMAND]\fR\fB\ \fR\fB[ARGUMENTS...]\fR\ 'u
+\fBsystemd\-inhibit \fR\fB[OPTIONS...]\fR\fB \fR\fB[COMMAND]\fR\fB \fR\fB[ARGUMENTS...]\fR
+.HP \w'\fBsystemd\-inhibit\ \fR\fB[OPTIONS...]\fR\fB\ \-\-list\fR\ 'u
+\fBsystemd\-inhibit \fR\fB[OPTIONS...]\fR\fB \-\-list\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-inhibit\fR
+may be used to execute a program with a shutdown, sleep or idle inhibitor lock taken\&. The lock will be acquired before the specified command line is executed and released afterwards\&.
+.PP
+Inhibitor locks may be used to block or delay system sleep and shutdown requests from the user, as well as automatic idle handling of the OS\&. This is useful to avoid system suspends while an optical disc is being recorded, or similar operations that should not be interrupted\&.
+.PP
+For more information see the
+\m[blue]\fBInhibitor Lock Developer Documentation\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-what=\fR
+.RS 4
+Takes a colon\-separated list of one or more operations to inhibit:
+"shutdown",
+"sleep",
+"idle",
+"handle\-power\-key",
+"handle\-suspend\-key",
+"handle\-hibernate\-key",
+"handle\-lid\-switch", for inhibiting reboot/power\-off/halt/kexec, suspending/hibernating, the automatic idle detection, or the low\-level handling of the power/sleep key and the lid switch, respectively\&. If omitted, defaults to
+"idle:sleep:shutdown"\&.
+.RE
+.PP
+\fB\-\-who=\fR
+.RS 4
+Takes a short, human\-readable descriptive string for the program taking the lock\&. If not passed, defaults to the command line string\&.
+.RE
+.PP
+\fB\-\-why=\fR
+.RS 4
+Takes a short, human\-readable descriptive string for the reason for taking the lock\&. Defaults to "Unknown reason"\&.
+.RE
+.PP
+\fB\-\-mode=\fR
+.RS 4
+Takes either
+"block"
+or
+"delay"
+and describes how the lock is applied\&. If
+"block"
+is used (the default), the lock prohibits any of the requested operations without time limit, and only privileged users may override it\&. If
+"delay"
+is used, the lock can only delay the requested operations for a limited time\&. If the time elapses, the lock is ignored and the operation executed\&. The time limit may be specified in
+\fBsystemd-logind.conf\fR(5)\&. Note that
+"delay"
+is only available for
+"sleep"
+and
+"shutdown"\&.
+.RE
+.PP
+\fB\-\-list\fR
+.RS 4
+Lists all active inhibition locks instead of acquiring one\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+Returns the exit status of the executed program\&.
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# systemd\-inhibit wodim foobar\&.iso
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This burns the ISO image
+foobar\&.iso
+on a CD using
+\fBwodim\fR(1), and inhibits system sleeping, shutdown and idle while doing so\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-logind.conf\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+Inhibitor Lock Developer Documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/inhibit
+.RE
diff --git a/man/systemd-inhibit.html b/man/systemd-inhibit.html
index 821e6fbb21..4015fee48c 100644
--- a/man/systemd-inhibit.html
+++ b/man/systemd-inhibit.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-inhibit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-inhibit — Execute a program with an inhibition lock taken</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-inhibit [OPTIONS...] [COMMAND] [ARGUMENTS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-inhibit [OPTIONS...] --list</code> </p></div></div><div class="refsect1"><a name="idm259776490960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-inhibit</strong></span> may be used
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-inhibit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-inhibit — Execute a program with an inhibition lock taken</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-inhibit [OPTIONS...] [COMMAND] [ARGUMENTS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-inhibit [OPTIONS...] --list</code> </p></div></div><div class="refsect1"><a name="idm274679148528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-inhibit</strong></span> may be used
to execute a program with a shutdown, sleep or idle
inhibitor lock taken. The lock will be acquired before
the specified command line is executed and released
@@ -29,18 +29,18 @@
to avoid system suspends while an optical disc is
being recorded, or similar operations that should not
be interrupted.</p><p>For more information see the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/inhibit" target="_top">Inhibitor
- Lock Developer Documentation</a>.</p></div><div class="refsect1"><a name="idm259776487152"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ Lock Developer Documentation</a>.</p></div><div class="refsect1"><a name="idm274679144720"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
- string and exits.</p></dd><dt id="--what="><span class="term"><code class="option">--what=</code></span><a class="headerlink" title="Permalink to this term" href="#--what=">¶</a></dt><dd><p>Takes a colon
- separated list of one or more
+ string and exits.</p></dd><dt id="--what="><span class="term"><code class="option">--what=</code></span><a class="headerlink" title="Permalink to this term" href="#--what=">¶</a></dt><dd><p>Takes a colon-separated
+ list of one or more
operations to inhibit:
- <code class="literal">shutdown</code>,
- <code class="literal">sleep</code>,
- <code class="literal">idle</code>,
- <code class="literal">handle-power-key</code>,
- <code class="literal">handle-suspend-key</code>,
- <code class="literal">handle-hibernate-key</code>,
- <code class="literal">handle-lid-switch</code>,
+ "<code class="literal">shutdown</code>",
+ "<code class="literal">sleep</code>",
+ "<code class="literal">idle</code>",
+ "<code class="literal">handle-power-key</code>",
+ "<code class="literal">handle-suspend-key</code>",
+ "<code class="literal">handle-hibernate-key</code>",
+ "<code class="literal">handle-lid-switch</code>",
for inhibiting
reboot/power-off/halt/kexec,
suspending/hibernating, the automatic
@@ -48,39 +48,39 @@
handling of the power/sleep key and
the lid switch, respectively. If omitted,
defaults to
- <code class="literal">idle:sleep:shutdown</code>.</p></dd><dt id="--who="><span class="term"><code class="option">--who=</code></span><a class="headerlink" title="Permalink to this term" href="#--who=">¶</a></dt><dd><p>Takes a short human
- readable descriptive string for the
- program taking the lock. If not passed
+ "<code class="literal">idle:sleep:shutdown</code>".</p></dd><dt id="--who="><span class="term"><code class="option">--who=</code></span><a class="headerlink" title="Permalink to this term" href="#--who=">¶</a></dt><dd><p>Takes a short,
+ human-readable descriptive string for the
+ program taking the lock. If not passed,
defaults to the command line
- string.</p></dd><dt id="--why="><span class="term"><code class="option">--why=</code></span><a class="headerlink" title="Permalink to this term" href="#--why=">¶</a></dt><dd><p>Takes a short human
- readable descriptive string for the
+ string.</p></dd><dt id="--why="><span class="term"><code class="option">--why=</code></span><a class="headerlink" title="Permalink to this term" href="#--why=">¶</a></dt><dd><p>Takes a short,
+ human-readable descriptive string for the
reason for taking the lock. Defaults
to "Unknown reason".</p></dd><dt id="--mode="><span class="term"><code class="option">--mode=</code></span><a class="headerlink" title="Permalink to this term" href="#--mode=">¶</a></dt><dd><p>Takes either
- <code class="literal">block</code> or
- <code class="literal">delay</code> and describes
+ "<code class="literal">block</code>" or
+ "<code class="literal">delay</code>" and describes
how the lock is applied. If
- <code class="literal">block</code> is used (the
+ "<code class="literal">block</code>" is used (the
default), the lock prohibits any of
the requested operations without time
limit, and only privileged users may
override it. If
- <code class="literal">delay</code> is used, the
+ "<code class="literal">delay</code>" is used, the
lock can only delay the requested
operations for a limited time. If the
- time elapses the lock is ignored and
+ time elapses, the lock is ignored and
the operation executed. The time limit
may be specified in
<a href="systemd-logind.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.conf</span>(5)</span></a>. Note
- that <code class="literal">delay</code> is only
- available for <code class="literal">sleep</code>
+ that "<code class="literal">delay</code>" is only
+ available for "<code class="literal">sleep</code>"
and
- <code class="literal">shutdown</code>.</p></dd><dt id="--list"><span class="term"><code class="option">--list</code></span><a class="headerlink" title="Permalink to this term" href="#--list">¶</a></dt><dd><p>Lists all active
+ "<code class="literal">shutdown</code>".</p></dd><dt id="--list"><span class="term"><code class="option">--list</code></span><a class="headerlink" title="Permalink to this term" href="#--list">¶</a></dt><dd><p>Lists all active
inhibition locks instead of acquiring
- one.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780128128"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>Returns the exit status of the executed program.</p></div><div class="refsect1"><a name="idm259780119712"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting"># systemd-inhibit wodim foobar.iso</pre><p>This burns the ISO image
+ one.</p></dd></dl></div></div><div class="refsect1"><a name="idm274683065392"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>Returns the exit status of the executed program.</p></div><div class="refsect1"><a name="idm274683064208"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><pre class="programlisting"># systemd-inhibit wodim foobar.iso</pre><p>This burns the ISO image
<code class="filename">foobar.iso</code> on a CD using
<a href="wodim.html"><span class="citerefentry"><span class="refentrytitle">wodim</span>(1)</span></a>,
and inhibits system sleeping, shutdown and idle while
- doing so.</p></div><div class="refsect1"><a name="idm259780116208"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ doing so.</p></div><div class="refsect1"><a name="idm274683060720"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-logind.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.conf</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-inhibit.xml b/man/systemd-inhibit.xml
index 6f63c8c73e..de2f264147 100644
--- a/man/systemd-inhibit.xml
+++ b/man/systemd-inhibit.xml
@@ -101,8 +101,8 @@
<varlistentry>
<term><option>--what=</option></term>
- <listitem><para>Takes a colon
- separated list of one or more
+ <listitem><para>Takes a colon-separated
+ list of one or more
operations to inhibit:
<literal>shutdown</literal>,
<literal>sleep</literal>,
@@ -124,9 +124,9 @@
<varlistentry>
<term><option>--who=</option></term>
- <listitem><para>Takes a short human
- readable descriptive string for the
- program taking the lock. If not passed
+ <listitem><para>Takes a short,
+ human-readable descriptive string for the
+ program taking the lock. If not passed,
defaults to the command line
string.</para></listitem>
</varlistentry>
@@ -134,8 +134,8 @@
<varlistentry>
<term><option>--why=</option></term>
- <listitem><para>Takes a short human
- readable descriptive string for the
+ <listitem><para>Takes a short,
+ human-readable descriptive string for the
reason for taking the lock. Defaults
to "Unknown reason".</para></listitem>
</varlistentry>
@@ -155,7 +155,7 @@
<literal>delay</literal> is used, the
lock can only delay the requested
operations for a limited time. If the
- time elapses the lock is ignored and
+ time elapses, the lock is ignored and
the operation executed. The time limit
may be specified in
<citerefentry><refentrytitle>systemd-logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
diff --git a/man/systemd-initctl.8 b/man/systemd-initctl.8
new file mode 100644
index 0000000000..62fa60905b
--- /dev/null
+++ b/man/systemd-initctl.8
@@ -0,0 +1 @@
+.so man8/systemd-initctl.service.8
diff --git a/man/systemd-initctl.html b/man/systemd-initctl.html
index 5e8b390305..063da01e05 100644
--- a/man/systemd-initctl.html
+++ b/man/systemd-initctl.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-initctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-initctl.service, systemd-initctl.socket, systemd-initctl — /dev/initctl compatibility</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-initctl.service</code></p><p><code class="filename">systemd-initctl.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-initctl</code></p></div><div class="refsect1"><a name="idm259769612800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-initctl</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-initctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-initctl.service, systemd-initctl.socket, systemd-initctl — /dev/initctl compatibility</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-initctl.service</code></p><p><code class="filename">systemd-initctl.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-initctl</code></p></div><div class="refsect1"><a name="idm274688662656"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-initctl</code> is a system
service that implements compatibility with the
<code class="filename">/dev/initctl</code> FIFO file system
object, as implemented by the SysV init system. <code class="filename">systemd-initctl</code> is
automatically activated on request and terminates
- itself when it is unused.</p></div><div class="refsect1"><a name="idm259769609440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself when it is unused.</p></div><div class="refsect1"><a name="idm274688659296"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-initctl.service.8 b/man/systemd-initctl.service.8
new file mode 100644
index 0000000000..6f2450ea6f
--- /dev/null
+++ b/man/systemd-initctl.service.8
@@ -0,0 +1,41 @@
+'\" t
+.TH "SYSTEMD\-INITCTL\&.SERVICE" "8" "" "systemd 208" "systemd-initctl.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-initctl.service, systemd-initctl.socket, systemd-initctl \- /dev/initctl compatibility
+.SH "SYNOPSIS"
+.PP
+systemd\-initctl\&.service
+.PP
+systemd\-initctl\&.socket
+.PP
+/usr/lib/systemd/systemd\-initctl
+.SH "DESCRIPTION"
+.PP
+systemd\-initctl
+is a system service that implements compatibility with the
+/dev/initctl
+FIFO file system object, as implemented by the SysV init system\&.
+systemd\-initctl
+is automatically activated on request and terminates itself when it is unused\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1)
diff --git a/man/systemd-initctl.service.html b/man/systemd-initctl.service.html
index 5e8b390305..063da01e05 100644
--- a/man/systemd-initctl.service.html
+++ b/man/systemd-initctl.service.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-initctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-initctl.service, systemd-initctl.socket, systemd-initctl — /dev/initctl compatibility</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-initctl.service</code></p><p><code class="filename">systemd-initctl.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-initctl</code></p></div><div class="refsect1"><a name="idm259769612800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-initctl</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-initctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-initctl.service, systemd-initctl.socket, systemd-initctl — /dev/initctl compatibility</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-initctl.service</code></p><p><code class="filename">systemd-initctl.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-initctl</code></p></div><div class="refsect1"><a name="idm274688662656"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-initctl</code> is a system
service that implements compatibility with the
<code class="filename">/dev/initctl</code> FIFO file system
object, as implemented by the SysV init system. <code class="filename">systemd-initctl</code> is
automatically activated on request and terminates
- itself when it is unused.</p></div><div class="refsect1"><a name="idm259769609440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself when it is unused.</p></div><div class="refsect1"><a name="idm274688659296"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-initctl.socket.8 b/man/systemd-initctl.socket.8
new file mode 100644
index 0000000000..62fa60905b
--- /dev/null
+++ b/man/systemd-initctl.socket.8
@@ -0,0 +1 @@
+.so man8/systemd-initctl.service.8
diff --git a/man/systemd-initctl.socket.html b/man/systemd-initctl.socket.html
index 5e8b390305..063da01e05 100644
--- a/man/systemd-initctl.socket.html
+++ b/man/systemd-initctl.socket.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-initctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-initctl.service, systemd-initctl.socket, systemd-initctl — /dev/initctl compatibility</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-initctl.service</code></p><p><code class="filename">systemd-initctl.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-initctl</code></p></div><div class="refsect1"><a name="idm259769612800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-initctl</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-initctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-initctl.service, systemd-initctl.socket, systemd-initctl — /dev/initctl compatibility</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-initctl.service</code></p><p><code class="filename">systemd-initctl.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-initctl</code></p></div><div class="refsect1"><a name="idm274688662656"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-initctl</code> is a system
service that implements compatibility with the
<code class="filename">/dev/initctl</code> FIFO file system
object, as implemented by the SysV init system. <code class="filename">systemd-initctl</code> is
automatically activated on request and terminates
- itself when it is unused.</p></div><div class="refsect1"><a name="idm259769609440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself when it is unused.</p></div><div class="refsect1"><a name="idm274688659296"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-journal-gatewayd.8 b/man/systemd-journal-gatewayd.8
new file mode 100644
index 0000000000..1e2406aa0f
--- /dev/null
+++ b/man/systemd-journal-gatewayd.8
@@ -0,0 +1 @@
+.so man8/systemd-journal-gatewayd.service.8
diff --git a/man/systemd-journal-gatewayd.html b/man/systemd-journal-gatewayd.html
index c493bc3f74..935d6dcc29 100644
--- a/man/systemd-journal-gatewayd.html
+++ b/man/systemd-journal-gatewayd.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-journal-gatewayd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd — HTTP server for journal events</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journal-gatewayd.service</code></p><p><code class="filename">systemd-journal-gatewayd.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-journal-gatewayd</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm259769794768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-journal-gatewayd</strong></span> serves journal
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-journal-gatewayd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd — HTTP server for journal events</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journal-gatewayd.service</code></p><p><code class="filename">systemd-journal-gatewayd.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-journal-gatewayd</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm274688018288"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-journal-gatewayd</strong></span> serves journal
events over the network. Clients must connect using
HTTP. The server listens on port 19531 by default.
If <code class="option">--cert=</code> is specified, the server expects
@@ -28,7 +28,7 @@
and expects to receive a single socket. Use
<span class="command"><strong>systemctl start systemd-journal-gatewayd.socket</strong></span> to start
the service, and <span class="command"><strong>systemctl enable systemd-journal-gatewayd.socket</strong></span>
- to have it started on boot.</p></div><div class="refsect1"><a name="idm259766004864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ to have it started on boot.</p></div><div class="refsect1"><a name="idm274688013280"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--cert="><span class="term"><code class="option">--cert=</code></span><a class="headerlink" title="Permalink to this term" href="#--cert=">¶</a></dt><dd><p>Specify the path to a file containing a server
certificate in PEM format. This option switches
@@ -36,7 +36,7 @@
and must be used together with
<code class="option">--key=</code>.</p></dd><dt id="--key="><span class="term"><code class="option">--key=</code></span><a class="headerlink" title="Permalink to this term" href="#--key=">¶</a></dt><dd><p>Specify the path to a file containing a server
key in PEM format corresponding to the certificate specified
- with <code class="option">--cert=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259765995072"></a><h2 id="Supported URLs">Supported URLs<a class="headerlink" title="Permalink to this headline" href="#Supported%20URLs">¶</a></h2><p>The following URLs are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="/browse"><span class="term"><code class="uri">/browse</code></span><a class="headerlink" title="Permalink to this term" href="#/browse">¶</a></dt><dd><p>Interactive browsing.</p></dd><dt id="/entries[?option1&amp;option2=value...]"><span class="term"><code class="uri">/entries[?option1&amp;option2=value...]</code></span><a class="headerlink" title="Permalink to this term" href="#/entries%5B?option1&amp;option2=value...%5D">¶</a></dt><dd><p>Retrieval of events in various formats.</p><p>The <code class="option">Accept:</code> part of the HTTP header
+ with <code class="option">--cert=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691962480"></a><h2 id="Supported URLs">Supported URLs<a class="headerlink" title="Permalink to this headline" href="#Supported%20URLs">¶</a></h2><p>The following URLs are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="/browse"><span class="term"><code class="uri">/browse</code></span><a class="headerlink" title="Permalink to this term" href="#/browse">¶</a></dt><dd><p>Interactive browsing.</p></dd><dt id="/entries[?option1&amp;option2=value...]"><span class="term"><code class="uri">/entries[?option1&amp;option2=value...]</code></span><a class="headerlink" title="Permalink to this term" href="#/entries%5B?option1&amp;option2=value...%5D">¶</a></dt><dd><p>Retrieval of events in various formats.</p><p>The <code class="option">Accept:</code> part of the HTTP header
determines the format. Supported values are described below.
</p><p>The <code class="option">Range:</code> part of the HTTP header
determines the range of events returned. Supported values are
@@ -51,7 +51,7 @@
"virtualization" : "kvm",
...}
</pre><p>
- </p></dd><dt id="/fields/FIELD_NAME"><span class="term"><code class="uri">/fields/<em class="replaceable"><code>FIELD_NAME</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/fields/FIELD_NAME">¶</a></dt><dd><p>Return a list of values of this field present in the logs.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769886656"></a><h2 id="Accept header">Accept header<a class="headerlink" title="Permalink to this headline" href="#Accept%20header">¶</a></h2><p>
+ </p></dd><dt id="/fields/FIELD_NAME"><span class="term"><code class="uri">/fields/<em class="replaceable"><code>FIELD_NAME</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/fields/FIELD_NAME">¶</a></dt><dd><p>Return a list of values of this field present in the logs.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691950592"></a><h2 id="Accept header">Accept header<a class="headerlink" title="Permalink to this headline" href="#Accept%20header">¶</a></h2><p>
<code class="option">Accept: <em class="replaceable"><code>format</code></em></code>
</p><p>Recognized formats:</p><div class="variablelist"><dl class="variablelist"><dt id="text/plain"><span class="term"><code class="constant">text/plain</code></span><a class="headerlink" title="Permalink to this term" href="#text/plain">¶</a></dt><dd><p>The default. Plaintext syslog-like output,
one line per journal entry
@@ -68,18 +68,18 @@
transfer
(like <span class="command"><strong>journalctl --output export</strong></span>).
See <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
- Export Format</a> for more information.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769865008"></a><h2 id="Range header">Range header<a class="headerlink" title="Permalink to this headline" href="#Range%20header">¶</a></h2><p>
+ Export Format</a> for more information.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691929104"></a><h2 id="Range header">Range header<a class="headerlink" title="Permalink to this headline" href="#Range%20header">¶</a></h2><p>
<code class="option">Range: entries=<em class="replaceable"><code>cursor</code></em>[[:<em class="replaceable"><code>num_skip</code></em>]:<em class="replaceable"><code>num_entries</code></em>]</code>
</p><p>where
<code class="option">cursor</code> is a cursor string,
<code class="option">num_skip</code> is an integer,
<code class="option">num_entries</code> is an unsigned integer.
- </p><p>Range defaults to all available events.</p></div><div class="refsect1"><a name="idm259769859888"></a><h2 id="URL GET parameters">URL GET parameters<a class="headerlink" title="Permalink to this headline" href="#URL%20GET%20parameters">¶</a></h2><p>Following parameters can be used as part of the URL:</p><div class="variablelist"><dl class="variablelist"><dt id="follow"><span class="term"><code class="uri">follow</code></span><a class="headerlink" title="Permalink to this term" href="#follow">¶</a></dt><dd><p>wait for new events
+ </p><p>Range defaults to all available events.</p></div><div class="refsect1"><a name="idm274691923936"></a><h2 id="URL GET parameters">URL GET parameters<a class="headerlink" title="Permalink to this headline" href="#URL%20GET%20parameters">¶</a></h2><p>Following parameters can be used as part of the URL:</p><div class="variablelist"><dl class="variablelist"><dt id="follow"><span class="term"><code class="uri">follow</code></span><a class="headerlink" title="Permalink to this term" href="#follow">¶</a></dt><dd><p>wait for new events
(like <span class="command"><strong>journalctl --follow</strong></span>, except that
the number of events returned is not limited).</p></dd><dt id="discrete"><span class="term"><code class="uri">discrete</code></span><a class="headerlink" title="Permalink to this term" href="#discrete">¶</a></dt><dd><p>Test that the specified cursor refers to an
entry in the journal. Returns just this entry.</p></dd><dt id="boot"><span class="term"><code class="uri">boot</code></span><a class="headerlink" title="Permalink to this term" href="#boot">¶</a></dt><dd><p>Limit events to the current boot of the system
(like <span class="command"><strong>journalctl --this--boot</strong></span>).</p></dd><dt id="KEY=match"><span class="term"><code class="uri"><em class="replaceable"><code>KEY</code></em>=<em class="replaceable"><code>match</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#KEY=match">¶</a></dt><dd><p>Match journal fields. See
- <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769849184"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Retrieve events from this boot from local journal
+ <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274686947232"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Retrieve events from this boot from local journal
in <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
Export Format</a>:
</p><pre class="programlisting">
@@ -89,7 +89,7 @@ curl --silent -H'Accept: application/vnd.fdo.journal' \
</p><p>Listen for core dumps:
</p><pre class="programlisting">
curl 'http://localhost:19531/entries?follow&amp;MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1'
- </pre></div><div class="refsect1"><a name="idm259765215696"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274686943520"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>,
diff --git a/man/systemd-journal-gatewayd.service.8 b/man/systemd-journal-gatewayd.service.8
new file mode 100644
index 0000000000..e7b659bc40
--- /dev/null
+++ b/man/systemd-journal-gatewayd.service.8
@@ -0,0 +1,248 @@
+'\" t
+.TH "SYSTEMD\-JOURNAL\-GATEWAYD\&.SERVICE" "8" "" "systemd 208" "systemd-journal-gatewayd.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd \- HTTP server for journal events
+.SH "SYNOPSIS"
+.PP
+systemd\-journal\-gatewayd\&.service
+.PP
+systemd\-journal\-gatewayd\&.socket
+.HP \w'\fB/usr/lib/systemd/systemd\-journal\-gatewayd\fR\ 'u
+\fB/usr/lib/systemd/systemd\-journal\-gatewayd\fR [OPTIONS...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-journal\-gatewayd\fR
+serves journal events over the network\&. Clients must connect using HTTP\&. The server listens on port 19531 by default\&. If
+\fB\-\-cert=\fR
+is specified, the server expects HTTPS connections\&.
+.PP
+The program is started by
+\fBsystemd\fR(1)
+and expects to receive a single socket\&. Use
+\fBsystemctl start systemd\-journal\-gatewayd\&.socket\fR
+to start the service, and
+\fBsystemctl enable systemd\-journal\-gatewayd\&.socket\fR
+to have it started on boot\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-\-help\fR, \fB\-h\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-cert=\fR
+.RS 4
+Specify the path to a file containing a server certificate in PEM format\&. This option switches
+\fBsystemd\-journal\-gatewayd\fR
+into HTTPS mode and must be used together with
+\fB\-\-key=\fR\&.
+.RE
+.PP
+\fB\-\-key=\fR
+.RS 4
+Specify the path to a file containing a server key in PEM format corresponding to the certificate specified with
+\fB\-\-cert=\fR\&.
+.RE
+.SH "SUPPORTED URLS"
+.PP
+The following URLs are recognized:
+.PP
+/browse
+.RS 4
+Interactive browsing\&.
+.RE
+.PP
+/entries[?option1&option2=value\&.\&.\&.]
+.RS 4
+Retrieval of events in various formats\&.
+.sp
+The
+\fBAccept:\fR
+part of the HTTP header determines the format\&. Supported values are described below\&.
+.sp
+The
+\fBRange:\fR
+part of the HTTP header determines the range of events returned\&. Supported values are described below\&.
+.sp
+GET parameters can be used to modify what events are returned\&. Supported parameters are described below\&.
+.RE
+.PP
+/machine
+.RS 4
+Return a JSON structure describing the machine\&.
+.sp
+Example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+{ "machine_id" : "8cf7ed9d451ea194b77a9f118f3dc446",
+ "boot_id" : "3d3c9efaf556496a9b04259ee35df7f7",
+ "hostname" : "fedora",
+ "os_pretty_name" : "Fedora 19 (Rawhide)",
+ "virtualization" : "kvm",
+ \&.\&.\&.}
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+/fields/\fIFIELD_NAME\fR
+.RS 4
+Return a list of values of this field present in the logs\&.
+.RE
+.SH "ACCEPT HEADER"
+.PP
+\fBAccept: \fR\fB\fIformat\fR\fR
+.PP
+Recognized formats:
+.PP
+\fBtext/plain\fR
+.RS 4
+The default\&. Plaintext syslog\-like output, one line per journal entry (like
+\fBjournalctl \-\-output short\fR)\&.
+.RE
+.PP
+\fBapplication/json\fR
+.RS 4
+Entries are formatted as JSON data structures, one per line (like
+\fBjournalctl \-\-output json\fR)\&. See
+\m[blue]\fBJournal JSON Format\fR\m[]\&\s-2\u[1]\d\s+2
+for more information\&.
+.RE
+.PP
+\fBapplication/event\-stream\fR
+.RS 4
+Entries are formatted as JSON data structures, wrapped in a format suitable for
+\m[blue]\fBServer\-Sent Events\fR\m[]\&\s-2\u[2]\d\s+2
+(like
+\fBjournalctl \-\-output json\-sse\fR)\&.
+.RE
+.PP
+\fBapplication/vnd\&.fdo\&.journal\fR
+.RS 4
+Entries are serialized into a binary (but mostly text\-based) stream suitable for backups and network transfer (like
+\fBjournalctl \-\-output export\fR)\&. See
+\m[blue]\fBJournal Export Format\fR\m[]\&\s-2\u[3]\d\s+2
+for more information\&.
+.RE
+.SH "RANGE HEADER"
+.PP
+\fBRange: entries=\fR\fB\fIcursor\fR\fR\fB[[:\fR\fB\fInum_skip\fR\fR\fB]:\fR\fB\fInum_entries\fR\fR\fB]\fR
+.PP
+where
+\fBcursor\fR
+is a cursor string,
+\fBnum_skip\fR
+is an integer,
+\fBnum_entries\fR
+is an unsigned integer\&.
+.PP
+Range defaults to all available events\&.
+.SH "URL GET PARAMETERS"
+.PP
+Following parameters can be used as part of the URL:
+.PP
+follow
+.RS 4
+wait for new events (like
+\fBjournalctl \-\-follow\fR, except that the number of events returned is not limited)\&.
+.RE
+.PP
+discrete
+.RS 4
+Test that the specified cursor refers to an entry in the journal\&. Returns just this entry\&.
+.RE
+.PP
+boot
+.RS 4
+Limit events to the current boot of the system (like
+\fBjournalctl \-\-this\-\-boot\fR)\&.
+.RE
+.PP
+\fIKEY\fR=\fImatch\fR
+.RS 4
+Match journal fields\&. See
+\fBsystemd.journal-fields\fR(7)\&.
+.RE
+.SH "EXAMPLES"
+.PP
+Retrieve events from this boot from local journal in
+\m[blue]\fBJournal Export Format\fR\m[]\&\s-2\u[3]\d\s+2:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+curl \-\-silent \-H\*(AqAccept: application/vnd\&.fdo\&.journal\*(Aq \e
+ \*(Aqhttp://localhost:19531/entries?boot\*(Aq
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Listen for core dumps:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+curl \*(Aqhttp://localhost:19531/entries?follow&MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1\*(Aq
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBjournalctl\fR(1),
+\fBsystemd-journald.service\fR(8),
+\fBsystemd.journal-fields\fR(7),
+.SH "NOTES"
+.IP " 1." 4
+Journal JSON Format
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/json
+.RE
+.IP " 2." 4
+Server-Sent Events
+.RS 4
+\%https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
+.RE
+.IP " 3." 4
+Journal Export Format
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/export
+.RE
diff --git a/man/systemd-journal-gatewayd.service.html b/man/systemd-journal-gatewayd.service.html
index c493bc3f74..935d6dcc29 100644
--- a/man/systemd-journal-gatewayd.service.html
+++ b/man/systemd-journal-gatewayd.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-journal-gatewayd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd — HTTP server for journal events</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journal-gatewayd.service</code></p><p><code class="filename">systemd-journal-gatewayd.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-journal-gatewayd</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm259769794768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-journal-gatewayd</strong></span> serves journal
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-journal-gatewayd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd — HTTP server for journal events</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journal-gatewayd.service</code></p><p><code class="filename">systemd-journal-gatewayd.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-journal-gatewayd</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm274688018288"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-journal-gatewayd</strong></span> serves journal
events over the network. Clients must connect using
HTTP. The server listens on port 19531 by default.
If <code class="option">--cert=</code> is specified, the server expects
@@ -28,7 +28,7 @@
and expects to receive a single socket. Use
<span class="command"><strong>systemctl start systemd-journal-gatewayd.socket</strong></span> to start
the service, and <span class="command"><strong>systemctl enable systemd-journal-gatewayd.socket</strong></span>
- to have it started on boot.</p></div><div class="refsect1"><a name="idm259766004864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ to have it started on boot.</p></div><div class="refsect1"><a name="idm274688013280"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--cert="><span class="term"><code class="option">--cert=</code></span><a class="headerlink" title="Permalink to this term" href="#--cert=">¶</a></dt><dd><p>Specify the path to a file containing a server
certificate in PEM format. This option switches
@@ -36,7 +36,7 @@
and must be used together with
<code class="option">--key=</code>.</p></dd><dt id="--key="><span class="term"><code class="option">--key=</code></span><a class="headerlink" title="Permalink to this term" href="#--key=">¶</a></dt><dd><p>Specify the path to a file containing a server
key in PEM format corresponding to the certificate specified
- with <code class="option">--cert=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259765995072"></a><h2 id="Supported URLs">Supported URLs<a class="headerlink" title="Permalink to this headline" href="#Supported%20URLs">¶</a></h2><p>The following URLs are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="/browse"><span class="term"><code class="uri">/browse</code></span><a class="headerlink" title="Permalink to this term" href="#/browse">¶</a></dt><dd><p>Interactive browsing.</p></dd><dt id="/entries[?option1&amp;option2=value...]"><span class="term"><code class="uri">/entries[?option1&amp;option2=value...]</code></span><a class="headerlink" title="Permalink to this term" href="#/entries%5B?option1&amp;option2=value...%5D">¶</a></dt><dd><p>Retrieval of events in various formats.</p><p>The <code class="option">Accept:</code> part of the HTTP header
+ with <code class="option">--cert=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691962480"></a><h2 id="Supported URLs">Supported URLs<a class="headerlink" title="Permalink to this headline" href="#Supported%20URLs">¶</a></h2><p>The following URLs are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="/browse"><span class="term"><code class="uri">/browse</code></span><a class="headerlink" title="Permalink to this term" href="#/browse">¶</a></dt><dd><p>Interactive browsing.</p></dd><dt id="/entries[?option1&amp;option2=value...]"><span class="term"><code class="uri">/entries[?option1&amp;option2=value...]</code></span><a class="headerlink" title="Permalink to this term" href="#/entries%5B?option1&amp;option2=value...%5D">¶</a></dt><dd><p>Retrieval of events in various formats.</p><p>The <code class="option">Accept:</code> part of the HTTP header
determines the format. Supported values are described below.
</p><p>The <code class="option">Range:</code> part of the HTTP header
determines the range of events returned. Supported values are
@@ -51,7 +51,7 @@
"virtualization" : "kvm",
...}
</pre><p>
- </p></dd><dt id="/fields/FIELD_NAME"><span class="term"><code class="uri">/fields/<em class="replaceable"><code>FIELD_NAME</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/fields/FIELD_NAME">¶</a></dt><dd><p>Return a list of values of this field present in the logs.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769886656"></a><h2 id="Accept header">Accept header<a class="headerlink" title="Permalink to this headline" href="#Accept%20header">¶</a></h2><p>
+ </p></dd><dt id="/fields/FIELD_NAME"><span class="term"><code class="uri">/fields/<em class="replaceable"><code>FIELD_NAME</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/fields/FIELD_NAME">¶</a></dt><dd><p>Return a list of values of this field present in the logs.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691950592"></a><h2 id="Accept header">Accept header<a class="headerlink" title="Permalink to this headline" href="#Accept%20header">¶</a></h2><p>
<code class="option">Accept: <em class="replaceable"><code>format</code></em></code>
</p><p>Recognized formats:</p><div class="variablelist"><dl class="variablelist"><dt id="text/plain"><span class="term"><code class="constant">text/plain</code></span><a class="headerlink" title="Permalink to this term" href="#text/plain">¶</a></dt><dd><p>The default. Plaintext syslog-like output,
one line per journal entry
@@ -68,18 +68,18 @@
transfer
(like <span class="command"><strong>journalctl --output export</strong></span>).
See <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
- Export Format</a> for more information.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769865008"></a><h2 id="Range header">Range header<a class="headerlink" title="Permalink to this headline" href="#Range%20header">¶</a></h2><p>
+ Export Format</a> for more information.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691929104"></a><h2 id="Range header">Range header<a class="headerlink" title="Permalink to this headline" href="#Range%20header">¶</a></h2><p>
<code class="option">Range: entries=<em class="replaceable"><code>cursor</code></em>[[:<em class="replaceable"><code>num_skip</code></em>]:<em class="replaceable"><code>num_entries</code></em>]</code>
</p><p>where
<code class="option">cursor</code> is a cursor string,
<code class="option">num_skip</code> is an integer,
<code class="option">num_entries</code> is an unsigned integer.
- </p><p>Range defaults to all available events.</p></div><div class="refsect1"><a name="idm259769859888"></a><h2 id="URL GET parameters">URL GET parameters<a class="headerlink" title="Permalink to this headline" href="#URL%20GET%20parameters">¶</a></h2><p>Following parameters can be used as part of the URL:</p><div class="variablelist"><dl class="variablelist"><dt id="follow"><span class="term"><code class="uri">follow</code></span><a class="headerlink" title="Permalink to this term" href="#follow">¶</a></dt><dd><p>wait for new events
+ </p><p>Range defaults to all available events.</p></div><div class="refsect1"><a name="idm274691923936"></a><h2 id="URL GET parameters">URL GET parameters<a class="headerlink" title="Permalink to this headline" href="#URL%20GET%20parameters">¶</a></h2><p>Following parameters can be used as part of the URL:</p><div class="variablelist"><dl class="variablelist"><dt id="follow"><span class="term"><code class="uri">follow</code></span><a class="headerlink" title="Permalink to this term" href="#follow">¶</a></dt><dd><p>wait for new events
(like <span class="command"><strong>journalctl --follow</strong></span>, except that
the number of events returned is not limited).</p></dd><dt id="discrete"><span class="term"><code class="uri">discrete</code></span><a class="headerlink" title="Permalink to this term" href="#discrete">¶</a></dt><dd><p>Test that the specified cursor refers to an
entry in the journal. Returns just this entry.</p></dd><dt id="boot"><span class="term"><code class="uri">boot</code></span><a class="headerlink" title="Permalink to this term" href="#boot">¶</a></dt><dd><p>Limit events to the current boot of the system
(like <span class="command"><strong>journalctl --this--boot</strong></span>).</p></dd><dt id="KEY=match"><span class="term"><code class="uri"><em class="replaceable"><code>KEY</code></em>=<em class="replaceable"><code>match</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#KEY=match">¶</a></dt><dd><p>Match journal fields. See
- <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769849184"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Retrieve events from this boot from local journal
+ <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274686947232"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Retrieve events from this boot from local journal
in <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
Export Format</a>:
</p><pre class="programlisting">
@@ -89,7 +89,7 @@ curl --silent -H'Accept: application/vnd.fdo.journal' \
</p><p>Listen for core dumps:
</p><pre class="programlisting">
curl 'http://localhost:19531/entries?follow&amp;MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1'
- </pre></div><div class="refsect1"><a name="idm259765215696"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274686943520"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>,
diff --git a/man/systemd-journal-gatewayd.socket.8 b/man/systemd-journal-gatewayd.socket.8
new file mode 100644
index 0000000000..1e2406aa0f
--- /dev/null
+++ b/man/systemd-journal-gatewayd.socket.8
@@ -0,0 +1 @@
+.so man8/systemd-journal-gatewayd.service.8
diff --git a/man/systemd-journal-gatewayd.socket.html b/man/systemd-journal-gatewayd.socket.html
index c493bc3f74..935d6dcc29 100644
--- a/man/systemd-journal-gatewayd.socket.html
+++ b/man/systemd-journal-gatewayd.socket.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-journal-gatewayd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd — HTTP server for journal events</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journal-gatewayd.service</code></p><p><code class="filename">systemd-journal-gatewayd.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-journal-gatewayd</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm259769794768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-journal-gatewayd</strong></span> serves journal
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-journal-gatewayd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journal-gatewayd.service, systemd-journal-gatewayd.socket, systemd-journal-gatewayd — HTTP server for journal events</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journal-gatewayd.service</code></p><p><code class="filename">systemd-journal-gatewayd.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-journal-gatewayd</code> [OPTIONS...]</p></div></div><div class="refsect1"><a name="idm274688018288"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-journal-gatewayd</strong></span> serves journal
events over the network. Clients must connect using
HTTP. The server listens on port 19531 by default.
If <code class="option">--cert=</code> is specified, the server expects
@@ -28,7 +28,7 @@
and expects to receive a single socket. Use
<span class="command"><strong>systemctl start systemd-journal-gatewayd.socket</strong></span> to start
the service, and <span class="command"><strong>systemctl enable systemd-journal-gatewayd.socket</strong></span>
- to have it started on boot.</p></div><div class="refsect1"><a name="idm259766004864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ to have it started on boot.</p></div><div class="refsect1"><a name="idm274688013280"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code>, </span><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--cert="><span class="term"><code class="option">--cert=</code></span><a class="headerlink" title="Permalink to this term" href="#--cert=">¶</a></dt><dd><p>Specify the path to a file containing a server
certificate in PEM format. This option switches
@@ -36,7 +36,7 @@
and must be used together with
<code class="option">--key=</code>.</p></dd><dt id="--key="><span class="term"><code class="option">--key=</code></span><a class="headerlink" title="Permalink to this term" href="#--key=">¶</a></dt><dd><p>Specify the path to a file containing a server
key in PEM format corresponding to the certificate specified
- with <code class="option">--cert=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259765995072"></a><h2 id="Supported URLs">Supported URLs<a class="headerlink" title="Permalink to this headline" href="#Supported%20URLs">¶</a></h2><p>The following URLs are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="/browse"><span class="term"><code class="uri">/browse</code></span><a class="headerlink" title="Permalink to this term" href="#/browse">¶</a></dt><dd><p>Interactive browsing.</p></dd><dt id="/entries[?option1&amp;option2=value...]"><span class="term"><code class="uri">/entries[?option1&amp;option2=value...]</code></span><a class="headerlink" title="Permalink to this term" href="#/entries%5B?option1&amp;option2=value...%5D">¶</a></dt><dd><p>Retrieval of events in various formats.</p><p>The <code class="option">Accept:</code> part of the HTTP header
+ with <code class="option">--cert=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691962480"></a><h2 id="Supported URLs">Supported URLs<a class="headerlink" title="Permalink to this headline" href="#Supported%20URLs">¶</a></h2><p>The following URLs are recognized:</p><div class="variablelist"><dl class="variablelist"><dt id="/browse"><span class="term"><code class="uri">/browse</code></span><a class="headerlink" title="Permalink to this term" href="#/browse">¶</a></dt><dd><p>Interactive browsing.</p></dd><dt id="/entries[?option1&amp;option2=value...]"><span class="term"><code class="uri">/entries[?option1&amp;option2=value...]</code></span><a class="headerlink" title="Permalink to this term" href="#/entries%5B?option1&amp;option2=value...%5D">¶</a></dt><dd><p>Retrieval of events in various formats.</p><p>The <code class="option">Accept:</code> part of the HTTP header
determines the format. Supported values are described below.
</p><p>The <code class="option">Range:</code> part of the HTTP header
determines the range of events returned. Supported values are
@@ -51,7 +51,7 @@
"virtualization" : "kvm",
...}
</pre><p>
- </p></dd><dt id="/fields/FIELD_NAME"><span class="term"><code class="uri">/fields/<em class="replaceable"><code>FIELD_NAME</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/fields/FIELD_NAME">¶</a></dt><dd><p>Return a list of values of this field present in the logs.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769886656"></a><h2 id="Accept header">Accept header<a class="headerlink" title="Permalink to this headline" href="#Accept%20header">¶</a></h2><p>
+ </p></dd><dt id="/fields/FIELD_NAME"><span class="term"><code class="uri">/fields/<em class="replaceable"><code>FIELD_NAME</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/fields/FIELD_NAME">¶</a></dt><dd><p>Return a list of values of this field present in the logs.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691950592"></a><h2 id="Accept header">Accept header<a class="headerlink" title="Permalink to this headline" href="#Accept%20header">¶</a></h2><p>
<code class="option">Accept: <em class="replaceable"><code>format</code></em></code>
</p><p>Recognized formats:</p><div class="variablelist"><dl class="variablelist"><dt id="text/plain"><span class="term"><code class="constant">text/plain</code></span><a class="headerlink" title="Permalink to this term" href="#text/plain">¶</a></dt><dd><p>The default. Plaintext syslog-like output,
one line per journal entry
@@ -68,18 +68,18 @@
transfer
(like <span class="command"><strong>journalctl --output export</strong></span>).
See <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
- Export Format</a> for more information.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769865008"></a><h2 id="Range header">Range header<a class="headerlink" title="Permalink to this headline" href="#Range%20header">¶</a></h2><p>
+ Export Format</a> for more information.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691929104"></a><h2 id="Range header">Range header<a class="headerlink" title="Permalink to this headline" href="#Range%20header">¶</a></h2><p>
<code class="option">Range: entries=<em class="replaceable"><code>cursor</code></em>[[:<em class="replaceable"><code>num_skip</code></em>]:<em class="replaceable"><code>num_entries</code></em>]</code>
</p><p>where
<code class="option">cursor</code> is a cursor string,
<code class="option">num_skip</code> is an integer,
<code class="option">num_entries</code> is an unsigned integer.
- </p><p>Range defaults to all available events.</p></div><div class="refsect1"><a name="idm259769859888"></a><h2 id="URL GET parameters">URL GET parameters<a class="headerlink" title="Permalink to this headline" href="#URL%20GET%20parameters">¶</a></h2><p>Following parameters can be used as part of the URL:</p><div class="variablelist"><dl class="variablelist"><dt id="follow"><span class="term"><code class="uri">follow</code></span><a class="headerlink" title="Permalink to this term" href="#follow">¶</a></dt><dd><p>wait for new events
+ </p><p>Range defaults to all available events.</p></div><div class="refsect1"><a name="idm274691923936"></a><h2 id="URL GET parameters">URL GET parameters<a class="headerlink" title="Permalink to this headline" href="#URL%20GET%20parameters">¶</a></h2><p>Following parameters can be used as part of the URL:</p><div class="variablelist"><dl class="variablelist"><dt id="follow"><span class="term"><code class="uri">follow</code></span><a class="headerlink" title="Permalink to this term" href="#follow">¶</a></dt><dd><p>wait for new events
(like <span class="command"><strong>journalctl --follow</strong></span>, except that
the number of events returned is not limited).</p></dd><dt id="discrete"><span class="term"><code class="uri">discrete</code></span><a class="headerlink" title="Permalink to this term" href="#discrete">¶</a></dt><dd><p>Test that the specified cursor refers to an
entry in the journal. Returns just this entry.</p></dd><dt id="boot"><span class="term"><code class="uri">boot</code></span><a class="headerlink" title="Permalink to this term" href="#boot">¶</a></dt><dd><p>Limit events to the current boot of the system
(like <span class="command"><strong>journalctl --this--boot</strong></span>).</p></dd><dt id="KEY=match"><span class="term"><code class="uri"><em class="replaceable"><code>KEY</code></em>=<em class="replaceable"><code>match</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#KEY=match">¶</a></dt><dd><p>Match journal fields. See
- <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259769849184"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Retrieve events from this boot from local journal
+ <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274686947232"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Retrieve events from this boot from local journal
in <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
Export Format</a>:
</p><pre class="programlisting">
@@ -89,7 +89,7 @@ curl --silent -H'Accept: application/vnd.fdo.journal' \
</p><p>Listen for core dumps:
</p><pre class="programlisting">
curl 'http://localhost:19531/entries?follow&amp;MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1'
- </pre></div><div class="refsect1"><a name="idm259765215696"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274686943520"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>,
diff --git a/man/systemd-journald.8 b/man/systemd-journald.8
new file mode 100644
index 0000000000..59737ad86b
--- /dev/null
+++ b/man/systemd-journald.8
@@ -0,0 +1 @@
+.so man8/systemd-journald.service.8
diff --git a/man/systemd-journald.html b/man/systemd-journald.html
index 2ea10eddef..ba9feef454 100644
--- a/man/systemd-journald.html
+++ b/man/systemd-journald.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-journald.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journald.service, systemd-journald.socket, systemd-journald — Journal service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journald.service</code></p><p><code class="filename">systemd-journald.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-journald</code></p></div><div class="refsect1"><a name="idm259777157632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-journald</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-journald.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journald.service, systemd-journald.socket, systemd-journald — Journal service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journald.service</code></p><p><code class="filename">systemd-journald.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-journald</code></p></div><div class="refsect1"><a name="idm274689768352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-journald</code> is a
system service that collects and stores logging
data. It creates and maintains structured, indexed
journals based on logging information that is received
@@ -32,24 +32,24 @@
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for more information about the collected meta data.
</p><p>Log data collected by the journal is primarily
- text based but can also include binary data where
+ text-based but can also include binary data where
necessary. All objects stored in the journal can be up
- to 2^64-1 bytes in size.</p><p>By default the journal stores log data in
+ to 2^64-1 bytes in size.</p><p>By default, the journal stores log data in
<code class="filename">/run/log/journal/</code>. Since
- <code class="filename">/run/</code> is volatile log data is
- lost at reboot. To make the data persistent it
+ <code class="filename">/run/</code> is volatile, log data is
+ lost at reboot. To make the data persistent, it
is sufficient to create
<code class="filename">/var/log/journal/</code> where
<code class="filename">systemd-journald</code> will then store
the data.</p><p><code class="filename">systemd-journald</code> will
- forward all received log messages to the AF_UNIX
- SOCK_DGRAM socket
- <code class="filename">/run/systemd/journal/syslog</code> (if it exists) which
- may be used by UNIX syslog daemons to process the data
+ forward all received log messages to the <code class="constant">AF_UNIX</code>
+ <code class="constant">SOCK_DGRAM</code> socket
+ <code class="filename">/run/systemd/journal/syslog</code>, if it exists, which
+ may be used by Unix syslog daemons to process the data
further.</p><p>See
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259777146368"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>Request that journal
+ service.</p></div><div class="refsect1"><a name="idm274689756352"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>Request that journal
data from <code class="filename">/run/</code>
is flushed to
<code class="filename">/var/</code> in order to
@@ -62,7 +62,7 @@
regardless of the
configuration.</p></dd><dt id="SIGUSR2"><span class="term">SIGUSR2</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>Request immediate
rotation of the journal
- files.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780805344"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
+ files.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693702112"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
<code class="filename">journald.conf</code> may be overridden on
the kernel command line:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.journald.forward_to_syslog="><span class="term"><code class="varname">systemd.journald.forward_to_syslog=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_kmsg=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_console=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_syslog=">¶</a></dt><dd><p>Enables/disables
forwarding of collected log messages
@@ -70,30 +70,56 @@
the system console.
</p><p>See
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
- for information about these settings.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780798608"></a><h2 id="Access Control">Access Control<a class="headerlink" title="Permalink to this headline" href="#Access%20Control">¶</a></h2><p>Journal files are by default owned and readable
- by the <code class="literal">systemd-journal</code> system group
- (but not writable). Adding a user to this group thus
+ for information about these settings.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693695376"></a><h2 id="Access Control">Access Control<a class="headerlink" title="Permalink to this headline" href="#Access%20Control">¶</a></h2><p>Journal files are, by default, owned and readable
+ by the "<code class="literal">systemd-journal</code>" system group
+ but are not writable. Adding a user to this group thus
enables her/him to read the journal files.</p><p>By default, each logged in user will get her/his
own set of journal files in
<code class="filename">/var/log/journal/</code>. These files
- will not be owned by the user however, in order to
+ will not be owned by the user, however, in order to
avoid that the user can write to them
directly. Instead, file system ACLs are used to ensure
the user gets read access only.</p><p>Additional users and groups may be granted
access to journal files via file system access control
lists (ACL). Distributions and administrators may
choose to grant read access to all members of the
- <code class="literal">wheel</code> and <code class="literal">adm</code>
+ "<code class="literal">wheel</code>" and "<code class="literal">adm</code>"
system groups with a command such as the
following:</p><pre class="programlisting"># setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/</pre><p>Note that this command will update the ACLs both
for existing journal files and for future journal
files created in the
<code class="filename">/var/log/journal/</code>
- directory.</p></div><div class="refsect1"><a name="idm259780783648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ directory.</p></div><div class="refsect1"><a name="idm274693680544"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/etc/systemd/journald.conf"><span class="term"><code class="filename">/etc/systemd/journald.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/journald.conf">¶</a></dt><dd><p>Configure
+ <span class="command"><strong>systemd-journald</strong></span>
+ behaviour. See
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>.
+ </p></dd><dt id="/run/log/journal/machine-id/*.journal"><span class="term"><code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal</code>, </span><span class="term"><code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal~</code>, </span><span class="term"><code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal</code>, </span><span class="term"><code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal~</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log/journal/machine-id/*.journal">¶</a></dt><dd><p><span class="command"><strong>systemd-journald</strong></span>
+ writes entries to files in
+ <code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/</code>
+ or
+ <code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/</code>
+ with the "<code class="literal">.journal</code>"
+ suffix. If the daemon is stopped
+ uncleanly, or if the files are found
+ to be corrupted, they are renamed
+ using the "<code class="literal">.journal~</code>"
+ suffix, and
+ <span class="command"><strong>systemd-journald</strong></span>
+ starts writing to a new
+ file. <code class="filename">/run</code> is
+ used when
+ <code class="filename">/var/log/journal</code>
+ is not available, or when
+ <code class="option">Storage=volatile</code> is
+ set in the
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
+ configuration file.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274693661840"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
- <a href="setfacl.html"><span class="citerefentry"><span class="refentrytitle">setfacl</span>(1)</span></a>
+ <a href="setfacl.html"><span class="citerefentry"><span class="refentrytitle">setfacl</span>(1)</span></a>,
+ <span class="command"><strong>pydoc systemd.journal</strong></span>.
</p></div></div></body></html>
diff --git a/man/systemd-journald.service.8 b/man/systemd-journald.service.8
new file mode 100644
index 0000000000..d5f630df40
--- /dev/null
+++ b/man/systemd-journald.service.8
@@ -0,0 +1,164 @@
+'\" t
+.TH "SYSTEMD\-JOURNALD\&.SERVICE" "8" "" "systemd 208" "systemd-journald.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-journald.service, systemd-journald.socket, systemd-journald \- Journal service
+.SH "SYNOPSIS"
+.PP
+systemd\-journald\&.service
+.PP
+systemd\-journald\&.socket
+.PP
+/usr/lib/systemd/systemd\-journald
+.SH "DESCRIPTION"
+.PP
+systemd\-journald
+is a system service that collects and stores logging data\&. It creates and maintains structured, indexed journals based on logging information that is received from the kernel, from user processes via the libc
+\fBsyslog\fR(3)
+call, from STDOUT/STDERR of system services or via its native API\&. It will implicitly collect numerous meta data fields for each log messages in a secure and unfakeable way\&. See
+\fBsystemd.journal-fields\fR(7)
+for more information about the collected meta data\&.
+.PP
+Log data collected by the journal is primarily text\-based but can also include binary data where necessary\&. All objects stored in the journal can be up to 2^64\-1 bytes in size\&.
+.PP
+By default, the journal stores log data in
+/run/log/journal/\&. Since
+/run/
+is volatile, log data is lost at reboot\&. To make the data persistent, it is sufficient to create
+/var/log/journal/
+where
+systemd\-journald
+will then store the data\&.
+.PP
+systemd\-journald
+will forward all received log messages to the
+\fBAF_UNIX\fR\fBSOCK_DGRAM\fR
+socket
+/run/systemd/journal/syslog, if it exists, which may be used by Unix syslog daemons to process the data further\&.
+.PP
+See
+\fBjournald.conf\fR(5)
+for information about the configuration of this service\&.
+.SH "SIGNALS"
+.PP
+SIGUSR1
+.RS 4
+Request that journal data from
+/run/
+is flushed to
+/var/
+in order to make it persistent (if this is enabled)\&. This must be used after
+/var/
+is mounted, as otherwise log data from
+/run
+is never flushed to
+/var
+regardless of the configuration\&.
+.RE
+.PP
+SIGUSR2
+.RS 4
+Request immediate rotation of the journal files\&.
+.RE
+.SH "KERNEL COMMAND LINE"
+.PP
+A few configuration parameters from
+journald\&.conf
+may be overridden on the kernel command line:
+.PP
+\fIsystemd\&.journald\&.forward_to_syslog=\fR, \fIsystemd\&.journald\&.forward_to_kmsg=\fR, \fIsystemd\&.journald\&.forward_to_console=\fR
+.RS 4
+Enables/disables forwarding of collected log messages to syslog, the kernel log buffer or the system console\&.
+.sp
+See
+\fBjournald.conf\fR(5)
+for information about these settings\&.
+.RE
+.SH "ACCESS CONTROL"
+.PP
+Journal files are, by default, owned and readable by the
+"systemd\-journal"
+system group but are not writable\&. Adding a user to this group thus enables her/him to read the journal files\&.
+.PP
+By default, each logged in user will get her/his own set of journal files in
+/var/log/journal/\&. These files will not be owned by the user, however, in order to avoid that the user can write to them directly\&. Instead, file system ACLs are used to ensure the user gets read access only\&.
+.PP
+Additional users and groups may be granted access to journal files via file system access control lists (ACL)\&. Distributions and administrators may choose to grant read access to all members of the
+"wheel"
+and
+"adm"
+system groups with a command such as the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# setfacl \-Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Note that this command will update the ACLs both for existing journal files and for future journal files created in the
+/var/log/journal/
+directory\&.
+.SH "FILES"
+.PP
+/etc/systemd/journald\&.conf
+.RS 4
+Configure
+\fBsystemd\-journald\fR
+behaviour\&. See
+\fBjournald.conf\fR(5)\&.
+.RE
+.PP
+/run/log/journal/\fImachine\-id\fR/*\&.journal, /run/log/journal/\fImachine\-id\fR/*\&.journal~, /var/log/journal/\fImachine\-id\fR/*\&.journal, /var/log/journal/\fImachine\-id\fR/*\&.journal~
+.RS 4
+\fBsystemd\-journald\fR
+writes entries to files in
+/run/log/journal/\fImachine\-id\fR/
+or
+/var/log/journal/\fImachine\-id\fR/
+with the
+"\&.journal"
+suffix\&. If the daemon is stopped uncleanly, or if the files are found to be corrupted, they are renamed using the
+"\&.journal~"
+suffix, and
+\fBsystemd\-journald\fR
+starts writing to a new file\&.
+/run
+is used when
+/var/log/journal
+is not available, or when
+\fBStorage=volatile\fR
+is set in the
+\fBjournald.conf\fR(5)
+configuration file\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBjournalctl\fR(1),
+\fBjournald.conf\fR(5),
+\fBsystemd.journal-fields\fR(7),
+\fBsd-journal\fR(3),
+\fBsetfacl\fR(1),
+\fBpydoc systemd\&.journal\fR\&.
diff --git a/man/systemd-journald.service.html b/man/systemd-journald.service.html
index 2ea10eddef..ba9feef454 100644
--- a/man/systemd-journald.service.html
+++ b/man/systemd-journald.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-journald.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journald.service, systemd-journald.socket, systemd-journald — Journal service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journald.service</code></p><p><code class="filename">systemd-journald.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-journald</code></p></div><div class="refsect1"><a name="idm259777157632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-journald</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-journald.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journald.service, systemd-journald.socket, systemd-journald — Journal service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journald.service</code></p><p><code class="filename">systemd-journald.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-journald</code></p></div><div class="refsect1"><a name="idm274689768352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-journald</code> is a
system service that collects and stores logging
data. It creates and maintains structured, indexed
journals based on logging information that is received
@@ -32,24 +32,24 @@
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for more information about the collected meta data.
</p><p>Log data collected by the journal is primarily
- text based but can also include binary data where
+ text-based but can also include binary data where
necessary. All objects stored in the journal can be up
- to 2^64-1 bytes in size.</p><p>By default the journal stores log data in
+ to 2^64-1 bytes in size.</p><p>By default, the journal stores log data in
<code class="filename">/run/log/journal/</code>. Since
- <code class="filename">/run/</code> is volatile log data is
- lost at reboot. To make the data persistent it
+ <code class="filename">/run/</code> is volatile, log data is
+ lost at reboot. To make the data persistent, it
is sufficient to create
<code class="filename">/var/log/journal/</code> where
<code class="filename">systemd-journald</code> will then store
the data.</p><p><code class="filename">systemd-journald</code> will
- forward all received log messages to the AF_UNIX
- SOCK_DGRAM socket
- <code class="filename">/run/systemd/journal/syslog</code> (if it exists) which
- may be used by UNIX syslog daemons to process the data
+ forward all received log messages to the <code class="constant">AF_UNIX</code>
+ <code class="constant">SOCK_DGRAM</code> socket
+ <code class="filename">/run/systemd/journal/syslog</code>, if it exists, which
+ may be used by Unix syslog daemons to process the data
further.</p><p>See
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259777146368"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>Request that journal
+ service.</p></div><div class="refsect1"><a name="idm274689756352"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>Request that journal
data from <code class="filename">/run/</code>
is flushed to
<code class="filename">/var/</code> in order to
@@ -62,7 +62,7 @@
regardless of the
configuration.</p></dd><dt id="SIGUSR2"><span class="term">SIGUSR2</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>Request immediate
rotation of the journal
- files.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780805344"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
+ files.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693702112"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
<code class="filename">journald.conf</code> may be overridden on
the kernel command line:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.journald.forward_to_syslog="><span class="term"><code class="varname">systemd.journald.forward_to_syslog=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_kmsg=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_console=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_syslog=">¶</a></dt><dd><p>Enables/disables
forwarding of collected log messages
@@ -70,30 +70,56 @@
the system console.
</p><p>See
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
- for information about these settings.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780798608"></a><h2 id="Access Control">Access Control<a class="headerlink" title="Permalink to this headline" href="#Access%20Control">¶</a></h2><p>Journal files are by default owned and readable
- by the <code class="literal">systemd-journal</code> system group
- (but not writable). Adding a user to this group thus
+ for information about these settings.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693695376"></a><h2 id="Access Control">Access Control<a class="headerlink" title="Permalink to this headline" href="#Access%20Control">¶</a></h2><p>Journal files are, by default, owned and readable
+ by the "<code class="literal">systemd-journal</code>" system group
+ but are not writable. Adding a user to this group thus
enables her/him to read the journal files.</p><p>By default, each logged in user will get her/his
own set of journal files in
<code class="filename">/var/log/journal/</code>. These files
- will not be owned by the user however, in order to
+ will not be owned by the user, however, in order to
avoid that the user can write to them
directly. Instead, file system ACLs are used to ensure
the user gets read access only.</p><p>Additional users and groups may be granted
access to journal files via file system access control
lists (ACL). Distributions and administrators may
choose to grant read access to all members of the
- <code class="literal">wheel</code> and <code class="literal">adm</code>
+ "<code class="literal">wheel</code>" and "<code class="literal">adm</code>"
system groups with a command such as the
following:</p><pre class="programlisting"># setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/</pre><p>Note that this command will update the ACLs both
for existing journal files and for future journal
files created in the
<code class="filename">/var/log/journal/</code>
- directory.</p></div><div class="refsect1"><a name="idm259780783648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ directory.</p></div><div class="refsect1"><a name="idm274693680544"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/etc/systemd/journald.conf"><span class="term"><code class="filename">/etc/systemd/journald.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/journald.conf">¶</a></dt><dd><p>Configure
+ <span class="command"><strong>systemd-journald</strong></span>
+ behaviour. See
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>.
+ </p></dd><dt id="/run/log/journal/machine-id/*.journal"><span class="term"><code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal</code>, </span><span class="term"><code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal~</code>, </span><span class="term"><code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal</code>, </span><span class="term"><code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal~</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log/journal/machine-id/*.journal">¶</a></dt><dd><p><span class="command"><strong>systemd-journald</strong></span>
+ writes entries to files in
+ <code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/</code>
+ or
+ <code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/</code>
+ with the "<code class="literal">.journal</code>"
+ suffix. If the daemon is stopped
+ uncleanly, or if the files are found
+ to be corrupted, they are renamed
+ using the "<code class="literal">.journal~</code>"
+ suffix, and
+ <span class="command"><strong>systemd-journald</strong></span>
+ starts writing to a new
+ file. <code class="filename">/run</code> is
+ used when
+ <code class="filename">/var/log/journal</code>
+ is not available, or when
+ <code class="option">Storage=volatile</code> is
+ set in the
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
+ configuration file.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274693661840"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
- <a href="setfacl.html"><span class="citerefentry"><span class="refentrytitle">setfacl</span>(1)</span></a>
+ <a href="setfacl.html"><span class="citerefentry"><span class="refentrytitle">setfacl</span>(1)</span></a>,
+ <span class="command"><strong>pydoc systemd.journal</strong></span>.
</p></div></div></body></html>
diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml
index 822f3c28f0..2f877f565c 100644
--- a/man/systemd-journald.service.xml
+++ b/man/systemd-journald.service.xml
@@ -73,24 +73,24 @@
</para>
<para>Log data collected by the journal is primarily
- text based but can also include binary data where
+ text-based but can also include binary data where
necessary. All objects stored in the journal can be up
to 2^64-1 bytes in size.</para>
- <para>By default the journal stores log data in
+ <para>By default, the journal stores log data in
<filename>/run/log/journal/</filename>. Since
- <filename>/run/</filename> is volatile log data is
- lost at reboot. To make the data persistent it
+ <filename>/run/</filename> is volatile, log data is
+ lost at reboot. To make the data persistent, it
is sufficient to create
<filename>/var/log/journal/</filename> where
<filename>systemd-journald</filename> will then store
the data.</para>
<para><filename>systemd-journald</filename> will
- forward all received log messages to the AF_UNIX
- SOCK_DGRAM socket
- <filename>/run/systemd/journal/syslog</filename> (if it exists) which
- may be used by UNIX syslog daemons to process the data
+ forward all received log messages to the <constant>AF_UNIX</constant>
+ <constant>SOCK_DGRAM</constant> socket
+ <filename>/run/systemd/journal/syslog</filename>, if it exists, which
+ may be used by Unix syslog daemons to process the data
further.</para>
<para>See
@@ -161,15 +161,15 @@
<refsect1>
<title>Access Control</title>
- <para>Journal files are by default owned and readable
+ <para>Journal files are, by default, owned and readable
by the <literal>systemd-journal</literal> system group
- (but not writable). Adding a user to this group thus
+ but are not writable. Adding a user to this group thus
enables her/him to read the journal files.</para>
<para>By default, each logged in user will get her/his
own set of journal files in
<filename>/var/log/journal/</filename>. These files
- will not be owned by the user however, in order to
+ will not be owned by the user, however, in order to
avoid that the user can write to them
directly. Instead, file system ACLs are used to ensure
the user gets read access only.</para>
@@ -192,6 +192,52 @@
</refsect1>
<refsect1>
+ <title>Files</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/systemd/journald.conf</filename></term>
+
+ <listitem><para>Configure
+ <command>systemd-journald</command>
+ behaviour. See
+ <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>/run/log/journal/<replaceable>machine-id</replaceable>/*.journal</filename></term>
+ <term><filename>/run/log/journal/<replaceable>machine-id</replaceable>/*.journal~</filename></term>
+ <term><filename>/var/log/journal/<replaceable>machine-id</replaceable>/*.journal</filename></term>
+ <term><filename>/var/log/journal/<replaceable>machine-id</replaceable>/*.journal~</filename></term>
+
+ <listitem><para><command>systemd-journald</command>
+ writes entries to files in
+ <filename>/run/log/journal/<replaceable>machine-id</replaceable>/</filename>
+ or
+ <filename>/var/log/journal/<replaceable>machine-id</replaceable>/</filename>
+ with the <literal>.journal</literal>
+ suffix. If the daemon is stopped
+ uncleanly, or if the files are found
+ to be corrupted, they are renamed
+ using the <literal>.journal~</literal>
+ suffix, and
+ <command>systemd-journald</command>
+ starts writing to a new
+ file. <filename>/run</filename> is
+ used when
+ <filename>/var/log/journal</filename>
+ is not available, or when
+ <option>Storage=volatile</option> is
+ set in the
+ <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ configuration file.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
@@ -199,7 +245,8 @@
<citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>setfacl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>setfacl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <command>pydoc systemd.journal</command>.
</para>
</refsect1>
diff --git a/man/systemd-journald.socket.8 b/man/systemd-journald.socket.8
new file mode 100644
index 0000000000..59737ad86b
--- /dev/null
+++ b/man/systemd-journald.socket.8
@@ -0,0 +1 @@
+.so man8/systemd-journald.service.8
diff --git a/man/systemd-journald.socket.html b/man/systemd-journald.socket.html
index 2ea10eddef..ba9feef454 100644
--- a/man/systemd-journald.socket.html
+++ b/man/systemd-journald.socket.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-journald.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journald.service, systemd-journald.socket, systemd-journald — Journal service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journald.service</code></p><p><code class="filename">systemd-journald.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-journald</code></p></div><div class="refsect1"><a name="idm259777157632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-journald</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-journald.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-journald.service, systemd-journald.socket, systemd-journald — Journal service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-journald.service</code></p><p><code class="filename">systemd-journald.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-journald</code></p></div><div class="refsect1"><a name="idm274689768352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-journald</code> is a
system service that collects and stores logging
data. It creates and maintains structured, indexed
journals based on logging information that is received
@@ -32,24 +32,24 @@
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>
for more information about the collected meta data.
</p><p>Log data collected by the journal is primarily
- text based but can also include binary data where
+ text-based but can also include binary data where
necessary. All objects stored in the journal can be up
- to 2^64-1 bytes in size.</p><p>By default the journal stores log data in
+ to 2^64-1 bytes in size.</p><p>By default, the journal stores log data in
<code class="filename">/run/log/journal/</code>. Since
- <code class="filename">/run/</code> is volatile log data is
- lost at reboot. To make the data persistent it
+ <code class="filename">/run/</code> is volatile, log data is
+ lost at reboot. To make the data persistent, it
is sufficient to create
<code class="filename">/var/log/journal/</code> where
<code class="filename">systemd-journald</code> will then store
the data.</p><p><code class="filename">systemd-journald</code> will
- forward all received log messages to the AF_UNIX
- SOCK_DGRAM socket
- <code class="filename">/run/systemd/journal/syslog</code> (if it exists) which
- may be used by UNIX syslog daemons to process the data
+ forward all received log messages to the <code class="constant">AF_UNIX</code>
+ <code class="constant">SOCK_DGRAM</code> socket
+ <code class="filename">/run/systemd/journal/syslog</code>, if it exists, which
+ may be used by Unix syslog daemons to process the data
further.</p><p>See
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259777146368"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>Request that journal
+ service.</p></div><div class="refsect1"><a name="idm274689756352"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>Request that journal
data from <code class="filename">/run/</code>
is flushed to
<code class="filename">/var/</code> in order to
@@ -62,7 +62,7 @@
regardless of the
configuration.</p></dd><dt id="SIGUSR2"><span class="term">SIGUSR2</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>Request immediate
rotation of the journal
- files.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780805344"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
+ files.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693702112"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
<code class="filename">journald.conf</code> may be overridden on
the kernel command line:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.journald.forward_to_syslog="><span class="term"><code class="varname">systemd.journald.forward_to_syslog=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_kmsg=</code>, </span><span class="term"><code class="varname">systemd.journald.forward_to_console=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_syslog=">¶</a></dt><dd><p>Enables/disables
forwarding of collected log messages
@@ -70,30 +70,56 @@
the system console.
</p><p>See
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
- for information about these settings.</p></dd></dl></div></div><div class="refsect1"><a name="idm259780798608"></a><h2 id="Access Control">Access Control<a class="headerlink" title="Permalink to this headline" href="#Access%20Control">¶</a></h2><p>Journal files are by default owned and readable
- by the <code class="literal">systemd-journal</code> system group
- (but not writable). Adding a user to this group thus
+ for information about these settings.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693695376"></a><h2 id="Access Control">Access Control<a class="headerlink" title="Permalink to this headline" href="#Access%20Control">¶</a></h2><p>Journal files are, by default, owned and readable
+ by the "<code class="literal">systemd-journal</code>" system group
+ but are not writable. Adding a user to this group thus
enables her/him to read the journal files.</p><p>By default, each logged in user will get her/his
own set of journal files in
<code class="filename">/var/log/journal/</code>. These files
- will not be owned by the user however, in order to
+ will not be owned by the user, however, in order to
avoid that the user can write to them
directly. Instead, file system ACLs are used to ensure
the user gets read access only.</p><p>Additional users and groups may be granted
access to journal files via file system access control
lists (ACL). Distributions and administrators may
choose to grant read access to all members of the
- <code class="literal">wheel</code> and <code class="literal">adm</code>
+ "<code class="literal">wheel</code>" and "<code class="literal">adm</code>"
system groups with a command such as the
following:</p><pre class="programlisting"># setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/</pre><p>Note that this command will update the ACLs both
for existing journal files and for future journal
files created in the
<code class="filename">/var/log/journal/</code>
- directory.</p></div><div class="refsect1"><a name="idm259780783648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ directory.</p></div><div class="refsect1"><a name="idm274693680544"></a><h2 id="Files">Files<a class="headerlink" title="Permalink to this headline" href="#Files">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/etc/systemd/journald.conf"><span class="term"><code class="filename">/etc/systemd/journald.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/journald.conf">¶</a></dt><dd><p>Configure
+ <span class="command"><strong>systemd-journald</strong></span>
+ behaviour. See
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>.
+ </p></dd><dt id="/run/log/journal/machine-id/*.journal"><span class="term"><code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal</code>, </span><span class="term"><code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal~</code>, </span><span class="term"><code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal</code>, </span><span class="term"><code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/*.journal~</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log/journal/machine-id/*.journal">¶</a></dt><dd><p><span class="command"><strong>systemd-journald</strong></span>
+ writes entries to files in
+ <code class="filename">/run/log/journal/<em class="replaceable"><code>machine-id</code></em>/</code>
+ or
+ <code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em>/</code>
+ with the "<code class="literal">.journal</code>"
+ suffix. If the daemon is stopped
+ uncleanly, or if the files are found
+ to be corrupted, they are renamed
+ using the "<code class="literal">.journal~</code>"
+ suffix, and
+ <span class="command"><strong>systemd-journald</strong></span>
+ starts writing to a new
+ file. <code class="filename">/run</code> is
+ used when
+ <code class="filename">/var/log/journal</code>
+ is not available, or when
+ <code class="option">Storage=volatile</code> is
+ set in the
+ <a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>
+ configuration file.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274693661840"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>,
<a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>,
<a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>,
- <a href="setfacl.html"><span class="citerefentry"><span class="refentrytitle">setfacl</span>(1)</span></a>
+ <a href="setfacl.html"><span class="citerefentry"><span class="refentrytitle">setfacl</span>(1)</span></a>,
+ <span class="command"><strong>pydoc systemd.journal</strong></span>.
</p></div></div></body></html>
diff --git a/man/systemd-kexec.service.8 b/man/systemd-kexec.service.8
new file mode 100644
index 0000000000..33205da3aa
--- /dev/null
+++ b/man/systemd-kexec.service.8
@@ -0,0 +1 @@
+.so man8/systemd-halt.service.8
diff --git a/man/systemd-kexec.service.html b/man/systemd-kexec.service.html
index 97fda1b23d..6b6a783e47 100644
--- a/man/systemd-kexec.service.html
+++ b/man/systemd-kexec.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm259768592160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm274689319632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
system service that is pulled in by
<code class="filename">halt.target</code> and is responsible
for the actual system halt. Similar,
@@ -53,7 +53,7 @@
related units) should never be executed
directly. Instead, trigger system shutdown with a
command such as "<code class="literal">systemctl halt</code>" or
- suchlike.</p></div><div class="refsect1"><a name="idm259768653216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ suchlike.</p></div><div class="refsect1"><a name="idm274693257936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
diff --git a/man/systemd-localed.8 b/man/systemd-localed.8
new file mode 100644
index 0000000000..2c675612b2
--- /dev/null
+++ b/man/systemd-localed.8
@@ -0,0 +1 @@
+.so man8/systemd-localed.service.8
diff --git a/man/systemd-localed.html b/man/systemd-localed.html
index da264679ee..a6fe216b6d 100644
--- a/man/systemd-localed.html
+++ b/man/systemd-localed.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-localed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-localed.service, systemd-localed — Locale bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-localed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-localed</code></p></div><div class="refsect1"><a name="idm259765062768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-localed</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-localed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-localed.service, systemd-localed — Locale bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-localed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-localed</code></p></div><div class="refsect1"><a name="idm274678392352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-localed</code> is a system
service that may be used as mechanism to change the
system locale settings, as well as the console key
mapping and default X11 key
@@ -30,7 +30,7 @@
is a command line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/localed" target="_top">
developer documentation</a> for information about
the APIs <code class="filename">systemd-localed</code>
- provides.</p></div><div class="refsect1"><a name="idm259765056912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ provides.</p></div><div class="refsect1"><a name="idm274677590272"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>,
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>,
diff --git a/man/systemd-localed.service.8 b/man/systemd-localed.service.8
new file mode 100644
index 0000000000..5e6fffde89
--- /dev/null
+++ b/man/systemd-localed.service.8
@@ -0,0 +1,57 @@
+'\" t
+.TH "SYSTEMD\-LOCALED\&.SERVICE" "8" "" "systemd 208" "systemd-localed.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-localed.service, systemd-localed \- Locale bus mechanism
+.SH "SYNOPSIS"
+.PP
+systemd\-localed\&.service
+.PP
+/usr/lib/systemd/systemd\-localed
+.SH "DESCRIPTION"
+.PP
+systemd\-localed
+is a system service that may be used as mechanism to change the system locale settings, as well as the console key mapping and default X11 key mapping\&.
+systemd\-localed
+is automatically activated on request and terminates itself when it is unused\&.
+.PP
+The tool
+\fBlocalectl\fR(1)
+is a command line client to this service\&.
+.PP
+See the
+\m[blue]\fBdeveloper documentation\fR\m[]\&\s-2\u[1]\d\s+2
+for information about the APIs
+systemd\-localed
+provides\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBlocale.conf\fR(5),
+\fBvconsole.conf\fR(5),
+\fBlocalectl\fR(1),
+\fBloadkeys\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+developer documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/localed
+.RE
diff --git a/man/systemd-localed.service.html b/man/systemd-localed.service.html
index da264679ee..a6fe216b6d 100644
--- a/man/systemd-localed.service.html
+++ b/man/systemd-localed.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-localed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-localed.service, systemd-localed — Locale bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-localed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-localed</code></p></div><div class="refsect1"><a name="idm259765062768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-localed</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-localed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-localed.service, systemd-localed — Locale bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-localed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-localed</code></p></div><div class="refsect1"><a name="idm274678392352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-localed</code> is a system
service that may be used as mechanism to change the
system locale settings, as well as the console key
mapping and default X11 key
@@ -30,7 +30,7 @@
is a command line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/localed" target="_top">
developer documentation</a> for information about
the APIs <code class="filename">systemd-localed</code>
- provides.</p></div><div class="refsect1"><a name="idm259765056912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ provides.</p></div><div class="refsect1"><a name="idm274677590272"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>,
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>,
diff --git a/man/systemd-logind.8 b/man/systemd-logind.8
new file mode 100644
index 0000000000..d70392078c
--- /dev/null
+++ b/man/systemd-logind.8
@@ -0,0 +1 @@
+.so man8/systemd-logind.service.8
diff --git a/man/systemd-logind.html b/man/systemd-logind.html
index de32b5975d..e35823e839 100644
--- a/man/systemd-logind.html
+++ b/man/systemd-logind.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-logind.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-logind.service, systemd-logind — Login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-logind.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-logind</code></p></div><div class="refsect1"><a name="idm259797847152"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-logind</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-logind.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-logind.service, systemd-logind — Login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-logind.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-logind</code></p></div><div class="refsect1"><a name="idm274699019808"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-logind</strong></span> is a system
service that manages user logins. It is responsible
- for:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Keeping track of users and sessions, their
- processes and their idle state</p></li><li class="listitem"><p>Creating control groups for
- user processes</p></li><li class="listitem"><p>Providing PolicyKit-based access
+ for:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Keeping track of users and
+ sessions, their processes and their idle
+ state</p></li><li class="listitem"><p>Providing PolicyKit-based access
for users to operations such as system
shutdown or sleep</p></li><li class="listitem"><p>Implementing a shutdown/sleep
inhibition logic for
@@ -46,7 +46,7 @@
the APIs <code class="filename">systemd-logind</code>
provides.</p><p>For more information on the inhibition logic see
the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/inhibit" target="_top">Inhibitor
- Lock Developer Documentation</a>.</p></div><div class="refsect1"><a name="idm259797833120"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ Lock Developer Documentation</a>.</p></div><div class="refsect1"><a name="idm274698267936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a>,
<a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>,
diff --git a/man/systemd-logind.service.8 b/man/systemd-logind.service.8
new file mode 100644
index 0000000000..3ace6ecde5
--- /dev/null
+++ b/man/systemd-logind.service.8
@@ -0,0 +1,164 @@
+'\" t
+.TH "SYSTEMD\-LOGIND\&.SERVICE" "8" "" "systemd 208" "systemd-logind.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-logind.service, systemd-logind \- Login manager
+.SH "SYNOPSIS"
+.PP
+systemd\-logind\&.service
+.PP
+/usr/lib/systemd/systemd\-logind
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-logind\fR
+is a system service that manages user logins\&. It is responsible for:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Keeping track of users and sessions, their processes and their idle state
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Providing PolicyKit\-based access for users to operations such as system shutdown or sleep
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Implementing a shutdown/sleep inhibition logic for applications
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Handling of power/sleep hardware keys
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Multi\-seat management
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Session switch management
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Device access management for users
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Automatic spawning of text logins (gettys) on virtual console activation and user runtime directory management
+.RE
+.PP
+User sessions are registered in logind via the
+\fBpam_systemd\fR(8)
+PAM module\&.
+.PP
+See
+\fBlogind.conf\fR(5)
+for information about the configuration of this service\&.
+.PP
+See
+\m[blue]\fBMulti\-Seat on Linux\fR\m[]\&\s-2\u[1]\d\s+2
+for an introduction into basic concepts of logind such as users, sessions and seats\&.
+.PP
+See the
+\m[blue]\fBlogind D\-Bus API Documentation\fR\m[]\&\s-2\u[2]\d\s+2
+for information about the APIs
+systemd\-logind
+provides\&.
+.PP
+For more information on the inhibition logic see the
+\m[blue]\fBInhibitor Lock Developer Documentation\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-user-sessions.service\fR(8),
+\fBloginctl\fR(1),
+\fBlogind.conf\fR(5),
+\fBpam_systemd\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+Multi-Seat on Linux
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/multiseat
+.RE
+.IP " 2." 4
+logind D-Bus API Documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/logind
+.RE
+.IP " 3." 4
+Inhibitor Lock Developer Documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/inhibit
+.RE
diff --git a/man/systemd-logind.service.html b/man/systemd-logind.service.html
index de32b5975d..e35823e839 100644
--- a/man/systemd-logind.service.html
+++ b/man/systemd-logind.service.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-logind.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-logind.service, systemd-logind — Login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-logind.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-logind</code></p></div><div class="refsect1"><a name="idm259797847152"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-logind</code> is a system
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-logind.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-logind.service, systemd-logind — Login manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-logind.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-logind</code></p></div><div class="refsect1"><a name="idm274699019808"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-logind</strong></span> is a system
service that manages user logins. It is responsible
- for:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Keeping track of users and sessions, their
- processes and their idle state</p></li><li class="listitem"><p>Creating control groups for
- user processes</p></li><li class="listitem"><p>Providing PolicyKit-based access
+ for:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Keeping track of users and
+ sessions, their processes and their idle
+ state</p></li><li class="listitem"><p>Providing PolicyKit-based access
for users to operations such as system
shutdown or sleep</p></li><li class="listitem"><p>Implementing a shutdown/sleep
inhibition logic for
@@ -46,7 +46,7 @@
the APIs <code class="filename">systemd-logind</code>
provides.</p><p>For more information on the inhibition logic see
the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/inhibit" target="_top">Inhibitor
- Lock Developer Documentation</a>.</p></div><div class="refsect1"><a name="idm259797833120"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ Lock Developer Documentation</a>.</p></div><div class="refsect1"><a name="idm274698267936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a>,
<a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>,
diff --git a/man/systemd-logind.service.xml b/man/systemd-logind.service.xml
index 09bcfac430..c0c3d1a897 100644
--- a/man/systemd-logind.service.xml
+++ b/man/systemd-logind.service.xml
@@ -56,16 +56,14 @@
<refsect1>
<title>Description</title>
- <para><filename>systemd-logind</filename> is a system
+ <para><command>systemd-logind</command> is a system
service that manages user logins. It is responsible
for:</para>
<itemizedlist>
- <listitem><para>Keeping track of users and sessions, their
- processes and their idle state</para></listitem>
-
- <listitem><para>Creating control groups for
- user processes</para></listitem>
+ <listitem><para>Keeping track of users and
+ sessions, their processes and their idle
+ state</para></listitem>
<listitem><para>Providing PolicyKit-based access
for users to operations such as system
diff --git a/man/systemd-machine-id-setup.1 b/man/systemd-machine-id-setup.1
new file mode 100644
index 0000000000..64ef01b053
--- /dev/null
+++ b/man/systemd-machine-id-setup.1
@@ -0,0 +1,75 @@
+'\" t
+.TH "SYSTEMD\-MACHINE\-ID\-SETUP" "1" "" "systemd 208" "systemd-machine-id-setup"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-machine-id-setup \- Initialize the machine ID in /etc/machine\-id
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-machine\-id\-setup\fR\ 'u
+\fBsystemd\-machine\-id\-setup\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-machine\-id\-setup\fR
+may be used by system installer tools to initialize the machine ID stored in
+/etc/machine\-id
+at install time with a randomly generated ID\&. See
+\fBmachine-id\fR(5)
+for more information about this file\&.
+.PP
+This tool will execute no operation if
+/etc/machine\-id
+is already initialized\&.
+.PP
+If a valid D\-Bus machine ID is already configured for the system, the D\-Bus machine ID is copied and used to initialize the machine ID in
+/etc/machine\-id\&.
+.PP
+If run inside a KVM virtual machine and a UUID is passed via the
+\fB\-uuid\fR
+option, this UUID is used to initialize the machine ID instead of a randomly generated one\&. The caller must ensure that the UUID passed is sufficiently unique and is different for every booted instanced of the VM\&.
+.PP
+Similar, if run inside a Linux container environment and a UUID is set for the container this is used to initialize the machine ID\&. For details see the documentation of the
+\m[blue]\fBContainer Interface\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBmachine-id\fR(5),
+\fBdbus-uuidgen\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+Container Interface
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface
+.RE
diff --git a/man/systemd-machine-id-setup.html b/man/systemd-machine-id-setup.html
index ed14b04dba..1589a29bb9 100644
--- a/man/systemd-machine-id-setup.html
+++ b/man/systemd-machine-id-setup.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-machine-id-setup"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-machine-id-setup — Initialize the machine ID in /etc/machine-id</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-machine-id-setup</code> </p></div></div><div class="refsect1"><a name="idm259786283648"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-machine-id-setup</strong></span> may
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-machine-id-setup"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-machine-id-setup — Initialize the machine ID in /etc/machine-id</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-machine-id-setup</code> </p></div></div><div class="refsect1"><a name="idm274679128768"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-machine-id-setup</strong></span> may
be used by system installer tools to initialize the
machine ID stored in
<code class="filename">/etc/machine-id</code> at install time
@@ -28,10 +28,10 @@
for more information about this file.</p><p>This tool will execute no operation if
<code class="filename">/etc/machine-id</code> is already
initialized.</p><p>If a valid D-Bus machine ID is already
- configured for the system the D-Bus machine ID is
+ configured for the system, the D-Bus machine ID is
copied and used to initialize the machine ID in
<code class="filename">/etc/machine-id</code>.</p><p>If run inside a KVM virtual machine and a UUID
- is passed via the <code class="option">-uuid</code> option this
+ is passed via the <code class="option">-uuid</code> option, this
UUID is used to initialize the machine ID instead of a
randomly generated one. The caller must ensure that the
UUID passed is sufficiently unique and is different
@@ -39,10 +39,10 @@
environment and a UUID is set for the container this
is used to initialize the machine ID. For details see
the documentation of the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface" target="_top">Container
- Interface</a>.</p></div><div class="refsect1"><a name="idm259782726112"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ Interface</a>.</p></div><div class="refsect1"><a name="idm274679120592"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
- string and exits.</p></dd></dl></div></div><div class="refsect1"><a name="idm259782721056"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259782719872"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ string and exits.</p></dd></dl></div></div><div class="refsect1"><a name="idm274679115488"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679114304"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>,
<a href="dbus-uuidgen.html"><span class="citerefentry"><span class="refentrytitle">dbus-uuidgen</span>(1)</span></a>
diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
index 25fb63af2d..fef76bcfc7 100644
--- a/man/systemd-machine-id-setup.xml
+++ b/man/systemd-machine-id-setup.xml
@@ -69,12 +69,12 @@
initialized.</para>
<para>If a valid D-Bus machine ID is already
- configured for the system the D-Bus machine ID is
+ configured for the system, the D-Bus machine ID is
copied and used to initialize the machine ID in
<filename>/etc/machine-id</filename>.</para>
<para>If run inside a KVM virtual machine and a UUID
- is passed via the <option>-uuid</option> option this
+ is passed via the <option>-uuid</option> option, this
UUID is used to initialize the machine ID instead of a
randomly generated one. The caller must ensure that the
UUID passed is sufficiently unique and is different
diff --git a/man/systemd-machined.8 b/man/systemd-machined.8
new file mode 100644
index 0000000000..06a3d2bda2
--- /dev/null
+++ b/man/systemd-machined.8
@@ -0,0 +1 @@
+.so man8/systemd-machined.service.8
diff --git a/man/systemd-machined.html b/man/systemd-machined.html
new file mode 100644
index 0000000000..96ffb55538
--- /dev/null
+++ b/man/systemd-machined.html
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-machined.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-machined.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-machined.service, systemd-machined — Virtual machine and container registration manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-machined.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-machined</code></p></div><div class="refsect1"><a name="idm274701737568"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-machined</strong></span> is a
+ system service that keeps track of virtual machines
+ and containers, and processes belonging to
+ them.</p><p>See
+ <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
+ for some examples on how to start a container the systemd
+ way.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/machined" target="_top">
+ machined D-Bus API Documentation</a> for information about
+ the APIs <code class="filename">systemd-machined</code>
+ provides.</p></div><div class="refsect1"><a name="idm274701732544"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>,
+ <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>.
+ </p></div></div></body></html>
diff --git a/man/systemd-machined.service.8 b/man/systemd-machined.service.8
new file mode 100644
index 0000000000..c1a3337691
--- /dev/null
+++ b/man/systemd-machined.service.8
@@ -0,0 +1,53 @@
+'\" t
+.TH "SYSTEMD\-MACHINED\&.SERVICE" "8" "" "systemd 208" "systemd-machined.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-machined.service, systemd-machined \- Virtual machine and container registration manager
+.SH "SYNOPSIS"
+.PP
+systemd\-machined\&.service
+.PP
+/usr/lib/systemd/systemd\-machined
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-machined\fR
+is a system service that keeps track of virtual machines and containers, and processes belonging to them\&.
+.PP
+See
+\fBsystemd-nspawn\fR(1)
+for some examples on how to start a container the systemd way\&.
+.PP
+See the
+\m[blue]\fBmachined D\-Bus API Documentation\fR\m[]\&\s-2\u[1]\d\s+2
+for information about the APIs
+systemd\-machined
+provides\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemd.special\fR(7)\&.
+.SH "NOTES"
+.IP " 1." 4
+machined D-Bus API Documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/machined
+.RE
diff --git a/man/systemd-machined.service.html b/man/systemd-machined.service.html
new file mode 100644
index 0000000000..96ffb55538
--- /dev/null
+++ b/man/systemd-machined.service.html
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-machined.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-machined.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-machined.service, systemd-machined — Virtual machine and container registration manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-machined.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-machined</code></p></div><div class="refsect1"><a name="idm274701737568"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-machined</strong></span> is a
+ system service that keeps track of virtual machines
+ and containers, and processes belonging to
+ them.</p><p>See
+ <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
+ for some examples on how to start a container the systemd
+ way.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/machined" target="_top">
+ machined D-Bus API Documentation</a> for information about
+ the APIs <code class="filename">systemd-machined</code>
+ provides.</p></div><div class="refsect1"><a name="idm274701732544"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>,
+ <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>.
+ </p></div></div></body></html>
diff --git a/man/systemd-machined.service.xml b/man/systemd-machined.service.xml
new file mode 100644
index 0000000000..352b4a025f
--- /dev/null
+++ b/man/systemd-machined.service.xml
@@ -0,0 +1,85 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+ This file is part of systemd.
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="systemd-machined.service" conditional='ENABLE_MACHINED'>
+
+ <refentryinfo>
+ <title>systemd-machined.service</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd-machined.service</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd-machined.service</refname>
+ <refname>systemd-machined</refname>
+ <refpurpose>Virtual machine and container registration manager</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename>systemd-machined.service</filename></para>
+ <para><filename>/usr/lib/systemd/systemd-machined</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><command>systemd-machined</command> is a
+ system service that keeps track of virtual machines
+ and containers, and processes belonging to
+ them.</para>
+
+ <para>See
+ <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ for some examples on how to start a container the systemd
+ way.</para>
+
+ <para>See the <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/machined">
+ machined D-Bus API Documentation</ulink> for information about
+ the APIs <filename>systemd-machined</filename>
+ provides.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd-modules-load.8 b/man/systemd-modules-load.8
new file mode 100644
index 0000000000..f7c36f03a1
--- /dev/null
+++ b/man/systemd-modules-load.8
@@ -0,0 +1 @@
+.so man8/systemd-modules-load.service.8
diff --git a/man/systemd-modules-load.html b/man/systemd-modules-load.html
index 0d1d55441e..adf3012bcd 100644
--- a/man/systemd-modules-load.html
+++ b/man/systemd-modules-load.html
@@ -19,20 +19,19 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-modules-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-modules-load.service, systemd-modules-load — Configure kernel modules to load at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-modules-load.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-modules-load</code></p></div><div class="refsect1"><a name="idm259794598912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-modules-load.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-modules-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-modules-load.service, systemd-modules-load — Configure kernel modules to load at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-modules-load.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-modules-load</code></p></div><div class="refsect1"><a name="idm274676446208"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-modules-load.service</code>
is an early-boot service that loads kernel modules
from static configuration.</p><p>See
<a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259794668416"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-modules-load.service</code> understands
- the following kernel command line parameters:</p><div class="variablelist"><dl class="variablelist"><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code>, </span><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p>Takes a comma
- separated list of kernel modules to
+ service.</p></div><div class="refsect1"><a name="idm274676342976"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-modules-load.service</code> understands
+ the following kernel command line parameters:</p><div class="variablelist"><dl class="variablelist"><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code>, </span><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p>Takes a comma-separated
+ list of kernel modules to
statically load during early boot. The
option prefixed with
- <code class="literal">rd.</code> is read by the
+ "<code class="literal">rd.</code>" is read by the
initial RAM disk
- only.</p></dd></dl></div></div><div class="refsect1"><a name="idm259790877648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ only.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675260912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>,
- <a href="wine.html"><span class="citerefentry"><span class="refentrytitle">wine</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-modules-load.service.8 b/man/systemd-modules-load.service.8
new file mode 100644
index 0000000000..ea493539b3
--- /dev/null
+++ b/man/systemd-modules-load.service.8
@@ -0,0 +1,51 @@
+'\" t
+.TH "SYSTEMD\-MODULES\-LOAD\&.SERVICE" "8" "" "systemd 208" "systemd-modules-load.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-modules-load.service, systemd-modules-load \- Configure kernel modules to load at boot
+.SH "SYNOPSIS"
+.PP
+systemd\-modules\-load\&.service
+.PP
+/usr/lib/systemd/systemd\-modules\-load
+.SH "DESCRIPTION"
+.PP
+systemd\-modules\-load\&.service
+is an early\-boot service that loads kernel modules from static configuration\&.
+.PP
+See
+\fBmodules-load.d\fR(5)
+for information about the configuration of this service\&.
+.SH "KERNEL COMMAND LINE"
+.PP
+systemd\-modules\-load\&.service
+understands the following kernel command line parameters:
+.PP
+\fImodules\-load=\fR, \fIrd\&.modules\-load=\fR
+.RS 4
+Takes a comma\-separated list of kernel modules to statically load during early boot\&. The option prefixed with
+"rd\&."
+is read by the initial RAM disk only\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBmodules-load.d\fR(5),
diff --git a/man/systemd-modules-load.service.html b/man/systemd-modules-load.service.html
index 0d1d55441e..adf3012bcd 100644
--- a/man/systemd-modules-load.service.html
+++ b/man/systemd-modules-load.service.html
@@ -19,20 +19,19 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-modules-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-modules-load.service, systemd-modules-load — Configure kernel modules to load at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-modules-load.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-modules-load</code></p></div><div class="refsect1"><a name="idm259794598912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-modules-load.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-modules-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-modules-load.service, systemd-modules-load — Configure kernel modules to load at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-modules-load.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-modules-load</code></p></div><div class="refsect1"><a name="idm274676446208"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-modules-load.service</code>
is an early-boot service that loads kernel modules
from static configuration.</p><p>See
<a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259794668416"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-modules-load.service</code> understands
- the following kernel command line parameters:</p><div class="variablelist"><dl class="variablelist"><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code>, </span><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p>Takes a comma
- separated list of kernel modules to
+ service.</p></div><div class="refsect1"><a name="idm274676342976"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-modules-load.service</code> understands
+ the following kernel command line parameters:</p><div class="variablelist"><dl class="variablelist"><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code>, </span><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p>Takes a comma-separated
+ list of kernel modules to
statically load during early boot. The
option prefixed with
- <code class="literal">rd.</code> is read by the
+ "<code class="literal">rd.</code>" is read by the
initial RAM disk
- only.</p></dd></dl></div></div><div class="refsect1"><a name="idm259790877648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ only.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675260912"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>,
- <a href="wine.html"><span class="citerefentry"><span class="refentrytitle">wine</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-modules-load.service.xml b/man/systemd-modules-load.service.xml
index 1d33b8eec6..28dd8ecb42 100644
--- a/man/systemd-modules-load.service.xml
+++ b/man/systemd-modules-load.service.xml
@@ -77,8 +77,8 @@
<term><varname>modules-load=</varname></term>
<term><varname>rd.modules-load=</varname></term>
- <listitem><para>Takes a comma
- separated list of kernel modules to
+ <listitem><para>Takes a comma-separated
+ list of kernel modules to
statically load during early boot. The
option prefixed with
<literal>rd.</literal> is read by the
@@ -94,7 +94,6 @@
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>wine</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd-notify.1 b/man/systemd-notify.1
new file mode 100644
index 0000000000..f8f64c3194
--- /dev/null
+++ b/man/systemd-notify.1
@@ -0,0 +1,126 @@
+'\" t
+.TH "SYSTEMD\-NOTIFY" "1" "" "systemd 208" "systemd-notify"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-notify \- Notify service manager about start\-up completion and other daemon status changes
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-notify\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[VARIABLE=VALUE...]\fR\ 'u
+\fBsystemd\-notify \fR\fB[OPTIONS...]\fR\fB \fR\fB[VARIABLE=VALUE...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-notify\fR
+may be called by daemon scripts to notify the init system about status changes\&. It can be used to send arbitrary information, encoded in an environment\-block\-like list of strings\&. Most importantly it can be used for start\-up completion notification\&.
+.PP
+This is mostly just a wrapper around
+\fBsd_notify()\fR
+and makes this functionality available to shell scripts\&. For details see
+\fBsd_notify\fR(3)\&.
+.PP
+The command line may carry a list of environment variables to send as part of the status update\&.
+.PP
+Note that systemd will refuse reception of status updates from this command unless
+\fINotifyAccess=all\fR
+is set for the service unit this command is called from\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-ready\fR
+.RS 4
+Inform the init system about service start\-up completion\&. This is equivalent to
+\fBsystemd\-notify READY=1\fR\&. For details about the semantics of this option see
+\fBsd_notify\fR(3)\&.
+.RE
+.PP
+\fB\-\-pid=\fR
+.RS 4
+Inform the init system about the main PID of the daemon\&. Takes a PID as argument\&. If the argument is omitted, the PID of the process that invoked
+\fBsystemd\-notify\fR
+is used\&. This is equivalent to
+\fBsystemd\-notify MAINPID=$PID\fR\&. For details about the semantics of this option see
+\fBsd_notify\fR(3)\&.
+.RE
+.PP
+\fB\-\-status=\fR
+.RS 4
+Send a free\-form status string for the daemon to the init systemd\&. This option takes the status string as argument\&. This is equivalent to
+\fBsystemd\-notify STATUS=\&.\&.\&.\fR\&. For details about the semantics of this option see
+\fBsd_notify\fR(3)\&.
+.RE
+.PP
+\fB\-\-booted\fR
+.RS 4
+Returns 0 if the system was booted up with systemd, non\-zero otherwise\&. If this option is passed, no message is sent\&. This option is hence unrelated to the other options\&. For details about the semantics of this option, see
+\fBsd_booted\fR(3)\&.
+.RE
+.PP
+\fB\-\-readahead=\fR
+.RS 4
+Controls disk read\-ahead operations\&. The argument must be a string, and either "cancel", "done" or "noreplay"\&. For details about the semantics of this option see
+\fBsd_readahead\fR(3)\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&Start-up Notification and Status Updates\fR
+.PP
+A simple shell daemon that sends start\-up notifications after having set up its communication channel\&. During runtime it sends further status updates to the init system:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#!/bin/bash
+
+mkfifo /tmp/waldo
+systemd\-notify \-\-ready \-\-status="Waiting for data\&.\&.\&."
+
+while : ; do
+ read a < /tmp/waldo
+ systemd\-notify \-\-status="Processing $a"
+
+ # Do something with $a \&.\&.\&.
+
+ systemd\-notify \-\-status="Waiting for data\&.\&.\&."
+done
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsd_notify\fR(3),
+\fBsd_booted\fR(3)
diff --git a/man/systemd-notify.html b/man/systemd-notify.html
index 13989f999e..d4ef9e2942 100644
--- a/man/systemd-notify.html
+++ b/man/systemd-notify.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-notify — Notify service manager about start-up completion and other daemon status changes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-notify [OPTIONS...] [VARIABLE=VALUE...]</code> </p></div></div><div class="refsect1"><a name="idm259776782800"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-notify</strong></span> may be
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-notify"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-notify — Notify service manager about start-up completion and other daemon status changes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-notify [OPTIONS...] [VARIABLE=VALUE...]</code> </p></div></div><div class="refsect1"><a name="idm274703915552"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-notify</strong></span> may be
called by daemon scripts to notify the init system
about status changes. It can be used to send arbitrary
information, encoded in an environment-block-like list
@@ -33,7 +33,7 @@
update.</p><p>Note that systemd will refuse reception of
status updates from this command unless
<code class="varname">NotifyAccess=all</code> is set for the
- service unit this command is called from.</p></div><div class="refsect1"><a name="idm259773229488"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ service unit this command is called from.</p></div><div class="refsect1"><a name="idm274703909936"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--ready"><span class="term"><code class="option">--ready</code></span><a class="headerlink" title="Permalink to this term" href="#--ready">¶</a></dt><dd><p>Inform the init system
about service start-up
@@ -44,7 +44,7 @@
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>.</p></dd><dt id="--pid="><span class="term"><code class="option">--pid=</code></span><a class="headerlink" title="Permalink to this term" href="#--pid=">¶</a></dt><dd><p>Inform the init system
about the main PID of the
daemon. Takes a PID as argument. If
- the argument is omitted the PID of the
+ the argument is omitted, the PID of the
process that invoked
<span class="command"><strong>systemd-notify</strong></span> is
used. This is equivalent to
@@ -61,17 +61,17 @@
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>.</p></dd><dt id="--booted"><span class="term"><code class="option">--booted</code></span><a class="headerlink" title="Permalink to this term" href="#--booted">¶</a></dt><dd><p>Returns 0 if the
system was booted up with systemd,
non-zero otherwise. If this option is
- passed no message is sent. This option
+ passed, no message is sent. This option
is hence unrelated to the other
options. For details about the
- semantics of this option see
+ semantics of this option, see
<a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a>.</p></dd><dt id="--readahead="><span class="term"><code class="option">--readahead=</code></span><a class="headerlink" title="Permalink to this term" href="#--readahead=">¶</a></dt><dd><p>Controls disk
read-ahead operations. The argument
must be a string, and either "cancel",
"done" or "noreplay". For details
about the semantics of this option see
- <a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776873200"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259776871920"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259776871248"></a><p class="title"><b>Example 1. Start-up Notification and Status Updates</b></p><div class="example-contents"><p>A simple shell daemon that sends
+ <a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274707790448"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274707789264"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274707788592"></a><p class="title"><b>Example 1. Start-up Notification and Status Updates</b></p><div class="example-contents"><p>A simple shell daemon that sends
start-up notifications after having set up its
communication channel. During runtime it sends
further status updates to the init
@@ -87,7 +87,7 @@ while : ; do
# Do something with $a ...
systemd-notify --status="Waiting for data..."
-done</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259776868240"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+done</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274707778272"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml
index b03492c5c1..a76934649a 100644
--- a/man/systemd-notify.xml
+++ b/man/systemd-notify.xml
@@ -119,7 +119,7 @@
<listitem><para>Inform the init system
about the main PID of the
daemon. Takes a PID as argument. If
- the argument is omitted the PID of the
+ the argument is omitted, the PID of the
process that invoked
<command>systemd-notify</command> is
used. This is equivalent to
@@ -148,10 +148,10 @@
<listitem><para>Returns 0 if the
system was booted up with systemd,
non-zero otherwise. If this option is
- passed no message is sent. This option
+ passed, no message is sent. This option
is hence unrelated to the other
options. For details about the
- semantics of this option see
+ semantics of this option, see
<citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
</varlistentry>
diff --git a/man/systemd-nspawn.1 b/man/systemd-nspawn.1
new file mode 100644
index 0000000000..4e45f3a3e2
--- /dev/null
+++ b/man/systemd-nspawn.1
@@ -0,0 +1,284 @@
+'\" t
+.TH "SYSTEMD\-NSPAWN" "1" "" "systemd 208" "systemd-nspawn"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-nspawn \- Spawn a namespace container for debugging, testing and building
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-nspawn\fR\ 'u
+\fBsystemd\-nspawn\fR [OPTIONS...] [\fICOMMAND\fR\ [ARGS...]]
+.HP \w'\fBsystemd\-nspawn\fR\ 'u
+\fBsystemd\-nspawn\fR \-b [OPTIONS...] [ARGS...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-nspawn\fR
+may be used to run a command or OS in a light\-weight namespace container\&. In many ways it is similar to
+\fBchroot\fR(1), but more powerful since it fully virtualizes the file system hierarchy, as well as the process tree, the various IPC subsystems and the host and domain name\&.
+.PP
+\fBsystemd\-nspawn\fR
+limits access to various kernel interfaces in the container to read\-only, such as
+/sys,
+/proc/sys
+or
+/sys/fs/selinux\&. Network interfaces and the system clock may not be changed from within the container\&. Device nodes may not be created\&. The host system cannot be rebooted and kernel modules may not be loaded from within the container\&.
+.PP
+Note that even though these security precautions are taken
+\fBsystemd\-nspawn\fR
+is not suitable for secure container setups\&. Many of the security features may be circumvented and are hence primarily useful to avoid accidental changes to the host system from the container\&. The intended use of this program is debugging and testing as well as building of packages, distributions and software involved with boot and systems management\&.
+.PP
+In contrast to
+\fBchroot\fR(1)\ \&\fBsystemd\-nspawn\fR
+may be used to boot full Linux\-based operating systems in a container\&.
+.PP
+Use a tool like
+\fByum\fR(8),
+\fBdebootstrap\fR(8), or
+\fBpacman\fR(8)
+to set up an OS directory tree suitable as file system hierarchy for
+\fBsystemd\-nspawn\fR
+containers\&.
+.PP
+Note that
+\fBsystemd\-nspawn\fR
+will mount file systems private to the container to
+/dev,
+/run
+and similar\&. These will not be visible outside of the container, and their contents will be lost when the container exits\&.
+.PP
+Note that running two
+\fBsystemd\-nspawn\fR
+containers from the same directory tree will not make processes in them see each other\&. The PID namespace separation of the two containers is complete and the containers will share very few runtime objects except for the underlying file system\&. It is however possible to enter an existing container, see
+Example 4
+below\&.
+.PP
+\fBsystemd\-nspawn\fR
+implements the
+\m[blue]\fBContainer Interface\fR\m[]\&\s-2\u[1]\d\s+2
+specification\&.
+.PP
+As a safety check
+\fBsystemd\-nspawn\fR
+will verify the existence of
+/etc/os\-release
+in the container tree before starting the container (see
+\fBos-release\fR(5))\&. It might be necessary to add this file to the container tree manually if the OS of the container is too old to contain this file out\-of\-the\-box\&.
+.SH "INCOMPATIBILITY WITH AUDITING"
+.PP
+Note that the kernel auditing subsystem is currently broken when used together with containers\&. We hence recommend turning it off entirely by booting with
+"audit=0"
+on the kernel command line, or by turning it off at kernel build time\&. If auditing is enabled in the kernel, operating systems booted in an nspawn container might refuse log\-in attempts\&.
+.SH "OPTIONS"
+.PP
+If option
+\fB\-b\fR
+is specified, the arguments are used as arguments for the init binary\&. Otherwise,
+\fICOMMAND\fR
+specifies the program to launch in the container, and the remaining arguments are used as arguments for this program\&. If
+\fB\-b\fR
+is not used and no arguments are specifed, a shell is launched in the container\&.
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a version string and exits\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-directory=\fR
+.RS 4
+Directory to use as file system root for the namespace container\&. If omitted, the current directory will be used\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-boot\fR
+.RS 4
+Automatically search for an init binary and invoke it instead of a shell or a user supplied program\&. If this option is used, arguments specified on the command line are used as arguments for the init binary\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user=\fR
+.RS 4
+Run the command under specified user, create home directory and cd into it\&. As rest of systemd\-nspawn, this is not the security feature and limits against accidental changes only\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-machine=\fR
+.RS 4
+Sets the machine name for this container\&. This name may be used to identify this container on the host, and is used to initialize the container\*(Aqs hostname (which the container can choose to override, however)\&. If not specified, the last component of the root directory of the container is used\&.
+.RE
+.PP
+\fB\-\-slice=\fR
+.RS 4
+Make the container part of the specified slice, instead of the
+machine\&.slice\&.
+.RE
+.PP
+\fB\-\-uuid=\fR
+.RS 4
+Set the specified UUID for the container\&. The init system will initialize
+/etc/machine\-id
+from this if this file is not set yet\&.
+.RE
+.PP
+\fB\-\-private\-network\fR
+.RS 4
+Turn off networking in the container\&. This makes all network interfaces unavailable in the container, with the exception of the loopback device\&.
+.RE
+.PP
+\fB\-\-read\-only\fR
+.RS 4
+Mount the root file system read\-only for the container\&.
+.RE
+.PP
+\fB\-\-capability=\fR
+.RS 4
+List one or more additional capabilities to grant the container\&. Takes a comma\-separated list of capability names, see
+\fBcapabilities\fR(7)
+for more information\&. Note that the following capabilities will be granted in any way: CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH, CAP_FOWNER, CAP_FSETID, CAP_IPC_OWNER, CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE, CAP_NET_BIND_SERVICE, CAP_NET_BROADCAST, CAP_NET_RAW, CAP_SETGID, CAP_SETFCAP, CAP_SETPCAP, CAP_SETUID, CAP_SYS_ADMIN, CAP_SYS_CHROOT, CAP_SYS_NICE, CAP_SYS_PTRACE, CAP_SYS_TTY_CONFIG, CAP_SYS_RESOURCE, CAP_SYS_BOOT, CAP_AUDIT_WRITE, CAP_AUDIT_CONTROL\&.
+.RE
+.PP
+\fB\-\-link\-journal=\fR
+.RS 4
+Control whether the container\*(Aqs journal shall be made visible to the host system\&. If enabled, allows viewing the container\*(Aqs journal files from the host (but not vice versa)\&. Takes one of
+"no",
+"host",
+"guest",
+"auto"\&. If
+"no", the journal is not linked\&. If
+"host", the journal files are stored on the host file system (beneath
+/var/log/journal/\fImachine\-id\fR) and the subdirectory is bind\-mounted into the container at the same location\&. If
+"guest", the journal files are stored on the guest file system (beneath
+/var/log/journal/\fImachine\-id\fR) and the subdirectory is symlinked into the host at the same location\&. If
+"auto"
+(the default), and the right subdirectory of
+/var/log/journal
+exists, it will be bind mounted into the container\&. If the subdirectory does not exist, no linking is performed\&. Effectively, booting a container once with
+"guest"
+or
+"host"
+will link the journal persistently if further on the default of
+"auto"
+is used\&.
+.RE
+.PP
+\fB\-j\fR
+.RS 4
+Equivalent to
+\fB\-\-link\-journal=guest\fR\&.
+.RE
+.PP
+\fB\-\-bind=\fR, \fB\-\-bind\-ro=\fR
+.RS 4
+Bind mount a file or directory from the host into the container\&. Either takes a path argument \-\- in which case the specified path will be mounted from the host to the same path in the container \-\-, or a colon\-separated pair of paths \-\- in which case the first specified path is the source in the host, and the second path is the destination in the container\&. The
+\fB\-\-bind\-ro=\fR
+option creates read\-only bind mount\&.
+.RE
+.SH "EXAMPLE 1"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# yum \-y \-\-releasever=19 \-\-nogpg \-\-installroot=/srv/mycontainer \-\-disablerepo=\*(Aq*\*(Aq \-\-enablerepo=fedora install systemd passwd yum fedora\-release vim\-minimal
+# systemd\-nspawn \-bD /srv/mycontainer
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This installs a minimal Fedora distribution into the directory
+/srv/mycontainer/
+and then boots an OS in a namespace container in it\&.
+.SH "EXAMPLE 2"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# debootstrap \-\-arch=amd64 unstable ~/debian\-tree/
+# systemd\-nspawn \-D ~/debian\-tree/
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This installs a minimal Debian unstable distribution into the directory
+~/debian\-tree/
+and then spawns a shell in a namespace container in it\&.
+.SH "EXAMPLE 3"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# pacstrap \-c \-d ~/arch\-tree/ base
+# systemd\-nspawn \-bD ~/arch\-tree/
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This installs a mimimal Arch Linux distribution into the directory
+~/arch\-tree/
+and then boots an OS in a namespace container in it\&.
+.SH "EXAMPLE 4"
+.PP
+To enter the container, PID of one of the processes sharing the new namespaces must be used\&.
+\fBsystemd\-nspawn\fR
+prints the PID (as viewed from the outside) of the launched process, and it can be used to enter the container\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# nsenter \-m \-u \-i \-n \-p \-t $PID
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBnsenter\fR(1)
+is part of
+\m[blue]\fButil\-linux\fR\m[]\&\s-2\u[2]\d\s+2\&. Kernel support for entering namespaces was added in Linux 3\&.8\&.
+.SH "EXIT STATUS"
+.PP
+The exit code of the program executed in the container is returned\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBchroot\fR(1),
+\fBunshare\fR(1),
+\fByum\fR(8),
+\fBdebootstrap\fR(8),
+\fBpacman\fR(8),
+\fBsystemd.slice\fR(5)
+.SH "NOTES"
+.IP " 1." 4
+Container Interface
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface
+.RE
+.IP " 2." 4
+util-linux
+.RS 4
+\%https://github.com/karelzak/util-linux
+.RE
diff --git a/man/systemd-nspawn.html b/man/systemd-nspawn.html
index 593fcc1bfc..a63cc583cf 100644
--- a/man/systemd-nspawn.html
+++ b/man/systemd-nspawn.html
@@ -19,9 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-nspawn"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-nspawn — Spawn a namespace container for debugging, testing and building</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-nspawn</code> [OPTIONS...] [<em class="replaceable"><code>COMMAND</code></em>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-nspawn"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-nspawn — Spawn a namespace container for debugging, testing and building</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-nspawn</code> [OPTIONS...] [<em class="replaceable"><code>COMMAND</code></em>
[ARGS...]
- ]</p></div><div class="cmdsynopsis"><p><code class="command">systemd-nspawn</code> -b [OPTIONS...] [ARGS...]</p></div></div><div class="refsect1"><a name="idm259778472480"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-nspawn</strong></span> may be used to
+ ]</p></div><div class="cmdsynopsis"><p><code class="command">systemd-nspawn</code> -b [OPTIONS...] [ARGS...]</p></div></div><div class="refsect1"><a name="idm274694735024"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-nspawn</strong></span> may be used to
run a command or OS in a light-weight namespace
container. In many ways it is similar to
<a href="chroot.html"><span class="citerefentry"><span class="refentrytitle">chroot</span>(1)</span></a>,
@@ -46,12 +46,11 @@
this program is debugging and testing as well as
building of packages, distributions and software
involved with boot and systems management.</p><p>In contrast to
- <a href="chroot.html"><span class="citerefentry"><span class="refentrytitle">chroot</span>(1)</span></a>
- <span class="command"><strong>systemd-nspawn</strong></span> may be used to boot
- full Linux-based operating systems in a
- container.</p><p>Use a tool like
+ <a href="chroot.html"><span class="citerefentry"><span class="refentrytitle">chroot</span>(1)</span></a> <span class="command"><strong>systemd-nspawn</strong></span>
+ may be used to boot full Linux-based operating systems
+ in a container.</p><p>Use a tool like
<a href="yum.html"><span class="citerefentry"><span class="refentrytitle">yum</span>(8)</span></a>,
- <a href="debootstrap.html"><span class="citerefentry"><span class="refentrytitle">debootstrap</span>(8)</span></a>
+ <a href="debootstrap.html"><span class="citerefentry"><span class="refentrytitle">debootstrap</span>(8)</span></a>,
or
<a href="pacman.html"><span class="citerefentry"><span class="refentrytitle">pacman</span>(8)</span></a>
to set up an OS directory tree suitable as file system
@@ -74,20 +73,19 @@
<a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface" target="_top">Container
Interface</a> specification.</p><p>As a safety check
<span class="command"><strong>systemd-nspawn</strong></span> will verify the
- existance of <code class="filename">/etc/os-release</code> in
+ existence of <code class="filename">/etc/os-release</code> in
the container tree before starting the container (see
<a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a>). It
might be necessary to add this file to the container
tree manually if the OS of the container is too old to
- contain this file out-of-the-box.</p><p>Note that the kernel auditing subsystem is
+ contain this file out-of-the-box.</p></div><div class="refsect1"><a name="idm274698612992"></a><h2 id="Incompatibility with Auditing">Incompatibility with Auditing<a class="headerlink" title="Permalink to this headline" href="#Incompatibility%20with%20Auditing">¶</a></h2><p>Note that the kernel auditing subsystem is
currently broken when used together with
containers. We hence recommend turning it off entirely
- when using <span class="command"><strong>systemd-nspawn</strong></span> by
- booting with <code class="literal">audit=0</code> on the kernel
- command line, or by turning it off at kernel build
- time. If auditing is enabled in the kernel operating
- systems booted in an nspawn container might refuse
- log-in attempts.</p></div><div class="refsect1"><a name="idm259782111488"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>If option <code class="option">-b</code> is specified, the
+ by booting with "<code class="literal">audit=0</code>" on the
+ kernel command line, or by turning it off at kernel
+ build time. If auditing is enabled in the kernel,
+ operating systems booted in an nspawn container might
+ refuse log-in attempts.</p></div><div class="refsect1"><a name="idm274698590992"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>If option <code class="option">-b</code> is specified, the
arguments are used as arguments for the init
binary. Otherwise, <em class="replaceable"><code>COMMAND</code></em>
specifies the program to launch in the container, and
@@ -98,7 +96,7 @@
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a version string
and exits.</p></dd><dt id="-D"><span class="term"><code class="option">-D</code>, </span><span class="term"><code class="option">--directory=</code></span><a class="headerlink" title="Permalink to this term" href="#-D">¶</a></dt><dd><p>Directory to use as
file system root for the namespace
- container. If omitted the current
+ container. If omitted, the current
directory will be
used.</p></dd><dt id="-b"><span class="term"><code class="option">-b</code>, </span><span class="term"><code class="option">--boot</code></span><a class="headerlink" title="Permalink to this term" href="#-b">¶</a></dt><dd><p>Automatically search
for an init binary and invoke it
@@ -118,25 +116,25 @@
host, and is used to initialize the
container's hostname (which the
container can choose to override,
- however). If not specified the last
+ however). If not specified, the last
component of the root directory of the
- container is used.</p></dd><dt id="--uuid="><span class="term"><code class="option">--uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#--uuid=">¶</a></dt><dd><p>Set the specified uuid
+ container is used.</p></dd><dt id="--slice="><span class="term"><code class="option">--slice=</code></span><a class="headerlink" title="Permalink to this term" href="#--slice=">¶</a></dt><dd><p>Make the container
+ part of the specified slice, instead
+ of the
+ <code class="filename">machine.slice</code>.</p></dd><dt id="--uuid="><span class="term"><code class="option">--uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#--uuid=">¶</a></dt><dd><p>Set the specified UUID
for the container. The init system
will initialize
<code class="filename">/etc/machine-id</code>
from this if this file is not set yet.
- </p></dd><dt id="-C"><span class="term"><code class="option">-C</code>, </span><span class="term"><code class="option">--controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#-C">¶</a></dt><dd><p>Makes the container appear in
- other hierarchies than the name=systemd:/ one.
- Takes a comma-separated list of controllers.
</p></dd><dt id="--private-network"><span class="term"><code class="option">--private-network</code></span><a class="headerlink" title="Permalink to this term" href="#--private-network">¶</a></dt><dd><p>Turn off networking in
the container. This makes all network
interfaces unavailable in the
container, with the exception of the
loopback device.</p></dd><dt id="--read-only"><span class="term"><code class="option">--read-only</code></span><a class="headerlink" title="Permalink to this term" href="#--read-only">¶</a></dt><dd><p>Mount the root file
- system read only for the
+ system read-only for the
container.</p></dd><dt id="--capability="><span class="term"><code class="option">--capability=</code></span><a class="headerlink" title="Permalink to this term" href="#--capability=">¶</a></dt><dd><p>List one or more
additional capabilities to grant the
- container. Takes a comma separated
+ container. Takes a comma-separated
list of capability names, see
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>
for more information. Note that the
@@ -156,39 +154,39 @@
CAP_AUDIT_WRITE,
CAP_AUDIT_CONTROL.</p></dd><dt id="--link-journal="><span class="term"><code class="option">--link-journal=</code></span><a class="headerlink" title="Permalink to this term" href="#--link-journal=">¶</a></dt><dd><p>Control whether the
container's journal shall be made
- visible to the host system. If enabled
+ visible to the host system. If enabled,
allows viewing the container's journal
files from the host (but not vice
versa). Takes one of
- <code class="literal">no</code>,
- <code class="literal">host</code>,
- <code class="literal">guest</code>,
- <code class="literal">auto</code>. If
- <code class="literal">no</code>, the journal is
- not linked. If <code class="literal">host</code>,
+ "<code class="literal">no</code>",
+ "<code class="literal">host</code>",
+ "<code class="literal">guest</code>",
+ "<code class="literal">auto</code>". If
+ "<code class="literal">no</code>", the journal is
+ not linked. If "<code class="literal">host</code>",
the journal files are stored on the
host file system (beneath
<code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em></code>)
and the subdirectory is bind-mounted
into the container at the same
- location. If <code class="literal">guest</code>,
+ location. If "<code class="literal">guest</code>",
the journal files are stored on the
guest file system (beneath
<code class="filename">/var/log/journal/<em class="replaceable"><code>machine-id</code></em></code>)
and the subdirectory is symlinked into the host
at the same location. If
- <code class="literal">auto</code> (the default),
+ "<code class="literal">auto</code>" (the default),
and the right subdirectory of
<code class="filename">/var/log/journal</code>
exists, it will be bind mounted
into the container. If the
- subdirectory doesn't exist, no
+ subdirectory does not exist, no
linking is performed. Effectively,
booting a container once with
- <code class="literal">guest</code> or
- <code class="literal">host</code> will link the
+ "<code class="literal">guest</code>" or
+ "<code class="literal">host</code>" will link the
journal persistently if further on
- the default of <code class="literal">auto</code>
+ the default of "<code class="literal">auto</code>"
is used.</p></dd><dt id="-j"><span class="term"><code class="option">-j</code></span><a class="headerlink" title="Permalink to this term" href="#-j">¶</a></dt><dd><p>Equivalent to
<code class="option">--link-journal=guest</code>.</p></dd><dt id="--bind="><span class="term"><code class="option">--bind=</code>, </span><span class="term"><code class="option">--bind-ro=</code></span><a class="headerlink" title="Permalink to this term" href="#--bind=">¶</a></dt><dd><p>Bind mount a file or
directory from the host into the
@@ -203,15 +201,15 @@
destination in the container. The
<code class="option">--bind-ro=</code> option
creates read-only bind
- mount.</p></dd></dl></div></div><div class="refsect1"><a name="idm259777421088"></a><h2 id="Example 1">Example 1<a class="headerlink" title="Permalink to this headline" href="#Example%201">¶</a></h2><pre class="programlisting"># yum -y --releasever=19 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal
+ mount.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693634016"></a><h2 id="Example 1">Example 1<a class="headerlink" title="Permalink to this headline" href="#Example%201">¶</a></h2><pre class="programlisting"># yum -y --releasever=19 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal
# systemd-nspawn -bD /srv/mycontainer</pre><p>This installs a minimal Fedora distribution into
the directory <code class="filename">/srv/mycontainer/</code> and
then boots an OS in a namespace container in
- it.</p></div><div class="refsect1"><a name="idm259777418240"></a><h2 id="Example 2">Example 2<a class="headerlink" title="Permalink to this headline" href="#Example%202">¶</a></h2><pre class="programlisting"># debootstrap --arch=amd64 unstable ~/debian-tree/
+ it.</p></div><div class="refsect1"><a name="idm274693631168"></a><h2 id="Example 2">Example 2<a class="headerlink" title="Permalink to this headline" href="#Example%202">¶</a></h2><pre class="programlisting"># debootstrap --arch=amd64 unstable ~/debian-tree/
# systemd-nspawn -D ~/debian-tree/</pre><p>This installs a minimal Debian unstable
distribution into the directory
<code class="filename">~/debian-tree/</code> and then spawns a
- shell in a namespace container in it.</p></div><div class="refsect1"><a name="idm259777415520"></a><h2 id="Example 3">Example 3<a class="headerlink" title="Permalink to this headline" href="#Example%203">¶</a></h2><pre class="programlisting"># pacstrap -c -d ~/arch-tree/ base
+ shell in a namespace container in it.</p></div><div class="refsect1"><a name="idm274693628448"></a><h2 id="Example 3">Example 3<a class="headerlink" title="Permalink to this headline" href="#Example%203">¶</a></h2><pre class="programlisting"># pacstrap -c -d ~/arch-tree/ base
# systemd-nspawn -bD ~/arch-tree/</pre><p>This installs a mimimal Arch Linux distribution into
the directory <code class="filename">~/arch-tree/</code> and then
boots an OS in a namespace container in it.</p></div><div class="refsect1"><a name="example-nsenter"></a><h2 id="Example 4">Example 4<a class="headerlink" title="Permalink to this headline" href="#Example%204">¶</a></h2><p>To enter the container, PID of one of the
@@ -222,12 +220,13 @@
is part of
<a class="ulink" href="https://github.com/karelzak/util-linux" target="_top">util-linux</a>.
Kernel support for entering namespaces was added in
- Linux 3.8.</p></div><div class="refsect1"><a name="idm259777408320"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>The exit code of the program executed in the
- container is returned.</p></div><div class="refsect1"><a name="idm259777407072"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ Linux 3.8.</p></div><div class="refsect1"><a name="idm274693621248"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>The exit code of the program executed in the
+ container is returned.</p></div><div class="refsect1"><a name="idm274693620000"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="chroot.html"><span class="citerefentry"><span class="refentrytitle">chroot</span>(1)</span></a>,
<a href="unshare.html"><span class="citerefentry"><span class="refentrytitle">unshare</span>(1)</span></a>,
<a href="yum.html"><span class="citerefentry"><span class="refentrytitle">yum</span>(8)</span></a>,
<a href="debootstrap.html"><span class="citerefentry"><span class="refentrytitle">debootstrap</span>(8)</span></a>,
- <a href="pacman.html"><span class="citerefentry"><span class="refentrytitle">pacman</span>(8)</span></a>
+ <a href="pacman.html"><span class="citerefentry"><span class="refentrytitle">pacman</span>(8)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
index d9fb899895..7d450f912c 100644
--- a/man/systemd-nspawn.xml
+++ b/man/systemd-nspawn.xml
@@ -97,14 +97,13 @@
involved with boot and systems management.</para>
<para>In contrast to
- <citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
- <command>systemd-nspawn</command> may be used to boot
- full Linux-based operating systems in a
- container.</para>
+ <citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry> <command>systemd-nspawn</command>
+ may be used to boot full Linux-based operating systems
+ in a container.</para>
<para>Use a tool like
<citerefentry><refentrytitle>yum</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
or
<citerefentry><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry>
to set up an OS directory tree suitable as file system
@@ -136,22 +135,25 @@
<para>As a safety check
<command>systemd-nspawn</command> will verify the
- existance of <filename>/etc/os-release</filename> in
+ existence of <filename>/etc/os-release</filename> in
the container tree before starting the container (see
<citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>). It
might be necessary to add this file to the container
tree manually if the OS of the container is too old to
contain this file out-of-the-box.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Incompatibility with Auditing</title>
<para>Note that the kernel auditing subsystem is
currently broken when used together with
containers. We hence recommend turning it off entirely
- when using <command>systemd-nspawn</command> by
- booting with <literal>audit=0</literal> on the kernel
- command line, or by turning it off at kernel build
- time. If auditing is enabled in the kernel operating
- systems booted in an nspawn container might refuse
- log-in attempts.</para>
+ by booting with <literal>audit=0</literal> on the
+ kernel command line, or by turning it off at kernel
+ build time. If auditing is enabled in the kernel,
+ operating systems booted in an nspawn container might
+ refuse log-in attempts.</para>
</refsect1>
<refsect1>
@@ -190,7 +192,7 @@
<listitem><para>Directory to use as
file system root for the namespace
- container. If omitted the current
+ container. If omitted, the current
directory will be
used.</para></listitem>
</varlistentry>
@@ -231,15 +233,25 @@
host, and is used to initialize the
container's hostname (which the
container can choose to override,
- however). If not specified the last
+ however). If not specified, the last
component of the root directory of the
container is used.</para></listitem>
</varlistentry>
<varlistentry>
+ <term><option>--slice=</option></term>
+
+ <listitem><para>Make the container
+ part of the specified slice, instead
+ of the
+ <filename>machine.slice</filename>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>--uuid=</option></term>
- <listitem><para>Set the specified uuid
+ <listitem><para>Set the specified UUID
for the container. The init system
will initialize
<filename>/etc/machine-id</filename>
@@ -248,16 +260,6 @@
</varlistentry>
<varlistentry>
- <term><option>-C</option></term>
- <term><option>--controllers=</option></term>
-
- <listitem><para>Makes the container appear in
- other hierarchies than the name=systemd:/ one.
- Takes a comma-separated list of controllers.
- </para></listitem>
- </varlistentry>
-
- <varlistentry>
<term><option>--private-network</option></term>
<listitem><para>Turn off networking in
@@ -271,7 +273,7 @@
<term><option>--read-only</option></term>
<listitem><para>Mount the root file
- system read only for the
+ system read-only for the
container.</para></listitem>
</varlistentry>
@@ -280,7 +282,7 @@
<listitem><para>List one or more
additional capabilities to grant the
- container. Takes a comma separated
+ container. Takes a comma-separated
list of capability names, see
<citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for more information. Note that the
@@ -306,7 +308,7 @@
<listitem><para>Control whether the
container's journal shall be made
- visible to the host system. If enabled
+ visible to the host system. If enabled,
allows viewing the container's journal
files from the host (but not vice
versa). Takes one of
@@ -332,7 +334,7 @@
<filename>/var/log/journal</filename>
exists, it will be bind mounted
into the container. If the
- subdirectory doesn't exist, no
+ subdirectory does not exist, no
linking is performed. Effectively,
booting a container once with
<literal>guest</literal> or
@@ -440,7 +442,8 @@
<citerefentry><refentrytitle>unshare</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>yum</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd-poweroff.service.8 b/man/systemd-poweroff.service.8
new file mode 100644
index 0000000000..33205da3aa
--- /dev/null
+++ b/man/systemd-poweroff.service.8
@@ -0,0 +1 @@
+.so man8/systemd-halt.service.8
diff --git a/man/systemd-poweroff.service.html b/man/systemd-poweroff.service.html
index 97fda1b23d..6b6a783e47 100644
--- a/man/systemd-poweroff.service.html
+++ b/man/systemd-poweroff.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm259768592160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm274689319632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
system service that is pulled in by
<code class="filename">halt.target</code> and is responsible
for the actual system halt. Similar,
@@ -53,7 +53,7 @@
related units) should never be executed
directly. Instead, trigger system shutdown with a
command such as "<code class="literal">systemctl halt</code>" or
- suchlike.</p></div><div class="refsect1"><a name="idm259768653216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ suchlike.</p></div><div class="refsect1"><a name="idm274693257936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
diff --git a/man/systemd-quotacheck.8 b/man/systemd-quotacheck.8
new file mode 100644
index 0000000000..b3661ca789
--- /dev/null
+++ b/man/systemd-quotacheck.8
@@ -0,0 +1 @@
+.so man8/systemd-quotacheck.service.8
diff --git a/man/systemd-quotacheck.html b/man/systemd-quotacheck.html
index 4e123aed64..3faaaf149a 100644
--- a/man/systemd-quotacheck.html
+++ b/man/systemd-quotacheck.html
@@ -19,26 +19,26 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-quotacheck.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-quotacheck.service, systemd-quotacheck — File system quota checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-quotacheck.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-quotacheck</code></p></div><div class="refsect1"><a name="idm259797076960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-quotacheck.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-quotacheck.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-quotacheck.service, systemd-quotacheck — File system quota checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-quotacheck.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-quotacheck</code></p></div><div class="refsect1"><a name="idm274680798816"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-quotacheck.service</code>
is a service responsible for file system quota
checks. It is run once at boot after all necessary
file systems are mounted. It is pulled in only if at
- least one file system has quotas enabled.</p></div><div class="refsect1"><a name="idm259797074928"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-quotacheck</code> understands
+ least one file system has quotas enabled.</p></div><div class="refsect1"><a name="idm274680796784"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-quotacheck</code> understands
one kernel command line parameter:</p><div class="variablelist"><dl class="variablelist"><dt id="quotacheck.mode="><span class="term"><code class="varname">quotacheck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#quotacheck.mode=">¶</a></dt><dd><p>One of
- <code class="literal">auto</code>,
- <code class="literal">force</code>,
- <code class="literal">skip</code>. Controls the
+ "<code class="literal">auto</code>",
+ "<code class="literal">force</code>",
+ "<code class="literal">skip</code>". Controls the
mode of operation. The default is
- <code class="literal">auto</code>, and ensures
+ "<code class="literal">auto</code>", and ensures
that file system quota checks are done
when the file system quota checker
deems them
- necessary. <code class="literal">force</code>
+ necessary. "<code class="literal">force</code>"
unconditionally results in full file
system quota
- checks. <code class="literal">skip</code> skips
+ checks. "<code class="literal">skip</code>" skips
any file system quota
- checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm259797066080"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm274680787984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="quotacheck.html"><span class="citerefentry"><span class="refentrytitle">quotacheck</span>(8)</span></a>,
<a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a>
diff --git a/man/systemd-quotacheck.service.8 b/man/systemd-quotacheck.service.8
new file mode 100644
index 0000000000..409e03a780
--- /dev/null
+++ b/man/systemd-quotacheck.service.8
@@ -0,0 +1,54 @@
+'\" t
+.TH "SYSTEMD\-QUOTACHECK\&.SERVICE" "8" "" "systemd 208" "systemd-quotacheck.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-quotacheck.service, systemd-quotacheck \- File system quota checker logic
+.SH "SYNOPSIS"
+.PP
+systemd\-quotacheck\&.service
+.PP
+/usr/lib/systemd/systemd\-quotacheck
+.SH "DESCRIPTION"
+.PP
+systemd\-quotacheck\&.service
+is a service responsible for file system quota checks\&. It is run once at boot after all necessary file systems are mounted\&. It is pulled in only if at least one file system has quotas enabled\&.
+.SH "KERNEL COMMAND LINE"
+.PP
+systemd\-quotacheck
+understands one kernel command line parameter:
+.PP
+\fIquotacheck\&.mode=\fR
+.RS 4
+One of
+"auto",
+"force",
+"skip"\&. Controls the mode of operation\&. The default is
+"auto", and ensures that file system quota checks are done when the file system quota checker deems them necessary\&.
+"force"
+unconditionally results in full file system quota checks\&.
+"skip"
+skips any file system quota checks\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBquotacheck\fR(8),
+\fBsystemd-fsck@.service\fR(8)
diff --git a/man/systemd-quotacheck.service.html b/man/systemd-quotacheck.service.html
index 4e123aed64..3faaaf149a 100644
--- a/man/systemd-quotacheck.service.html
+++ b/man/systemd-quotacheck.service.html
@@ -19,26 +19,26 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-quotacheck.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-quotacheck.service, systemd-quotacheck — File system quota checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-quotacheck.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-quotacheck</code></p></div><div class="refsect1"><a name="idm259797076960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-quotacheck.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-quotacheck.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-quotacheck.service, systemd-quotacheck — File system quota checker logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-quotacheck.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-quotacheck</code></p></div><div class="refsect1"><a name="idm274680798816"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-quotacheck.service</code>
is a service responsible for file system quota
checks. It is run once at boot after all necessary
file systems are mounted. It is pulled in only if at
- least one file system has quotas enabled.</p></div><div class="refsect1"><a name="idm259797074928"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-quotacheck</code> understands
+ least one file system has quotas enabled.</p></div><div class="refsect1"><a name="idm274680796784"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p><code class="filename">systemd-quotacheck</code> understands
one kernel command line parameter:</p><div class="variablelist"><dl class="variablelist"><dt id="quotacheck.mode="><span class="term"><code class="varname">quotacheck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#quotacheck.mode=">¶</a></dt><dd><p>One of
- <code class="literal">auto</code>,
- <code class="literal">force</code>,
- <code class="literal">skip</code>. Controls the
+ "<code class="literal">auto</code>",
+ "<code class="literal">force</code>",
+ "<code class="literal">skip</code>". Controls the
mode of operation. The default is
- <code class="literal">auto</code>, and ensures
+ "<code class="literal">auto</code>", and ensures
that file system quota checks are done
when the file system quota checker
deems them
- necessary. <code class="literal">force</code>
+ necessary. "<code class="literal">force</code>"
unconditionally results in full file
system quota
- checks. <code class="literal">skip</code> skips
+ checks. "<code class="literal">skip</code>" skips
any file system quota
- checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm259797066080"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ checks.</p></dd></dl></div></div><div class="refsect1"><a name="idm274680787984"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="quotacheck.html"><span class="citerefentry"><span class="refentrytitle">quotacheck</span>(8)</span></a>,
<a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a>
diff --git a/man/systemd-random-seed-save.service.html b/man/systemd-random-seed-save.service.html
deleted file mode 100644
index e7211924df..0000000000
--- a/man/systemd-random-seed-save.service.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-random-seed-load.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
- a.headerlink {
- color: #c60f0f;
- font-size: 0.8em;
- padding: 0 4px 0 4px;
- text-decoration: none;
- visibility: hidden;
- }
-
- a.headerlink:hover {
- background-color: #c60f0f;
- color: white;
- }
-
- h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
- visibility: visible;
- }
- </style><a href="index.html">Index </a>·
- <a href="systemd.directives.html">Directives </a>·
- <a href="../python-systemd/index.html">Python </a>·
- <a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-random-seed-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-random-seed-load.service, systemd-random-seed-save.service, systemd-random-seed — Load and save the system random seed at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-random-seed-load.service</code></p><p><code class="filename">systemd-random-seed-save.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-random-seed</code></p></div><div class="refsect1"><a name="idm259770741616"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-random-seed-load.service</code>
- is an early-boot service that restores the random seed
- of the
- system. <code class="filename">systemd-random-seed-save.service</code>
- is a late-shutdown service that saves the random seed
- of the system. See
- <a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a>
- for details. Saving/restoring the random seed across
- boots increases the amount of available entropy early
- at boot. On disk the random seed is stored in
- <code class="filename">/var/lib/random-seed</code>.</p></div><div class="refsect1"><a name="idm259766975248"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
- <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a>
- </p></div></div></body></html>
diff --git a/man/systemd-random-seed.8 b/man/systemd-random-seed.8
new file mode 100644
index 0000000000..a9653dc15d
--- /dev/null
+++ b/man/systemd-random-seed.8
@@ -0,0 +1 @@
+.so man8/systemd-random-seed.service.8
diff --git a/man/systemd-random-seed.html b/man/systemd-random-seed.html
index e7211924df..353f00c1c0 100644
--- a/man/systemd-random-seed.html
+++ b/man/systemd-random-seed.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-random-seed-load.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-random-seed.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
@@ -19,17 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-random-seed-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-random-seed-load.service, systemd-random-seed-save.service, systemd-random-seed — Load and save the system random seed at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-random-seed-load.service</code></p><p><code class="filename">systemd-random-seed-save.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-random-seed</code></p></div><div class="refsect1"><a name="idm259770741616"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-random-seed-load.service</code>
- is an early-boot service that restores the random seed
- of the
- system. <code class="filename">systemd-random-seed-save.service</code>
- is a late-shutdown service that saves the random seed
- of the system. See
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-random-seed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-random-seed.service, systemd-random-seed — Load and save the system random seed at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-random-seed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-random-seed</code></p></div><div class="refsect1"><a name="idm274681687696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-random-seed.service</code>
+ is a service that restores the random seed of the
+ system at early-boot and saves it at shutdown. See
<a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a>
for details. Saving/restoring the random seed across
boots increases the amount of available entropy early
at boot. On disk the random seed is stored in
- <code class="filename">/var/lib/random-seed</code>.</p></div><div class="refsect1"><a name="idm259766975248"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="filename">/var/lib/random-seed</code>.</p></div><div class="refsect1"><a name="idm274681684000"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-random-seed.service.8 b/man/systemd-random-seed.service.8
new file mode 100644
index 0000000000..1fbf232e7a
--- /dev/null
+++ b/man/systemd-random-seed.service.8
@@ -0,0 +1,39 @@
+'\" t
+.TH "SYSTEMD\-RANDOM\-SEED\&.SERVICE" "8" "" "systemd 208" "systemd-random-seed.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-random-seed.service, systemd-random-seed \- Load and save the system random seed at boot and shutdown
+.SH "SYNOPSIS"
+.PP
+systemd\-random\-seed\&.service
+.PP
+/usr/lib/systemd/systemd\-random\-seed
+.SH "DESCRIPTION"
+.PP
+systemd\-random\-seed\&.service
+is a service that restores the random seed of the system at early\-boot and saves it at shutdown\&. See
+\fBrandom\fR(4)
+for details\&. Saving/restoring the random seed across boots increases the amount of available entropy early at boot\&. On disk the random seed is stored in
+/var/lib/random\-seed\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBrandom\fR(4)
diff --git a/man/systemd-random-seed-load.service.html b/man/systemd-random-seed.service.html
index e7211924df..353f00c1c0 100644
--- a/man/systemd-random-seed-load.service.html
+++ b/man/systemd-random-seed.service.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-random-seed-load.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-random-seed.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
@@ -19,17 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-random-seed-load.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-random-seed-load.service, systemd-random-seed-save.service, systemd-random-seed — Load and save the system random seed at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-random-seed-load.service</code></p><p><code class="filename">systemd-random-seed-save.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-random-seed</code></p></div><div class="refsect1"><a name="idm259770741616"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-random-seed-load.service</code>
- is an early-boot service that restores the random seed
- of the
- system. <code class="filename">systemd-random-seed-save.service</code>
- is a late-shutdown service that saves the random seed
- of the system. See
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-random-seed.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-random-seed.service, systemd-random-seed — Load and save the system random seed at boot and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-random-seed.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-random-seed</code></p></div><div class="refsect1"><a name="idm274681687696"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-random-seed.service</code>
+ is a service that restores the random seed of the
+ system at early-boot and saves it at shutdown. See
<a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a>
for details. Saving/restoring the random seed across
boots increases the amount of available entropy early
at boot. On disk the random seed is stored in
- <code class="filename">/var/lib/random-seed</code>.</p></div><div class="refsect1"><a name="idm259766975248"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="filename">/var/lib/random-seed</code>.</p></div><div class="refsect1"><a name="idm274681684000"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-random-seed-load.service.xml b/man/systemd-random-seed.service.xml
index 693c008a2d..8cd14b74cb 100644
--- a/man/systemd-random-seed-load.service.xml
+++ b/man/systemd-random-seed.service.xml
@@ -19,10 +19,10 @@
You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->
-<refentry id="systemd-random-seed-load.service" conditional='ENABLE_RANDOMSEED'>
+<refentry id="systemd-random-seed.service" conditional='ENABLE_RANDOMSEED'>
<refentryinfo>
- <title>systemd-random-seed-load.service</title>
+ <title>systemd-random-seed.service</title>
<productname>systemd</productname>
<authorgroup>
@@ -36,32 +36,27 @@
</refentryinfo>
<refmeta>
- <refentrytitle>systemd-random-seed-load.service</refentrytitle>
+ <refentrytitle>systemd-random-seed.service</refentrytitle>
<manvolnum>8</manvolnum>
</refmeta>
<refnamediv>
- <refname>systemd-random-seed-load.service</refname>
- <refname>systemd-random-seed-save.service</refname>
+ <refname>systemd-random-seed.service</refname>
<refname>systemd-random-seed</refname>
<refpurpose>Load and save the system random seed at boot and shutdown</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <para><filename>systemd-random-seed-load.service</filename></para>
- <para><filename>systemd-random-seed-save.service</filename></para>
+ <para><filename>systemd-random-seed.service</filename></para>
<para><filename>/usr/lib/systemd/systemd-random-seed</filename></para>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
- <para><filename>systemd-random-seed-load.service</filename>
- is an early-boot service that restores the random seed
- of the
- system. <filename>systemd-random-seed-save.service</filename>
- is a late-shutdown service that saves the random seed
- of the system. See
+ <para><filename>systemd-random-seed.service</filename>
+ is a service that restores the random seed of the
+ system at early-boot and saves it at shutdown. See
<citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry>
for details. Saving/restoring the random seed across
boots increases the amount of available entropy early
diff --git a/man/systemd-readahead-collect.service.8 b/man/systemd-readahead-collect.service.8
new file mode 100644
index 0000000000..cb34b4712f
--- /dev/null
+++ b/man/systemd-readahead-collect.service.8
@@ -0,0 +1 @@
+.so man8/systemd-readahead-replay.service.8
diff --git a/man/systemd-readahead-collect.service.html b/man/systemd-readahead-collect.service.html
index 51016d9872..e81e8c7ec5 100644
--- a/man/systemd-readahead-collect.service.html
+++ b/man/systemd-readahead-collect.service.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm259772642912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm274684861104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
is a service that collects disk usage patterns at boot
time. <code class="filename">systemd-readahead-replay.service</code>
is a service that replays this access data collected
at the subsequent boot. Since disks tend to be
- magnitudes slower than RAM this is intended to improve
+ magnitudes slower than RAM, this is intended to improve
boot speeds by pre-loading early at boot all data on
disk that is known to be read for the complete boot
process.</p><p><code class="filename">systemd-readahead-done.service</code>
is executed a short while after boot completed and signals
<code class="filename">systemd-readahead-collect.service</code>
- to end data collection. On this signal this service
+ to end data collection. On this signal, this service
will then sort the collected disk accesses and store
- information about them disk in
+ information about them in
<code class="filename">/.readahead</code>.</p><p>Normally, both
<code class="filename">systemd-readahead-collect.service</code>
and
@@ -40,34 +40,34 @@
are activated at boot so that access patterns from the
preceding boot are replayed and new data collected
for the subsequent boot. However, on read-only media
- where the collected data cannot be stored it might
+ where the collected data cannot be stored, it might
be a good idea to disable
<code class="filename">systemd-readahead-collect.service</code>.</p><p>On rotating media, when replaying disk accesses
- at early boot
+ at early boot,
<code class="filename">systemd-readahead-replay.service</code>
will order read requests by their location on disk. On
non-rotating media, they will be ordered by their
original access timestamp. If the file system supports
- it
+ it,
<code class="filename">systemd-readahead-collect.service</code>
will also defragment and rearrange files on disk to
- optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm259772632032"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
+ optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm274688754352"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
the following options:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help text
and exits.</p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p>Maximum number of
files to read ahead. Only valid
for thes <span class="command"><strong>collect</strong></span>
command.</p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p>Maximum size of files
- (in bytes) to read ahead. Only valid
+ in bytes to read ahead. Only valid
for the <span class="command"><strong>collect</strong></span>
and <span class="command"><strong>replay</strong></span>
- commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time (in usec)
- to to spend collecting data. Only valid
+ commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time in microseconds
+ to spend collecting data. Only valid
for the <span class="command"><strong>collect</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776575328"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688742560"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
<code class="filename">systemd-readahead</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="collect
[DIRECTORY]"><span class="term"><span class="command"><strong>collect
[<em class="replaceable"><code>DIRECTORY</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#collect%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BDIRECTORY%5D">¶</a></dt><dd><p>Collect read-ahead data on
- early boot. When terminating it will
+ early boot. When terminating, it will
write out a pack file to the indicated
directory containing the read-ahead
data. </p></dd><dt id="replay
@@ -77,10 +77,10 @@
[FILE]"><span class="term"><span class="command"><strong>analyze
[<em class="replaceable"><code>FILE</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#analyze%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BFILE%5D">¶</a></dt><dd><p>Dumps the content of the
read-ahead pack file to the
- terminal. The output lists
- approximately for each file
- how much will be read-ahead by
+ terminal. For each file, the
+ output lists approximately how
+ much will be read ahead by
the <span class="command"><strong>replay</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776557232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688724480"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-readahead-done.service.8 b/man/systemd-readahead-done.service.8
new file mode 100644
index 0000000000..cb34b4712f
--- /dev/null
+++ b/man/systemd-readahead-done.service.8
@@ -0,0 +1 @@
+.so man8/systemd-readahead-replay.service.8
diff --git a/man/systemd-readahead-done.service.html b/man/systemd-readahead-done.service.html
index 51016d9872..e81e8c7ec5 100644
--- a/man/systemd-readahead-done.service.html
+++ b/man/systemd-readahead-done.service.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm259772642912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm274684861104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
is a service that collects disk usage patterns at boot
time. <code class="filename">systemd-readahead-replay.service</code>
is a service that replays this access data collected
at the subsequent boot. Since disks tend to be
- magnitudes slower than RAM this is intended to improve
+ magnitudes slower than RAM, this is intended to improve
boot speeds by pre-loading early at boot all data on
disk that is known to be read for the complete boot
process.</p><p><code class="filename">systemd-readahead-done.service</code>
is executed a short while after boot completed and signals
<code class="filename">systemd-readahead-collect.service</code>
- to end data collection. On this signal this service
+ to end data collection. On this signal, this service
will then sort the collected disk accesses and store
- information about them disk in
+ information about them in
<code class="filename">/.readahead</code>.</p><p>Normally, both
<code class="filename">systemd-readahead-collect.service</code>
and
@@ -40,34 +40,34 @@
are activated at boot so that access patterns from the
preceding boot are replayed and new data collected
for the subsequent boot. However, on read-only media
- where the collected data cannot be stored it might
+ where the collected data cannot be stored, it might
be a good idea to disable
<code class="filename">systemd-readahead-collect.service</code>.</p><p>On rotating media, when replaying disk accesses
- at early boot
+ at early boot,
<code class="filename">systemd-readahead-replay.service</code>
will order read requests by their location on disk. On
non-rotating media, they will be ordered by their
original access timestamp. If the file system supports
- it
+ it,
<code class="filename">systemd-readahead-collect.service</code>
will also defragment and rearrange files on disk to
- optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm259772632032"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
+ optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm274688754352"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
the following options:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help text
and exits.</p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p>Maximum number of
files to read ahead. Only valid
for thes <span class="command"><strong>collect</strong></span>
command.</p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p>Maximum size of files
- (in bytes) to read ahead. Only valid
+ in bytes to read ahead. Only valid
for the <span class="command"><strong>collect</strong></span>
and <span class="command"><strong>replay</strong></span>
- commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time (in usec)
- to to spend collecting data. Only valid
+ commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time in microseconds
+ to spend collecting data. Only valid
for the <span class="command"><strong>collect</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776575328"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688742560"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
<code class="filename">systemd-readahead</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="collect
[DIRECTORY]"><span class="term"><span class="command"><strong>collect
[<em class="replaceable"><code>DIRECTORY</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#collect%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BDIRECTORY%5D">¶</a></dt><dd><p>Collect read-ahead data on
- early boot. When terminating it will
+ early boot. When terminating, it will
write out a pack file to the indicated
directory containing the read-ahead
data. </p></dd><dt id="replay
@@ -77,10 +77,10 @@
[FILE]"><span class="term"><span class="command"><strong>analyze
[<em class="replaceable"><code>FILE</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#analyze%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BFILE%5D">¶</a></dt><dd><p>Dumps the content of the
read-ahead pack file to the
- terminal. The output lists
- approximately for each file
- how much will be read-ahead by
+ terminal. For each file, the
+ output lists approximately how
+ much will be read ahead by
the <span class="command"><strong>replay</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776557232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688724480"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-readahead-done.timer.8 b/man/systemd-readahead-done.timer.8
new file mode 100644
index 0000000000..cb34b4712f
--- /dev/null
+++ b/man/systemd-readahead-done.timer.8
@@ -0,0 +1 @@
+.so man8/systemd-readahead-replay.service.8
diff --git a/man/systemd-readahead-done.timer.html b/man/systemd-readahead-done.timer.html
index 51016d9872..e81e8c7ec5 100644
--- a/man/systemd-readahead-done.timer.html
+++ b/man/systemd-readahead-done.timer.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm259772642912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm274684861104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
is a service that collects disk usage patterns at boot
time. <code class="filename">systemd-readahead-replay.service</code>
is a service that replays this access data collected
at the subsequent boot. Since disks tend to be
- magnitudes slower than RAM this is intended to improve
+ magnitudes slower than RAM, this is intended to improve
boot speeds by pre-loading early at boot all data on
disk that is known to be read for the complete boot
process.</p><p><code class="filename">systemd-readahead-done.service</code>
is executed a short while after boot completed and signals
<code class="filename">systemd-readahead-collect.service</code>
- to end data collection. On this signal this service
+ to end data collection. On this signal, this service
will then sort the collected disk accesses and store
- information about them disk in
+ information about them in
<code class="filename">/.readahead</code>.</p><p>Normally, both
<code class="filename">systemd-readahead-collect.service</code>
and
@@ -40,34 +40,34 @@
are activated at boot so that access patterns from the
preceding boot are replayed and new data collected
for the subsequent boot. However, on read-only media
- where the collected data cannot be stored it might
+ where the collected data cannot be stored, it might
be a good idea to disable
<code class="filename">systemd-readahead-collect.service</code>.</p><p>On rotating media, when replaying disk accesses
- at early boot
+ at early boot,
<code class="filename">systemd-readahead-replay.service</code>
will order read requests by their location on disk. On
non-rotating media, they will be ordered by their
original access timestamp. If the file system supports
- it
+ it,
<code class="filename">systemd-readahead-collect.service</code>
will also defragment and rearrange files on disk to
- optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm259772632032"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
+ optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm274688754352"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
the following options:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help text
and exits.</p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p>Maximum number of
files to read ahead. Only valid
for thes <span class="command"><strong>collect</strong></span>
command.</p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p>Maximum size of files
- (in bytes) to read ahead. Only valid
+ in bytes to read ahead. Only valid
for the <span class="command"><strong>collect</strong></span>
and <span class="command"><strong>replay</strong></span>
- commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time (in usec)
- to to spend collecting data. Only valid
+ commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time in microseconds
+ to spend collecting data. Only valid
for the <span class="command"><strong>collect</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776575328"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688742560"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
<code class="filename">systemd-readahead</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="collect
[DIRECTORY]"><span class="term"><span class="command"><strong>collect
[<em class="replaceable"><code>DIRECTORY</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#collect%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BDIRECTORY%5D">¶</a></dt><dd><p>Collect read-ahead data on
- early boot. When terminating it will
+ early boot. When terminating, it will
write out a pack file to the indicated
directory containing the read-ahead
data. </p></dd><dt id="replay
@@ -77,10 +77,10 @@
[FILE]"><span class="term"><span class="command"><strong>analyze
[<em class="replaceable"><code>FILE</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#analyze%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BFILE%5D">¶</a></dt><dd><p>Dumps the content of the
read-ahead pack file to the
- terminal. The output lists
- approximately for each file
- how much will be read-ahead by
+ terminal. For each file, the
+ output lists approximately how
+ much will be read ahead by
the <span class="command"><strong>replay</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776557232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688724480"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-readahead-replay.service.8 b/man/systemd-readahead-replay.service.8
new file mode 100644
index 0000000000..81eb2a2f04
--- /dev/null
+++ b/man/systemd-readahead-replay.service.8
@@ -0,0 +1,115 @@
+'\" t
+.TH "SYSTEMD\-READAHEAD\-REPLAY\&.SERVICE" "8" "" "systemd 208" "systemd-readahead-replay.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead \- Disk read ahead logic
+.SH "SYNOPSIS"
+.PP
+systemd\-readahead\-replay\&.service
+.PP
+systemd\-readahead\-collect\&.service
+.PP
+systemd\-readahead\-done\&.service
+.PP
+systemd\-readahead\-done\&.timer
+.HP \w'\fB/usr/lib/systemd/systemd\-readahead/systemd\-readahead\fR\ 'u
+\fB/usr/lib/systemd/systemd\-readahead/systemd\-readahead\fR [OPTIONS...] COMMAND [DIRECTORY\ |\ FILE]
+.SH "DESCRIPTION"
+.PP
+systemd\-readahead\-collect\&.service
+is a service that collects disk usage patterns at boot time\&.
+systemd\-readahead\-replay\&.service
+is a service that replays this access data collected at the subsequent boot\&. Since disks tend to be magnitudes slower than RAM, this is intended to improve boot speeds by pre\-loading early at boot all data on disk that is known to be read for the complete boot process\&.
+.PP
+systemd\-readahead\-done\&.service
+is executed a short while after boot completed and signals
+systemd\-readahead\-collect\&.service
+to end data collection\&. On this signal, this service will then sort the collected disk accesses and store information about them in
+/\&.readahead\&.
+.PP
+Normally, both
+systemd\-readahead\-collect\&.service
+and
+systemd\-readahead\-replay\&.service
+are activated at boot so that access patterns from the preceding boot are replayed and new data collected for the subsequent boot\&. However, on read\-only media where the collected data cannot be stored, it might be a good idea to disable
+systemd\-readahead\-collect\&.service\&.
+.PP
+On rotating media, when replaying disk accesses at early boot,
+systemd\-readahead\-replay\&.service
+will order read requests by their location on disk\&. On non\-rotating media, they will be ordered by their original access timestamp\&. If the file system supports it,
+systemd\-readahead\-collect\&.service
+will also defragment and rearrange files on disk to optimize subsequent boot times\&.
+.SH "OPTIONS"
+.PP
+systemd\-readahead
+understands the following options:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-max\-files=\fR
+.RS 4
+Maximum number of files to read ahead\&. Only valid for thes
+\fBcollect\fR
+command\&.
+.RE
+.PP
+\fB\-\-file\-size\-max=\fR
+.RS 4
+Maximum size of files in bytes to read ahead\&. Only valid for the
+\fBcollect\fR
+and
+\fBreplay\fR
+commands\&.
+.RE
+.PP
+\fB\-\-timeout=\fR
+.RS 4
+Maximum time in microseconds to spend collecting data\&. Only valid for the
+\fBcollect\fR
+command\&.
+.RE
+.SH "COMMANDS"
+.PP
+The following commands are understood by
+systemd\-readahead:
+.PP
+\fBcollect [\fR\fB\fIDIRECTORY\fR\fR\fB]\fR
+.RS 4
+Collect read\-ahead data on early boot\&. When terminating, it will write out a pack file to the indicated directory containing the read\-ahead data\&.
+.RE
+.PP
+\fBreplay [\fR\fB\fIDIRECTORY\fR\fR\fB]\fR
+.RS 4
+Perform read\-ahead on the specified directory tree\&.
+.RE
+.PP
+\fBanalyze [\fR\fB\fIFILE\fR\fR\fB]\fR
+.RS 4
+Dumps the content of the read\-ahead pack file to the terminal\&. For each file, the output lists approximately how much will be read ahead by the
+\fBreplay\fR
+command\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1)
diff --git a/man/systemd-readahead-replay.service.html b/man/systemd-readahead-replay.service.html
index 51016d9872..e81e8c7ec5 100644
--- a/man/systemd-readahead-replay.service.html
+++ b/man/systemd-readahead-replay.service.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm259772642912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm274684861104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
is a service that collects disk usage patterns at boot
time. <code class="filename">systemd-readahead-replay.service</code>
is a service that replays this access data collected
at the subsequent boot. Since disks tend to be
- magnitudes slower than RAM this is intended to improve
+ magnitudes slower than RAM, this is intended to improve
boot speeds by pre-loading early at boot all data on
disk that is known to be read for the complete boot
process.</p><p><code class="filename">systemd-readahead-done.service</code>
is executed a short while after boot completed and signals
<code class="filename">systemd-readahead-collect.service</code>
- to end data collection. On this signal this service
+ to end data collection. On this signal, this service
will then sort the collected disk accesses and store
- information about them disk in
+ information about them in
<code class="filename">/.readahead</code>.</p><p>Normally, both
<code class="filename">systemd-readahead-collect.service</code>
and
@@ -40,34 +40,34 @@
are activated at boot so that access patterns from the
preceding boot are replayed and new data collected
for the subsequent boot. However, on read-only media
- where the collected data cannot be stored it might
+ where the collected data cannot be stored, it might
be a good idea to disable
<code class="filename">systemd-readahead-collect.service</code>.</p><p>On rotating media, when replaying disk accesses
- at early boot
+ at early boot,
<code class="filename">systemd-readahead-replay.service</code>
will order read requests by their location on disk. On
non-rotating media, they will be ordered by their
original access timestamp. If the file system supports
- it
+ it,
<code class="filename">systemd-readahead-collect.service</code>
will also defragment and rearrange files on disk to
- optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm259772632032"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
+ optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm274688754352"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
the following options:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help text
and exits.</p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p>Maximum number of
files to read ahead. Only valid
for thes <span class="command"><strong>collect</strong></span>
command.</p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p>Maximum size of files
- (in bytes) to read ahead. Only valid
+ in bytes to read ahead. Only valid
for the <span class="command"><strong>collect</strong></span>
and <span class="command"><strong>replay</strong></span>
- commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time (in usec)
- to to spend collecting data. Only valid
+ commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time in microseconds
+ to spend collecting data. Only valid
for the <span class="command"><strong>collect</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776575328"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688742560"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
<code class="filename">systemd-readahead</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="collect
[DIRECTORY]"><span class="term"><span class="command"><strong>collect
[<em class="replaceable"><code>DIRECTORY</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#collect%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BDIRECTORY%5D">¶</a></dt><dd><p>Collect read-ahead data on
- early boot. When terminating it will
+ early boot. When terminating, it will
write out a pack file to the indicated
directory containing the read-ahead
data. </p></dd><dt id="replay
@@ -77,10 +77,10 @@
[FILE]"><span class="term"><span class="command"><strong>analyze
[<em class="replaceable"><code>FILE</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#analyze%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BFILE%5D">¶</a></dt><dd><p>Dumps the content of the
read-ahead pack file to the
- terminal. The output lists
- approximately for each file
- how much will be read-ahead by
+ terminal. For each file, the
+ output lists approximately how
+ much will be read ahead by
the <span class="command"><strong>replay</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776557232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688724480"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-readahead-replay.service.xml b/man/systemd-readahead-replay.service.xml
index a00f7e589b..806d46093b 100644
--- a/man/systemd-readahead-replay.service.xml
+++ b/man/systemd-readahead-replay.service.xml
@@ -72,7 +72,7 @@
time. <filename>systemd-readahead-replay.service</filename>
is a service that replays this access data collected
at the subsequent boot. Since disks tend to be
- magnitudes slower than RAM this is intended to improve
+ magnitudes slower than RAM, this is intended to improve
boot speeds by pre-loading early at boot all data on
disk that is known to be read for the complete boot
process.</para>
@@ -80,9 +80,9 @@
<para><filename>systemd-readahead-done.service</filename>
is executed a short while after boot completed and signals
<filename>systemd-readahead-collect.service</filename>
- to end data collection. On this signal this service
+ to end data collection. On this signal, this service
will then sort the collected disk accesses and store
- information about them disk in
+ information about them in
<filename>/.readahead</filename>.</para>
<para>Normally, both
@@ -92,17 +92,17 @@
are activated at boot so that access patterns from the
preceding boot are replayed and new data collected
for the subsequent boot. However, on read-only media
- where the collected data cannot be stored it might
+ where the collected data cannot be stored, it might
be a good idea to disable
<filename>systemd-readahead-collect.service</filename>.</para>
<para>On rotating media, when replaying disk accesses
- at early boot
+ at early boot,
<filename>systemd-readahead-replay.service</filename>
will order read requests by their location on disk. On
non-rotating media, they will be ordered by their
original access timestamp. If the file system supports
- it
+ it,
<filename>systemd-readahead-collect.service</filename>
will also defragment and rearrange files on disk to
optimize subsequent boot times.</para>
@@ -136,7 +136,7 @@
<term><option>--file-size-max=</option></term>
<listitem><para>Maximum size of files
- (in bytes) to read ahead. Only valid
+ in bytes to read ahead. Only valid
for the <command>collect</command>
and <command>replay</command>
commands.</para></listitem>
@@ -145,8 +145,8 @@
<varlistentry>
<term><option>--timeout=</option></term>
- <listitem><para>Maximum time (in usec)
- to to spend collecting data. Only valid
+ <listitem><para>Maximum time in microseconds
+ to spend collecting data. Only valid
for the <command>collect</command>
command.</para></listitem>
</varlistentry>
@@ -164,7 +164,7 @@
[<replaceable>DIRECTORY</replaceable>]</command></term>
<listitem>
<para>Collect read-ahead data on
- early boot. When terminating it will
+ early boot. When terminating, it will
write out a pack file to the indicated
directory containing the read-ahead
data. </para>
@@ -186,9 +186,9 @@
<listitem>
<para>Dumps the content of the
read-ahead pack file to the
- terminal. The output lists
- approximately for each file
- how much will be read-ahead by
+ terminal. For each file, the
+ output lists approximately how
+ much will be read ahead by
the <command>replay</command>
command.</para>
</listitem>
diff --git a/man/systemd-readahead.8 b/man/systemd-readahead.8
new file mode 100644
index 0000000000..cb34b4712f
--- /dev/null
+++ b/man/systemd-readahead.8
@@ -0,0 +1 @@
+.so man8/systemd-readahead-replay.service.8
diff --git a/man/systemd-readahead.html b/man/systemd-readahead.html
index 51016d9872..e81e8c7ec5 100644
--- a/man/systemd-readahead.html
+++ b/man/systemd-readahead.html
@@ -19,20 +19,20 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm259772642912"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-readahead-replay.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-readahead-replay.service, systemd-readahead-collect.service, systemd-readahead-done.service, systemd-readahead-done.timer, systemd-readahead — Disk read ahead logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-readahead-replay.service</code></p><p><code class="filename">systemd-readahead-collect.service</code></p><p><code class="filename">systemd-readahead-done.service</code></p><p><code class="filename">systemd-readahead-done.timer</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-readahead/systemd-readahead</code> [OPTIONS...] COMMAND [DIRECTORY | FILE]</p></div></div><div class="refsect1"><a name="idm274684861104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-readahead-collect.service</code>
is a service that collects disk usage patterns at boot
time. <code class="filename">systemd-readahead-replay.service</code>
is a service that replays this access data collected
at the subsequent boot. Since disks tend to be
- magnitudes slower than RAM this is intended to improve
+ magnitudes slower than RAM, this is intended to improve
boot speeds by pre-loading early at boot all data on
disk that is known to be read for the complete boot
process.</p><p><code class="filename">systemd-readahead-done.service</code>
is executed a short while after boot completed and signals
<code class="filename">systemd-readahead-collect.service</code>
- to end data collection. On this signal this service
+ to end data collection. On this signal, this service
will then sort the collected disk accesses and store
- information about them disk in
+ information about them in
<code class="filename">/.readahead</code>.</p><p>Normally, both
<code class="filename">systemd-readahead-collect.service</code>
and
@@ -40,34 +40,34 @@
are activated at boot so that access patterns from the
preceding boot are replayed and new data collected
for the subsequent boot. However, on read-only media
- where the collected data cannot be stored it might
+ where the collected data cannot be stored, it might
be a good idea to disable
<code class="filename">systemd-readahead-collect.service</code>.</p><p>On rotating media, when replaying disk accesses
- at early boot
+ at early boot,
<code class="filename">systemd-readahead-replay.service</code>
will order read requests by their location on disk. On
non-rotating media, they will be ordered by their
original access timestamp. If the file system supports
- it
+ it,
<code class="filename">systemd-readahead-collect.service</code>
will also defragment and rearrange files on disk to
- optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm259772632032"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
+ optimize subsequent boot times.</p></div><div class="refsect1"><a name="idm274688754352"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><code class="filename">systemd-readahead</code> understands
the following options:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help text
and exits.</p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p>Maximum number of
files to read ahead. Only valid
for thes <span class="command"><strong>collect</strong></span>
command.</p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p>Maximum size of files
- (in bytes) to read ahead. Only valid
+ in bytes to read ahead. Only valid
for the <span class="command"><strong>collect</strong></span>
and <span class="command"><strong>replay</strong></span>
- commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time (in usec)
- to to spend collecting data. Only valid
+ commands.</p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p>Maximum time in microseconds
+ to spend collecting data. Only valid
for the <span class="command"><strong>collect</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776575328"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688742560"></a><h2 id="Commands">Commands<a class="headerlink" title="Permalink to this headline" href="#Commands">¶</a></h2><p>The following commands are understood by
<code class="filename">systemd-readahead</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="collect
[DIRECTORY]"><span class="term"><span class="command"><strong>collect
[<em class="replaceable"><code>DIRECTORY</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#collect%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BDIRECTORY%5D">¶</a></dt><dd><p>Collect read-ahead data on
- early boot. When terminating it will
+ early boot. When terminating, it will
write out a pack file to the indicated
directory containing the read-ahead
data. </p></dd><dt id="replay
@@ -77,10 +77,10 @@
[FILE]"><span class="term"><span class="command"><strong>analyze
[<em class="replaceable"><code>FILE</code></em>]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#analyze%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5BFILE%5D">¶</a></dt><dd><p>Dumps the content of the
read-ahead pack file to the
- terminal. The output lists
- approximately for each file
- how much will be read-ahead by
+ terminal. For each file, the
+ output lists approximately how
+ much will be read ahead by
the <span class="command"><strong>replay</strong></span>
- command.</p></dd></dl></div></div><div class="refsect1"><a name="idm259776557232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ command.</p></dd></dl></div></div><div class="refsect1"><a name="idm274688724480"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-reboot.service.8 b/man/systemd-reboot.service.8
new file mode 100644
index 0000000000..33205da3aa
--- /dev/null
+++ b/man/systemd-reboot.service.8
@@ -0,0 +1 @@
+.so man8/systemd-halt.service.8
diff --git a/man/systemd-reboot.service.html b/man/systemd-reboot.service.html
index 97fda1b23d..6b6a783e47 100644
--- a/man/systemd-reboot.service.html
+++ b/man/systemd-reboot.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm259768592160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm274689319632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
system service that is pulled in by
<code class="filename">halt.target</code> and is responsible
for the actual system halt. Similar,
@@ -53,7 +53,7 @@
related units) should never be executed
directly. Instead, trigger system shutdown with a
command such as "<code class="literal">systemctl halt</code>" or
- suchlike.</p></div><div class="refsect1"><a name="idm259768653216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ suchlike.</p></div><div class="refsect1"><a name="idm274693257936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
diff --git a/man/systemd-remount-fs.8 b/man/systemd-remount-fs.8
new file mode 100644
index 0000000000..90506dc1ce
--- /dev/null
+++ b/man/systemd-remount-fs.8
@@ -0,0 +1 @@
+.so man8/systemd-remount-fs.service.8
diff --git a/man/systemd-remount-fs.html b/man/systemd-remount-fs.html
index 5b754fddc2..81a7836626 100644
--- a/man/systemd-remount-fs.html
+++ b/man/systemd-remount-fs.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-remount-fs.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-remount-fs.service, systemd-remount-fs — Remount root and kernel file systems</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-remount-fs.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-remount-fs</code></p></div><div class="refsect1"><a name="idm259792844720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-remount-fs.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-remount-fs.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-remount-fs.service, systemd-remount-fs — Remount root and kernel file systems</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-remount-fs.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-remount-fs</code></p></div><div class="refsect1"><a name="idm274679877520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-remount-fs.service</code>
is an early-boot service that applies mount options
listed in
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
@@ -40,7 +40,7 @@
exist or lists no entries for the mentioned file
systems.</p><p>For a longer discussion of kernel API file
systems see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems" target="_top">API
- File Systems</a>.</p></div><div class="refsect1"><a name="idm259789285312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ File Systems</a>.</p></div><div class="refsect1"><a name="idm274679867552"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>,
<a href="mount.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a>
diff --git a/man/systemd-remount-fs.service.8 b/man/systemd-remount-fs.service.8
new file mode 100644
index 0000000000..b8578f8584
--- /dev/null
+++ b/man/systemd-remount-fs.service.8
@@ -0,0 +1,60 @@
+'\" t
+.TH "SYSTEMD\-REMOUNT\-FS\&.SERVICE" "8" "" "systemd 208" "systemd-remount-fs.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-remount-fs.service, systemd-remount-fs \- Remount root and kernel file systems
+.SH "SYNOPSIS"
+.PP
+systemd\-remount\-fs\&.service
+.PP
+/usr/lib/systemd/systemd\-remount\-fs
+.SH "DESCRIPTION"
+.PP
+systemd\-remount\-fs\&.service
+is an early\-boot service that applies mount options listed in
+\fBfstab\fR(5)
+to the root file system, the
+/usr
+file system and the kernel API file systems\&. This is required so that the mount options of these file systems \-\- which are pre\-mounted by the kernel, the initial RAM disk, container environments or system manager code \-\- are updated to those listed in
+/etc/fstab\&. This service ignores normal file systems and only changes the root file system (i\&.e\&.
+/),
+/usr
+and the virtual kernel API file systems such as
+/proc,
+/sys
+or
+/dev\&. This service executes no operation if
+/etc/fstab
+does not exist or lists no entries for the mentioned file systems\&.
+.PP
+For a longer discussion of kernel API file systems see
+\m[blue]\fBAPI File Systems\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBfstab\fR(5),
+\fBmount\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+API File Systems
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+.RE
diff --git a/man/systemd-remount-fs.service.html b/man/systemd-remount-fs.service.html
index 5b754fddc2..81a7836626 100644
--- a/man/systemd-remount-fs.service.html
+++ b/man/systemd-remount-fs.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-remount-fs.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-remount-fs.service, systemd-remount-fs — Remount root and kernel file systems</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-remount-fs.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-remount-fs</code></p></div><div class="refsect1"><a name="idm259792844720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-remount-fs.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-remount-fs.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-remount-fs.service, systemd-remount-fs — Remount root and kernel file systems</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-remount-fs.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-remount-fs</code></p></div><div class="refsect1"><a name="idm274679877520"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-remount-fs.service</code>
is an early-boot service that applies mount options
listed in
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
@@ -40,7 +40,7 @@
exist or lists no entries for the mentioned file
systems.</p><p>For a longer discussion of kernel API file
systems see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems" target="_top">API
- File Systems</a>.</p></div><div class="refsect1"><a name="idm259789285312"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ File Systems</a>.</p></div><div class="refsect1"><a name="idm274679867552"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>,
<a href="mount.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a>
diff --git a/man/systemd-run.1 b/man/systemd-run.1
new file mode 100644
index 0000000000..7dcfdb7225
--- /dev/null
+++ b/man/systemd-run.1
@@ -0,0 +1,147 @@
+'\" t
+.TH "SYSTEMD\-RUN" "1" "" "systemd 208" "systemd-run"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-run \- Run programs in transient scope or service units
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-run\fR\ 'u
+\fBsystemd\-run\fR [OPTIONS...] \fICOMMAND\fR\ [ARGS...]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-run\fR
+may be used create and start a transient
+\&.service
+or a
+\&.scope
+unit and run the specified
+\fICOMMAND\fR
+in it\&.
+.PP
+If a command is run as transient service unit, it will be started and managed by the service manager like any other service, and thus show up in the output of
+\fBsystemctl list\-units\fR
+like any other unit\&. It will run in a clean and detached execution environment\&.
+\fBsystemd\-run\fR
+will start the service asynchronously in the background and immediately return\&.
+.PP
+If a command is run as transient scope unit, it will be started directly by
+\fBsystemd\-run\fR
+and thus inherit the execution environment of the caller\&. It is however managed by the service manager similar to normal services, and will also show up in the output of
+\fBsystemctl list\-units\fR\&. Execution in this case is synchronous, and execution will return only when the command finishes\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-user\fR
+.RS 4
+Talk to the service manager of the calling user, rather than the service manager of the system\&.
+.RE
+.PP
+\fB\-\-scope\fR
+.RS 4
+Create a transient
+\&.scope
+unit instead of the default transient
+\&.service
+unit\&.
+.RE
+.PP
+\fB\-\-unit=\fR
+.RS 4
+Use this unit name instead of an automatically generated one\&.
+.RE
+.PP
+\fB\-\-description=\fR
+.RS 4
+Provide description for the unit\&. If not specified, the command itself will be used as a description\&. See
+\fIDescription=\fR
+in
+\fBsystemd.unit\fR(5)\&.
+.RE
+.PP
+\fB\-\-slice=\fR
+.RS 4
+Make the new
+\&.service
+or
+\&.scope
+unit part of the specified slice, instead of the
+system\&.slice\&.
+.RE
+.PP
+\fB\-\-remain\-after\-exit\fR
+.RS 4
+After the service\*(Aqs process has terminated, keep the service around until it is explicitly stopped\&. This is useful to collect runtime information about the service after it finished running\&. Also see
+\fIRemainAfterExit=\fR
+in
+\fBsystemd.service\fR(5)\&.
+.RE
+.PP
+\fB\-\-send\-sighup\fR
+.RS 4
+When terminating the scope unit, send a SIGHUP immediately after SIGTERM\&. This is useful to indicate to shells and shell\-like processes that the connection has been severed\&. Also see
+\fISendSIGHUP=\fR
+in
+\fBsystemd.kill\fR(5)\&.
+.RE
+.PP
+All command\-line arguments after the first non\-option argument become part of the commandline of the launched process\&. If a command is run as service unit, its first argument needs to be an absolute binary path\&.
+.SH "EXIT STATUS"
+.PP
+On success, 0 is returned, a non\-zero failure code otherwise\&.
+.SH "EXAMPLE"
+.PP
+The following command will log the environment variables provided by systemd to services:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# systemd\-run env
+Running as unit run\-19945\&.service\&.
+# journalctl \-u run\-19945\&.service
+Sep 08 07:37:21 bupkis systemd[1]: Starting /usr/bin/env\&.\&.\&.
+Sep 08 07:37:21 bupkis systemd[1]: Started /usr/bin/env\&.
+Sep 08 07:37:21 bupkis env[19948]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
+Sep 08 07:37:21 bupkis env[19948]: LANG=en_US\&.UTF\-8
+Sep 08 07:37:21 bupkis env[19948]: BOOT_IMAGE=/vmlinuz\-3\&.11\&.0\-0\&.rc5\&.git6\&.2\&.fc20\&.x86_64
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.scope\fR(5),
+\fBsystemd.slice\fR(5)\&.
diff --git a/man/systemd-run.html b/man/systemd-run.html
new file mode 100644
index 0000000000..bd17e0b8a6
--- /dev/null
+++ b/man/systemd-run.html
@@ -0,0 +1,82 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-run</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-run"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-run — Run programs in transient scope or service units</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-run</code> [OPTIONS...] <em class="replaceable"><code>COMMAND</code></em>
+ [ARGS...]
+ </p></div></div><div class="refsect1"><a name="idm274675234000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-run</strong></span> may be used create and start
+ a transient <code class="filename">.service</code> or a
+ <code class="filename">.scope</code> unit and run the specified
+ <em class="replaceable"><code>COMMAND</code></em> in it.</p><p>If a command is run as transient service unit, it will be
+ started and managed by the service manager like any other service,
+ and thus show up in the output of <span class="command"><strong>systemctl
+ list-units</strong></span> like any other unit. It will run in a clean
+ and detached execution environment. <span class="command"><strong>systemd-run</strong></span>
+ will start the service asynchronously in the background and
+ immediately return.</p><p>If a command is run as transient scope unit, it will be
+ started directly by <span class="command"><strong>systemd-run</strong></span> and thus
+ inherit the execution environment of the caller. It is however
+ managed by the service manager similar to normal services, and
+ will also show up in the output of <span class="command"><strong>systemctl
+ list-units</strong></span>. Execution in this case is synchronous, and
+ execution will return only when the command finishes.</p></div><div class="refsect1"><a name="idm274675226208"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
+ string and exits.</p></dd><dt id="--user"><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--user">¶</a></dt><dd><p>Talk to the service manager of the calling user,
+ rather than the service manager of the system.</p></dd><dt id="--scope"><span class="term"><code class="option">--scope</code></span><a class="headerlink" title="Permalink to this term" href="#--scope">¶</a></dt><dd><p>Create a transient <code class="filename">.scope</code> unit instead of
+ the default transient <code class="filename">.service</code> unit.
+ </p></dd><dt id="--unit="><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--unit=">¶</a></dt><dd><p>Use this unit name instead of an automatically
+ generated one.</p></dd><dt id="--description="><span class="term"><code class="option">--description=</code></span><a class="headerlink" title="Permalink to this term" href="#--description=">¶</a></dt><dd><p>Provide description for the unit. If not
+ specified, the command itself will be used as a description.
+ See <code class="varname">Description=</code> in
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>.
+ </p></dd><dt id="--slice="><span class="term"><code class="option">--slice=</code></span><a class="headerlink" title="Permalink to this term" href="#--slice=">¶</a></dt><dd><p>Make the new <code class="filename">.service</code> or
+ <code class="filename">.scope</code> unit part of the specified slice,
+ instead of the <code class="filename">system.slice</code>.</p></dd><dt id="--remain-after-exit"><span class="term"><code class="option">--remain-after-exit</code></span><a class="headerlink" title="Permalink to this term" href="#--remain-after-exit">¶</a></dt><dd><p>After the service's process has terminated, keep
+ the service around until it is explicitly stopped. This is
+ useful to collect runtime information about the service after
+ it finished running. Also see
+ <code class="varname">RemainAfterExit=</code> in
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>.
+ </p></dd><dt id="--send-sighup"><span class="term"><code class="option">--send-sighup</code></span><a class="headerlink" title="Permalink to this term" href="#--send-sighup">¶</a></dt><dd><p>When terminating the scope unit, send a SIGHUP
+ immediately after SIGTERM. This is useful to indicate to
+ shells and shell-like processes that the connection has been
+ severed. Also see <code class="varname">SendSIGHUP=</code> in
+ <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>.
+ </p></dd></dl></div><p>All command-line arguments after the first non-option
+ argument become part of the commandline of the launched
+ process. If a command is run as service unit, its first argument
+ needs to be an absolute binary path.</p></div><div class="refsect1"><a name="idm274679095552"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success, 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679094368"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><p>The following command will log the environment variables
+ provided by systemd to services:</p><pre class="programlisting"># systemd-run env
+Running as unit run-19945.service.
+# journalctl -u run-19945.service
+Sep 08 07:37:21 bupkis systemd[1]: Starting /usr/bin/env...
+Sep 08 07:37:21 bupkis systemd[1]: Started /usr/bin/env.
+Sep 08 07:37:21 bupkis env[19948]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
+Sep 08 07:37:21 bupkis env[19948]: LANG=en_US.UTF-8
+Sep 08 07:37:21 bupkis env[19948]: BOOT_IMAGE=/vmlinuz-3.11.0-0.rc5.git6.2.fc20.x86_64
+ </pre></div><div class="refsect1"><a name="idm274679091968"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>.
+ </p></div></div></body></html>
diff --git a/man/systemd-run.xml b/man/systemd-run.xml
new file mode 100644
index 0000000000..e76a402003
--- /dev/null
+++ b/man/systemd-run.xml
@@ -0,0 +1,219 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+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.
+
+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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="systemd-run">
+
+ <refentryinfo>
+ <title>systemd-run</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd-run</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd-run</refname>
+ <refpurpose>Run programs in transient scope or service units</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>systemd-run</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain"><replaceable>COMMAND</replaceable>
+ <arg choice="opt" rep="repeat">ARGS</arg>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><command>systemd-run</command> may be used create and start
+ a transient <filename>.service</filename> or a
+ <filename>.scope</filename> unit and run the specified
+ <replaceable>COMMAND</replaceable> in it.</para>
+
+ <para>If a command is run as transient service unit, it will be
+ started and managed by the service manager like any other service,
+ and thus show up in the output of <command>systemctl
+ list-units</command> like any other unit. It will run in a clean
+ and detached execution environment. <command>systemd-run</command>
+ will start the service asynchronously in the background and
+ immediately return.</para>
+
+ <para>If a command is run as transient scope unit, it will be
+ started directly by <command>systemd-run</command> and thus
+ inherit the execution environment of the caller. It is however
+ managed by the service manager similar to normal services, and
+ will also show up in the output of <command>systemctl
+ list-units</command>. Execution in this case is synchronous, and
+ execution will return only when the command finishes.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+
+ <para>The following options are understood:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-h</option></term>
+ <term><option>--help</option></term>
+
+ <listitem><para>Prints a short help
+ text and exits.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--version</option></term>
+
+ <listitem><para>Prints a short version
+ string and exits.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--user</option></term>
+
+ <listitem>
+ <para>Talk to the service manager of the calling user,
+ rather than the service manager of the system.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--scope</option></term>
+
+ <listitem>
+ <para>Create a transient <filename>.scope</filename> unit instead of
+ the default transient <filename>.service</filename> unit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--unit=</option></term>
+
+ <listitem><para>Use this unit name instead of an automatically
+ generated one.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--description=</option></term>
+
+ <listitem><para>Provide description for the unit. If not
+ specified, the command itself will be used as a description.
+ See <varname>Description=</varname> in
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--slice=</option></term>
+
+ <listitem><para>Make the new <filename>.service</filename> or
+ <filename>.scope</filename> unit part of the specified slice,
+ instead of the <filename>system.slice</filename>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--remain-after-exit</option></term>
+
+ <listitem><para>After the service's process has terminated, keep
+ the service around until it is explicitly stopped. This is
+ useful to collect runtime information about the service after
+ it finished running. Also see
+ <varname>RemainAfterExit=</varname> in
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--send-sighup</option></term>
+
+ <listitem><para>When terminating the scope unit, send a SIGHUP
+ immediately after SIGTERM. This is useful to indicate to
+ shells and shell-like processes that the connection has been
+ severed. Also see <varname>SendSIGHUP=</varname> in
+ <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>All command-line arguments after the first non-option
+ argument become part of the commandline of the launched
+ process. If a command is run as service unit, its first argument
+ needs to be an absolute binary path.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Exit status</title>
+
+ <para>On success, 0 is returned, a non-zero failure
+ code otherwise.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+
+ <para>The following command will log the environment variables
+ provided by systemd to services:</para>
+
+ <programlisting># systemd-run env
+Running as unit run-19945.service.
+# journalctl -u run-19945.service
+Sep 08 07:37:21 bupkis systemd[1]: Starting /usr/bin/env...
+Sep 08 07:37:21 bupkis systemd[1]: Started /usr/bin/env.
+Sep 08 07:37:21 bupkis env[19948]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
+Sep 08 07:37:21 bupkis env[19948]: LANG=en_US.UTF-8
+Sep 08 07:37:21 bupkis env[19948]: BOOT_IMAGE=/vmlinuz-3.11.0-0.rc5.git6.2.fc20.x86_64
+ </programlisting>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <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>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd-shutdown.8 b/man/systemd-shutdown.8
new file mode 100644
index 0000000000..33205da3aa
--- /dev/null
+++ b/man/systemd-shutdown.8
@@ -0,0 +1 @@
+.so man8/systemd-halt.service.8
diff --git a/man/systemd-shutdown.html b/man/systemd-shutdown.html
index 97fda1b23d..6b6a783e47 100644
--- a/man/systemd-shutdown.html
+++ b/man/systemd-shutdown.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm259768592160"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-halt.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-halt.service, systemd-poweroff.service, systemd-reboot.service, systemd-kexec.service, systemd-shutdown — System shutdown logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-halt.service</code></p><p><code class="filename">systemd-poweroff.service</code></p><p><code class="filename">systemd-reboot.service</code></p><p><code class="filename">systemd-kexec.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdown</code></p></div><div class="refsect1"><a name="idm274689319632"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-halt.service</code> is a
system service that is pulled in by
<code class="filename">halt.target</code> and is responsible
for the actual system halt. Similar,
@@ -53,7 +53,7 @@
related units) should never be executed
directly. Instead, trigger system shutdown with a
command such as "<code class="literal">systemctl halt</code>" or
- suchlike.</p></div><div class="refsect1"><a name="idm259768653216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ suchlike.</p></div><div class="refsect1"><a name="idm274693257936"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
diff --git a/man/systemd-shutdownd.8 b/man/systemd-shutdownd.8
new file mode 100644
index 0000000000..74981e72b1
--- /dev/null
+++ b/man/systemd-shutdownd.8
@@ -0,0 +1 @@
+.so man8/systemd-shutdownd.service.8
diff --git a/man/systemd-shutdownd.html b/man/systemd-shutdownd.html
index 75c17c47d1..45140be498 100644
--- a/man/systemd-shutdownd.html
+++ b/man/systemd-shutdownd.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-shutdownd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd — Scheduled shutdown service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-shutdownd.service</code></p><p><code class="filename">systemd-shutdownd.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></p></div><div class="refsect1"><a name="idm259790477824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-shutdownd.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-shutdownd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd — Scheduled shutdown service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-shutdownd.service</code></p><p><code class="filename">systemd-shutdownd.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></p></div><div class="refsect1"><a name="idm274697366240"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-shutdownd.service</code> is a
system service that implements scheduled shutdowns, as
exposed by
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>.
<code class="filename">systemd-shutdownd.service</code> is automatically activated on request and terminates
- itself when it is unused.</p></div><div class="refsect1"><a name="idm259790474272"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself when it is unused.</p></div><div class="refsect1"><a name="idm274697362688"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-shutdownd.service.8 b/man/systemd-shutdownd.service.8
new file mode 100644
index 0000000000..ea729922b4
--- /dev/null
+++ b/man/systemd-shutdownd.service.8
@@ -0,0 +1,41 @@
+'\" t
+.TH "SYSTEMD\-SHUTDOWND\&.SERVICE" "8" "" "systemd 208" "systemd-shutdownd.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd \- Scheduled shutdown service
+.SH "SYNOPSIS"
+.PP
+systemd\-shutdownd\&.service
+.PP
+systemd\-shutdownd\&.socket
+.PP
+/usr/lib/systemd/systemd\-shutdownd
+.SH "DESCRIPTION"
+.PP
+systemd\-shutdownd\&.service
+is a system service that implements scheduled shutdowns, as exposed by
+\fBshutdown\fR(8)\&.
+systemd\-shutdownd\&.service
+is automatically activated on request and terminates itself when it is unused\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBshutdown\fR(8)
diff --git a/man/systemd-shutdownd.service.html b/man/systemd-shutdownd.service.html
index 75c17c47d1..45140be498 100644
--- a/man/systemd-shutdownd.service.html
+++ b/man/systemd-shutdownd.service.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-shutdownd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd — Scheduled shutdown service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-shutdownd.service</code></p><p><code class="filename">systemd-shutdownd.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></p></div><div class="refsect1"><a name="idm259790477824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-shutdownd.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-shutdownd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd — Scheduled shutdown service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-shutdownd.service</code></p><p><code class="filename">systemd-shutdownd.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></p></div><div class="refsect1"><a name="idm274697366240"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-shutdownd.service</code> is a
system service that implements scheduled shutdowns, as
exposed by
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>.
<code class="filename">systemd-shutdownd.service</code> is automatically activated on request and terminates
- itself when it is unused.</p></div><div class="refsect1"><a name="idm259790474272"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself when it is unused.</p></div><div class="refsect1"><a name="idm274697362688"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-shutdownd.socket.8 b/man/systemd-shutdownd.socket.8
new file mode 100644
index 0000000000..74981e72b1
--- /dev/null
+++ b/man/systemd-shutdownd.socket.8
@@ -0,0 +1 @@
+.so man8/systemd-shutdownd.service.8
diff --git a/man/systemd-shutdownd.socket.html b/man/systemd-shutdownd.socket.html
index 75c17c47d1..45140be498 100644
--- a/man/systemd-shutdownd.socket.html
+++ b/man/systemd-shutdownd.socket.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-shutdownd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd — Scheduled shutdown service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-shutdownd.service</code></p><p><code class="filename">systemd-shutdownd.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></p></div><div class="refsect1"><a name="idm259790477824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-shutdownd.service</code> is a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-shutdownd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-shutdownd.service, systemd-shutdownd.socket, systemd-shutdownd — Scheduled shutdown service</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-shutdownd.service</code></p><p><code class="filename">systemd-shutdownd.socket</code></p><p><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></p></div><div class="refsect1"><a name="idm274697366240"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-shutdownd.service</code> is a
system service that implements scheduled shutdowns, as
exposed by
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>.
<code class="filename">systemd-shutdownd.service</code> is automatically activated on request and terminates
- itself when it is unused.</p></div><div class="refsect1"><a name="idm259790474272"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself when it is unused.</p></div><div class="refsect1"><a name="idm274697362688"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-sleep.8 b/man/systemd-sleep.8
new file mode 100644
index 0000000000..ff3177737d
--- /dev/null
+++ b/man/systemd-sleep.8
@@ -0,0 +1 @@
+.so man8/systemd-suspend.service.8
diff --git a/man/systemd-sleep.conf.5 b/man/systemd-sleep.conf.5
new file mode 100644
index 0000000000..95216b9bf6
--- /dev/null
+++ b/man/systemd-sleep.conf.5
@@ -0,0 +1,108 @@
+'\" t
+.TH "SYSTEMD\-SLEEP\&.CONF" "5" "" "systemd 208" "systemd-sleep.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-sleep.conf \- Suspend and hibernation configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/systemd/sleep\&.conf
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\fR
+supports three general power\-saving modes:
+.PP
+suspend
+.RS 4
+a low\-power state where execution of the OS is paused, and complete power loss might result in lost data, and which is fast to enter and exit\&. This corresponds to suspend, standby, or freeze states as understood by the kernel\&.
+.RE
+.PP
+hibernate
+.RS 4
+a low\-power state where execution of the OS is paused, and complete power loss does not result in lost data, and which might be slow to enter and exit\&. This corresponds to the hibernation as understood by the kernel\&.
+.RE
+.PP
+hybrid\-sleep
+.RS 4
+a low\-power state where execution of the OS is paused, which might be slow to enter, and on complete power loss does not result in lost data but might be slower to exit in that case\&. This mode is called suspend\-to\-both by the kernel\&.
+.RE
+.PP
+Settings in this file determine what strings will be written to
+/sys/power/disk
+and
+/sys/power/state
+by
+\fBsystemd-sleep\fR(8)
+when
+\fBsystemd\fR(1)
+attempts to suspend or hibernate the machine\&.
+.SH "OPTIONS"
+.PP
+The following options can be configured in the
+"[Sleep]"
+section of
+/etc/systemd/sleep\&.conf:
+.PP
+\fISuspendMode=\fR, \fIHibernateMode=\fR, \fIHybridSleepMode=\fR
+.RS 4
+The string to be written to
+/sys/power/disk
+by, respectively,
+\fBsystemd-suspend.service\fR(8),
+\fBsystemd-hibernate.service\fR(8), or
+\fBsystemd-hybrid-sleep.service\fR(8)\&. More than one value can be specified by seperating multiple values with commas\&. They will be tried in turn, until one is written without error\&. If neither suceeds, the operation will be aborted\&.
+.RE
+.PP
+\fISuspendState=\fR, \fIHibernateState=\fR, \fIHybridSleepState=\fR
+.RS 4
+The string to be written to
+/sys/power/state
+by, respectively,
+\fBsystemd-suspend.service\fR(8),
+\fBsystemd-hibernate.service\fR(8), or
+\fBsystemd-hybrid-sleep.service\fR(8)\&. More than one value can be specified by seperating multiple values with commas\&. They will be tried in turn, until one is written without error\&. If neither suceeds, the operation will be aborted\&.
+.RE
+.SH "EXAMPLE: FREEZE"
+.PP
+Example: to exploit the
+\(lqfreeze\(rq
+mode added in Linux 3\&.9, one can use
+\fBsystemctl suspend\fR
+with
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+[Sleep]
+SuspendState=freeze
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd-sleep\fR(8),
+\fBsystemd-suspend.service\fR(8),
+\fBsystemd-hibernate.service\fR(8),
+\fBsystemd-hybrid-sleep.service\fR(8),
+\fBsystemd\fR(1),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd-sleep.conf.html b/man/systemd-sleep.conf.html
index f66a4988dd..0d683b069a 100644
--- a/man/systemd-sleep.conf.html
+++ b/man/systemd-sleep.conf.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-sleep.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-sleep.conf — Suspend and hibernation configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/sleep.conf</code></p></div><div class="refsect1"><a name="idm259792933216"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd</strong></span> supports three general
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-sleep.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-sleep.conf — Suspend and hibernation configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/sleep.conf</code></p></div><div class="refsect1"><a name="idm274681512960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd</strong></span> supports three general
power-saving modes:</p><div class="variablelist"><dl class="variablelist"><dt id="suspend"><span class="term">suspend</span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>a low-power state
where execution of the OS is paused,
and complete power loss might result
@@ -48,8 +48,8 @@
<a href="systemd-sleep.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep</span>(8)</span></a>
when
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
- attempts to suspend or hibernate the machine.</p></div><div class="refsect1"><a name="idm259789447168"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options can be configured in the
- <code class="literal">[Sleep]</code> section of
+ attempts to suspend or hibernate the machine.</p></div><div class="refsect1"><a name="idm274681502624"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options can be configured in the
+ "<code class="literal">[Sleep]</code>" section of
<code class="filename">/etc/systemd/sleep.conf</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="SuspendMode="><span class="term"><code class="varname">SuspendMode=</code>, </span><span class="term"><code class="varname">HibernateMode=</code>, </span><span class="term"><code class="varname">HybridSleepMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendMode=">¶</a></dt><dd><p>The string to be written to
<code class="filename">/sys/power/disk</code> by,
respectively,
@@ -70,13 +70,13 @@
multiple values with commas. They will be tried
in turn, until one is written without error. If
neither suceeds, the operation will be aborted.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259793098816"></a><h2 id="Example: freeze">Example: freeze<a class="headerlink" title="Permalink to this headline" href="#Example:%20freeze">¶</a></h2><p>Example: to exploit the <span class="quote">“<span class="quote">freeze</span>”</span> mode added
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274685437888"></a><h2 id="Example: freeze">Example: freeze<a class="headerlink" title="Permalink to this headline" href="#Example:%20freeze">¶</a></h2><p>Example: to exploit the <span class="quote">“<span class="quote">freeze</span>”</span> mode added
in Linux 3.9, one can use <span class="command"><strong>systemctl suspend</strong></span>
with
</p><pre class="programlisting">
[Sleep]
SuspendState=freeze
- </pre></div><div class="refsect1"><a name="idm259793095872"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </pre></div><div class="refsect1"><a name="idm274685434944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-sleep.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep</span>(8)</span></a>,
<a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>,
<a href="systemd-hibernate.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hibernate.service</span>(8)</span></a>,
diff --git a/man/systemd-sleep.html b/man/systemd-sleep.html
index 0e5a2476d3..ef16bec4f4 100644
--- a/man/systemd-sleep.html
+++ b/man/systemd-sleep.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm259781854720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm274689275296"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
a system service that is pulled in by
<code class="filename">suspend.target</code> and is responsible
for the actual system suspend. Similarly,
@@ -50,7 +50,7 @@
<code class="filename">/usr/lib/systemd/system-sleep/</code>
are intended for local use only and should be
considered hacks. If applications want to be notified
- of system suspend/hibernation and resume there are
+ of system suspend/hibernation and resume, there are
much nicer interfaces available.</p><p>Note that
<code class="filename">systemd-suspend.service</code>,
<code class="filename">systemd-hibernate.service</code>, and
@@ -62,14 +62,14 @@
"<code class="literal">mem</code>" into
<code class="filename">/sys/power/state</code>, to trigger the
actual system suspend. What exactly is written
- where can be configured in the <code class="literal">[Sleep]</code>
+ where can be configured in the "<code class="literal">[Sleep]</code>"
section of <code class="filename">/etc/systemd/sleep.conf</code>.
See <a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>.
- </p></div><div class="refsect1"><a name="idm259785791520"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
+ </p></div><div class="refsect1"><a name="idm274693205200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
following commands:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Print a short help
text and exit.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print the systemd version
identifier and exit.</p></dd><dt id="suspend"><span class="term"><code class="option">suspend</code>, </span><span class="term"><code class="option">hibernate</code>, </span><span class="term"><code class="option">hybrid-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>Suspend, hibernate, or
- put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm259785775920"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693189440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>,
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
diff --git a/man/systemd-suspend.service.8 b/man/systemd-suspend.service.8
new file mode 100644
index 0000000000..2f0ec35beb
--- /dev/null
+++ b/man/systemd-suspend.service.8
@@ -0,0 +1,105 @@
+'\" t
+.TH "SYSTEMD\-SUSPEND\&.SERVICE" "8" "" "systemd 208" "systemd-suspend.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep \- System sleep state logic
+.SH "SYNOPSIS"
+.PP
+systemd\-suspend\&.service
+.PP
+systemd\-hibernate\&.service
+.PP
+systemd\-hybrid\-sleep\&.service
+.PP
+/usr/lib/systemd/systemd\-sleep
+.SH "DESCRIPTION"
+.PP
+systemd\-suspend\&.service
+is a system service that is pulled in by
+suspend\&.target
+and is responsible for the actual system suspend\&. Similarly,
+systemd\-hibernate\&.service
+is pulled in by
+hibernate\&.target
+to execute the actual hibernation\&. Finally,
+systemd\-hybrid\-sleep\&.service
+is pulled in by
+hybrid\-sleep\&.target
+to execute hybrid hibernation with system suspend\&.
+.PP
+Immediately before entering system suspend and/or hibernation
+systemd\-suspend\&.service
+(and the other mentioned units, respectively) will run all executables in
+/usr/lib/systemd/system\-sleep/
+and pass two arguments to them\&. The first argument will be
+"pre", the second either
+"suspend",
+"hibernate", or
+"hybrid\-sleep"
+depending on the chosen action\&. Immediately after leaving system suspend and/or hibernation the same executables are run, but the first argument is now
+"post"\&. All executables in this directory are executed in parallel, and execution of the action is not continued until all executables have finished\&.
+.PP
+Note that scripts or binaries dropped in
+/usr/lib/systemd/system\-sleep/
+are intended for local use only and should be considered hacks\&. If applications want to be notified of system suspend/hibernation and resume, there are much nicer interfaces available\&.
+.PP
+Note that
+systemd\-suspend\&.service,
+systemd\-hibernate\&.service, and
+systemd\-hybrid\-sleep\&.service
+should never be executed directly\&. Instead, trigger system sleep states with a command such as
+"systemctl suspend"
+or similar\&.
+.PP
+Internally, this service will echo a string like
+"mem"
+into
+/sys/power/state, to trigger the actual system suspend\&. What exactly is written where can be configured in the
+"[Sleep]"
+section of
+/etc/systemd/sleep\&.conf\&. See
+\fBsystemd-sleep.conf\fR(5)\&.
+.SH "OPTIONS"
+.PP
+\fBsystemd\-sleep\fR
+understands the following commands:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Print a short help text and exit\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print the systemd version identifier and exit\&.
+.RE
+.PP
+\fBsuspend\fR, \fBhibernate\fR, \fBhybrid\-sleep\fR
+.RS 4
+Suspend, hibernate, or put the system to hybrid sleep\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd-sleep.conf\fR(5),
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd.special\fR(7),
+\fBsystemd-halt.service\fR(8)
diff --git a/man/systemd-suspend.service.html b/man/systemd-suspend.service.html
index 0e5a2476d3..ef16bec4f4 100644
--- a/man/systemd-suspend.service.html
+++ b/man/systemd-suspend.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm259781854720"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-suspend.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-suspend.service, systemd-hibernate.service, systemd-hybrid-sleep.service, systemd-sleep — System sleep state logic</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-suspend.service</code></p><p><code class="filename">systemd-hibernate.service</code></p><p><code class="filename">systemd-hybrid-sleep.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sleep</code></p></div><div class="refsect1"><a name="idm274689275296"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-suspend.service</code> is
a system service that is pulled in by
<code class="filename">suspend.target</code> and is responsible
for the actual system suspend. Similarly,
@@ -50,7 +50,7 @@
<code class="filename">/usr/lib/systemd/system-sleep/</code>
are intended for local use only and should be
considered hacks. If applications want to be notified
- of system suspend/hibernation and resume there are
+ of system suspend/hibernation and resume, there are
much nicer interfaces available.</p><p>Note that
<code class="filename">systemd-suspend.service</code>,
<code class="filename">systemd-hibernate.service</code>, and
@@ -62,14 +62,14 @@
"<code class="literal">mem</code>" into
<code class="filename">/sys/power/state</code>, to trigger the
actual system suspend. What exactly is written
- where can be configured in the <code class="literal">[Sleep]</code>
+ where can be configured in the "<code class="literal">[Sleep]</code>"
section of <code class="filename">/etc/systemd/sleep.conf</code>.
See <a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>.
- </p></div><div class="refsect1"><a name="idm259785791520"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
+ </p></div><div class="refsect1"><a name="idm274693205200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p><span class="command"><strong>systemd-sleep</strong></span> understands the
following commands:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Print a short help
text and exit.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print the systemd version
identifier and exit.</p></dd><dt id="suspend"><span class="term"><code class="option">suspend</code>, </span><span class="term"><code class="option">hibernate</code>, </span><span class="term"><code class="option">hybrid-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p>Suspend, hibernate, or
- put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm259785775920"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ put the system to hybrid sleep.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693189440"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>,
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
diff --git a/man/systemd-suspend.service.xml b/man/systemd-suspend.service.xml
index 4a4ed5cbdb..4abc278191 100644
--- a/man/systemd-suspend.service.xml
+++ b/man/systemd-suspend.service.xml
@@ -80,14 +80,14 @@
executables in
<filename>/usr/lib/systemd/system-sleep/</filename>
and pass two arguments to them. The first argument
- will be "<literal>pre</literal>", the second either
- "<literal>suspend</literal>",
- "<literal>hibernate</literal>", or
- "<literal>hybrid-sleep</literal>" depending on the
+ will be <literal>pre</literal>, the second either
+ <literal>suspend</literal>,
+ <literal>hibernate</literal>, or
+ <literal>hybrid-sleep</literal> depending on the
chosen action. Immediately after leaving system
suspend and/or hibernation the same executables are run,
but the first argument is now
- "<literal>post</literal>". All executables in this
+ <literal>post</literal>. All executables in this
directory are executed in parallel, and execution of
the action is not continued until all executables
have finished.</para>
@@ -96,7 +96,7 @@
<filename>/usr/lib/systemd/system-sleep/</filename>
are intended for local use only and should be
considered hacks. If applications want to be notified
- of system suspend/hibernation and resume there are
+ of system suspend/hibernation and resume, there are
much nicer interfaces available.</para>
<para>Note that
@@ -105,11 +105,11 @@
<filename>systemd-hybrid-sleep.service</filename>
should never be executed directly. Instead, trigger
system sleep states with a command such as
- "<literal>systemctl suspend</literal>" or
+ <literal>systemctl suspend</literal> or
similar.</para>
<para>Internally, this service will echo a string like
- "<literal>mem</literal>" into
+ <literal>mem</literal> into
<filename>/sys/power/state</filename>, to trigger the
actual system suspend. What exactly is written
where can be configured in the <literal>[Sleep]</literal>
diff --git a/man/systemd-sysctl.8 b/man/systemd-sysctl.8
new file mode 100644
index 0000000000..d6a08346d2
--- /dev/null
+++ b/man/systemd-sysctl.8
@@ -0,0 +1 @@
+.so man8/systemd-sysctl.service.8
diff --git a/man/systemd-sysctl.html b/man/systemd-sysctl.html
index eab837b72c..d61cf0a4ab 100644
--- a/man/systemd-sysctl.html
+++ b/man/systemd-sysctl.html
@@ -19,15 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-sysctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-sysctl.service, systemd-sysctl — Configure kernel parameters at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-sysctl.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sysctl</code></p></div><div class="refsect1"><a name="idm259774611568"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-sysctl.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-sysctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-sysctl.service, systemd-sysctl — Configure kernel parameters at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-sysctl.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sysctl</code></p></div><div class="refsect1"><a name="idm274687090640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-sysctl.service</code> is
an early-boot service that configures
<a href="sysctl.html"><span class="citerefentry"><span class="refentrytitle">sysctl</span>(8)</span></a>
kernel parameters.</p><p>See
<a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259774607600"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ service.</p></div><div class="refsect1"><a name="idm274687086672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>,
<a href="sysctl.html"><span class="citerefentry"><span class="refentrytitle">sysctl</span>(8)</span></a>,
- <a href="wine.html"><span class="citerefentry"><span class="refentrytitle">wine</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-sysctl.service.8 b/man/systemd-sysctl.service.8
new file mode 100644
index 0000000000..a9aae75825
--- /dev/null
+++ b/man/systemd-sysctl.service.8
@@ -0,0 +1,43 @@
+'\" t
+.TH "SYSTEMD\-SYSCTL\&.SERVICE" "8" "" "systemd 208" "systemd-sysctl.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-sysctl.service, systemd-sysctl \- Configure kernel parameters at boot
+.SH "SYNOPSIS"
+.PP
+systemd\-sysctl\&.service
+.PP
+/usr/lib/systemd/systemd\-sysctl
+.SH "DESCRIPTION"
+.PP
+systemd\-sysctl\&.service
+is an early\-boot service that configures
+\fBsysctl\fR(8)
+kernel parameters\&.
+.PP
+See
+\fBsysctl.d\fR(5)
+for information about the configuration of this service\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsysctl.d\fR(5),
+\fBsysctl\fR(8),
diff --git a/man/systemd-sysctl.service.html b/man/systemd-sysctl.service.html
index eab837b72c..d61cf0a4ab 100644
--- a/man/systemd-sysctl.service.html
+++ b/man/systemd-sysctl.service.html
@@ -19,15 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-sysctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-sysctl.service, systemd-sysctl — Configure kernel parameters at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-sysctl.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sysctl</code></p></div><div class="refsect1"><a name="idm259774611568"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-sysctl.service</code> is
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-sysctl.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-sysctl.service, systemd-sysctl — Configure kernel parameters at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-sysctl.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-sysctl</code></p></div><div class="refsect1"><a name="idm274687090640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-sysctl.service</code> is
an early-boot service that configures
<a href="sysctl.html"><span class="citerefentry"><span class="refentrytitle">sysctl</span>(8)</span></a>
kernel parameters.</p><p>See
<a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>
for information about the configuration of this
- service.</p></div><div class="refsect1"><a name="idm259774607600"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ service.</p></div><div class="refsect1"><a name="idm274687086672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>,
<a href="sysctl.html"><span class="citerefentry"><span class="refentrytitle">sysctl</span>(8)</span></a>,
- <a href="wine.html"><span class="citerefentry"><span class="refentrytitle">wine</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-sysctl.service.xml b/man/systemd-sysctl.service.xml
index 72a102c128..a9a4765630 100644
--- a/man/systemd-sysctl.service.xml
+++ b/man/systemd-sysctl.service.xml
@@ -71,7 +71,6 @@
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>wine</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd-system-update-generator.8 b/man/systemd-system-update-generator.8
new file mode 100644
index 0000000000..fcd1abdc19
--- /dev/null
+++ b/man/systemd-system-update-generator.8
@@ -0,0 +1,54 @@
+'\" t
+.TH "SYSTEMD\-SYSTEM\-UPDATE\-GENERATOR" "8" "" "systemd 208" "systemd-system-update-generator"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-system-update-generator \- Generator for redirecting boot to offline update mode
+.SH "SYNOPSIS"
+.PP
+/usr/lib/systemd/system\-generators/systemd\-system\-update\-generator
+.SH "DESCRIPTION"
+.PP
+systemd\-system\-update\-generator
+is a generator that automatically redirects the boot process to
+system\-update\&.target
+if
+/system\-update
+exists\&. This is required to implement the logic explained in the
+\m[blue]\fBSystem Updates Specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.PP
+systemd\-system\-update\-generator
+implements the
+\m[blue]\fBgenerator specification\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.special\fR(7)
+.SH "NOTES"
+.IP " 1." 4
+System Updates Specification
+.RS 4
+\%http://freedesktop.org/wiki/Software/systemd/SystemUpdates
+.RE
+.IP " 2." 4
+generator specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
diff --git a/man/systemd-system-update-generator.html b/man/systemd-system-update-generator.html
index 7545904d1a..651dfcf7ca 100644
--- a/man/systemd-system-update-generator.html
+++ b/man/systemd-system-update-generator.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-system-update-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-system-update-generator — Generator for redirecting boot to offline update mode</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-system-update-generator</code></p></div><div class="refsect1"><a name="idm259766478080"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-system-update-generator</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-system-update-generator"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-system-update-generator — Generator for redirecting boot to offline update mode</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/usr/lib/systemd/system-generators/systemd-system-update-generator</code></p></div><div class="refsect1"><a name="idm274703520688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-system-update-generator</code>
is a generator that automatically redirects the boot
process to <code class="filename">system-update.target</code>
if <code class="filename">/system-update</code> exists. This is
@@ -28,7 +28,7 @@
Updates Specification</a>.
</p><p><code class="filename">systemd-system-update-generator</code>
implements the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Generators" target="_top">generator
- specification</a>.</p></div><div class="refsect1"><a name="idm259766472352"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ specification</a>.</p></div><div class="refsect1"><a name="idm274703514960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-system.conf.5 b/man/systemd-system.conf.5
new file mode 100644
index 0000000000..0491e31dc5
--- /dev/null
+++ b/man/systemd-system.conf.5
@@ -0,0 +1,133 @@
+'\" t
+.TH "SYSTEMD\-SYSTEM\&.CONF" "5" "" "systemd 208" "systemd-system.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-system.conf, systemd-user.conf \- System and session service manager configuration file
+.SH "SYNOPSIS"
+.PP
+/etc/systemd/system\&.conf
+.PP
+/etc/systemd/user\&.conf
+.SH "DESCRIPTION"
+.PP
+When run as system instance systemd reads the configuration file
+system\&.conf, otherwise
+user\&.conf\&. These configuration files contain a few settings controlling basic manager operations\&.
+.SH "OPTIONS"
+.PP
+All options are configured in the
+"[Manager]"
+section:
+.PP
+\fILogLevel=\fR, \fILogTarget=\fR, \fILogColor=\fR, \fILogLocation=\fR, \fIDumpCore=yes\fR, \fICrashShell=no\fR, \fIShowStatus=yes\fR, \fICrashChVT=1\fR, \fIDefaultStandardOutput=journal\fR, \fIDefaultStandardError=inherit\fR
+.RS 4
+Configures various parameters of basic manager operation\&. These options may be overridden by the respective command line arguments\&. See
+\fBsystemd\fR(1)
+for details about these command line arguments\&.
+.RE
+.PP
+\fICPUAffinity=\fR
+.RS 4
+Configures the initial CPU affinity for the init process\&. Takes a space\-separated list of CPU indexes\&.
+.RE
+.PP
+\fIJoinControllers=cpu,cpuacct net_cls,netprio\fR
+.RS 4
+Configures controllers that shall be mounted in a single hierarchy\&. By default, systemd will mount all controllers which are enabled in the kernel in individual hierarchies, with the exception of those listed in this setting\&. Takes a space\-separated list of comma\-separated controller names, in order to allow multiple joined hierarchies\&. Defaults to \*(Aqcpu,cpuacct\*(Aq\&. Pass an empty string to ensure that systemd mounts all controllers in separate hierarchies\&.
+.sp
+Note that this option is only applied once, at very early boot\&. If you use an initial RAM disk (initrd) that uses systemd, it might hence be necessary to rebuild the initrd if this option is changed, and make sure the new configuration file is included in it\&. Otherwise, the initrd might mount the controller hierarchies in a different configuration than intended, and the main system cannot remount them anymore\&.
+.RE
+.PP
+\fIRuntimeWatchdogSec=\fR, \fIShutdownWatchdogSec=\fR
+.RS 4
+Configure the hardware watchdog at runtime and at reboot\&. Takes a timeout value in seconds (or in other time units if suffixed with
+"ms",
+"min",
+"h",
+"d",
+"w")\&. If
+\fIRuntimeWatchdogSec=\fR
+is set to a non\-zero value, the watchdog hardware (/dev/watchdog) will be programmed to automatically reboot the system if it is not contacted within the specified timeout interval\&. The system manager will ensure to contact it at least once in half the specified timeout interval\&. This feature requires a hardware watchdog device to be present, as it is commonly the case in embedded and server systems\&. Not all hardware watchdogs allow configuration of the reboot timeout, in which case the closest available timeout is picked\&.
+\fIShutdownWatchdogSec=\fR
+may be used to configure the hardware watchdog when the system is asked to reboot\&. It works as a safety net to ensure that the reboot takes place even if a clean reboot attempt times out\&. By default
+\fIRuntimeWatchdogSec=\fR
+defaults to 0 (off), and
+\fIShutdownWatchdogSec=\fR
+to 10min\&. These settings have no effect if a hardware watchdog is not available\&.
+.RE
+.PP
+\fICapabilityBoundingSet=\fR
+.RS 4
+Controls which capabilities to include in the capability bounding set for PID 1 and its children\&. See
+\fBcapabilities\fR(7)
+for details\&. Takes a whitespace\-separated list of capability names as read by
+\fBcap_from_name\fR(3)\&. Capabilities listed will be included in the bounding set, all others are removed\&. If the list of capabilities is prefixed with ~, all but the listed capabilities will be included, the effect of the assignment inverted\&. Note that this option also affects the respective capabilities in the effective, permitted and inheritable capability sets\&. The capability bounding set may also be individually configured for units using the
+\fICapabilityBoundingSet=\fR
+directive for units, but note that capabilities dropped for PID 1 cannot be regained in individual units, they are lost for good\&.
+.RE
+.PP
+\fITimerSlackNSec=\fR
+.RS 4
+Sets the timer slack in nanoseconds for PID 1 which is then inherited to all executed processes, unless overridden individually, for example with the
+\fITimerSlackNSec=\fR
+setting in service units (for details see
+\fBsystemd.exec\fR(5))\&. The timer slack controls the accuracy of wake\-ups triggered by timers\&. See
+\fBprctl\fR(2)
+for more information\&. Note that in contrast to most other time span definitions this parameter takes an integer value in nano\-seconds if no unit is specified\&. The usual time units are understood too\&.
+.RE
+.PP
+\fIDefaultEnvironment=\fR
+.RS 4
+Sets manager environment variables passed to all executed processes\&. Takes a space\-separated list of variable assignments\&. See
+\fBenviron\fR(7)
+for details about environment variables\&.
+.sp
+Example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Sets three variables
+"VAR1",
+"VAR2",
+"VAR3"\&.
+.RE
+.PP
+\fIDefaultLimitCPU=\fR, \fIDefaultLimitFSIZE=\fR, \fIDefaultLimitDATA=\fR, \fIDefaultLimitSTACK=\fR, \fIDefaultLimitCORE=\fR, \fIDefaultLimitRSS=\fR, \fIDefaultLimitNOFILE=\fR, \fIDefaultLimitAS=\fR, \fIDefaultLimitNPROC=\fR, \fIDefaultLimitMEMLOCK=\fR, \fIDefaultLimitLOCKS=\fR, \fIDefaultLimitSIGPENDING=\fR, \fIDefaultLimitMSGQUEUE=\fR, \fIDefaultLimitNICE=\fR, \fIDefaultLimitRTPRIO=\fR, \fIDefaultLimitRTTIME=\fR
+.RS 4
+These settings control various default resource limits for units\&. See
+\fBsetrlimit\fR(2)
+for details\&. Use the string
+\fIinfinity\fR
+to configure no limit on a specific resource\&. These settings may be overridden in individual units using the corresponding LimitXXX= directives\&. Note that these resource limits are only defaults for units, they are not applied to PID 1 itself\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.directives\fR(7),
+\fBenviron\fR(7)
diff --git a/man/systemd-system.conf.html b/man/systemd-system.conf.html
index 5d56617a70..3c7695f765 100644
--- a/man/systemd-system.conf.html
+++ b/man/systemd-system.conf.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-system.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-system.conf, systemd-user.conf — System and session service manager configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/system.conf</code></p><p><code class="filename">/etc/systemd/user.conf</code></p></div><div class="refsect1"><a name="idm259772067680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>When run as system instance systemd reads the
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-system.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-system.conf, systemd-user.conf — System and session service manager configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/system.conf</code></p><p><code class="filename">/etc/systemd/user.conf</code></p></div><div class="refsect1"><a name="idm274686659824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>When run as system instance systemd reads the
configuration file <code class="filename">system.conf</code>,
otherwise <code class="filename">user.conf</code>. These
configuration files contain a few settings controlling
- basic manager operations.</p></div><div class="refsect1"><a name="idm259772065040"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
- <code class="literal">[Manager]</code> section:</p><div class="variablelist"><dl class="variablelist"><dt id="LogLevel="><span class="term"><code class="varname">LogLevel=</code>, </span><span class="term"><code class="varname">LogTarget=</code>, </span><span class="term"><code class="varname">LogColor=</code>, </span><span class="term"><code class="varname">LogLocation=</code>, </span><span class="term"><code class="varname">DumpCore=yes</code>, </span><span class="term"><code class="varname">CrashShell=no</code>, </span><span class="term"><code class="varname">ShowStatus=yes</code>, </span><span class="term"><code class="varname">CrashChVT=1</code>, </span><span class="term"><code class="varname">DefaultStandardOutput=journal</code>, </span><span class="term"><code class="varname">DefaultStandardError=inherit</code></span><a class="headerlink" title="Permalink to this term" href="#LogLevel=">¶</a></dt><dd><p>Configures various
+ basic manager operations.</p></div><div class="refsect1"><a name="idm274687554272"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
+ "<code class="literal">[Manager]</code>" section:</p><div class="variablelist"><dl class="variablelist"><dt id="LogLevel="><span class="term"><code class="varname">LogLevel=</code>, </span><span class="term"><code class="varname">LogTarget=</code>, </span><span class="term"><code class="varname">LogColor=</code>, </span><span class="term"><code class="varname">LogLocation=</code>, </span><span class="term"><code class="varname">DumpCore=yes</code>, </span><span class="term"><code class="varname">CrashShell=no</code>, </span><span class="term"><code class="varname">ShowStatus=yes</code>, </span><span class="term"><code class="varname">CrashChVT=1</code>, </span><span class="term"><code class="varname">DefaultStandardOutput=journal</code>, </span><span class="term"><code class="varname">DefaultStandardError=inherit</code></span><a class="headerlink" title="Permalink to this term" href="#LogLevel=">¶</a></dt><dd><p>Configures various
parameters of basic manager
operation. These options may be
overridden by the respective command
@@ -34,31 +34,15 @@
arguments.</p></dd><dt id="CPUAffinity="><span class="term"><code class="varname">CPUAffinity=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAffinity=">¶</a></dt><dd><p>Configures the initial
CPU affinity for the init
process. Takes a space-separated list
- of CPU indexes.</p></dd><dt id="DefaultControllers=cpu"><span class="term"><code class="varname">DefaultControllers=cpu</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultControllers=cpu">¶</a></dt><dd><p>Configures in which
- control group hierarchies to create
- per-service cgroups automatically, in
- addition to the
- <code class="literal">name=systemd</code> named
- hierarchy. Defaults to
- <code class="literal">cpu</code>. Takes a space
- separated list of controller
- names. Pass the empty string to ensure
- that systemd does not touch any
- hierarchies but its own.</p><p>Note that the default value of
- 'cpu' will make realtime scheduling
- unavailable to system services. See
- <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/MyServiceCantGetRealtime" target="_top">My
- Service Can't Get Realtime!</a>
- for more
- information.</p></dd><dt id="JoinControllers=cpu,cpuacct,cpuset net_cls,netprio"><span class="term"><code class="varname">JoinControllers=cpu,cpuacct,cpuset net_cls,netprio</code></span><a class="headerlink" title="Permalink to this term" href="#JoinControllers=cpu,cpuacct,cpuset%20net_cls,netprio">¶</a></dt><dd><p>Configures controllers
+ of CPU indexes.</p></dd><dt id="JoinControllers=cpu,cpuacct net_cls,netprio"><span class="term"><code class="varname">JoinControllers=cpu,cpuacct net_cls,netprio</code></span><a class="headerlink" title="Permalink to this term" href="#JoinControllers=cpu,cpuacct%20net_cls,netprio">¶</a></dt><dd><p>Configures controllers
that shall be mounted in a single
- hierarchy. By default systemd will
+ hierarchy. By default, systemd will
mount all controllers which are
enabled in the kernel in individual
hierarchies, with the exception of
those listed in this setting. Takes a
- space separated list of comma
- separated controller names, in order
+ space-separated list of comma-separated
+ controller names, in order
to allow multiple joined
hierarchies. Defaults to
'cpu,cpuacct'. Pass an empty string to
@@ -67,11 +51,11 @@
hierarchies.</p><p>Note that this option is only
applied once, at very early boot. If
you use an initial RAM disk (initrd)
- that uses systemd it might hence be
+ that uses systemd, it might hence be
necessary to rebuild the initrd if
this option is changed, and make sure
the new configuration file is included
- in it. Otherwise the initrd might
+ in it. Otherwise, the initrd might
mount the controller hierarchies in a
different configuration than intended,
and the main system cannot remount
@@ -79,13 +63,13 @@
watchdog at runtime and at
reboot. Takes a timeout value in
seconds (or in other time units if
- suffixed with <code class="literal">ms</code>,
- <code class="literal">min</code>,
- <code class="literal">h</code>,
- <code class="literal">d</code>,
- <code class="literal">w</code>). If
+ suffixed with "<code class="literal">ms</code>",
+ "<code class="literal">min</code>",
+ "<code class="literal">h</code>",
+ "<code class="literal">d</code>",
+ "<code class="literal">w</code>"). If
<code class="varname">RuntimeWatchdogSec=</code>
- is set to a non-zero value the
+ is set to a non-zero value, the
watchdog hardware
(<code class="filename">/dev/watchdog</code>)
will be programmed to automatically
@@ -118,14 +102,13 @@
capability bounding set for PID 1 and
its children. See
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>
- for details. Takes a whitespace
- separated list of capability names as
- read by
+ for details. Takes a whitespace-separated
+ list of capability names as read by
<a href="cap_from_name.html"><span class="citerefentry"><span class="refentrytitle">cap_from_name</span>(3)</span></a>.
Capabilities listed will be included
in the bounding set, all others are
removed. If the list of capabilities
- is prefixed with ~ all but the listed
+ is prefixed with ~, all but the listed
capabilities will be included, the
effect of the assignment
inverted. Note that this option also
@@ -157,7 +140,21 @@
integer value in nano-seconds if no
unit is specified. The usual time
units are understood
- too.</p></dd><dt id="DefaultLimitCPU="><span class="term"><code class="varname">DefaultLimitCPU=</code>, </span><span class="term"><code class="varname">DefaultLimitFSIZE=</code>, </span><span class="term"><code class="varname">DefaultLimitDATA=</code>, </span><span class="term"><code class="varname">DefaultLimitSTACK=</code>, </span><span class="term"><code class="varname">DefaultLimitCORE=</code>, </span><span class="term"><code class="varname">DefaultLimitRSS=</code>, </span><span class="term"><code class="varname">DefaultLimitNOFILE=</code>, </span><span class="term"><code class="varname">DefaultLimitAS=</code>, </span><span class="term"><code class="varname">DefaultLimitNPROC=</code>, </span><span class="term"><code class="varname">DefaultLimitMEMLOCK=</code>, </span><span class="term"><code class="varname">DefaultLimitLOCKS=</code>, </span><span class="term"><code class="varname">DefaultLimitSIGPENDING=</code>, </span><span class="term"><code class="varname">DefaultLimitMSGQUEUE=</code>, </span><span class="term"><code class="varname">DefaultLimitNICE=</code>, </span><span class="term"><code class="varname">DefaultLimitRTPRIO=</code>, </span><span class="term"><code class="varname">DefaultLimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCPU=">¶</a></dt><dd><p>These settings control
+ too.</p></dd><dt id="DefaultEnvironment="><span class="term"><code class="varname">DefaultEnvironment=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultEnvironment=">¶</a></dt><dd><p>Sets manager
+ environment variables passed to all
+ executed processes. Takes a
+ space-separated list of variable
+ assignments. See
+ <a href="environ.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
+ for details about environment
+ variables.</p><p>Example:
+
+ </p><pre class="programlisting">DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</pre><p>
+
+ Sets three variables
+ "<code class="literal">VAR1</code>",
+ "<code class="literal">VAR2</code>",
+ "<code class="literal">VAR3</code>".</p></dd><dt id="DefaultLimitCPU="><span class="term"><code class="varname">DefaultLimitCPU=</code>, </span><span class="term"><code class="varname">DefaultLimitFSIZE=</code>, </span><span class="term"><code class="varname">DefaultLimitDATA=</code>, </span><span class="term"><code class="varname">DefaultLimitSTACK=</code>, </span><span class="term"><code class="varname">DefaultLimitCORE=</code>, </span><span class="term"><code class="varname">DefaultLimitRSS=</code>, </span><span class="term"><code class="varname">DefaultLimitNOFILE=</code>, </span><span class="term"><code class="varname">DefaultLimitAS=</code>, </span><span class="term"><code class="varname">DefaultLimitNPROC=</code>, </span><span class="term"><code class="varname">DefaultLimitMEMLOCK=</code>, </span><span class="term"><code class="varname">DefaultLimitLOCKS=</code>, </span><span class="term"><code class="varname">DefaultLimitSIGPENDING=</code>, </span><span class="term"><code class="varname">DefaultLimitMSGQUEUE=</code>, </span><span class="term"><code class="varname">DefaultLimitNICE=</code>, </span><span class="term"><code class="varname">DefaultLimitRTPRIO=</code>, </span><span class="term"><code class="varname">DefaultLimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCPU=">¶</a></dt><dd><p>These settings control
various default resource limits for
units. See
<a href="setrlimit.html"><span class="citerefentry"><span class="refentrytitle">setrlimit</span>(2)</span></a>
@@ -170,7 +167,8 @@
directives. Note that these resource
limits are only defaults for units,
they are not applied to PID 1
- itself.</p></dd></dl></div></div><div class="refsect1"><a name="idm259770984576"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691158736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>,
+ <a href="environ.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
index d8bfd1279d..e8cf8a9cb2 100644
--- a/man/systemd-system.conf.xml
+++ b/man/systemd-system.conf.xml
@@ -104,42 +104,17 @@
</varlistentry>
<varlistentry>
- <term><varname>DefaultControllers=cpu</varname></term>
-
- <listitem><para>Configures in which
- control group hierarchies to create
- per-service cgroups automatically, in
- addition to the
- <literal>name=systemd</literal> named
- hierarchy. Defaults to
- <literal>cpu</literal>. Takes a space
- separated list of controller
- names. Pass the empty string to ensure
- that systemd does not touch any
- hierarchies but its own.</para>
-
- <para>Note that the default value of
- 'cpu' will make realtime scheduling
- unavailable to system services. See
- <ulink
- url="http://www.freedesktop.org/wiki/Software/systemd/MyServiceCantGetRealtime">My
- Service Can't Get Realtime!</ulink>
- for more
- information.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>JoinControllers=cpu,cpuacct,cpuset net_cls,netprio</varname></term>
+ <term><varname>JoinControllers=cpu,cpuacct net_cls,netprio</varname></term>
<listitem><para>Configures controllers
that shall be mounted in a single
- hierarchy. By default systemd will
+ hierarchy. By default, systemd will
mount all controllers which are
enabled in the kernel in individual
hierarchies, with the exception of
those listed in this setting. Takes a
- space separated list of comma
- separated controller names, in order
+ space-separated list of comma-separated
+ controller names, in order
to allow multiple joined
hierarchies. Defaults to
'cpu,cpuacct'. Pass an empty string to
@@ -150,11 +125,11 @@
<para>Note that this option is only
applied once, at very early boot. If
you use an initial RAM disk (initrd)
- that uses systemd it might hence be
+ that uses systemd, it might hence be
necessary to rebuild the initrd if
this option is changed, and make sure
the new configuration file is included
- in it. Otherwise the initrd might
+ in it. Otherwise, the initrd might
mount the controller hierarchies in a
different configuration than intended,
and the main system cannot remount
@@ -175,7 +150,7 @@
<literal>d</literal>,
<literal>w</literal>). If
<varname>RuntimeWatchdogSec=</varname>
- is set to a non-zero value the
+ is set to a non-zero value, the
watchdog hardware
(<filename>/dev/watchdog</filename>)
will be programmed to automatically
@@ -214,14 +189,13 @@
capability bounding set for PID 1 and
its children. See
<citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- for details. Takes a whitespace
- separated list of capability names as
- read by
+ for details. Takes a whitespace-separated
+ list of capability names as read by
<citerefentry><refentrytitle>cap_from_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
Capabilities listed will be included
in the bounding set, all others are
removed. If the list of capabilities
- is prefixed with ~ all but the listed
+ is prefixed with ~, all but the listed
capabilities will be included, the
effect of the assignment
inverted. Note that this option also
@@ -263,6 +237,28 @@
</varlistentry>
<varlistentry>
+ <term><varname>DefaultEnvironment=</varname></term>
+
+ <listitem><para>Sets manager
+ environment variables passed to all
+ executed processes. Takes a
+ space-separated list of variable
+ assignments. See
+ <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for details about environment
+ variables.</para>
+
+ <para>Example:
+
+ <programlisting>DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
+
+ Sets three variables
+ <literal>VAR1</literal>,
+ <literal>VAR2</literal>,
+ <literal>VAR3</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>DefaultLimitCPU=</varname></term>
<term><varname>DefaultLimitFSIZE=</varname></term>
<term><varname>DefaultLimitDATA=</varname></term>
@@ -302,7 +298,8 @@
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd-timedated.8 b/man/systemd-timedated.8
new file mode 100644
index 0000000000..62504a0c95
--- /dev/null
+++ b/man/systemd-timedated.8
@@ -0,0 +1 @@
+.so man8/systemd-timedated.service.8
diff --git a/man/systemd-timedated.html b/man/systemd-timedated.html
index d02a15430f..14fc869886 100644
--- a/man/systemd-timedated.html
+++ b/man/systemd-timedated.html
@@ -19,18 +19,18 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-timedated.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-timedated.service, systemd-timedated — Time and date bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-timedated.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-timedated</code></p></div><div class="refsect1"><a name="idm259769744624"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-timedated</code> is a
- system service that may be used as mechanism to change
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-timedated.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-timedated.service, systemd-timedated — Time and date bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-timedated.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-timedated</code></p></div><div class="refsect1"><a name="idm274689705600"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-timedated</code> is a
+ system service that may be used as a mechanism to change
the system clock and timezone, as well as to
enable/disable NTP time
synchronization. <code class="filename">systemd-timedated</code>
is automatically activated on request and terminates
itself when it is unused.</p><p>The tool
<a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>
- is a command line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/timedated" target="_top">
+ is a command-line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/timedated" target="_top">
developer documentation</a> for information about
the APIs <code class="filename">systemd-timedated</code>
- provides.</p></div><div class="refsect1"><a name="idm259765975808"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ provides.</p></div><div class="refsect1"><a name="idm274689699760"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>,
<a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a>,
diff --git a/man/systemd-timedated.service.8 b/man/systemd-timedated.service.8
new file mode 100644
index 0000000000..5adf1e90e3
--- /dev/null
+++ b/man/systemd-timedated.service.8
@@ -0,0 +1,56 @@
+'\" t
+.TH "SYSTEMD\-TIMEDATED\&.SERVICE" "8" "" "systemd 208" "systemd-timedated.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-timedated.service, systemd-timedated \- Time and date bus mechanism
+.SH "SYNOPSIS"
+.PP
+systemd\-timedated\&.service
+.PP
+/usr/lib/systemd/systemd\-timedated
+.SH "DESCRIPTION"
+.PP
+systemd\-timedated
+is a system service that may be used as a mechanism to change the system clock and timezone, as well as to enable/disable NTP time synchronization\&.
+systemd\-timedated
+is automatically activated on request and terminates itself when it is unused\&.
+.PP
+The tool
+\fBtimedatectl\fR(1)
+is a command\-line client to this service\&.
+.PP
+See the
+\m[blue]\fBdeveloper documentation\fR\m[]\&\s-2\u[1]\d\s+2
+for information about the APIs
+systemd\-timedated
+provides\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBtimedatectl\fR(1),
+\fBlocaltime\fR(5),
+\fBhwclock\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+developer documentation
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/timedated
+.RE
diff --git a/man/systemd-timedated.service.html b/man/systemd-timedated.service.html
index d02a15430f..14fc869886 100644
--- a/man/systemd-timedated.service.html
+++ b/man/systemd-timedated.service.html
@@ -19,18 +19,18 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-timedated.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-timedated.service, systemd-timedated — Time and date bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-timedated.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-timedated</code></p></div><div class="refsect1"><a name="idm259769744624"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-timedated</code> is a
- system service that may be used as mechanism to change
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-timedated.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-timedated.service, systemd-timedated — Time and date bus mechanism</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-timedated.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-timedated</code></p></div><div class="refsect1"><a name="idm274689705600"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-timedated</code> is a
+ system service that may be used as a mechanism to change
the system clock and timezone, as well as to
enable/disable NTP time
synchronization. <code class="filename">systemd-timedated</code>
is automatically activated on request and terminates
itself when it is unused.</p><p>The tool
<a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>
- is a command line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/timedated" target="_top">
+ is a command-line client to this service.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/timedated" target="_top">
developer documentation</a> for information about
the APIs <code class="filename">systemd-timedated</code>
- provides.</p></div><div class="refsect1"><a name="idm259765975808"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ provides.</p></div><div class="refsect1"><a name="idm274689699760"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>,
<a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a>,
diff --git a/man/systemd-timedated.service.xml b/man/systemd-timedated.service.xml
index c82c0ff439..4f17bccc69 100644
--- a/man/systemd-timedated.service.xml
+++ b/man/systemd-timedated.service.xml
@@ -57,7 +57,7 @@
<title>Description</title>
<para><filename>systemd-timedated</filename> is a
- system service that may be used as mechanism to change
+ system service that may be used as a mechanism to change
the system clock and timezone, as well as to
enable/disable NTP time
synchronization. <filename>systemd-timedated</filename>
@@ -66,7 +66,7 @@
<para>The tool
<citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
- is a command line client to this service.</para>
+ is a command-line client to this service.</para>
<para>See the <ulink
url="http://www.freedesktop.org/wiki/Software/systemd/timedated">
diff --git a/man/systemd-tmpfiles-clean.service.8 b/man/systemd-tmpfiles-clean.service.8
new file mode 100644
index 0000000000..582f570d0f
--- /dev/null
+++ b/man/systemd-tmpfiles-clean.service.8
@@ -0,0 +1 @@
+.so man8/systemd-tmpfiles.8
diff --git a/man/systemd-tmpfiles-clean.service.html b/man/systemd-tmpfiles-clean.service.html
index 1fd9b8ab5d..c6b6b9c25b 100644
--- a/man/systemd-tmpfiles-clean.service.html
+++ b/man/systemd-tmpfiles-clean.service.html
@@ -19,37 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
- and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm259778087072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
+ and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm274679488336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
deletes and cleans up volatile and temporary files and
directories, based on the configuration file format and
location specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>.</p><p>If invoked with no arguments, it applies all
directives from all configuration files. If one or
- more file names are passed on the command line, only
+ more filenames are passed on the command line, only
the directives in these files are applied. If only
the basename of a configuration file is specified,
- all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm259778081872"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed all
+ all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm274679903344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed, all
files and directories marked with f,
F, d, D in the configuration files are
created. Files and directories marked with z,
Z have their ownership, access mode and security
labels set.</p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p>If this option is
- passed all files and directories with
+ passed, all files and directories with
an age parameter configured will be
cleaned up.</p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p>If this option is
- passed all files and directories marked
+ passed, all files and directories marked
with r, R in the configuration files
are removed.</p></dd><dt id="--prefix=PATH"><span class="term"><code class="option">--prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=PATH">¶</a></dt><dd><p>Only apply rules that
apply to paths with the specified
- prefix.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--exclude-prefix=PATH"><span class="term"><code class="option">--exclude-prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--exclude-prefix=PATH">¶</a></dt><dd><p>Ignore rules that
+ apply to paths with the specified
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd></dl></div><p>It is possible to combine
<code class="option">--create</code>, <code class="option">--clean</code>,
and <code class="option">--remove</code> in one invocation. For
example, during boot the following command line is
executed to ensure that all temporary and volatile
directories are removed and created according to the
- configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm259782026512"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259782025328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm274679651248"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679064944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>,
+ <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-tmpfiles-clean.timer.8 b/man/systemd-tmpfiles-clean.timer.8
new file mode 100644
index 0000000000..582f570d0f
--- /dev/null
+++ b/man/systemd-tmpfiles-clean.timer.8
@@ -0,0 +1 @@
+.so man8/systemd-tmpfiles.8
diff --git a/man/systemd-tmpfiles-clean.timer.html b/man/systemd-tmpfiles-clean.timer.html
index 1fd9b8ab5d..c6b6b9c25b 100644
--- a/man/systemd-tmpfiles-clean.timer.html
+++ b/man/systemd-tmpfiles-clean.timer.html
@@ -19,37 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
- and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm259778087072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
+ and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm274679488336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
deletes and cleans up volatile and temporary files and
directories, based on the configuration file format and
location specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>.</p><p>If invoked with no arguments, it applies all
directives from all configuration files. If one or
- more file names are passed on the command line, only
+ more filenames are passed on the command line, only
the directives in these files are applied. If only
the basename of a configuration file is specified,
- all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm259778081872"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed all
+ all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm274679903344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed, all
files and directories marked with f,
F, d, D in the configuration files are
created. Files and directories marked with z,
Z have their ownership, access mode and security
labels set.</p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p>If this option is
- passed all files and directories with
+ passed, all files and directories with
an age parameter configured will be
cleaned up.</p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p>If this option is
- passed all files and directories marked
+ passed, all files and directories marked
with r, R in the configuration files
are removed.</p></dd><dt id="--prefix=PATH"><span class="term"><code class="option">--prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=PATH">¶</a></dt><dd><p>Only apply rules that
apply to paths with the specified
- prefix.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--exclude-prefix=PATH"><span class="term"><code class="option">--exclude-prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--exclude-prefix=PATH">¶</a></dt><dd><p>Ignore rules that
+ apply to paths with the specified
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd></dl></div><p>It is possible to combine
<code class="option">--create</code>, <code class="option">--clean</code>,
and <code class="option">--remove</code> in one invocation. For
example, during boot the following command line is
executed to ensure that all temporary and volatile
directories are removed and created according to the
- configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm259782026512"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259782025328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm274679651248"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679064944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>,
+ <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-tmpfiles-setup-dev.service.8 b/man/systemd-tmpfiles-setup-dev.service.8
new file mode 100644
index 0000000000..582f570d0f
--- /dev/null
+++ b/man/systemd-tmpfiles-setup-dev.service.8
@@ -0,0 +1 @@
+.so man8/systemd-tmpfiles.8
diff --git a/man/systemd-tmpfiles-setup-dev.service.html b/man/systemd-tmpfiles-setup-dev.service.html
index 1fd9b8ab5d..c6b6b9c25b 100644
--- a/man/systemd-tmpfiles-setup-dev.service.html
+++ b/man/systemd-tmpfiles-setup-dev.service.html
@@ -19,37 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
- and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm259778087072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
+ and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm274679488336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
deletes and cleans up volatile and temporary files and
directories, based on the configuration file format and
location specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>.</p><p>If invoked with no arguments, it applies all
directives from all configuration files. If one or
- more file names are passed on the command line, only
+ more filenames are passed on the command line, only
the directives in these files are applied. If only
the basename of a configuration file is specified,
- all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm259778081872"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed all
+ all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm274679903344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed, all
files and directories marked with f,
F, d, D in the configuration files are
created. Files and directories marked with z,
Z have their ownership, access mode and security
labels set.</p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p>If this option is
- passed all files and directories with
+ passed, all files and directories with
an age parameter configured will be
cleaned up.</p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p>If this option is
- passed all files and directories marked
+ passed, all files and directories marked
with r, R in the configuration files
are removed.</p></dd><dt id="--prefix=PATH"><span class="term"><code class="option">--prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=PATH">¶</a></dt><dd><p>Only apply rules that
apply to paths with the specified
- prefix.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--exclude-prefix=PATH"><span class="term"><code class="option">--exclude-prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--exclude-prefix=PATH">¶</a></dt><dd><p>Ignore rules that
+ apply to paths with the specified
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd></dl></div><p>It is possible to combine
<code class="option">--create</code>, <code class="option">--clean</code>,
and <code class="option">--remove</code> in one invocation. For
example, during boot the following command line is
executed to ensure that all temporary and volatile
directories are removed and created according to the
- configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm259782026512"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259782025328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm274679651248"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679064944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>,
+ <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-tmpfiles-setup.service.8 b/man/systemd-tmpfiles-setup.service.8
new file mode 100644
index 0000000000..582f570d0f
--- /dev/null
+++ b/man/systemd-tmpfiles-setup.service.8
@@ -0,0 +1 @@
+.so man8/systemd-tmpfiles.8
diff --git a/man/systemd-tmpfiles-setup.service.html b/man/systemd-tmpfiles-setup.service.html
index 1fd9b8ab5d..c6b6b9c25b 100644
--- a/man/systemd-tmpfiles-setup.service.html
+++ b/man/systemd-tmpfiles-setup.service.html
@@ -19,37 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
- and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm259778087072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
+ and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm274679488336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
deletes and cleans up volatile and temporary files and
directories, based on the configuration file format and
location specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>.</p><p>If invoked with no arguments, it applies all
directives from all configuration files. If one or
- more file names are passed on the command line, only
+ more filenames are passed on the command line, only
the directives in these files are applied. If only
the basename of a configuration file is specified,
- all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm259778081872"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed all
+ all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm274679903344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed, all
files and directories marked with f,
F, d, D in the configuration files are
created. Files and directories marked with z,
Z have their ownership, access mode and security
labels set.</p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p>If this option is
- passed all files and directories with
+ passed, all files and directories with
an age parameter configured will be
cleaned up.</p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p>If this option is
- passed all files and directories marked
+ passed, all files and directories marked
with r, R in the configuration files
are removed.</p></dd><dt id="--prefix=PATH"><span class="term"><code class="option">--prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=PATH">¶</a></dt><dd><p>Only apply rules that
apply to paths with the specified
- prefix.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--exclude-prefix=PATH"><span class="term"><code class="option">--exclude-prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--exclude-prefix=PATH">¶</a></dt><dd><p>Ignore rules that
+ apply to paths with the specified
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd></dl></div><p>It is possible to combine
<code class="option">--create</code>, <code class="option">--clean</code>,
and <code class="option">--remove</code> in one invocation. For
example, during boot the following command line is
executed to ensure that all temporary and volatile
directories are removed and created according to the
- configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm259782026512"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259782025328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm274679651248"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679064944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>,
+ <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-tmpfiles.8 b/man/systemd-tmpfiles.8
new file mode 100644
index 0000000000..9cef097cc3
--- /dev/null
+++ b/man/systemd-tmpfiles.8
@@ -0,0 +1,99 @@
+'\" t
+.TH "SYSTEMD\-TMPFILES" "8" "" "systemd 208" "systemd-tmpfiles"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer \- Creates, deletes and cleans up volatile and temporary files and directories
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-tmpfiles\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[CONFIGURATION\ FILE...]\fR\ 'u
+\fBsystemd\-tmpfiles \fR\fB[OPTIONS...]\fR\fB \fR\fB[CONFIGURATION\ FILE...]\fR
+.PP
+systemd\-tmpfiles\-setup\&.service
+.PP
+systemd\-tmpfiles\-setup\-dev\&.service
+.PP
+systemd\-tmpfiles\-clean\&.service
+.PP
+systemd\-tmpfiles\-clean\&.timer
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-tmpfiles\fR
+creates, deletes and cleans up volatile and temporary files and directories, based on the configuration file format and location specified in
+\fBtmpfiles.d\fR(5)\&.
+.PP
+If invoked with no arguments, it applies all directives from all configuration files\&. If one or more filenames are passed on the command line, only the directives in these files are applied\&. If only the basename of a configuration file is specified, all configuration directories as specified in
+\fBtmpfiles.d\fR(5)
+are searched for a matching file\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-\-create\fR
+.RS 4
+If this option is passed, all files and directories marked with f, F, d, D in the configuration files are created\&. Files and directories marked with z, Z have their ownership, access mode and security labels set\&.
+.RE
+.PP
+\fB\-\-clean\fR
+.RS 4
+If this option is passed, all files and directories with an age parameter configured will be cleaned up\&.
+.RE
+.PP
+\fB\-\-remove\fR
+.RS 4
+If this option is passed, all files and directories marked with r, R in the configuration files are removed\&.
+.RE
+.PP
+\fB\-\-prefix=PATH\fR
+.RS 4
+Only apply rules that apply to paths with the specified prefix\&. This option can be specified multiple times\&.
+.RE
+.PP
+\fB\-\-exclude\-prefix=PATH\fR
+.RS 4
+Ignore rules that apply to paths with the specified prefix\&. This option can be specified multiple times\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+It is possible to combine
+\fB\-\-create\fR,
+\fB\-\-clean\fR, and
+\fB\-\-remove\fR
+in one invocation\&. For example, during boot the following command line is executed to ensure that all temporary and volatile directories are removed and created according to the configuration file:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+systemd\-tmpfiles \-\-remove \-\-create
+.fi
+.if n \{\
+.RE
+.\}
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBtmpfiles.d\fR(5)
diff --git a/man/systemd-tmpfiles.html b/man/systemd-tmpfiles.html
index 1fd9b8ab5d..c6b6b9c25b 100644
--- a/man/systemd-tmpfiles.html
+++ b/man/systemd-tmpfiles.html
@@ -19,37 +19,41 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
- and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm259778087072"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-tmpfiles"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tmpfiles, systemd-tmpfiles-setup.service, systemd-tmpfiles-setup-dev.service, systemd-tmpfiles-clean.service, systemd-tmpfiles-clean.timer — Creates, deletes and cleans up volatile
+ and temporary files and directories</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tmpfiles [OPTIONS...] [CONFIGURATION FILE...]</code> </p></div><p><code class="filename">systemd-tmpfiles-setup.service</code></p><p><code class="filename">systemd-tmpfiles-setup-dev.service</code></p><p><code class="filename">systemd-tmpfiles-clean.service</code></p><p><code class="filename">systemd-tmpfiles-clean.timer</code></p></div><div class="refsect1"><a name="idm274679488336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> creates,
deletes and cleans up volatile and temporary files and
directories, based on the configuration file format and
location specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>.</p><p>If invoked with no arguments, it applies all
directives from all configuration files. If one or
- more file names are passed on the command line, only
+ more filenames are passed on the command line, only
the directives in these files are applied. If only
the basename of a configuration file is specified,
- all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm259778081872"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed all
+ all configuration directories as specified in <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> are searched for a matching file.</p></div><div class="refsect1"><a name="idm274679903344"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p>If this option is passed, all
files and directories marked with f,
F, d, D in the configuration files are
created. Files and directories marked with z,
Z have their ownership, access mode and security
labels set.</p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p>If this option is
- passed all files and directories with
+ passed, all files and directories with
an age parameter configured will be
cleaned up.</p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p>If this option is
- passed all files and directories marked
+ passed, all files and directories marked
with r, R in the configuration files
are removed.</p></dd><dt id="--prefix=PATH"><span class="term"><code class="option">--prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=PATH">¶</a></dt><dd><p>Only apply rules that
apply to paths with the specified
- prefix.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--exclude-prefix=PATH"><span class="term"><code class="option">--exclude-prefix=PATH</code></span><a class="headerlink" title="Permalink to this term" href="#--exclude-prefix=PATH">¶</a></dt><dd><p>Ignore rules that
+ apply to paths with the specified
+ prefix. This option can be specified
+ multiple times.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd></dl></div><p>It is possible to combine
<code class="option">--create</code>, <code class="option">--clean</code>,
and <code class="option">--remove</code> in one invocation. For
example, during boot the following command line is
executed to ensure that all temporary and volatile
directories are removed and created according to the
- configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm259782026512"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259782025328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ configuration file:</p><pre class="programlisting">systemd-tmpfiles --remove --create</pre></div><div class="refsect1"><a name="idm274679651248"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274679064944"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>,
+ <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml
index 0d2d65d593..ba727e1854 100644
--- a/man/systemd-tmpfiles.xml
+++ b/man/systemd-tmpfiles.xml
@@ -76,7 +76,7 @@
<para>If invoked with no arguments, it applies all
directives from all configuration files. If one or
- more file names are passed on the command line, only
+ more filenames are passed on the command line, only
the directives in these files are applied. If only
the basename of a configuration file is specified,
all configuration directories as specified in <citerefentry>
@@ -94,7 +94,7 @@
<varlistentry>
<term><option>--create</option></term>
- <listitem><para>If this option is passed all
+ <listitem><para>If this option is passed, all
files and directories marked with f,
F, d, D in the configuration files are
created. Files and directories marked with z,
@@ -105,7 +105,7 @@
<varlistentry>
<term><option>--clean</option></term>
<listitem><para>If this option is
- passed all files and directories with
+ passed, all files and directories with
an age parameter configured will be
cleaned up.</para></listitem>
</varlistentry>
@@ -113,7 +113,7 @@
<varlistentry>
<term><option>--remove</option></term>
<listitem><para>If this option is
- passed all files and directories marked
+ passed, all files and directories marked
with r, R in the configuration files
are removed.</para></listitem>
</varlistentry>
@@ -121,7 +121,15 @@
<term><option>--prefix=PATH</option></term>
<listitem><para>Only apply rules that
apply to paths with the specified
- prefix.</para></listitem>
+ prefix. This option can be specified
+ multiple times.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--exclude-prefix=PATH</option></term>
+ <listitem><para>Ignore rules that
+ apply to paths with the specified
+ prefix. This option can be specified
+ multiple times.</para></listitem>
</varlistentry>
@@ -157,7 +165,7 @@
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd-tty-ask-password-agent.1 b/man/systemd-tty-ask-password-agent.1
new file mode 100644
index 0000000000..286ab70f28
--- /dev/null
+++ b/man/systemd-tty-ask-password-agent.1
@@ -0,0 +1,99 @@
+'\" t
+.TH "SYSTEMD\-TTY\-ASK\-PASSWORD\-AGENT" "1" "" "systemd 208" "systemd-tty-ask-password-agent"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-tty-ask-password-agent \- List or process pending systemd password requests
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\-tty\-ask\-password\-agent\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB[VARIABLE=VALUE...]\fR\ 'u
+\fBsystemd\-tty\-ask\-password\-agent \fR\fB[OPTIONS...]\fR\fB \fR\fB[VARIABLE=VALUE...]\fR
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-tty\-ask\-password\-agent\fR
+is a password agent that handles password requests of the system, for example for hard disk encryption passwords or SSL certificate passwords that need to be queried at boot\-time or during runtime\&.
+.PP
+\fBsystemd\-tty\-ask\-password\-agent\fR
+implements the
+\m[blue]\fBPassword Agents Specification\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-list\fR
+.RS 4
+Lists all currently pending system password requests\&.
+.RE
+.PP
+\fB\-\-query\fR
+.RS 4
+Process all currently pending system password requests by querying the user on the calling TTY\&.
+.RE
+.PP
+\fB\-\-watch\fR
+.RS 4
+Continuously process password requests\&.
+.RE
+.PP
+\fB\-\-wall\fR
+.RS 4
+Forward password requests to
+\fBwall\fR(1)
+instead of querying the user on the calling TTY\&.
+.RE
+.PP
+\fB\-\-plymouth\fR
+.RS 4
+Ask question with
+\fBplymouth\fR(8)
+instead of querying the user on the calling TTY\&.
+.RE
+.PP
+\fB\-\-console\fR
+.RS 4
+Ask question on
+/dev/console
+instead of querying the user on the calling TTY\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-ask-password-console.service\fR(8),
+\fBwall\fR(1),
+\fBplymouth\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+Password Agents Specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
+.RE
diff --git a/man/systemd-tty-ask-password-agent.html b/man/systemd-tty-ask-password-agent.html
index 3ee9e8dbba..8ee5e8d08b 100644
--- a/man/systemd-tty-ask-password-agent.html
+++ b/man/systemd-tty-ask-password-agent.html
@@ -19,14 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-tty-ask-password-agent"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tty-ask-password-agent — List or process pending systemd password requests</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tty-ask-password-agent [OPTIONS...] [VARIABLE=VALUE...]</code> </p></div></div><div class="refsect1"><a name="idm259786595440"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tty-ask-password-agent</strong></span>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-tty-ask-password-agent"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-tty-ask-password-agent — List or process pending systemd password requests</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd-tty-ask-password-agent [OPTIONS...] [VARIABLE=VALUE...]</code> </p></div></div><div class="refsect1"><a name="idm274681243056"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tty-ask-password-agent</strong></span>
is a password agent that handles password
requests of the system, for example for hard disk
encryption passwords or SSL certificate passwords that
need to be queried at boot-time or during
runtime.</p><p><span class="command"><strong>systemd-tty-ask-password-agent</strong></span>
implements the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents" target="_top">Password
- Agents Specification</a>.</p></div><div class="refsect1"><a name="idm259786591760"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ Agents Specification</a>.</p></div><div class="refsect1"><a name="idm274680270304"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--list"><span class="term"><code class="option">--list</code></span><a class="headerlink" title="Permalink to this term" href="#--list">¶</a></dt><dd><p>Lists all currently pending system password requests.</p></dd><dt id="--query"><span class="term"><code class="option">--query</code></span><a class="headerlink" title="Permalink to this term" href="#--query">¶</a></dt><dd><p>Process all currently
pending system password requests by
@@ -42,8 +42,8 @@
calling TTY.</p></dd><dt id="--console"><span class="term"><code class="option">--console</code></span><a class="headerlink" title="Permalink to this term" href="#--console">¶</a></dt><dd><p>Ask question on
<code class="filename">/dev/console</code>
instead of querying the user on the
- calling TTY. </p></dd></dl></div></div><div class="refsect1"><a name="idm259790532400"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259790531216"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ calling TTY. </p></dd></dl></div></div><div class="refsect1"><a name="idm274679909728"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274680131520"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a>,
diff --git a/man/systemd-udevd-control.socket.8 b/man/systemd-udevd-control.socket.8
new file mode 100644
index 0000000000..caf07bb3ad
--- /dev/null
+++ b/man/systemd-udevd-control.socket.8
@@ -0,0 +1 @@
+.so man8/systemd-udevd.service.8
diff --git a/man/systemd-udevd-control.socket.html b/man/systemd-udevd-control.socket.html
index 86b1dcbda1..f97be0d005 100644
--- a/man/systemd-udevd-control.socket.html
+++ b/man/systemd-udevd-control.socket.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm259785967728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm274678764640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
For every event, systemd-udevd executes matching instructions
specified in udev rules. See <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>.</p><p>The behavior of the running daemon can be changed with
- <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm259789921200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
+ <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm274678304864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="--resolve-names="><span class="term"><code class="option">--resolve-names=</code></span><a class="headerlink" title="Permalink to this term" href="#--resolve-names=">¶</a></dt><dd><p>Specify when systemd-udevd should resolve names of users and groups.
@@ -30,14 +30,14 @@
resolved when the rules are parsed. When set to
<code class="option">late</code> names will be resolved for every event.
When set to <code class="option">never</code> names will never be resolved
- and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789906400"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789895888"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
+ and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678785952"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682224752"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
<span class="command"><strong>systemd-udevd</strong></span> is used in an initrd.</p><dl class="variablelist"><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code>, </span><span class="term"><code class="varname">rd.udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p>Set the logging priority.</p></dd><dt id="udev.children-max="><span class="term"><code class="varname">udev.children-max=</code>, </span><span class="term"><code class="varname">rd.udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="udev.exec-delay="><span class="term"><code class="varname">udev.exec-delay=</code>, </span><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="net.ifnames="><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#net.ifnames=">¶</a></dt><dd><p>Network interfaces are renamed to give them predictable names
- when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789884528"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><p>udev expects its main configuration file at <code class="filename">/etc/udev/udev.conf</code>.
+ when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678435888"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><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. All
empty lines or lines beginning with '#' are ignored. The following variables can be
set:</p><div class="variablelist"><dl class="variablelist"><dt id="udev_log"><span class="term"><code class="varname">udev_log</code></span><a class="headerlink" title="Permalink to this term" href="#udev_log">¶</a></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="refsect1"><a name="idm259789878928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
+ and <code class="option">debug</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678430288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
diff --git a/man/systemd-udevd-kernel.socket.8 b/man/systemd-udevd-kernel.socket.8
new file mode 100644
index 0000000000..caf07bb3ad
--- /dev/null
+++ b/man/systemd-udevd-kernel.socket.8
@@ -0,0 +1 @@
+.so man8/systemd-udevd.service.8
diff --git a/man/systemd-udevd-kernel.socket.html b/man/systemd-udevd-kernel.socket.html
index 86b1dcbda1..f97be0d005 100644
--- a/man/systemd-udevd-kernel.socket.html
+++ b/man/systemd-udevd-kernel.socket.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm259785967728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm274678764640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
For every event, systemd-udevd executes matching instructions
specified in udev rules. See <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>.</p><p>The behavior of the running daemon can be changed with
- <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm259789921200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
+ <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm274678304864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="--resolve-names="><span class="term"><code class="option">--resolve-names=</code></span><a class="headerlink" title="Permalink to this term" href="#--resolve-names=">¶</a></dt><dd><p>Specify when systemd-udevd should resolve names of users and groups.
@@ -30,14 +30,14 @@
resolved when the rules are parsed. When set to
<code class="option">late</code> names will be resolved for every event.
When set to <code class="option">never</code> names will never be resolved
- and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789906400"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789895888"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
+ and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678785952"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682224752"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
<span class="command"><strong>systemd-udevd</strong></span> is used in an initrd.</p><dl class="variablelist"><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code>, </span><span class="term"><code class="varname">rd.udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p>Set the logging priority.</p></dd><dt id="udev.children-max="><span class="term"><code class="varname">udev.children-max=</code>, </span><span class="term"><code class="varname">rd.udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="udev.exec-delay="><span class="term"><code class="varname">udev.exec-delay=</code>, </span><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="net.ifnames="><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#net.ifnames=">¶</a></dt><dd><p>Network interfaces are renamed to give them predictable names
- when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789884528"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><p>udev expects its main configuration file at <code class="filename">/etc/udev/udev.conf</code>.
+ when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678435888"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><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. All
empty lines or lines beginning with '#' are ignored. The following variables can be
set:</p><div class="variablelist"><dl class="variablelist"><dt id="udev_log"><span class="term"><code class="varname">udev_log</code></span><a class="headerlink" title="Permalink to this term" href="#udev_log">¶</a></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="refsect1"><a name="idm259789878928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
+ and <code class="option">debug</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678430288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
diff --git a/man/systemd-udevd.8 b/man/systemd-udevd.8
new file mode 100644
index 0000000000..caf07bb3ad
--- /dev/null
+++ b/man/systemd-udevd.8
@@ -0,0 +1 @@
+.so man8/systemd-udevd.service.8
diff --git a/man/systemd-udevd.html b/man/systemd-udevd.html
index 86b1dcbda1..f97be0d005 100644
--- a/man/systemd-udevd.html
+++ b/man/systemd-udevd.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm259785967728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm274678764640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
For every event, systemd-udevd executes matching instructions
specified in udev rules. See <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>.</p><p>The behavior of the running daemon can be changed with
- <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm259789921200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
+ <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm274678304864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="--resolve-names="><span class="term"><code class="option">--resolve-names=</code></span><a class="headerlink" title="Permalink to this term" href="#--resolve-names=">¶</a></dt><dd><p>Specify when systemd-udevd should resolve names of users and groups.
@@ -30,14 +30,14 @@
resolved when the rules are parsed. When set to
<code class="option">late</code> names will be resolved for every event.
When set to <code class="option">never</code> names will never be resolved
- and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789906400"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789895888"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
+ and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678785952"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682224752"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
<span class="command"><strong>systemd-udevd</strong></span> is used in an initrd.</p><dl class="variablelist"><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code>, </span><span class="term"><code class="varname">rd.udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p>Set the logging priority.</p></dd><dt id="udev.children-max="><span class="term"><code class="varname">udev.children-max=</code>, </span><span class="term"><code class="varname">rd.udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="udev.exec-delay="><span class="term"><code class="varname">udev.exec-delay=</code>, </span><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="net.ifnames="><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#net.ifnames=">¶</a></dt><dd><p>Network interfaces are renamed to give them predictable names
- when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789884528"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><p>udev expects its main configuration file at <code class="filename">/etc/udev/udev.conf</code>.
+ when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678435888"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><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. All
empty lines or lines beginning with '#' are ignored. The following variables can be
set:</p><div class="variablelist"><dl class="variablelist"><dt id="udev_log"><span class="term"><code class="varname">udev_log</code></span><a class="headerlink" title="Permalink to this term" href="#udev_log">¶</a></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="refsect1"><a name="idm259789878928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
+ and <code class="option">debug</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678430288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
diff --git a/man/systemd-udevd.service.8 b/man/systemd-udevd.service.8
new file mode 100644
index 0000000000..e6d57952df
--- /dev/null
+++ b/man/systemd-udevd.service.8
@@ -0,0 +1,130 @@
+'\" t
+.TH "SYSTEMD\-UDEVD\&.SERVICE" "8" "" "systemd 208" "systemd-udevd.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd \- Device event managing daemon
+.SH "SYNOPSIS"
+.PP
+systemd\-udevd\&.service
+.PP
+systemd\-udevd\-control\&.socket
+.PP
+systemd\-udevd\-kernel\&.socket
+.HP \w'\fB/usr/lib/systemd/systemd\-udevd\fR\ 'u
+\fB/usr/lib/systemd/systemd\-udevd\fR [\fB\-\-daemon\fR] [\fB\-\-debug\fR] [\fB\-\-children\-max=\fR] [\fB\-\-exec\-delay=\fR] [\fB\-\-resolve\-names=early|late|never\fR] [\fB\-\-version\fR] [\fB\-\-help\fR]
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-udevd\fR
+listens to kernel uevents\&. For every event, systemd\-udevd executes matching instructions specified in udev rules\&. See
+\fBudev\fR(7)\&.
+.PP
+The behavior of the running daemon can be changed with
+\fBudevadm control\fR\&.
+.SH "OPTIONS"
+.PP
+\fB\-\-daemon\fR
+.RS 4
+Detach and run in the background\&.
+.RE
+.PP
+\fB\-\-debug\fR
+.RS 4
+Print debug messages to stderr\&.
+.RE
+.PP
+\fB\-\-children\-max=\fR
+.RS 4
+Limit the number of events executed in parallel\&.
+.RE
+.PP
+\fB\-\-exec\-delay=\fR
+.RS 4
+Delay the execution of RUN instruction by the given number of seconds\&. This option might be useful when debugging system crashes during coldplug caused by loading non\-working kernel modules\&.
+.RE
+.PP
+\fB\-\-resolve\-names=\fR
+.RS 4
+Specify when systemd\-udevd should resolve names of users and groups\&. When set to
+\fBearly\fR
+(the default) names will be resolved when the rules are parsed\&. When set to
+\fBlate\fR
+names will be resolved for every event\&. When set to
+\fBnever\fR
+names will never be resolved and all devices will be owned by root\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print version number\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SH "ENVIRONMENT"
+.PP
+\fI$UDEV_LOG=\fR
+.RS 4
+Set the logging priority\&.
+.RE
+.SH "KERNEL COMMAND LINE"
+.PP
+Parameters starting with "rd\&." will be read when
+\fBsystemd\-udevd\fR
+is used in an initrd\&.
+.PP
+\fIudev\&.log\-priority=\fR, \fIrd\&.udev\&.log\-priority=\fR
+.RS 4
+Set the logging priority\&.
+.RE
+.PP
+\fIudev\&.children\-max=\fR, \fIrd\&.udev\&.children\-max=\fR
+.RS 4
+Limit the number of events executed in parallel\&.
+.RE
+.PP
+\fIudev\&.exec\-delay=\fR, \fIrd\&.udev\&.exec\-delay=\fR
+.RS 4
+Delay the execution of RUN instruction by the given number of seconds\&. This option might be useful when debugging system crashes during coldplug caused by loading non\-working kernel modules\&.
+.RE
+.PP
+\fInet\&.ifnames=\fR
+.RS 4
+Network interfaces are renamed to give them predictable names when possible\&. It is enabled by default, specifying 0 disables it\&.
+.RE
+.SH "CONFIGURATION FILE"
+.PP
+udev expects its main configuration file at
+/etc/udev/udev\&.conf\&. It consists of a set of variables allowing the user to override default udev values\&. All empty lines or lines beginning with \*(Aq#\*(Aq are ignored\&. The following variables can be set:
+.PP
+\fIudev_log\fR
+.RS 4
+The logging priority\&. Valid values are the numerical syslog priorities or their textual representations:
+\fBerr\fR,
+\fBinfo\fR
+and
+\fBdebug\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBudev\fR(7),
+\fBudevadm\fR(8)
diff --git a/man/systemd-udevd.service.html b/man/systemd-udevd.service.html
index 86b1dcbda1..f97be0d005 100644
--- a/man/systemd-udevd.service.html
+++ b/man/systemd-udevd.service.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm259785967728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-udevd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-udevd.service, systemd-udevd-control.socket, systemd-udevd-kernel.socket, systemd-udevd — Device event managing daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-udevd.service</code></p><p><code class="filename">systemd-udevd-control.socket</code></p><p><code class="filename">systemd-udevd-kernel.socket</code></p><div class="cmdsynopsis"><p><code class="command">/usr/lib/systemd/systemd-udevd</code> [<code class="option">--daemon</code>] [<code class="option">--debug</code>] [<code class="option">--children-max=</code>] [<code class="option">--exec-delay=</code>] [<code class="option">--resolve-names=early|late|never</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div></div><div class="refsect1"><a name="idm274678764640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-udevd</strong></span> listens to kernel uevents.
For every event, systemd-udevd executes matching instructions
specified in udev rules. See <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>.</p><p>The behavior of the running daemon can be changed with
- <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm259789921200"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
+ <span class="command"><strong>udevadm control</strong></span>.</p></div><div class="refsect1"><a name="idm274678304864"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p>Detach and run in the background.</p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="--resolve-names="><span class="term"><code class="option">--resolve-names=</code></span><a class="headerlink" title="Permalink to this term" href="#--resolve-names=">¶</a></dt><dd><p>Specify when systemd-udevd should resolve names of users and groups.
@@ -30,14 +30,14 @@
resolved when the rules are parsed. When set to
<code class="option">late</code> names will be resolved for every event.
When set to <code class="option">never</code> names will never be resolved
- and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789906400"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789895888"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
+ and all devices will be owned by root.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678785952"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p>Set the logging priority.</p></dd></dl></div></div><div class="refsect1"><a name="idm274682224752"></a><h2 id="Kernel command line">Kernel command line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20command%20line">¶</a></h2><div class="variablelist"><p>Parameters starting with "rd." will be read when
<span class="command"><strong>systemd-udevd</strong></span> is used in an initrd.</p><dl class="variablelist"><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code>, </span><span class="term"><code class="varname">rd.udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p>Set the logging priority.</p></dd><dt id="udev.children-max="><span class="term"><code class="varname">udev.children-max=</code>, </span><span class="term"><code class="varname">rd.udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.children-max=">¶</a></dt><dd><p>Limit the number of events executed in parallel.</p></dd><dt id="udev.exec-delay="><span class="term"><code class="varname">udev.exec-delay=</code>, </span><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.exec-delay=">¶</a></dt><dd><p>Delay the execution of RUN instruction by the given
number of seconds. This option might be useful when
debugging system crashes during coldplug caused by loading
non-working kernel modules.</p></dd><dt id="net.ifnames="><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#net.ifnames=">¶</a></dt><dd><p>Network interfaces are renamed to give them predictable names
- when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm259789884528"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><p>udev expects its main configuration file at <code class="filename">/etc/udev/udev.conf</code>.
+ when possible. It is enabled by default, specifying 0 disables it.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678435888"></a><h2 id="Configuration file">Configuration file<a class="headerlink" title="Permalink to this headline" href="#Configuration%20file">¶</a></h2><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. All
empty lines or lines beginning with '#' are ignored. The following variables can be
set:</p><div class="variablelist"><dl class="variablelist"><dt id="udev_log"><span class="term"><code class="varname">udev_log</code></span><a class="headerlink" title="Permalink to this term" href="#udev_log">¶</a></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="refsect1"><a name="idm259789878928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
+ and <code class="option">debug</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274678430288"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
diff --git a/man/systemd-udevd.service.xml b/man/systemd-udevd.service.xml
index 77b7374886..7fce3000f5 100644
--- a/man/systemd-udevd.service.xml
+++ b/man/systemd-udevd.service.xml
@@ -162,6 +162,8 @@
</listitem>
</varlistentry>
</variablelist>
+ <!-- when adding entries here, consider also adding them
+ in kernel-command-line.xml -->
</refsect1>
<refsect1><title>Configuration file</title>
diff --git a/man/systemd-update-utmp-runlevel.service.8 b/man/systemd-update-utmp-runlevel.service.8
new file mode 100644
index 0000000000..6597f3c3bb
--- /dev/null
+++ b/man/systemd-update-utmp-runlevel.service.8
@@ -0,0 +1 @@
+.so man8/systemd-update-utmp.service.8
diff --git a/man/systemd-update-utmp-runlevel.service.html b/man/systemd-update-utmp-runlevel.service.html
index e61c652fd7..658c89c064 100644
--- a/man/systemd-update-utmp-runlevel.service.html
+++ b/man/systemd-update-utmp-runlevel.service.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-update-utmp-runlevel.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-update-utmp.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-update-utmp-runlevel.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-update-utmp-runlevel.service, systemd-update-utmp-shutdown.service, systemd-update-utmp — Write audit and utmp updates at runlevel
- changes and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-update-utmp-runlevel.service</code></p><p><code class="filename">systemd-update-utmp-shutdown.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></p></div><div class="refsect1"><a name="idm259772201824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-update-utmp-runlevel.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-update-utmp.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-update-utmp.service, systemd-update-utmp-runlevel.service, systemd-update-utmp — Write audit and utmp updates at bootup, runlevel
+ changes and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-update-utmp.service</code></p><p><code class="filename">systemd-update-utmp-runlevel.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></p></div><div class="refsect1"><a name="idm274701079104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-update-utmp-runlevel.service</code>
is a service that writes SysV runlevel changes to utmp
and wtmp, as well as the audit logs, as they
- occur. <code class="filename">systemd-update-utmp-shutdown.service</code>
- does the same for shut-down requests.</p></div><div class="refsect1"><a name="idm259772199184"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ occur. <code class="filename">systemd-update-utmp.service</code>
+ does the same for system reboots and shut-down requests.</p></div><div class="refsect1"><a name="idm274701820752"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="utmp.html"><span class="citerefentry"><span class="refentrytitle">utmp</span>(5)</span></a>,
<a href="auditd.html"><span class="citerefentry"><span class="refentrytitle">auditd</span>(8)</span></a>
diff --git a/man/systemd-update-utmp.8 b/man/systemd-update-utmp.8
new file mode 100644
index 0000000000..6597f3c3bb
--- /dev/null
+++ b/man/systemd-update-utmp.8
@@ -0,0 +1 @@
+.so man8/systemd-update-utmp.service.8
diff --git a/man/systemd-update-utmp.html b/man/systemd-update-utmp.html
index e61c652fd7..658c89c064 100644
--- a/man/systemd-update-utmp.html
+++ b/man/systemd-update-utmp.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-update-utmp-runlevel.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-update-utmp.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-update-utmp-runlevel.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-update-utmp-runlevel.service, systemd-update-utmp-shutdown.service, systemd-update-utmp — Write audit and utmp updates at runlevel
- changes and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-update-utmp-runlevel.service</code></p><p><code class="filename">systemd-update-utmp-shutdown.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></p></div><div class="refsect1"><a name="idm259772201824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-update-utmp-runlevel.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-update-utmp.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-update-utmp.service, systemd-update-utmp-runlevel.service, systemd-update-utmp — Write audit and utmp updates at bootup, runlevel
+ changes and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-update-utmp.service</code></p><p><code class="filename">systemd-update-utmp-runlevel.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></p></div><div class="refsect1"><a name="idm274701079104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-update-utmp-runlevel.service</code>
is a service that writes SysV runlevel changes to utmp
and wtmp, as well as the audit logs, as they
- occur. <code class="filename">systemd-update-utmp-shutdown.service</code>
- does the same for shut-down requests.</p></div><div class="refsect1"><a name="idm259772199184"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ occur. <code class="filename">systemd-update-utmp.service</code>
+ does the same for system reboots and shut-down requests.</p></div><div class="refsect1"><a name="idm274701820752"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="utmp.html"><span class="citerefentry"><span class="refentrytitle">utmp</span>(5)</span></a>,
<a href="auditd.html"><span class="citerefentry"><span class="refentrytitle">auditd</span>(8)</span></a>
diff --git a/man/systemd-update-utmp.service.8 b/man/systemd-update-utmp.service.8
new file mode 100644
index 0000000000..b379ab7619
--- /dev/null
+++ b/man/systemd-update-utmp.service.8
@@ -0,0 +1,41 @@
+'\" t
+.TH "SYSTEMD\-UPDATE\-UTMP\&.SERVICE" "8" "" "systemd 208" "systemd-update-utmp.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-update-utmp.service, systemd-update-utmp-runlevel.service, systemd-update-utmp \- Write audit and utmp updates at bootup, runlevel changes and shutdown
+.SH "SYNOPSIS"
+.PP
+systemd\-update\-utmp\&.service
+.PP
+systemd\-update\-utmp\-runlevel\&.service
+.PP
+/usr/lib/systemd/systemd\-update\-utmp
+.SH "DESCRIPTION"
+.PP
+systemd\-update\-utmp\-runlevel\&.service
+is a service that writes SysV runlevel changes to utmp and wtmp, as well as the audit logs, as they occur\&.
+systemd\-update\-utmp\&.service
+does the same for system reboots and shut\-down requests\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fButmp\fR(5),
+\fBauditd\fR(8)
diff --git a/man/systemd-update-utmp-shutdown.service.html b/man/systemd-update-utmp.service.html
index e61c652fd7..658c89c064 100644
--- a/man/systemd-update-utmp-shutdown.service.html
+++ b/man/systemd-update-utmp.service.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-update-utmp-runlevel.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd-update-utmp.service</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-update-utmp-runlevel.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-update-utmp-runlevel.service, systemd-update-utmp-shutdown.service, systemd-update-utmp — Write audit and utmp updates at runlevel
- changes and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-update-utmp-runlevel.service</code></p><p><code class="filename">systemd-update-utmp-shutdown.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></p></div><div class="refsect1"><a name="idm259772201824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-update-utmp-runlevel.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-update-utmp.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-update-utmp.service, systemd-update-utmp-runlevel.service, systemd-update-utmp — Write audit and utmp updates at bootup, runlevel
+ changes and shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-update-utmp.service</code></p><p><code class="filename">systemd-update-utmp-runlevel.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></p></div><div class="refsect1"><a name="idm274701079104"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-update-utmp-runlevel.service</code>
is a service that writes SysV runlevel changes to utmp
and wtmp, as well as the audit logs, as they
- occur. <code class="filename">systemd-update-utmp-shutdown.service</code>
- does the same for shut-down requests.</p></div><div class="refsect1"><a name="idm259772199184"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ occur. <code class="filename">systemd-update-utmp.service</code>
+ does the same for system reboots and shut-down requests.</p></div><div class="refsect1"><a name="idm274701820752"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="utmp.html"><span class="citerefentry"><span class="refentrytitle">utmp</span>(5)</span></a>,
<a href="auditd.html"><span class="citerefentry"><span class="refentrytitle">auditd</span>(8)</span></a>
diff --git a/man/systemd-update-utmp-runlevel.service.xml b/man/systemd-update-utmp.service.xml
index 867b958d30..846fc959d0 100644
--- a/man/systemd-update-utmp-runlevel.service.xml
+++ b/man/systemd-update-utmp.service.xml
@@ -19,10 +19,10 @@
You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->
-<refentry id="systemd-update-utmp-runlevel.service">
+<refentry id="systemd-update-utmp.service">
<refentryinfo>
- <title>systemd-update-utmp-runlevel.service</title>
+ <title>systemd-update-utmp.service</title>
<productname>systemd</productname>
<authorgroup>
@@ -36,21 +36,21 @@
</refentryinfo>
<refmeta>
- <refentrytitle>systemd-update-utmp-runlevel.service</refentrytitle>
+ <refentrytitle>systemd-update-utmp.service</refentrytitle>
<manvolnum>8</manvolnum>
</refmeta>
<refnamediv>
+ <refname>systemd-update-utmp.service</refname>
<refname>systemd-update-utmp-runlevel.service</refname>
- <refname>systemd-update-utmp-shutdown.service</refname>
<refname>systemd-update-utmp</refname>
- <refpurpose>Write audit and utmp updates at runlevel
+ <refpurpose>Write audit and utmp updates at bootup, runlevel
changes and shutdown</refpurpose>
</refnamediv>
<refsynopsisdiv>
+ <para><filename>systemd-update-utmp.service</filename></para>
<para><filename>systemd-update-utmp-runlevel.service</filename></para>
- <para><filename>systemd-update-utmp-shutdown.service</filename></para>
<para><filename>/usr/lib/systemd/systemd-update-utmp</filename></para>
</refsynopsisdiv>
@@ -60,8 +60,8 @@
<para><filename>systemd-update-utmp-runlevel.service</filename>
is a service that writes SysV runlevel changes to utmp
and wtmp, as well as the audit logs, as they
- occur. <filename>systemd-update-utmp-shutdown.service</filename>
- does the same for shut-down requests.</para>
+ occur. <filename>systemd-update-utmp.service</filename>
+ does the same for system reboots and shut-down requests.</para>
</refsect1>
<refsect1>
diff --git a/man/systemd-user-sessions.8 b/man/systemd-user-sessions.8
new file mode 100644
index 0000000000..56033954dc
--- /dev/null
+++ b/man/systemd-user-sessions.8
@@ -0,0 +1 @@
+.so man8/systemd-user-sessions.service.8
diff --git a/man/systemd-user-sessions.html b/man/systemd-user-sessions.html
index b2ddef4f19..5e2051134e 100644
--- a/man/systemd-user-sessions.html
+++ b/man/systemd-user-sessions.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-user-sessions.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-user-sessions.service, systemd-user-sessions — Permit user logins after boot, prohibit user logins at shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-user-sessions.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-user-sessions</code></p></div><div class="refsect1"><a name="idm259785723728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-user-sessions.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-user-sessions.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-user-sessions.service, systemd-user-sessions — Permit user logins after boot, prohibit user logins at shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-user-sessions.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-user-sessions</code></p></div><div class="refsect1"><a name="idm274705298432"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-user-sessions.service</code>
is a service that controls user logins. After basic
system initialization is complete it removes
<code class="filename">/run/nologin</code>, thus permitting
@@ -27,7 +27,7 @@
<code class="filename">/run/nologin</code>, thus prohibiting
further logins. At the same time it also kills all
user processes, so that system shutdown may proceed
- without any remaining user processes around.</p></div><div class="refsect1"><a name="idm259789601904"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ without any remaining user processes around.</p></div><div class="refsect1"><a name="idm274705294800"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
<a href="pam_nologin.html"><span class="citerefentry"><span class="refentrytitle">pam_nologin</span>(8)</span></a>
diff --git a/man/systemd-user-sessions.service.8 b/man/systemd-user-sessions.service.8
new file mode 100644
index 0000000000..ff2f61c9dd
--- /dev/null
+++ b/man/systemd-user-sessions.service.8
@@ -0,0 +1,39 @@
+'\" t
+.TH "SYSTEMD\-USER\-SESSIONS\&.SERVICE" "8" "" "systemd 208" "systemd-user-sessions.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-user-sessions.service, systemd-user-sessions \- Permit user logins after boot, prohibit user logins at shutdown
+.SH "SYNOPSIS"
+.PP
+systemd\-user\-sessions\&.service
+.PP
+/usr/lib/systemd/systemd\-user\-sessions
+.SH "DESCRIPTION"
+.PP
+systemd\-user\-sessions\&.service
+is a service that controls user logins\&. After basic system initialization is complete it removes
+/run/nologin, thus permitting logins\&. Before system shutdown it creates
+/run/nologin, thus prohibiting further logins\&. At the same time it also kills all user processes, so that system shutdown may proceed without any remaining user processes around\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-logind.service\fR(8),
+\fBpam_nologin\fR(8)
diff --git a/man/systemd-user-sessions.service.html b/man/systemd-user-sessions.service.html
index b2ddef4f19..5e2051134e 100644
--- a/man/systemd-user-sessions.service.html
+++ b/man/systemd-user-sessions.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-user-sessions.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-user-sessions.service, systemd-user-sessions — Permit user logins after boot, prohibit user logins at shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-user-sessions.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-user-sessions</code></p></div><div class="refsect1"><a name="idm259785723728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-user-sessions.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-user-sessions.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-user-sessions.service, systemd-user-sessions — Permit user logins after boot, prohibit user logins at shutdown</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-user-sessions.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-user-sessions</code></p></div><div class="refsect1"><a name="idm274705298432"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-user-sessions.service</code>
is a service that controls user logins. After basic
system initialization is complete it removes
<code class="filename">/run/nologin</code>, thus permitting
@@ -27,7 +27,7 @@
<code class="filename">/run/nologin</code>, thus prohibiting
further logins. At the same time it also kills all
user processes, so that system shutdown may proceed
- without any remaining user processes around.</p></div><div class="refsect1"><a name="idm259789601904"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ without any remaining user processes around.</p></div><div class="refsect1"><a name="idm274705294800"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a>,
<a href="pam_nologin.html"><span class="citerefentry"><span class="refentrytitle">pam_nologin</span>(8)</span></a>
diff --git a/man/systemd-user.conf.5 b/man/systemd-user.conf.5
new file mode 100644
index 0000000000..402125618e
--- /dev/null
+++ b/man/systemd-user.conf.5
@@ -0,0 +1 @@
+.so man5/systemd-system.conf.5
diff --git a/man/systemd-user.conf.html b/man/systemd-user.conf.html
index 5d56617a70..3c7695f765 100644
--- a/man/systemd-user.conf.html
+++ b/man/systemd-user.conf.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-system.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-system.conf, systemd-user.conf — System and session service manager configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/system.conf</code></p><p><code class="filename">/etc/systemd/user.conf</code></p></div><div class="refsect1"><a name="idm259772067680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>When run as system instance systemd reads the
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-system.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-system.conf, systemd-user.conf — System and session service manager configuration file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/system.conf</code></p><p><code class="filename">/etc/systemd/user.conf</code></p></div><div class="refsect1"><a name="idm274686659824"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>When run as system instance systemd reads the
configuration file <code class="filename">system.conf</code>,
otherwise <code class="filename">user.conf</code>. These
configuration files contain a few settings controlling
- basic manager operations.</p></div><div class="refsect1"><a name="idm259772065040"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
- <code class="literal">[Manager]</code> section:</p><div class="variablelist"><dl class="variablelist"><dt id="LogLevel="><span class="term"><code class="varname">LogLevel=</code>, </span><span class="term"><code class="varname">LogTarget=</code>, </span><span class="term"><code class="varname">LogColor=</code>, </span><span class="term"><code class="varname">LogLocation=</code>, </span><span class="term"><code class="varname">DumpCore=yes</code>, </span><span class="term"><code class="varname">CrashShell=no</code>, </span><span class="term"><code class="varname">ShowStatus=yes</code>, </span><span class="term"><code class="varname">CrashChVT=1</code>, </span><span class="term"><code class="varname">DefaultStandardOutput=journal</code>, </span><span class="term"><code class="varname">DefaultStandardError=inherit</code></span><a class="headerlink" title="Permalink to this term" href="#LogLevel=">¶</a></dt><dd><p>Configures various
+ basic manager operations.</p></div><div class="refsect1"><a name="idm274687554272"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>All options are configured in the
+ "<code class="literal">[Manager]</code>" section:</p><div class="variablelist"><dl class="variablelist"><dt id="LogLevel="><span class="term"><code class="varname">LogLevel=</code>, </span><span class="term"><code class="varname">LogTarget=</code>, </span><span class="term"><code class="varname">LogColor=</code>, </span><span class="term"><code class="varname">LogLocation=</code>, </span><span class="term"><code class="varname">DumpCore=yes</code>, </span><span class="term"><code class="varname">CrashShell=no</code>, </span><span class="term"><code class="varname">ShowStatus=yes</code>, </span><span class="term"><code class="varname">CrashChVT=1</code>, </span><span class="term"><code class="varname">DefaultStandardOutput=journal</code>, </span><span class="term"><code class="varname">DefaultStandardError=inherit</code></span><a class="headerlink" title="Permalink to this term" href="#LogLevel=">¶</a></dt><dd><p>Configures various
parameters of basic manager
operation. These options may be
overridden by the respective command
@@ -34,31 +34,15 @@
arguments.</p></dd><dt id="CPUAffinity="><span class="term"><code class="varname">CPUAffinity=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAffinity=">¶</a></dt><dd><p>Configures the initial
CPU affinity for the init
process. Takes a space-separated list
- of CPU indexes.</p></dd><dt id="DefaultControllers=cpu"><span class="term"><code class="varname">DefaultControllers=cpu</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultControllers=cpu">¶</a></dt><dd><p>Configures in which
- control group hierarchies to create
- per-service cgroups automatically, in
- addition to the
- <code class="literal">name=systemd</code> named
- hierarchy. Defaults to
- <code class="literal">cpu</code>. Takes a space
- separated list of controller
- names. Pass the empty string to ensure
- that systemd does not touch any
- hierarchies but its own.</p><p>Note that the default value of
- 'cpu' will make realtime scheduling
- unavailable to system services. See
- <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/MyServiceCantGetRealtime" target="_top">My
- Service Can't Get Realtime!</a>
- for more
- information.</p></dd><dt id="JoinControllers=cpu,cpuacct,cpuset net_cls,netprio"><span class="term"><code class="varname">JoinControllers=cpu,cpuacct,cpuset net_cls,netprio</code></span><a class="headerlink" title="Permalink to this term" href="#JoinControllers=cpu,cpuacct,cpuset%20net_cls,netprio">¶</a></dt><dd><p>Configures controllers
+ of CPU indexes.</p></dd><dt id="JoinControllers=cpu,cpuacct net_cls,netprio"><span class="term"><code class="varname">JoinControllers=cpu,cpuacct net_cls,netprio</code></span><a class="headerlink" title="Permalink to this term" href="#JoinControllers=cpu,cpuacct%20net_cls,netprio">¶</a></dt><dd><p>Configures controllers
that shall be mounted in a single
- hierarchy. By default systemd will
+ hierarchy. By default, systemd will
mount all controllers which are
enabled in the kernel in individual
hierarchies, with the exception of
those listed in this setting. Takes a
- space separated list of comma
- separated controller names, in order
+ space-separated list of comma-separated
+ controller names, in order
to allow multiple joined
hierarchies. Defaults to
'cpu,cpuacct'. Pass an empty string to
@@ -67,11 +51,11 @@
hierarchies.</p><p>Note that this option is only
applied once, at very early boot. If
you use an initial RAM disk (initrd)
- that uses systemd it might hence be
+ that uses systemd, it might hence be
necessary to rebuild the initrd if
this option is changed, and make sure
the new configuration file is included
- in it. Otherwise the initrd might
+ in it. Otherwise, the initrd might
mount the controller hierarchies in a
different configuration than intended,
and the main system cannot remount
@@ -79,13 +63,13 @@
watchdog at runtime and at
reboot. Takes a timeout value in
seconds (or in other time units if
- suffixed with <code class="literal">ms</code>,
- <code class="literal">min</code>,
- <code class="literal">h</code>,
- <code class="literal">d</code>,
- <code class="literal">w</code>). If
+ suffixed with "<code class="literal">ms</code>",
+ "<code class="literal">min</code>",
+ "<code class="literal">h</code>",
+ "<code class="literal">d</code>",
+ "<code class="literal">w</code>"). If
<code class="varname">RuntimeWatchdogSec=</code>
- is set to a non-zero value the
+ is set to a non-zero value, the
watchdog hardware
(<code class="filename">/dev/watchdog</code>)
will be programmed to automatically
@@ -118,14 +102,13 @@
capability bounding set for PID 1 and
its children. See
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>
- for details. Takes a whitespace
- separated list of capability names as
- read by
+ for details. Takes a whitespace-separated
+ list of capability names as read by
<a href="cap_from_name.html"><span class="citerefentry"><span class="refentrytitle">cap_from_name</span>(3)</span></a>.
Capabilities listed will be included
in the bounding set, all others are
removed. If the list of capabilities
- is prefixed with ~ all but the listed
+ is prefixed with ~, all but the listed
capabilities will be included, the
effect of the assignment
inverted. Note that this option also
@@ -157,7 +140,21 @@
integer value in nano-seconds if no
unit is specified. The usual time
units are understood
- too.</p></dd><dt id="DefaultLimitCPU="><span class="term"><code class="varname">DefaultLimitCPU=</code>, </span><span class="term"><code class="varname">DefaultLimitFSIZE=</code>, </span><span class="term"><code class="varname">DefaultLimitDATA=</code>, </span><span class="term"><code class="varname">DefaultLimitSTACK=</code>, </span><span class="term"><code class="varname">DefaultLimitCORE=</code>, </span><span class="term"><code class="varname">DefaultLimitRSS=</code>, </span><span class="term"><code class="varname">DefaultLimitNOFILE=</code>, </span><span class="term"><code class="varname">DefaultLimitAS=</code>, </span><span class="term"><code class="varname">DefaultLimitNPROC=</code>, </span><span class="term"><code class="varname">DefaultLimitMEMLOCK=</code>, </span><span class="term"><code class="varname">DefaultLimitLOCKS=</code>, </span><span class="term"><code class="varname">DefaultLimitSIGPENDING=</code>, </span><span class="term"><code class="varname">DefaultLimitMSGQUEUE=</code>, </span><span class="term"><code class="varname">DefaultLimitNICE=</code>, </span><span class="term"><code class="varname">DefaultLimitRTPRIO=</code>, </span><span class="term"><code class="varname">DefaultLimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCPU=">¶</a></dt><dd><p>These settings control
+ too.</p></dd><dt id="DefaultEnvironment="><span class="term"><code class="varname">DefaultEnvironment=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultEnvironment=">¶</a></dt><dd><p>Sets manager
+ environment variables passed to all
+ executed processes. Takes a
+ space-separated list of variable
+ assignments. See
+ <a href="environ.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
+ for details about environment
+ variables.</p><p>Example:
+
+ </p><pre class="programlisting">DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</pre><p>
+
+ Sets three variables
+ "<code class="literal">VAR1</code>",
+ "<code class="literal">VAR2</code>",
+ "<code class="literal">VAR3</code>".</p></dd><dt id="DefaultLimitCPU="><span class="term"><code class="varname">DefaultLimitCPU=</code>, </span><span class="term"><code class="varname">DefaultLimitFSIZE=</code>, </span><span class="term"><code class="varname">DefaultLimitDATA=</code>, </span><span class="term"><code class="varname">DefaultLimitSTACK=</code>, </span><span class="term"><code class="varname">DefaultLimitCORE=</code>, </span><span class="term"><code class="varname">DefaultLimitRSS=</code>, </span><span class="term"><code class="varname">DefaultLimitNOFILE=</code>, </span><span class="term"><code class="varname">DefaultLimitAS=</code>, </span><span class="term"><code class="varname">DefaultLimitNPROC=</code>, </span><span class="term"><code class="varname">DefaultLimitMEMLOCK=</code>, </span><span class="term"><code class="varname">DefaultLimitLOCKS=</code>, </span><span class="term"><code class="varname">DefaultLimitSIGPENDING=</code>, </span><span class="term"><code class="varname">DefaultLimitMSGQUEUE=</code>, </span><span class="term"><code class="varname">DefaultLimitNICE=</code>, </span><span class="term"><code class="varname">DefaultLimitRTPRIO=</code>, </span><span class="term"><code class="varname">DefaultLimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCPU=">¶</a></dt><dd><p>These settings control
various default resource limits for
units. See
<a href="setrlimit.html"><span class="citerefentry"><span class="refentrytitle">setrlimit</span>(2)</span></a>
@@ -170,7 +167,8 @@
directives. Note that these resource
limits are only defaults for units,
they are not applied to PID 1
- itself.</p></dd></dl></div></div><div class="refsect1"><a name="idm259770984576"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ itself.</p></dd></dl></div></div><div class="refsect1"><a name="idm274691158736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
- <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>,
+ <a href="environ.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd-vconsole-setup.8 b/man/systemd-vconsole-setup.8
new file mode 100644
index 0000000000..ddb31a1d3e
--- /dev/null
+++ b/man/systemd-vconsole-setup.8
@@ -0,0 +1 @@
+.so man8/systemd-vconsole-setup.service.8
diff --git a/man/systemd-vconsole-setup.html b/man/systemd-vconsole-setup.html
index b6e1b19108..d856c6028f 100644
--- a/man/systemd-vconsole-setup.html
+++ b/man/systemd-vconsole-setup.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-vconsole-setup.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-vconsole-setup.service, systemd-vconsole-setup — Configure the virtual console at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-vconsole-setup.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-vconsole-setup</code></p></div><div class="refsect1"><a name="idm259795406064"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-vconsole-setup.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-vconsole-setup.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-vconsole-setup.service, systemd-vconsole-setup — Configure the virtual console at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-vconsole-setup.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-vconsole-setup</code></p></div><div class="refsect1"><a name="idm274698745472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-vconsole-setup.service</code>
is an early-boot service that configures the virtual
console font and console keymap. Internally it calls
<a href="loadkeys.html"><span class="citerefentry"><span class="refentrytitle">loadkeys</span>(1)</span></a>
@@ -27,7 +27,7 @@
<a href="setfont.html"><span class="citerefentry"><span class="refentrytitle">setfont</span>(8)</span></a>.</p><p>See
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>
for information about the configuration files understood by this
- service.</p></div><div class="refsect1"><a name="idm259795473376"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
+ service.</p></div><div class="refsect1"><a name="idm274698740448"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
<code class="filename">vconsole.conf</code> may be overridden on
the kernel command line:</p><div class="variablelist"><dl class="variablelist"><dt id="vconsole.keymap="><span class="term"><code class="varname">vconsole.keymap=</code>, </span><span class="term"><code class="varname">vconsole.keymap.toggle=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap=">¶</a></dt><dd><p>Overrides the key
mapping table for the keyboard and the
@@ -35,7 +35,7 @@
font, the console map, and the unicode
font map.</p></dd></dl></div><p>See
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>
- for information about these settings.</p></div><div class="refsect1"><a name="idm259791629424"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ for information about these settings.</p></div><div class="refsect1"><a name="idm274698731776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>,
<a href="loadkeys.html"><span class="citerefentry"><span class="refentrytitle">loadkeys</span>(1)</span></a>,
diff --git a/man/systemd-vconsole-setup.service.8 b/man/systemd-vconsole-setup.service.8
new file mode 100644
index 0000000000..254133a44d
--- /dev/null
+++ b/man/systemd-vconsole-setup.service.8
@@ -0,0 +1,65 @@
+'\" t
+.TH "SYSTEMD\-VCONSOLE\-SETUP\&.SERVICE" "8" "" "systemd 208" "systemd-vconsole-setup.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd-vconsole-setup.service, systemd-vconsole-setup \- Configure the virtual console at boot
+.SH "SYNOPSIS"
+.PP
+systemd\-vconsole\-setup\&.service
+.PP
+/usr/lib/systemd/systemd\-vconsole\-setup
+.SH "DESCRIPTION"
+.PP
+systemd\-vconsole\-setup\&.service
+is an early\-boot service that configures the virtual console font and console keymap\&. Internally it calls
+\fBloadkeys\fR(1)
+and
+\fBsetfont\fR(8)\&.
+.PP
+See
+\fBvconsole.conf\fR(5)
+for information about the configuration files understood by this service\&.
+.SH "KERNEL COMMAND LINE"
+.PP
+A few configuration parameters from
+vconsole\&.conf
+may be overridden on the kernel command line:
+.PP
+\fIvconsole\&.keymap=\fR, \fIvconsole\&.keymap\&.toggle=\fR
+.RS 4
+Overrides the key mapping table for the keyboard and the second toggle keymap\&.
+.RE
+.PP
+\fIvconsole\&.font=\fR, \fIvconsole\&.font\&.map=\fR, \fIvconsole\&.font\&.unimap=\fR
+.RS 4
+Configures the console font, the console map, and the unicode font map\&.
+.RE
+.PP
+See
+\fBvconsole.conf\fR(5)
+for information about these settings\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBvconsole.conf\fR(5),
+\fBloadkeys\fR(1),
+\fBsetfont\fR(8),
+\fBsystemd-localed.service\fR(8)
diff --git a/man/systemd-vconsole-setup.service.html b/man/systemd-vconsole-setup.service.html
index b6e1b19108..d856c6028f 100644
--- a/man/systemd-vconsole-setup.service.html
+++ b/man/systemd-vconsole-setup.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd-vconsole-setup.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-vconsole-setup.service, systemd-vconsole-setup — Configure the virtual console at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-vconsole-setup.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-vconsole-setup</code></p></div><div class="refsect1"><a name="idm259795406064"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-vconsole-setup.service</code>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd-vconsole-setup.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd-vconsole-setup.service, systemd-vconsole-setup — Configure the virtual console at boot</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">systemd-vconsole-setup.service</code></p><p><code class="filename">/usr/lib/systemd/systemd-vconsole-setup</code></p></div><div class="refsect1"><a name="idm274698745472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><code class="filename">systemd-vconsole-setup.service</code>
is an early-boot service that configures the virtual
console font and console keymap. Internally it calls
<a href="loadkeys.html"><span class="citerefentry"><span class="refentrytitle">loadkeys</span>(1)</span></a>
@@ -27,7 +27,7 @@
<a href="setfont.html"><span class="citerefentry"><span class="refentrytitle">setfont</span>(8)</span></a>.</p><p>See
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>
for information about the configuration files understood by this
- service.</p></div><div class="refsect1"><a name="idm259795473376"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
+ service.</p></div><div class="refsect1"><a name="idm274698740448"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>A few configuration parameters from
<code class="filename">vconsole.conf</code> may be overridden on
the kernel command line:</p><div class="variablelist"><dl class="variablelist"><dt id="vconsole.keymap="><span class="term"><code class="varname">vconsole.keymap=</code>, </span><span class="term"><code class="varname">vconsole.keymap.toggle=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap=">¶</a></dt><dd><p>Overrides the key
mapping table for the keyboard and the
@@ -35,7 +35,7 @@
font, the console map, and the unicode
font map.</p></dd></dl></div><p>See
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>
- for information about these settings.</p></div><div class="refsect1"><a name="idm259791629424"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ for information about these settings.</p></div><div class="refsect1"><a name="idm274698731776"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a>,
<a href="loadkeys.html"><span class="citerefentry"><span class="refentrytitle">loadkeys</span>(1)</span></a>,
diff --git a/man/systemd.1 b/man/systemd.1
new file mode 100644
index 0000000000..2bcd6c2108
--- /dev/null
+++ b/man/systemd.1
@@ -0,0 +1,924 @@
+'\" t
+.TH "SYSTEMD" "1" "" "systemd 208" "systemd"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd, init \- systemd system and service manager
+.SH "SYNOPSIS"
+.HP \w'\fBsystemd\ \fR\fB[OPTIONS...]\fR\ 'u
+\fBsystemd \fR\fB[OPTIONS...]\fR
+.HP \w'\fBinit\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB{COMMAND}\fR\ 'u
+\fBinit \fR\fB[OPTIONS...]\fR\fB \fR\fB{COMMAND}\fR
+.SH "DESCRIPTION"
+.PP
+systemd is a system and service manager for Linux operating systems\&. When run as first process on boot (as PID 1), it acts as init system that brings up and maintains userspace services\&.
+.PP
+For compatibility with SysV, if systemd is called as
+\fBinit\fR
+and a PID that is not 1, it will execute
+\fBtelinit\fR
+and pass all command line arguments unmodified\&. That means
+\fBinit\fR
+and
+\fBtelinit\fR
+are mostly equivalent when invoked from normal login sessions\&. See
+\fBtelinit\fR(8)
+for more information\&.
+.PP
+When run as system instance, systemd interprets the configuration file
+system\&.conf, otherwise
+user\&.conf\&. See
+\fBsystemd-system.conf\fR(5)
+for more information\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a systemd version identifier and exits\&.
+.RE
+.PP
+\fB\-\-test\fR
+.RS 4
+Determine startup sequence, dump it and exit\&. This is an option useful for debugging only\&.
+.RE
+.PP
+\fB\-\-dump\-configuration\-items\fR
+.RS 4
+Dump understood unit configuration items\&. This outputs a terse but complete list of configuration items understood in unit definition files\&.
+.RE
+.PP
+\fB\-\-introspect=\fR
+.RS 4
+Extract D\-Bus interface introspection data\&. This is mostly useful at install time to generate data suitable for the D\-Bus interfaces repository\&. Optionally the interface name for the introspection data may be specified\&. If omitted, the introspection data for all interfaces is dumped\&.
+.RE
+.PP
+\fB\-\-unit=\fR
+.RS 4
+Set default unit to activate on startup\&. If not specified, defaults to
+default\&.target\&.
+.RE
+.PP
+\fB\-\-system\fR, \fB\-\-user\fR
+.RS 4
+For
+\fB\-\-system\fR, tell systemd to run a system instance, even if the process ID is not 1, i\&.e\&. systemd is not run as init process\&.
+\fB\-\-user\fR
+does the opposite, running a user instance even if the process ID is 1\&. Normally it should not be necessary to pass these options, as systemd automatically detects the mode it is started in\&. These options are hence of little use except for debugging\&. Note that it is not supported booting and maintaining a full system with systemd running in
+\fB\-\-system\fR
+mode, but PID not 1\&. In practice, passing
+\fB\-\-system\fR
+explicitly is only useful in conjunction with
+\fB\-\-test\fR\&.
+.RE
+.PP
+\fB\-\-dump\-core\fR
+.RS 4
+Dump core on crash\&. This switch has no effect when run as user instance\&.
+.RE
+.PP
+\fB\-\-crash\-shell\fR
+.RS 4
+Run shell on crash\&. This switch has no effect when run as user instance\&.
+.RE
+.PP
+\fB\-\-confirm\-spawn\fR
+.RS 4
+Ask for confirmation when spawning processes\&. This switch has no effect when run as user instance\&.
+.RE
+.PP
+\fB\-\-show\-status=\fR
+.RS 4
+Show terse service status information while booting\&. This switch has no effect when run as user instance\&. Takes a boolean argument which may be omitted which is interpreted as
+\fBtrue\fR\&.
+.RE
+.PP
+\fB\-\-log\-target=\fR
+.RS 4
+Set log target\&. Argument must be one of
+\fBconsole\fR,
+\fBjournal\fR,
+\fBsyslog\fR,
+\fBkmsg\fR,
+\fBjournal\-or\-kmsg\fR,
+\fBsyslog\-or\-kmsg\fR,
+\fBnull\fR\&.
+.RE
+.PP
+\fB\-\-log\-level=\fR
+.RS 4
+Set log level\&. As argument this accepts a numerical log level or the well\-known
+\fBsyslog\fR(3)
+symbolic names (lowercase):
+\fBemerg\fR,
+\fBalert\fR,
+\fBcrit\fR,
+\fBerr\fR,
+\fBwarning\fR,
+\fBnotice\fR,
+\fBinfo\fR,
+\fBdebug\fR\&.
+.RE
+.PP
+\fB\-\-log\-color=\fR
+.RS 4
+Highlight important log messages\&. Argument is a boolean value\&. If the argument is omitted, it defaults to
+\fBtrue\fR\&.
+.RE
+.PP
+\fB\-\-log\-location=\fR
+.RS 4
+Include code location in log messages\&. This is mostly relevant for debugging purposes\&. Argument is a boolean value\&. If the argument is omitted it defaults to
+\fBtrue\fR\&.
+.RE
+.PP
+\fB\-\-default\-standard\-output=\fR, \fB\-\-default\-standard\-error=\fR
+.RS 4
+Sets the default output or error output for all services and sockets, respectively\&. That is, controls the default for
+\fBStandardOutput=\fR
+and
+\fBStandardError=\fR
+(see
+\fBsystemd.exec\fR(5)
+for details)\&. Takes one of
+\fBinherit\fR,
+\fBnull\fR,
+\fBtty\fR,
+\fBjournal\fR,
+\fBjournal+console\fR,
+\fBsyslog\fR,
+\fBsyslog+console\fR,
+\fBkmsg\fR,
+\fBkmsg+console\fR\&. If the argument is omitted
+\fB\-\-default\-standard\-output=\fR
+defaults to
+\fBjournal\fR
+and
+\fB\-\-default\-standard\-error=\fR
+to
+\fBinherit\fR\&.
+.RE
+.SH "CONCEPTS"
+.PP
+systemd provides a dependency system between various entities called "units" of 12 different types\&. Units encapsulate various objects that are relevant for system boot\-up and maintenance\&. The majority of units are configured in unit configuration files, whose syntax and basic set of options is described in
+\fBsystemd.unit\fR(5), however some are created automatically from other configuration, dynamically from system state or programmatically at runtime\&. Units may be "active" (meaning started, bound, plugged in, \&.\&.\&., depending on the unit type, see below), or "inactive" (meaning stopped, unbound, unplugged, \&.\&.\&.), as well as in the process of being activated or deactivated, i\&.e\&. between the two states (these states are called "activating", "deactivating")\&. A special "failed" state is available as well, which is very similar to "inactive" and is entered when the service failed in some way (process returned error code on exit, or crashed, or an operation timed out)\&. If this state is entered, the cause will be logged, for later reference\&. Note that the various unit types may have a number of additional substates, which are mapped to the five generalized unit states described here\&.
+.PP
+The following unit types are available:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 1." 4.2
+.\}
+Service units, which start and control daemons and the processes they consist of\&. For details see
+\fBsystemd.service\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 2." 4.2
+.\}
+Socket units, which encapsulate local IPC or network sockets in the system, useful for socket\-based activation\&. For details about socket units see
+\fBsystemd.socket\fR(5), for details on socket\-based activation and other forms of activation, see
+\fBdaemon\fR(7)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 3.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 3." 4.2
+.\}
+Target units are useful to group units, or provide well\-known synchronization points during boot\-up, see
+\fBsystemd.target\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 4.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 4." 4.2
+.\}
+Device units expose kernel devices in systemd and may be used to implement device\-based activation\&. For details see
+\fBsystemd.device\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 5.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 5." 4.2
+.\}
+Mount units control mount points in the file system, for details see
+\fBsystemd.mount\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 6.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 6." 4.2
+.\}
+Automount units provide automount capabilities, for on\-demand mounting of file systems as well as parallelized boot\-up\&. See
+\fBsystemd.automount\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 7.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 7." 4.2
+.\}
+Snapshot units can be used to temporarily save the state of the set of systemd units, which later may be restored by activating the saved snapshot unit\&. For more information see
+\fBsystemd.snapshot\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 8.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 8." 4.2
+.\}
+Timer units are useful for triggering activation of other units based on timers\&. You may find details in
+\fBsystemd.timer\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 9.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP " 9." 4.2
+.\}
+Swap units are very similar to mount units and encapsulate memory swap partitions or files of the operating system\&. They are described in
+\fBsystemd.swap\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'10.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "10." 4.2
+.\}
+Path units may be used to activate other services when file system objects change or are modified\&. See
+\fBsystemd.path\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'11.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "11." 4.2
+.\}
+Slice units may be used to group units which manage system processes (such as service and scope units) in a hierarchical tree for resource management purposes\&. See
+\fBsystemd.slice\fR(5)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'12.\h'+01'\c
+.\}
+.el \{\
+.sp -1
+.IP "12." 4.2
+.\}
+Scope units are similar to service units, but manage foreign processes instead of starting them as well\&. See
+\fBsystemd.scope\fR(5)\&.
+.RE
+.PP
+Units are named as their configuration files\&. Some units have special semantics\&. A detailed list is available in
+\fBsystemd.special\fR(7)\&.
+.PP
+systemd knows various kinds of dependencies, including positive and negative requirement dependencies (i\&.e\&.
+\fIRequires=\fR
+and
+\fIConflicts=\fR) as well as ordering dependencies (\fIAfter=\fR
+and
+\fIBefore=\fR)\&. NB: ordering and requirement dependencies are orthogonal\&. If only a requirement dependency exists between two units (e\&.g\&.
+foo\&.service
+requires
+bar\&.service), but no ordering dependency (e\&.g\&.
+foo\&.service
+after
+bar\&.service) and both are requested to start, they will be started in parallel\&. It is a common pattern that both requirement and ordering dependencies are placed between two units\&. Also note that the majority of dependencies are implicitly created and maintained by systemd\&. In most cases it should be unnecessary to declare additional dependencies manually, however it is possible to do this\&.
+.PP
+Application programs and units (via dependencies) may request state changes of units\&. In systemd, these requests are encapsulated as \*(Aqjobs\*(Aq and maintained in a job queue\&. Jobs may succeed or can fail, their execution is ordered based on the ordering dependencies of the units they have been scheduled for\&.
+.PP
+On boot systemd activates the target unit
+default\&.target
+whose job is to activate on\-boot services and other on\-boot units by pulling them in via dependencies\&. Usually the unit name is just an alias (symlink) for either
+graphical\&.target
+(for fully\-featured boots into the UI) or
+multi\-user\&.target
+(for limited console\-only boots for use in embedded or server environments, or similar; a subset of graphical\&.target)\&. However, it is at the discretion of the administrator to configure it as an alias to any other target unit\&. See
+\fBsystemd.special\fR(7)
+for details about these target units\&.
+.PP
+Processes systemd spawns are placed in individual Linux control groups named after the unit which they belong to in the private systemd hierarchy\&. (see
+\m[blue]\fBcgroups\&.txt\fR\m[]\&\s-2\u[1]\d\s+2
+for more information about control groups, or short "cgroups")\&. systemd uses this to effectively keep track of processes\&. Control group information is maintained in the kernel, and is accessible via the file system hierarchy (beneath
+/sys/fs/cgroup/systemd/), or in tools such as
+\fBps\fR(1)
+(\fBps xawf \-eo pid,user,cgroup,args\fR
+is particularly useful to list all processes and the systemd units they belong to\&.)\&.
+.PP
+systemd is compatible with the SysV init system to a large degree: SysV init scripts are supported and simply read as an alternative (though limited) configuration file format\&. The SysV
+/dev/initctl
+interface is provided, and compatibility implementations of the various SysV client tools are available\&. In addition to that, various established Unix functionality such as
+/etc/fstab
+or the
+utmp
+database are supported\&.
+.PP
+systemd has a minimal transaction system: if a unit is requested to start up or shut down it will add it and all its dependencies to a temporary transaction\&. Then, it will verify if the transaction is consistent (i\&.e\&. whether the ordering of all units is cycle\-free)\&. If it is not, systemd will try to fix it up, and removes non\-essential jobs from the transaction that might remove the loop\&. Also, systemd tries to suppress non\-essential jobs in the transaction that would stop a running service\&. Finally it is checked whether the jobs of the transaction contradict jobs that have already been queued, and optionally the transaction is aborted then\&. If all worked out and the transaction is consistent and minimized in its impact it is merged with all already outstanding jobs and added to the run queue\&. Effectively this means that before executing a requested operation, systemd will verify that it makes sense, fixing it if possible, and only failing if it really cannot work\&.
+.PP
+Systemd contains native implementations of various tasks that need to be executed as part of the boot process\&. For example, it sets the hostname or configures the loopback network device\&. It also sets up and mounts various API file systems, such as
+/sys
+or
+/proc\&.
+.PP
+For more information about the concepts and ideas behind systemd please refer to the
+\m[blue]\fBOriginal Design Document\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.PP
+Note that some but not all interfaces provided by systemd are covered by the
+\m[blue]\fBInterface Stability Promise\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.PP
+Units may be generated dynamically at boot and system manager reload time, for example based on other configuration files or parameters passed on the kernel command line\&. For details see the
+\m[blue]\fBGenerators Specification\fR\m[]\&\s-2\u[4]\d\s+2\&.
+.PP
+Systems which invoke systemd in a container or initrd environment should implement the
+\m[blue]\fBContainer Interface\fR\m[]\&\s-2\u[5]\d\s+2
+or
+\m[blue]\fBinitrd Interface\fR\m[]\&\s-2\u[6]\d\s+2
+specifications, respectively\&.
+.SH "DIRECTORIES"
+.PP
+System unit directories
+.RS 4
+The systemd system manager reads unit configuration from various directories\&. Packages that want to install unit files shall place them in the directory returned by
+\fBpkg\-config systemd \-\-variable=systemdsystemunitdir\fR\&. Other directories checked are
+/usr/local/lib/systemd/system
+and
+/usr/lib/systemd/system\&. User configuration always takes precedence\&.
+\fBpkg\-config systemd \-\-variable=systemdsystemconfdir\fR
+returns the path of the system configuration directory\&. Packages should alter the content of these directories only with the
+\fBenable\fR
+and
+\fBdisable\fR
+commands of the
+\fBsystemctl\fR(1)
+tool\&. Full list of directories is provided in
+\fBsystemd.unit\fR(5)\&.
+.RE
+.PP
+User unit directories
+.RS 4
+Similar rules apply for the user unit directories\&. However, here the
+\m[blue]\fBXDG Base Directory specification\fR\m[]\&\s-2\u[7]\d\s+2
+is followed to find units\&. Applications should place their unit files in the directory returned by
+\fBpkg\-config systemd \-\-variable=systemduserunitdir\fR\&. Global configuration is done in the directory reported by
+\fBpkg\-config systemd \-\-variable=systemduserconfdir\fR\&. The
+\fBenable\fR
+and
+\fBdisable\fR
+commands of the
+\fBsystemctl\fR(1)
+tool can handle both global (i\&.e\&. for all users) and private (for one user) enabling/disabling of units\&. Full list of directories is provided in
+\fBsystemd.unit\fR(5)\&.
+.RE
+.PP
+SysV init scripts directory
+.RS 4
+The location of the SysV init script directory varies between distributions\&. If systemd cannot find a native unit file for a requested service, it will look for a SysV init script of the same name (with the
+\&.service
+suffix removed)\&.
+.RE
+.PP
+SysV runlevel link farm directory
+.RS 4
+The location of the SysV runlevel link farm directory varies between distributions\&. systemd will take the link farm into account when figuring out whether a service shall be enabled\&. Note that a service unit with a native unit configuration file cannot be started by activating it in the SysV runlevel link farm\&.
+.RE
+.SH "SIGNALS"
+.PP
+\fBSIGTERM\fR
+.RS 4
+Upon receiving this signal the systemd system manager serializes its state, reexecutes itself and deserializes the saved state again\&. This is mostly equivalent to
+\fBsystemctl daemon\-reexec\fR\&.
+.sp
+systemd user managers will start the
+exit\&.target
+unit when this signal is received\&. This is mostly equivalent to
+\fBsystemctl \-\-user start exit\&.target\fR\&.
+.RE
+.PP
+\fBSIGINT\fR
+.RS 4
+Upon receiving this signal the systemd system manager will start the
+ctrl\-alt\-del\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start ctl\-alt\-del\&.target\fR\&.
+.sp
+systemd user managers treat this signal the same way as
+\fBSIGTERM\fR\&.
+.RE
+.PP
+\fBSIGWINCH\fR
+.RS 4
+When this signal is received the systemd system manager will start the
+kbrequest\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start kbrequest\&.target\fR\&.
+.sp
+This signal is ignored by systemd user managers\&.
+.RE
+.PP
+\fBSIGPWR\fR
+.RS 4
+When this signal is received the systemd manager will start the
+sigpwr\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start sigpwr\&.target\fR\&.
+.RE
+.PP
+\fBSIGUSR1\fR
+.RS 4
+When this signal is received the systemd manager will try to reconnect to the D\-Bus bus\&.
+.RE
+.PP
+\fBSIGUSR2\fR
+.RS 4
+When this signal is received the systemd manager will log its complete state in human readable form\&. The data logged is the same as printed by
+\fBsystemctl dump\fR\&.
+.RE
+.PP
+\fBSIGHUP\fR
+.RS 4
+Reloads the complete daemon configuration\&. This is mostly equivalent to
+\fBsystemctl daemon\-reload\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+0\fR
+.RS 4
+Enters default mode, starts the
+default\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start default\&.target\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+1\fR
+.RS 4
+Enters rescue mode, starts the
+rescue\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl isolate rescue\&.target\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+2\fR
+.RS 4
+Enters emergency mode, starts the
+emergency\&.service
+unit\&. This is mostly equivalent to
+\fBsystemctl isolate emergency\&.service\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+3\fR
+.RS 4
+Halts the machine, starts the
+halt\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start halt\&.target\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+4\fR
+.RS 4
+Powers off the machine, starts the
+poweroff\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start poweroff\&.target\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+5\fR
+.RS 4
+Reboots the machine, starts the
+reboot\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start reboot\&.target\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+6\fR
+.RS 4
+Reboots the machine via kexec, starts the
+kexec\&.target
+unit\&. This is mostly equivalent to
+\fBsystemctl start kexec\&.target\fR\&.
+.RE
+.PP
+\fBSIGRTMIN+13\fR
+.RS 4
+Immediately halts the machine\&.
+.RE
+.PP
+\fBSIGRTMIN+14\fR
+.RS 4
+Immediately powers off the machine\&.
+.RE
+.PP
+\fBSIGRTMIN+15\fR
+.RS 4
+Immediately reboots the machine\&.
+.RE
+.PP
+\fBSIGRTMIN+16\fR
+.RS 4
+Immediately reboots the machine with kexec\&.
+.RE
+.PP
+\fBSIGRTMIN+20\fR
+.RS 4
+Enables display of status messages on the console, as controlled via
+\fIsystemd\&.show_status=1\fR
+on the kernel command line\&.
+.RE
+.PP
+\fBSIGRTMIN+21\fR
+.RS 4
+Disables display of status messages on the console, as controlled via
+\fIsystemd\&.show_status=0\fR
+on the kernel command line\&.
+.RE
+.PP
+\fBSIGRTMIN+22\fR, \fBSIGRTMIN+23\fR
+.RS 4
+Sets the log level to
+"debug"
+(or
+"info"
+on
+\fBSIGRTMIN+23\fR), as controlled via
+\fIsystemd\&.log_level=debug\fR
+(or
+\fIsystemd\&.log_level=info\fR
+on
+\fBSIGRTMIN+23\fR) on the kernel command line\&.
+.RE
+.PP
+\fBSIGRTMIN+24\fR
+.RS 4
+Immediately exits the manager (only available for \-\-user instances)\&.
+.RE
+.PP
+\fBSIGRTMIN+26\fR, \fBSIGRTMIN+27\fR, \fBSIGRTMIN+28\fR, \fBSIGRTMIN+29\fR
+.RS 4
+Sets the log level to
+"journal\-or\-kmsg"
+(or
+"console"
+on
+\fBSIGRTMIN+27\fR,
+"kmsg"
+on
+\fBSIGRTMIN+28\fR, or
+"syslog\-or\-kmsg"
+on
+\fBSIGRTMIN+29\fR), as controlled via
+\fIsystemd\&.log_target=journal\-or\-kmsg\fR
+(or
+\fIsystemd\&.log_target=console\fR
+on
+\fBSIGRTMIN+27\fR,
+\fIsystemd\&.log_target=kmsg\fR
+on
+\fBSIGRTMIN+28\fR, or
+\fIsystemd\&.log_target=syslog\-or\-kmsg\fR
+on
+\fBSIGRTMIN+29\fR) on the kernel command line\&.
+.RE
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_LOG_LEVEL\fR
+.RS 4
+systemd reads the log level from this environment variable\&. This can be overridden with
+\fB\-\-log\-level=\fR\&.
+.RE
+.PP
+\fI$SYSTEMD_LOG_TARGET\fR
+.RS 4
+systemd reads the log target from this environment variable\&. This can be overridden with
+\fB\-\-log\-target=\fR\&.
+.RE
+.PP
+\fI$SYSTEMD_LOG_COLOR\fR
+.RS 4
+Controls whether systemd highlights important log messages\&. This can be overridden with
+\fB\-\-log\-color=\fR\&.
+.RE
+.PP
+\fI$SYSTEMD_LOG_LOCATION\fR
+.RS 4
+Controls whether systemd prints the code location along with log messages\&. This can be overridden with
+\fB\-\-log\-location=\fR\&.
+.RE
+.PP
+\fI$XDG_CONFIG_HOME\fR, \fI$XDG_CONFIG_DIRS\fR, \fI$XDG_DATA_HOME\fR, \fI$XDG_DATA_DIRS\fR
+.RS 4
+The systemd user manager uses these variables in accordance to the
+\m[blue]\fBXDG Base Directory specification\fR\m[]\&\s-2\u[7]\d\s+2
+to find its configuration\&.
+.RE
+.PP
+\fI$SYSTEMD_UNIT_PATH\fR
+.RS 4
+Controls where systemd looks for unit files\&.
+.RE
+.PP
+\fI$SYSTEMD_SYSVINIT_PATH\fR
+.RS 4
+Controls where systemd looks for SysV init scripts\&.
+.RE
+.PP
+\fI$SYSTEMD_SYSVRCND_PATH\fR
+.RS 4
+Controls where systemd looks for SysV init script runlevel link farms\&.
+.RE
+.PP
+\fI$LISTEN_PID\fR, \fI$LISTEN_FDS\fR
+.RS 4
+Set by systemd for supervised processes during socket\-based activation\&. See
+\fBsd_listen_fds\fR(3)
+for more information\&.
+.RE
+.PP
+\fI$NOTIFY_SOCKET\fR
+.RS 4
+Set by systemd for supervised processes for status and start\-up completion notification\&. See
+\fBsd_notify\fR(3)
+for more information\&.
+.RE
+.SH "KERNEL COMMAND LINE"
+.PP
+When run as system instance systemd parses a number of kernel command line arguments\&\s-2\u[8]\d\s+2:
+.PP
+\fIsystemd\&.unit=\fR, \fIrd\&.systemd\&.unit=\fR
+.RS 4
+Overrides the unit to activate on boot\&. Defaults to
+default\&.target\&. This may be used to temporarily boot into a different boot unit, for example
+rescue\&.target
+or
+emergency\&.service\&. See
+\fBsystemd.special\fR(7)
+for details about these units\&. The option prefixed with
+"rd\&."
+is honored only in the initial RAM disk (initrd), while the one that is not prefixed only in the main system\&.
+.RE
+.PP
+\fIsystemd\&.dump_core=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, systemd dumps core when it crashes\&. Otherwise, no core dump is created\&. Defaults to
+\fBtrue\fR\&.
+.RE
+.PP
+\fIsystemd\&.crash_shell=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, systemd spawns a shell when it crashes\&. Otherwise, no shell is spawned\&. Defaults to
+\fBfalse\fR, for security reasons, as the shell is not protected by any password authentication\&.
+.RE
+.PP
+\fIsystemd\&.crash_chvt=\fR
+.RS 4
+Takes an integer argument\&. If positive systemd activates the specified virtual terminal when it crashes\&. Defaults to
+\fB\-1\fR\&.
+.RE
+.PP
+\fIsystemd\&.confirm_spawn=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, asks for confirmation when spawning processes\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIsystemd\&.show_status=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, shows terse service status updates on the console during bootup\&. Defaults to
+\fBtrue\fR, unless
+\fBquiet\fR
+is passed as kernel command line option in which case it defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIsystemd\&.log_target=\fR, \fIsystemd\&.log_level=\fR, \fIsystemd\&.log_color=\fR, \fIsystemd\&.log_location=\fR
+.RS 4
+Controls log output, with the same effect as the
+\fI$SYSTEMD_LOG_TARGET\fR,
+\fI$SYSTEMD_LOG_LEVEL\fR,
+\fI$SYSTEMD_LOG_COLOR\fR,
+\fI$SYSTEMD_LOG_LOCATION\fR
+environment variables described above\&.
+.RE
+.PP
+\fIsystemd\&.default_standard_output=\fR, \fIsystemd\&.default_standard_error=\fR
+.RS 4
+Controls default standard output and error output for services, with the same effect as the
+\fB\-\-default\-standard\-output=\fR
+and
+\fB\-\-default\-standard\-error=\fR
+command line arguments described above, respectively\&.
+.RE
+.PP
+\fIsystemd\&.setenv=\fR
+.RS 4
+Takes a string argument in the form VARIABLE=VALUE\&. May be used to set default environment variables to add to forked child processes\&. May be used more than once to set multiple variables\&.
+.RE
+.PP
+\fIquiet\fR
+.RS 4
+Turn off status output at boot, much like
+\fIsystemd\&.show_status=false\fR
+would\&. Note that this option is also read by the kernel itself and disables kernel log output\&. Passing this option hence turns off the usual output from both the system manager and the kernel\&.
+.RE
+.PP
+\fIdebug\fR
+.RS 4
+Turn on debugging output\&. This is equivalent to
+\fIsystemd\&.log_level=debug\fR\&. Note that this option is also read by the kernel itself and enables kernel debug output\&. Passing this option hence turns on the debug output from both the system manager and the kernel\&.
+.RE
+.PP
+\fIemergency\fR
+.RS 4
+Boot into emergency mode\&. This is equivalent to
+\fIsystemd\&.unit=emergency\&.target\fR
+and provided for compatibility reasons and to be easier to type\&.
+.RE
+.PP
+\fIsingle\fR, \fIs\fR, \fIS\fR, \fI1\fR
+.RS 4
+Boot into rescue mode\&. This is equivalent to
+\fIsystemd\&.unit=rescue\&.target\fR
+and provided for compatibility reasons and to be easier to type\&.
+.RE
+.PP
+\fI2\fR, \fI3\fR, \fI4\fR, \fI5\fR
+.RS 4
+Boot into the specified legacy SysV runlevel\&. These are equivalent to
+\fIsystemd\&.unit=runlevel2\&.target\fR,
+\fIsystemd\&.unit=runlevel3\&.target\fR,
+\fIsystemd\&.unit=runlevel4\&.target\fR, and
+\fIsystemd\&.unit=runlevel5\&.target\fR, respectively, and provided for compatibility reasons and to be easier to type\&.
+.RE
+.PP
+\fIlocale\&.LANG=\fR, \fIlocale\&.LANGUAGE=\fR, \fIlocale\&.LC_CTYPE=\fR, \fIlocale\&.LC_NUMERIC=\fR, \fIlocale\&.LC_TIME=\fR, \fIlocale\&.LC_COLLATE=\fR, \fIlocale\&.LC_MONETARY=\fR, \fIlocale\&.LC_MESSAGES=\fR, \fIlocale\&.LC_PAPER=\fR, \fIlocale\&.LC_NAME=\fR, \fIlocale\&.LC_ADDRESS=\fR, \fIlocale\&.LC_TELEPHONE=\fR, \fIlocale\&.LC_MEASUREMENT=\fR, \fIlocale\&.LC_IDENTIFICATION=\fR
+.RS 4
+Set the system locale to use\&. This overrides the settings in
+/etc/locale\&.conf\&. For more information see
+\fBlocale.conf\fR(5)
+and
+\fBlocale\fR(7)\&.
+.RE
+.PP
+For other kernel command line parameters understood by components of the core OS, please refer to
+\fBkernel-command-line\fR(7)\&.
+.SH "SOCKETS AND FIFOS"
+.PP
+/run/systemd/notify
+.RS 4
+Daemon status notification socket\&. This is an
+\fBAF_UNIX\fR
+datagram socket and is used to implement the daemon notification logic as implemented by
+\fBsd_notify\fR(3)\&.
+.RE
+.PP
+/run/systemd/shutdownd
+.RS 4
+Used internally by the
+\fBshutdown\fR(8)
+tool to implement delayed shutdowns\&. This is an
+\fBAF_UNIX\fR
+datagram socket\&.
+.RE
+.PP
+/run/systemd/private
+.RS 4
+Used internally as communication channel between
+\fBsystemctl\fR(1)
+and the systemd process\&. This is an
+\fBAF_UNIX\fR
+stream socket\&. This interface is private to systemd and should not be used in external projects\&.
+.RE
+.PP
+/dev/initctl
+.RS 4
+Limited compatibility support for the SysV client interface, as implemented by the
+systemd\-initctl\&.service
+unit\&. This is a named pipe in the file system\&. This interface is obsolete and should not be used in new applications\&.
+.RE
+.SH "SEE ALSO"
+.PP
+The
+\m[blue]\fBsystemd Homepage\fR\m[]\&\s-2\u[9]\d\s+2,
+\fBsystemd-system.conf\fR(5),
+\fBlocale.conf\fR(5),
+\fBsystemctl\fR(1),
+\fBjournalctl\fR(1),
+\fBsystemd-notify\fR(1),
+\fBdaemon\fR(7),
+\fBsd-daemon\fR(3),
+\fBsystemd.unit\fR(5),
+\fBsystemd.special\fR(5),
+\fBpkg-config\fR(1),
+\fBkernel-command-line\fR(7),
+\fBbootup\fR(7),
+\fBsystemd.directives\fR(7)
+.SH "NOTES"
+.IP " 1." 4
+cgroups.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
+.RE
+.IP " 2." 4
+Original Design Document
+.RS 4
+\%http://0pointer.de/blog/projects/systemd.html
+.RE
+.IP " 3." 4
+Interface Stability Promise
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise
+.RE
+.IP " 4." 4
+Generators Specification
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators
+.RE
+.IP " 5." 4
+Container Interface
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface
+.RE
+.IP " 6." 4
+initrd Interface
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/InitrdInterface
+.RE
+.IP " 7." 4
+XDG Base Directory specification
+.RS 4
+\%http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+.RE
+.IP " 8." 4
+If run inside a Linux container these arguments may be passed as command line arguments to systemd itself, next to any of the command line options listed in the Options section above. If run outside of Linux containers, these arguments are parsed from
+/proc/cmdline
+instead.
+.IP " 9." 4
+systemd Homepage
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/
+.RE
diff --git a/man/systemd.automount.5 b/man/systemd.automount.5
new file mode 100644
index 0000000000..31271baceb
--- /dev/null
+++ b/man/systemd.automount.5
@@ -0,0 +1,93 @@
+'\" t
+.TH "SYSTEMD\&.AUTOMOUNT" "5" "" "systemd 208" "systemd.automount"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.automount \- Automount unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIautomount\fR\&.automount
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.automount"
+encodes information about a file system automount point controlled and supervised by systemd\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The automount specific configuration options are configured in the [Automount] section\&.
+.PP
+Automount units must be named after the automount directories they control\&. Example: the automount point
+/home/lennart
+must be configured in a unit file
+home\-lennart\&.automount\&. For details about the escaping logic used to convert a file system path to a unit name see
+\fBsystemd.unit\fR(5)\&.
+.PP
+For each automount unit file a matching mount unit file (see
+\fBsystemd.mount\fR(5)
+for details) must exist which is activated when the automount path is accessed\&. Example: if an automount unit
+home\-lennart\&.automount
+is active and the user accesses
+/home/lennart
+the mount unit
+home\-lennart\&.mount
+will be activated\&.
+.PP
+Automount units may be used to implement on\-demand mounting as well as parallelized mounting of file systems\&.
+.PP
+If an automount point is beneath another mount point in the file system hierarchy, a dependency between both units is created automatically\&.
+.SH "FSTAB"
+.PP
+Automount units may either be configured via unit files, or via
+/etc/fstab
+(see
+\fBfstab\fR(5)
+for details)\&.
+.PP
+For details how systemd parses
+/etc/fstab
+see
+\fBsystemd.mount\fR(5)\&.
+.PP
+If an automount point is configured in both
+/etc/fstab
+and a unit file, the configuration in the latter takes precedence\&.
+.SH "OPTIONS"
+.PP
+Automount files must include an [Automount] section, which carries information about the file system automount points it supervises\&. The options specific to the [Automount] section of automount units are the following:
+.PP
+\fIWhere=\fR
+.RS 4
+Takes an absolute path of a directory of the automount point\&. If the automount point does not exist at time that the automount point is installed, it is created\&. This string must be reflected in the unit filename\&. (See above\&.) This option is mandatory\&.
+.RE
+.PP
+\fIDirectoryMode=\fR
+.RS 4
+Directories of automount points (and any parent directories) are automatically created if needed\&. This option specifies the file system access mode used when creating these directories\&. Takes an access mode in octal notation\&. Defaults to 0755\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.mount\fR(5),
+\fBmount\fR(8),
+\fBautomount\fR(8),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.automount.html b/man/systemd.automount.html
index 79ae12352a..e6e85d8ed0 100644
--- a/man/systemd.automount.html
+++ b/man/systemd.automount.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.automount"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.automount — Automount unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>automount</code></em>.automount</code></p></div><div class="refsect1"><a name="idm259768749760"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.automount</code> encodes information
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.automount"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.automount — Automount unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>automount</code></em>.automount</code></p></div><div class="refsect1"><a name="idm274685387984"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.automount</code>" encodes information
about a file system automount point controlled and
supervised by systemd.</p><p>This man page lists the configuration options
specific to this unit type. See
@@ -48,25 +48,25 @@
activated.</p><p>Automount units may be used to implement
on-demand mounting as well as parallelized mounting of
file systems.</p><p>If an automount point is beneath another mount
- point in the file system hierarchy a dependency
- between both units is created automatically.</p></div><div class="refsect1"><a name="idm259768738144"></a><h2 id="fstab"><code class="filename">fstab</code><a class="headerlink" title="Permalink to this headline" href="#fstab">¶</a></h2><p>Automount units may either be configured via unit
+ point in the file system hierarchy, a dependency
+ between both units is created automatically.</p></div><div class="refsect1"><a name="idm274685307088"></a><h2 id="fstab"><code class="filename">fstab</code><a class="headerlink" title="Permalink to this headline" href="#fstab">¶</a></h2><p>Automount units may either be configured via unit
files, or via <code class="filename">/etc/fstab</code> (see
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
for details).</p><p>For details how systemd parses
<code class="filename">/etc/fstab</code> see
<a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>.</p><p>If an automount point is configured in both
- <code class="filename">/etc/fstab</code> and a unit file the
- configuration in the latter takes precedence.</p></div><div class="refsect1"><a name="idm259772684384"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Automount files must include an [Automount]
+ <code class="filename">/etc/fstab</code> and a unit file, the
+ configuration in the latter takes precedence.</p></div><div class="refsect1"><a name="idm274685446816"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Automount files must include an [Automount]
section, which carries information about the file
system automount points it supervises. The options
specific to the [Automount] section of automount units
are the following:</p><div class="variablelist"><dl class="variablelist"><dt id="Where="><span class="term"><code class="varname">Where=</code></span><a class="headerlink" title="Permalink to this term" href="#Where=">¶</a></dt><dd><p>Takes an absolute path
of a directory of the automount
- point. If the automount point is not
- existing at time that the automount
- point is installed it is created. This
+ point. If the automount point does not
+ exist at time that the automount
+ point is installed, it is created. This
string must be reflected in the unit
- file name. (See above.) This option is
+ filename. (See above.) This option is
mandatory.</p></dd><dt id="DirectoryMode="><span class="term"><code class="varname">DirectoryMode=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryMode=">¶</a></dt><dd><p>Directories of
automount points (and any parent
directories) are automatically created
@@ -75,7 +75,7 @@
creating these directories. Takes an
access mode in octal
notation. Defaults to
- 0755.</p></dd></dl></div></div><div class="refsect1"><a name="idm259772678352"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ 0755.</p></dd></dl></div></div><div class="refsect1"><a name="idm274685440736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd.automount.xml b/man/systemd.automount.xml
index e01cac7bc2..34105126cd 100644
--- a/man/systemd.automount.xml
+++ b/man/systemd.automount.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.automount</filename> encodes information
+ <literal>.automount</literal> encodes information
about a file system automount point controlled and
supervised by systemd.</para>
@@ -93,7 +93,7 @@
file systems.</para>
<para>If an automount point is beneath another mount
- point in the file system hierarchy a dependency
+ point in the file system hierarchy, a dependency
between both units is created automatically.</para>
</refsect1>
@@ -110,7 +110,7 @@
<citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
<para>If an automount point is configured in both
- <filename>/etc/fstab</filename> and a unit file the
+ <filename>/etc/fstab</filename> and a unit file, the
configuration in the latter takes precedence.</para>
</refsect1>
@@ -129,11 +129,11 @@
<term><varname>Where=</varname></term>
<listitem><para>Takes an absolute path
of a directory of the automount
- point. If the automount point is not
- existing at time that the automount
- point is installed it is created. This
+ point. If the automount point does not
+ exist at time that the automount
+ point is installed, it is created. This
string must be reflected in the unit
- file name. (See above.) This option is
+ filename. (See above.) This option is
mandatory.</para></listitem>
</varlistentry>
diff --git a/man/systemd.device.5 b/man/systemd.device.5
new file mode 100644
index 0000000000..f477109400
--- /dev/null
+++ b/man/systemd.device.5
@@ -0,0 +1,88 @@
+'\" t
+.TH "SYSTEMD\&.DEVICE" "5" "" "systemd 208" "systemd.device"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.device \- Device unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIdevice\fR\&.device
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.device"
+encodes information about a device unit as exposed in the sysfs/\fBudev\fR(7)
+device tree\&.
+.PP
+This unit type has no specific options\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic
+"[Unit]"
+and
+"[Install]"
+sections\&. A separate
+"[Device]"
+section does not exist, since no device\-specific options may be configured\&.
+.PP
+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\&.
+.PP
+Device units are named after the
+/sys
+and
+/dev
+paths they control\&. Example: the device
+/dev/sda5
+is exposed in systemd as
+dev\-sda5\&.device\&. For details about the escaping logic used to convert a file system path to a unit name see
+\fBsystemd.unit\fR(5)\&.
+.SH "THE UDEV DATABASE"
+.PP
+The settings of device units may either be configured via unit files, or directly from the udev database (which is recommended)\&. The following udev properties are understood by systemd:
+.PP
+\fISYSTEMD_WANTS=\fR
+.RS 4
+Adds dependencies of type
+\fIWants\fR
+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 other tags are not taken into account unless the device is tagged with the
+"systemd"
+string in the udev database, because otherwise the device is not exposed as systemd unit\&.
+.RE
+.PP
+\fISYSTEMD_ALIAS=\fR
+.RS 4
+Adds an additional alias name to the device unit\&. This must be an absolute path that is automatically transformed into a unit name\&. (See above\&.)
+.RE
+.PP
+\fISYSTEMD_READY=\fR
+.RS 4
+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 the moment it shows up in the udev tree\&. This property has no influence on the behavior when a device disappears from the udev tree\&. This option is useful to support devices that initially show up in an uninitialized state in the tree, and for which a changed event is generated the moment they are fully set up\&.
+.RE
+.PP
+\fIID_MODEL_FROM_DATABASE=\fR, \fIID_MODEL=\fR
+.RS 4
+If set, this property is used as description string for the device unit\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBudev\fR(7),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.device.html b/man/systemd.device.html
index 60cefc1cc6..0c2d9cb982 100644
--- a/man/systemd.device.html
+++ b/man/systemd.device.html
@@ -19,17 +19,17 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.device"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.device — Device unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>device</code></em>.device</code></p></div><div class="refsect1"><a name="idm259792341904"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.device</code> encodes information about
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.device"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.device — Device unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>device</code></em>.device</code></p></div><div class="refsect1"><a name="idm274686387808"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.device</code>" encodes information about
a device unit as exposed in the
sysfs/<a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>
device tree.</p><p>This unit type has no specific options. See
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
for the common options of all unit configuration
files. The common configuration items are configured
- in the generic <code class="literal">[Unit]</code> and
- <code class="literal">[Install]</code> sections. A separate
- <code class="literal">[Device]</code> section does not exist,
+ in the generic "<code class="literal">[Unit]</code>" and
+ "<code class="literal">[Install]</code>" sections. A separate
+ "<code class="literal">[Device]</code>" section does not exist,
since no device-specific options may be
configured.</p><p>systemd will automatically create dynamic device
units for all kernel devices that are marked with the
@@ -43,7 +43,7 @@
in systemd as <code class="filename">dev-sda5.device</code>. For
details about the escaping logic used to convert a
file system path to a unit name see
- <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>.</p></div><div class="refsect1"><a name="idm259792330256"></a><h2 id="The udev Database">The udev Database<a class="headerlink" title="Permalink to this headline" href="#The%20udev%20Database">¶</a></h2><p>The settings of device units may either be
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>.</p></div><div class="refsect1"><a name="idm274686250208"></a><h2 id="The udev Database">The udev Database<a class="headerlink" title="Permalink to this headline" href="#The%20udev%20Database">¶</a></h2><p>The settings of device units may either be
configured via unit files, or directly from the udev
database (which is recommended). The following udev
properties are understood by systemd:</p><div class="variablelist"><dl class="variablelist"><dt id="SYSTEMD_WANTS="><span class="term"><code class="varname">SYSTEMD_WANTS=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_WANTS=">¶</a></dt><dd><p>Adds dependencies of
@@ -61,11 +61,11 @@
alias name to the device unit. This
must be an absolute path that is
automatically transformed into a unit
- name. (See above.)</p></dd><dt id="SYSTEMD_READY="><span class="term"><code class="varname">SYSTEMD_READY=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_READY=">¶</a></dt><dd><p>If set to 0 systemd
+ name. (See above.)</p></dd><dt id="SYSTEMD_READY="><span class="term"><code class="varname">SYSTEMD_READY=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_READY=">¶</a></dt><dd><p>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
+ to 1, the device will be considered
plugged the moment it shows up in the
udev tree. This property has no
influence on the behavior when a
@@ -77,7 +77,7 @@
moment they are fully set
up.</p></dd><dt id="ID_MODEL_FROM_DATABASE="><span class="term"><code class="varname">ID_MODEL_FROM_DATABASE=</code>, </span><span class="term"><code class="varname">ID_MODEL=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_MODEL_FROM_DATABASE=">¶</a></dt><dd><p>If set, this property is
used as description string for the
- device unit.</p></dd></dl></div></div><div class="refsect1"><a name="idm259796269696"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ device unit.</p></dd></dl></div></div><div class="refsect1"><a name="idm274686440672"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd.device.xml b/man/systemd.device.xml
index 7dffa236cf..96ebe89095 100644
--- a/man/systemd.device.xml
+++ b/man/systemd.device.xml
@@ -55,7 +55,7 @@
<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>
@@ -107,7 +107,7 @@
available. 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>
@@ -124,11 +124,11 @@
<varlistentry>
<term><varname>SYSTEMD_READY=</varname></term>
- <listitem><para>If set to 0 systemd
+ <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
+ to 1, the device will be considered
plugged the moment it shows up in the
udev tree. This property has no
influence on the behavior when a
diff --git a/man/systemd.directives.7 b/man/systemd.directives.7
new file mode 100644
index 0000000000..cc670ba67a
--- /dev/null
+++ b/man/systemd.directives.7
@@ -0,0 +1,6790 @@
+'\" t
+.TH "SYSTEMD\&.DIRECTIVES" "7" "" "systemd 208" "systemd.directives"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.directives \- Index of configuration directives
+.SH "UNIT DIRECTIVES"
+.PP
+Directives for configuring units, used in unit files\&.
+.PP
+\fIAccept=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIAfter=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIAlias=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIAllowIsolate=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIAlso=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIBacklog=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIBefore=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIBindIPv6Only=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIBindToDevice=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIBindsTo=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIBlockIOAccounting=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIBlockIODeviceWeight=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIBlockIOReadBandwidth=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIBlockIOWeight=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIBlockIOWriteBandwidth=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIBroadcast=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIBusName=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fICPUAccounting=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fICPUAffinity=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fICPUSchedulingPolicy=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fICPUSchedulingPriority=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fICPUSchedulingResetOnFork=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fICPUShares=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fICapabilities=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fICapabilityBoundingSet=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIConditionACPower=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionCapability=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionDirectoryNotEmpty=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionFileIsExecutable=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionFileNotEmpty=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionHost=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionKernelCommandLine=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionNull=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionPathExists=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionPathExistsGlob=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionPathIsDirectory=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionPathIsMountPoint=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionPathIsReadWrite=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionPathIsSymbolicLink=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionSecurity=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConditionVirtualization=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIConflicts=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIDefaultDependencies=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIDescription=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIDeviceAllow=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIDevicePolicy=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIDirectoryMode=\fR
+.RS 4
+\fBsystemd.automount\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.path\fR(5),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIDirectoryNotEmpty=\fR
+.RS 4
+\fBsystemd.path\fR(5)
+.RE
+.PP
+\fIDocumentation=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIEnvironment=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIEnvironmentFile=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIExecReload=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIExecStart=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIExecStartPost=\fR
+.RS 4
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIExecStartPre=\fR
+.RS 4
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIExecStop=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIExecStopPost=\fR
+.RS 4
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIExecStopPre=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIFreeBind=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIFsckPassNo=\fR
+.RS 4
+\fBsystemd.mount\fR(5),
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIGroup=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIGuessMainPID=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIIOSchedulingClass=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIIOSchedulingPriority=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIIPTOS=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIIPTTL=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIIgnoreOnIsolate=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIIgnoreOnSnapshot=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIIgnoreSIGPIPE=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIInaccessibleDirectories=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIJobTimeoutSec=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIKeepAlive=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIKillMode=\fR
+.RS 4
+\fBsystemd.kill\fR(5)
+.RE
+.PP
+\fIKillSignal=\fR
+.RS 4
+\fBsystemd.kill\fR(5)
+.RE
+.PP
+\fILimitAS=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitCORE=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitCPU=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitDATA=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitFSIZE=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitLOCKS=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitMEMLOCK=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitMSGQUEUE=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitNICE=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitNOFILE=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitNPROC=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitRSS=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitRTPRIO=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitRTTIME=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitSIGPENDING=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fILimitSTACK=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIListenDatagram=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIListenFIFO=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIListenMessageQueue=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIListenNetlink=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIListenSequentialPacket=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIListenSpecial=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIListenStream=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIMakeDirectory=\fR
+.RS 4
+\fBsystemd.path\fR(5)
+.RE
+.PP
+\fIMark=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIMaxConnections=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIMemoryAccounting=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIMemoryLimit=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fIMessageQueueMaxMessages=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIMessageQueueMessageSize=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIMountFlags=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fINice=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fINoNewPrivileges=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fINonBlocking=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fINotifyAccess=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIOOMScoreAdjust=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIOnActiveSec=\fR
+.RS 4
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIOnBootSec=\fR
+.RS 4
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIOnCalendar=\fR
+.RS 4
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIOnFailure=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIOnFailureIsolate=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIOnStartupSec=\fR
+.RS 4
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIOnUnitActiveSec=\fR
+.RS 4
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIOnUnitInactiveSec=\fR
+.RS 4
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIOptions=\fR
+.RS 4
+\fBsystemd.mount\fR(5)
+.RE
+.PP
+\fIPAMName=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIPIDFile=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIPartOf=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIPassCredentials=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIPassSecurity=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIPathChanged=\fR
+.RS 4
+\fBsystemd.path\fR(5)
+.RE
+.PP
+\fIPathExists=\fR
+.RS 4
+\fBsystemd.path\fR(5)
+.RE
+.PP
+\fIPathExistsGlob=\fR
+.RS 4
+\fBsystemd.path\fR(5)
+.RE
+.PP
+\fIPathModified=\fR
+.RS 4
+\fBsystemd.path\fR(5)
+.RE
+.PP
+\fIPermissionsStartOnly=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIPipeSize=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIPriority=\fR
+.RS 4
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5)
+.RE
+.PP
+\fIPrivateNetwork=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIPrivateTmp=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIPropagatesReloadTo=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIReadOnlyDirectories=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIReadWriteDirectories=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIReceiveBuffer=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIRefuseManualStart=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRefuseManualStop=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIReloadPropagatedFrom=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRemainAfterExit=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIRequiredBy=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRequires=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRequiresMountsFor=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRequiresOverridable=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRequisite=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRequisiteOverridable=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIRestart=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIRestartPreventExitStatus=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIRestartSec=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIReusePort=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIRootDirectory=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIRootDirectoryStartOnly=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fISecureBits=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fISendBuffer=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fISendSIGHUP=\fR
+.RS 4
+\fBsystemd.kill\fR(5)
+.RE
+.PP
+\fISendSIGKILL=\fR
+.RS 4
+\fBsystemd.kill\fR(5)
+.RE
+.PP
+\fIService=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fISlice=\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fISmackLabel=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fISmackLabelIPIn=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fISmackLabelIPOut=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fISocketMode=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fISockets=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fISourcePath=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIStandardError=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIStandardInput=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIStandardOutput=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIStartLimitAction=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIStartLimitBurst=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIStartLimitInterval=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIStopWhenUnneeded=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fISuccessExitStatus=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fISupplementaryGroups=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fISysVStartPriority=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fISyslogFacility=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fISyslogIdentifier=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fISyslogLevel=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fISyslogLevelPrefix=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fISystemCallFilter=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITCPCongestion=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fITCPWrapName=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITTYPath=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITTYReset=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITTYVHangup=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITTYVTDisallocate=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITimeoutSec=\fR
+.RS 4
+\fBsystemd.mount\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5)
+.RE
+.PP
+\fITimeoutStartSec=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fITimeoutStopSec=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fITimerSlackNSec=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fITransparent=\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fIType=\fR
+.RS 4
+\fBsystemd.mount\fR(5),
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIUMask=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIUnit=\fR
+.RS 4
+\fBsystemd.path\fR(5),
+\fBsystemd.timer\fR(5)
+.RE
+.PP
+\fIUser=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIUtmpIdentifier=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIWantedBy=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIWants=\fR
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIWatchdogSec=\fR
+.RS 4
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fIWhat=\fR
+.RS 4
+\fBsystemd.mount\fR(5),
+\fBsystemd.swap\fR(5)
+.RE
+.PP
+\fIWhere=\fR
+.RS 4
+\fBsystemd.automount\fR(5),
+\fBsystemd.mount\fR(5)
+.RE
+.PP
+\fIWorkingDirectory=\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.SH "OPTIONS ON THE KERNEL COMMAND LINE"
+.PP
+Kernel boot options for configuring the behaviour of the systemd process\&.
+.PP
+\fB1\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB2\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI3\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI4\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI5\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIS\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIdebug\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIemergency\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIfsck\&.mode=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-fsck@.service\fR(8)
+.RE
+.PP
+\fIfstab=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-fstab-generator\fR(8)
+.RE
+.PP
+\fIlocale\&.LANG=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LANGUAGE=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_ADDRESS=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_COLLATE=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_CTYPE=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_IDENTIFICATION=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_MEASUREMENT=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_MESSAGES=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_MONETARY=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_NAME=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_NUMERIC=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_PAPER=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_TELEPHONE=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIlocale\&.LC_TIME=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIluks\&.crypttab=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIluks\&.key=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIluks\&.options=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIluks\&.uuid=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIluks=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fImodules\-load=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-modules-load.service\fR(8)
+.RE
+.PP
+\fInet\&.ifnames=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIplymouth\&.enable=\fR
+.RS 4
+\fBkernel-command-line\fR(7)
+.RE
+.PP
+\fIquiet\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIquotacheck\&.mode=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-quotacheck.service\fR(8)
+.RE
+.PP
+\fIrd\&.fstab=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-fstab-generator\fR(8)
+.RE
+.PP
+\fIrd\&.luks\&.crypttab=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIrd\&.luks\&.key=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIrd\&.luks\&.options=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIrd\&.luks\&.uuid=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIrd\&.luks=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+\fIrd\&.modules\-load=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-modules-load.service\fR(8)
+.RE
+.PP
+\fIrd\&.systemd\&.unit=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIrd\&.udev\&.children\-max=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIrd\&.udev\&.exec\-delay=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIrd\&.udev\&.log\-priority=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIs\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsingle\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.confirm_spawn=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.crash_chvt=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.crash_shell=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.default_standard_error=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.default_standard_output=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.dump_core=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.journald\&.forward_to_console=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+\fIsystemd\&.journald\&.forward_to_kmsg=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+\fIsystemd\&.journald\&.forward_to_syslog=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+\fIsystemd\&.log_color=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.log_level=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.log_location=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.log_target=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.setenv=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.show_status=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIsystemd\&.unit=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fIudev\&.children\-max=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIudev\&.exec\-delay=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIudev\&.log\-priority=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIvconsole\&.font\&.map=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.PP
+\fIvconsole\&.font\&.unimap=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.PP
+\fIvconsole\&.font=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.PP
+\fIvconsole\&.keymap\&.toggle=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.PP
+\fIvconsole\&.keymap=\fR
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.SH "ENVIRONMENT VARIABLES"
+.PP
+Environment variables understood by the systemd manager and other programs\&.
+.PP
+\fI$HOME\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$LANG\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$LISTEN_FDS\fR
+.RS 4
+\fBsd_listen_fds\fR(3),
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8),
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$LISTEN_PID\fR
+.RS 4
+\fBsd_listen_fds\fR(3),
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8),
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$MANAGERPID\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$NOTIFY_SOCKET\fR
+.RS 4
+\fBsd_notify\fR(3),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$PATH\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$PREVLEVEL\fR
+.RS 4
+\fBrunlevel\fR(8)
+.RE
+.PP
+\fI$RUNLEVEL\fR
+.RS 4
+\fBrunlevel\fR(8)
+.RE
+.PP
+\fI$SYSTEMD_LOG_COLOR\fR
+.RS 4
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fI$SYSTEMD_LOG_LEVEL\fR
+.RS 4
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fI$SYSTEMD_LOG_LOCATION\fR
+.RS 4
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fI$SYSTEMD_LOG_TARGET\fR
+.RS 4
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-analyze\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fI$SYSTEMD_SYSVINIT_PATH\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$SYSTEMD_SYSVRCND_PATH\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$SYSTEMD_UNIT_PATH\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$UDEV_LOG=\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fI$USER\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$XDG_CONFIG_DIRS\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$XDG_CONFIG_HOME\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$XDG_DATA_DIRS\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$XDG_DATA_HOME\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fI$XDG_RUNTIME_DIR\fR
+.RS 4
+\fBpam_systemd\fR(8),
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$XDG_SEAT\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$XDG_SESSION_ID\fR
+.RS 4
+\fBpam_systemd\fR(8),
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fI$XDG_VTNR\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.SH "UDEV DIRECTIVES"
+.PP
+Directives for configuring systemd units through the udev database\&.
+.PP
+\fB$$\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$attr{\fR\fB\fIfile\fR\fR\fB}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$devnode\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$devpath\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$driver\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$env{\fR\fB\fIkey\fR\fR\fB}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$id\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$kernel\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$links\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$major\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$minor\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$name\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$number\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$parent\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$result\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$root\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB$sys\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%%\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%E{\fR\fB\fIkey\fR\fR\fB}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%M\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%N\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%P\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%S\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%b\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%c\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%k\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%m\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%n\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%p\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%r\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fB%s{\fR\fB\fIfile\fR\fR\fB}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIACTION\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIATTRS{\fR\fI\fIfilename\fR\fR\fI}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIATTR{\fR\fI\fIfilename\fR\fR\fI}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIDEVPATH\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIDRIVER\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIDRIVERS\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIENV{\fR\fI\fIkey\fR\fR\fI}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIGOTO\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIGROUP\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIID_MODEL=\fR
+.RS 4
+\fBsystemd.device\fR(5)
+.RE
+.PP
+\fIID_MODEL_FROM_DATABASE=\fR
+.RS 4
+\fBsystemd.device\fR(5)
+.RE
+.PP
+\fIIMPORT{\fR\fI\fItype\fR\fR\fI}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIKERNEL\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIKERNELS\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fILABEL\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIMODE\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fINAME\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIOPTIONS\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIOWNER\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIPROGRAM\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIRESULT\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIRUN{\fR\fI\fItype\fR\fR\fI}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fISUBSYSTEM\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fISUBSYSTEMS\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fISYMLINK\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fISYSTEMD_ALIAS=\fR
+.RS 4
+\fBsystemd.device\fR(5)
+.RE
+.PP
+\fISYSTEMD_READY=\fR
+.RS 4
+\fBsystemd.device\fR(5)
+.RE
+.PP
+\fISYSTEMD_WANTS=\fR
+.RS 4
+\fBsystemd.device\fR(5)
+.RE
+.PP
+\fITAG\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fITAGS\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fITEST{\fR\fI\fIoctal mode mask\fR\fR\fI}\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fIWAIT_FOR\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fBevent_timeout=\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fBlink_priority=\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fBnowatch\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fBstatic_node=\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fBstring_escape=\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+\fBwatch\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.SH "JOURNAL FIELDS"
+.PP
+Fields in the journal events with a well known meaning\&.
+.PP
+\fICODE_FILE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fICODE_FUNC=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fICODE_LINE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fICOREDUMP_UNIT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fICOREDUMP_USER_UNIT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIERRNO=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIMESSAGE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIMESSAGE_ID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_AUDIT_LOGINUID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_AUDIT_SESSION=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_CMDLINE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_COMM=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_EXE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_GID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_PID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_SYSTEMD_CGROUP=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_SYSTEMD_OWNER_UID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_SYSTEMD_SESSION=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_SYSTEMD_UNIT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_SYSTEMD_USER_UNIT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIOBJECT_UID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fIPRIORITY=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fISYSLOG_FACILITY=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fISYSLOG_IDENTIFIER=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fISYSLOG_PID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_AUDIT_LOGINUID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_AUDIT_SESSION=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_BOOT_ID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_CAP_EFFECTIVE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_CMDLINE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_COMM=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_EXE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_GID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_HOSTNAME=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_KERNEL_DEVICE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_KERNEL_SUBSYSTEM=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_MACHINE_ID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_PID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SELINUX_CONTEXT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SOURCE_REALTIME_TIMESTAMP=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SYSTEMD_CGROUP=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SYSTEMD_OWNER_UID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SYSTEMD_SESSION=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SYSTEMD_SLICE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SYSTEMD_UNIT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_SYSTEMD_USER_UNIT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_TRANSPORT=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_UDEV_DEVLINK=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_UDEV_DEVNODE=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_UDEV_SYSNAME=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI_UID=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI__CURSOR=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI__MONOTONIC_TIMESTAMP=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fI__REALTIME_TIMESTAMP=\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.SH "PAM CONFIGURATION DIRECTIVES"
+.PP
+Directives for configuring PAM behaviour\&.
+.PP
+\fBclass=\fR
+.RS 4
+\fBpam_systemd\fR(8)
+.RE
+.PP
+\fBdebug=\fR
+.RS 4
+\fBpam_systemd\fR(8)
+.RE
+.SH "CRYPTTAB OPTIONS"
+.PP
+Options which influence mounted filesystems and encrypted volumes\&.
+.PP
+\fIcipher=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIdiscard\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIhash=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIkeyfile\-offset=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIkeyfile\-size=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIluks\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fInoauto\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fInofail\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIplain\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIread\-only\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIreadonly\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIsize=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIswap\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItcrypt\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItcrypt\-hidden\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItcrypt\-keyfile=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItcrypt\-system\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItimeout=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItmp\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fItries=\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+\fIverify\fR
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.SH "SYSTEM MANAGER DIRECTIVES"
+.PP
+Directives for configuring the behaviour of the systemd process\&.
+.PP
+\fICPUAffinity=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fICapabilityBoundingSet=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fICrashChVT=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fICrashShell=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultEnvironment=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitAS=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitCORE=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitCPU=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitDATA=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitFSIZE=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitLOCKS=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitMEMLOCK=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitMSGQUEUE=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitNICE=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitNOFILE=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitNPROC=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitRSS=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitRTPRIO=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitRTTIME=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitSIGPENDING=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultLimitSTACK=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultStandardError=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDefaultStandardOutput=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIDumpCore=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIHibernateMode=\fR
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+\fIHibernateState=\fR
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+\fIHybridSleepMode=\fR
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+\fIHybridSleepState=\fR
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+\fIJoinControllers=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fILogColor=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fILogLevel=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fILogLocation=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fILogTarget=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIRuntimeWatchdogSec=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIShowStatus=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fIShutdownWatchdogSec=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+\fISuspendMode=\fR
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+\fISuspendState=\fR
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+\fITimerSlackNSec=\fR
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.SH "BOOTCHART.CONF DIRECTIVES"
+.PP
+Directives for configuring the behaviour of the systemd\-bootchart process\&.
+.PP
+\fIFilter=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIFrequency=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIInit=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIOutput=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIPlotEntropyGraph=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIPlotMemoryUsage=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIRelative=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fISamples=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIScaleX=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+\fIScaleY=\fR
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.SH "COMMAND-LINE OPTIONS"
+.PP
+Command\-line options accepted by programs in the systemd suite\&.
+.PP
+\fB\-\-accept\fR
+.RS 4
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fB\-\-accept\-cached\fR
+.RS 4
+\fBsystemd-ask-password\fR(1)
+.RE
+.PP
+\fB\-\-action=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-adjust\-system\-clock\fR
+.RS 4
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-\-after\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-after\-cursor=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-all\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-cgls\fR(1)
+.RE
+.PP
+\fB\-\-attr\-match=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-attr\-nomatch=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-attribute\-walk\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-batch\fR
+.RS 4
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-\-before\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-bind\-ro=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-bind=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-boot\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-boot=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-booted\fR
+.RS 4
+\fBsystemd-notify\fR(1)
+.RE
+.PP
+\fB\-\-capability=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-catalog\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-cert=\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+\fB\-\-children\-max=\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-clean\fR
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+\fB\-\-cleanup\-db\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-cmdline\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-confirm\-spawn\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-console\fR
+.RS 4
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+\fB\-\-container\fR
+.RS 4
+\fBsystemd-detect-virt\fR(1)
+.RE
+.PP
+\fB\-\-crash\-shell\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-create\fR
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+\fB\-\-cursor=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-daemon\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fB\-\-debug\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-default\-standard\-error=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-default\-standard\-output=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-delay=\fR
+.RS 4
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-\-depth=\fR
+.RS 4
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-\-description=\fR
+.RS 4
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-device\-id\-of\-file=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-diff=\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fB\-\-directory=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-disk\-usage\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-dmesg\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-dry\-run\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-dump\-catalog\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-dump\-configuration\-items\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-dump\-core\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-entropy\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-environment=\fR
+.RS 4
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fB\-\-exclude\-prefix=\fR
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+\fB\-\-exec\-delay=\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fB\-\-exit\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-exit\-if\-exists=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-export\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-export\-db\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-export\-prefix=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-fail\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-field=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-coredumpctl\fR(1)
+.RE
+.PP
+\fB\-\-file\-size\-max=\fR
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+\fB\-\-file=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-follow\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-force\fR
+.RS 4
+\fBhalt\fR(8),
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-freq\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-from\-pattern=\fR
+.RS 4
+\fBsystemd-analyze\fR(1)
+.RE
+.PP
+\fB\-\-full\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-cgls\fR(1)
+.RE
+.PP
+\fB\-\-fuzz=\fR
+.RS 4
+\fBsystemd-analyze\fR(1)
+.RE
+.PP
+\fB\-\-global\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-halt\fR
+.RS 4
+\fBhalt\fR(8),
+\fBshutdown\fR(8)
+.RE
+.PP
+\fB\-\-header\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+\fBhalt\fR(8),
+\fBhostnamectl\fR(1),
+\fBjournalctl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBrunlevel\fR(8),
+\fBshutdown\fR(8),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8),
+\fBsystemd-analyze\fR(1),
+\fBsystemd-ask-password\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-cat\fR(1),
+\fBsystemd-cgls\fR(1),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-coredumpctl\fR(1),
+\fBsystemd-delta\fR(1),
+\fBsystemd-detect-virt\fR(1),
+\fBsystemd-inhibit\fR(1),
+\fBsystemd-journal-gatewayd.service\fR(8),
+\fBsystemd-machine-id-setup\fR(1),
+\fBsystemd-notify\fR(1),
+\fBsystemd-nspawn\fR(1),
+\fBsystemd-readahead-replay.service\fR(8),
+\fBsystemd-run\fR(1),
+\fBsystemd-suspend.service\fR(8),
+\fBsystemd-tmpfiles\fR(8),
+\fBsystemd-tty-ask-password-agent\fR(1),
+\fBsystemd-udevd.service\fR(8),
+\fBtelinit\fR(8),
+\fBtimedatectl\fR(1),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-host\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-\-icon=\fR
+.RS 4
+\fBsystemd-ask-password\fR(1)
+.RE
+.PP
+\fB\-\-identifier=\fR
+.RS 4
+\fBsystemd-cat\fR(1)
+.RE
+.PP
+\fB\-\-ignore\-dependencies\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-ignore\-inhibitors\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-init\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-interval=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-introspect=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-irreversible\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-iterations=\fR
+.RS 4
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-\-kernel\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-key=\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+\fB\-\-kill\-who=\fR
+.RS 4
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-level\-prefix=\fR
+.RS 4
+\fBsystemd-cat\fR(1)
+.RE
+.PP
+\fB\-\-lines=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-link\-journal=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-list\fR
+.RS 4
+\fBsystemd-inhibit\fR(1),
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+\fB\-\-list\-catalog\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-listen=\fR
+.RS 4
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fB\-\-log\-color=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-log\-level=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-log\-location=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-log\-priority=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-log\-target=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-machine=\fR
+.RS 4
+\fBsystemd-cgls\fR(1),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-max\-files=\fR
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+\fB\-\-merge\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-mode=\fR
+.RS 4
+\fBsystemd-inhibit\fR(1)
+.RE
+.PP
+\fB\-\-multiple\fR
+.RS 4
+\fBsystemd-ask-password\fR(1)
+.RE
+.PP
+\fB\-\-name=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-new\-id128\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-\-no\-block\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-no\-convert\fR
+.RS 4
+\fBlocalectl\fR(1)
+.RE
+.PP
+\fB\-\-no\-filter\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-no\-legend\fR
+.RS 4
+\fBsystemctl\fR(1),
+\fBsystemd-coredumpctl\fR(1)
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-analyze\fR(1),
+\fBsystemd-cgls\fR(1),
+\fBsystemd-coredumpctl\fR(1),
+\fBsystemd-delta\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-\-no\-reload\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-no\-tail\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-no\-tty\fR
+.RS 4
+\fBsystemd-ask-password\fR(1)
+.RE
+.PP
+\fB\-\-no\-wall\fR
+.RS 4
+\fBhalt\fR(8),
+\fBshutdown\fR(8),
+\fBsystemctl\fR(1),
+\fBtelinit\fR(8)
+.RE
+.PP
+\fB\-\-no\-wtmp\fR
+.RS 4
+\fBhalt\fR(8)
+.RE
+.PP
+\fB\-\-order\fR
+.RS 4
+\fBsystemd-analyze\fR(1)
+.RE
+.PP
+\fB\-\-output\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-output=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-coredumpctl\fR(1)
+.RE
+.PP
+\fB\-\-pager\-end\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-parent\-match=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-path=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-pid=\fR
+.RS 4
+\fBsystemd-notify\fR(1)
+.RE
+.PP
+\fB\-\-plain\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-plymouth\fR
+.RS 4
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+\fB\-\-poweroff\fR
+.RS 4
+\fBhalt\fR(8),
+\fBshutdown\fR(8)
+.RE
+.PP
+\fB\-\-prefix=\fR
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+\fB\-\-pretty\fR
+.RS 4
+\fBhostnamectl\fR(1)
+.RE
+.PP
+\fB\-\-priority=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-cat\fR(1)
+.RE
+.PP
+\fB\-\-private\-network\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-privileged\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-\-property\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-property\-match=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-property=\fR
+.RS 4
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-pss\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-query\fR
+.RS 4
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+\fB\-\-query=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-quiet\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-detect-virt\fR(1),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-read\-only\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-readahead=\fR
+.RS 4
+\fBsystemd-notify\fR(1)
+.RE
+.PP
+\fB\-\-ready\fR
+.RS 4
+\fBsystemd-notify\fR(1)
+.RE
+.PP
+\fB\-\-reboot\fR
+.RS 4
+\fBhalt\fR(8),
+\fBshutdown\fR(8)
+.RE
+.PP
+\fB\-\-rel\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-reload\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-remain\-after\-exit\fR
+.RS 4
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-remove\fR
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+\fB\-\-require\fR
+.RS 4
+\fBsystemd-analyze\fR(1)
+.RE
+.PP
+\fB\-\-resolve\-names=\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fB\-\-reverse\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-root\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-root=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-runtime\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-sample\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-scale\-x\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-scale\-y\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-\-scope\fR
+.RS 4
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-send\-sighup\fR
+.RS 4
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-seq\-end=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-seq\-start=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-setup\-keys\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-show\-status=\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-show\-types\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-signal=\fR
+.RS 4
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-since=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-slice=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1),
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-start\-exec\-queue\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-state=\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-\-static\fR
+.RS 4
+\fBhostnamectl\fR(1)
+.RE
+.PP
+\fB\-\-status=\fR
+.RS 4
+\fBsystemd-notify\fR(1)
+.RE
+.PP
+\fB\-\-stop\-exec\-queue\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-subsystem\-match=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-subsystem\-nomatch=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-subsystem=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-sysname\-match=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-system\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-tag\-match=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-test\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-\-test=\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-timeout=\fR
+.RS 4
+\fBsystemd-ask-password\fR(1),
+\fBsystemd-readahead-replay.service\fR(8),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-to\-pattern=\fR
+.RS 4
+\fBsystemd-analyze\fR(1)
+.RE
+.PP
+\fB\-\-transient\fR
+.RS 4
+\fBhostnamectl\fR(1)
+.RE
+.PP
+\fB\-\-type=\fR
+.RS 4
+\fBsystemctl\fR(1),
+\fBsystemd-delta\fR(1),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-udev\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-unit=\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-until=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-update\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-update\-catalog\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-user\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd-analyze\fR(1),
+\fBsystemd-run\fR(1)
+.RE
+.PP
+\fB\-\-user\-unit=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-user=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-uuid=\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-\-verbose\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-verify\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-verify\-key=\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBjournalctl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8),
+\fBsystemd-cat\fR(1),
+\fBsystemd-cgls\fR(1),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-coredumpctl\fR(1),
+\fBsystemd-delta\fR(1),
+\fBsystemd-detect-virt\fR(1),
+\fBsystemd-inhibit\fR(1),
+\fBsystemd-journal-gatewayd.service\fR(8),
+\fBsystemd-machine-id-setup\fR(1),
+\fBsystemd-notify\fR(1),
+\fBsystemd-nspawn\fR(1),
+\fBsystemd-run\fR(1),
+\fBsystemd-suspend.service\fR(8),
+\fBsystemd-tty-ask-password-agent\fR(1),
+\fBsystemd-udevd.service\fR(8),
+\fBtimedatectl\fR(1),
+\fBudevadm\fR(8)
+.RE
+.PP
+\fB\-\-vm\fR
+.RS 4
+\fBsystemd-detect-virt\fR(1)
+.RE
+.PP
+\fB\-\-wall\fR
+.RS 4
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+\fB\-\-watch\fR
+.RS 4
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+\fB\-\-what=\fR
+.RS 4
+\fBsystemd-inhibit\fR(1)
+.RE
+.PP
+\fB\-\-who=\fR
+.RS 4
+\fBsystemd-inhibit\fR(1)
+.RE
+.PP
+\fB\-\-why=\fR
+.RS 4
+\fBsystemd-inhibit\fR(1)
+.RE
+.PP
+\fB\-\-wtmp\-only\fR
+.RS 4
+\fBhalt\fR(8)
+.RE
+.PP
+\fB\-C\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-D\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-E\fR
+.RS 4
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fB\-F\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-coredumpctl\fR(1)
+.RE
+.PP
+\fB\-H\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBshutdown\fR(8),
+\fBsystemctl\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-P\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBshutdown\fR(8),
+\fBsystemctl\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-a\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+\fB\-b\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-c\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBshutdown\fR(8),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-detect-virt\fR(1)
+.RE
+.PP
+\fB\-d\fR
+.RS 4
+\fBhalt\fR(8),
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-e\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-f\fR
+.RS 4
+\fBhalt\fR(8),
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+\fBhostnamectl\fR(1),
+\fBjournalctl\fR(1),
+\fBlocalectl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBshutdown\fR(8),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd-activate\fR(8),
+\fBsystemd-analyze\fR(1),
+\fBsystemd-ask-password\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-cat\fR(1),
+\fBsystemd-cgls\fR(1),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-coredumpctl\fR(1),
+\fBsystemd-delta\fR(1),
+\fBsystemd-detect-virt\fR(1),
+\fBsystemd-inhibit\fR(1),
+\fBsystemd-journal-gatewayd.service\fR(8),
+\fBsystemd-machine-id-setup\fR(1),
+\fBsystemd-notify\fR(1),
+\fBsystemd-nspawn\fR(1),
+\fBsystemd-readahead-replay.service\fR(8),
+\fBsystemd-run\fR(1),
+\fBsystemd-suspend.service\fR(8),
+\fBsystemd-tty-ask-password-agent\fR(1),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fB\-i\fR
+.RS 4
+\fBsystemctl\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-j\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-k\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBshutdown\fR(8),
+\fBsystemd-cgls\fR(1)
+.RE
+.PP
+\fB\-l\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-activate\fR(8),
+\fBsystemd-cgls\fR(1)
+.RE
+.PP
+\fB\-m\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-cgls\fR(1),
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-n\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-o\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-coredumpctl\fR(1)
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+\fBhalt\fR(8),
+\fBjournalctl\fR(1),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-bootchart\fR(1),
+\fBsystemd-cat\fR(1),
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fB\-q\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-detect-virt\fR(1)
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBshutdown\fR(8),
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fB\-t\fR
+.RS 4
+\fBsystemctl\fR(1),
+\fBsystemd-cat\fR(1),
+\fBsystemd-cgtop\fR(1),
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fB\-u\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+\fB\-v\fR
+.RS 4
+\fBsystemd-detect-virt\fR(1)
+.RE
+.PP
+\fB\-w\fR
+.RS 4
+\fBhalt\fR(8)
+.RE
+.PP
+\fB\-x\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fB\-y\fR
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+\fBauto\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fBcat\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBclosed\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fBdriver\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBexport\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBhibernate\fR
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+\fBhybrid\-sleep\fR
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+\fBjournal\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBjson\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBjson\-pretty\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBjson\-sse\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBkernel\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBshort\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBshort\-iso\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBshort\-monotonic\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBshort\-precise\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBstdout\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBstrict\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fBsuspend\fR
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+\fBsyslog\fR
+.RS 4
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBverbose\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.SH "CONSTANTS"
+.PP
+Various constant used and/or defined by systemd\&.
+.PP
+\fB\-0\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB\-1\fR
+.RS 4
+\fBjournalctl\fR(1),
+\fBsd_journal_get_fd\fR(3),
+\fBsd_login_monitor_new\fR(3),
+\fBsystemd\fR(1)
+.RE
+.PP
+\fB\-ECHILD\fR
+.RS 4
+\fBsd_journal_open\fR(3)
+.RE
+.PP
+\fB1\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fB2\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+\fBAF_INET\fR
+.RS 4
+\fBsd_is_fifo\fR(3)
+.RE
+.PP
+\fBAF_INET6\fR
+.RS 4
+\fBsd_is_fifo\fR(3)
+.RE
+.PP
+\fBAF_NETLINK\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fBAF_UNIX\fR
+.RS 4
+\fBdaemon\fR(7),
+\fBpam_systemd\fR(8),
+\fBsd_is_fifo\fR(3),
+\fBsd_notify\fR(3),
+\fBsystemd\fR(1),
+\fBsystemd-journald.service\fR(8),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fBAF_UNSPEC\fR
+.RS 4
+\fBsd_is_fifo\fR(3)
+.RE
+.PP
+\fBCAP_DAC_OVERRIDE\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fBCAP_SYS_ADMIN\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fBCAP_SYS_PTRACE\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fBCLOCK_MONOTONIC\fR
+.RS 4
+\fBbootchart.conf\fR(5),
+\fBsd_journal_get_cutoff_realtime_usec\fR(3),
+\fBsd_journal_get_fd\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_seek_head\fR(3),
+\fBsd_login_monitor_new\fR(3),
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBCLOCK_REALTIME\fR
+.RS 4
+\fBsd_journal_get_cutoff_realtime_usec\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_seek_head\fR(3),
+\fBsystemd.journal-fields\fR(7)
+.RE
+.PP
+\fBLOG_ALERT\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_CRIT\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_DEBUG\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_EMERG\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_ERR\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_INFO\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_NOTICE\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBLOG_WARNING\fR
+.RS 4
+\fBsd_journal_print\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBNUL\fR
+.RS 4
+\fBsd_id128_to_string\fR(3),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fBNULL\fR
+.RS 4
+\fBsd-login\fR(3),
+\fBsd_get_seats\fR(3),
+\fBsd_is_fifo\fR(3),
+\fBsd_journal_get_cutoff_realtime_usec\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_print\fR(3),
+\fBsd_login_monitor_new\fR(3),
+\fBsd_seat_get_active\fR(3),
+\fBsd_session_is_active\fR(3),
+\fBsd_uid_get_state\fR(3)
+.RE
+.PP
+\fBPOLLIN\fR
+.RS 4
+\fBsd_journal_get_fd\fR(3),
+\fBsd_login_monitor_new\fR(3)
+.RE
+.PP
+\fBPOLLOUT\fR
+.RS 4
+\fBsd_journal_get_fd\fR(3),
+\fBsd_login_monitor_new\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_APPEND\fR
+.RS 4
+\fBsd_journal_get_fd\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_CURRENT_USER\fR
+.RS 4
+\fBsd_journal_open\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_INVALIDATE\fR
+.RS 4
+\fBsd_journal_get_fd\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_LOCAL_ONLY\fR
+.RS 4
+\fBsd_journal_get_usage\fR(3),
+\fBsd_journal_open\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_NOP\fR
+.RS 4
+\fBsd_journal_get_fd\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_RUNTIME_ONLY\fR
+.RS 4
+\fBsd_journal_open\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_SYSTEM\fR
+.RS 4
+\fBsd_journal_open\fR(3)
+.RE
+.PP
+\fBSD_JOURNAL_SYSTEM_ONLY\fR
+.RS 4
+\fBsd_journal_open\fR(3)
+.RE
+.PP
+\fBSD_WARNING\fR
+.RS 4
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBSIGHUP\fR
+.RS 4
+\fBdaemon\fR(7),
+\fBsystemd\fR(1),
+\fBsystemd.kill\fR(5),
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fBSIGINT\fR
+.RS 4
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd.service\fR(5),
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBSIGKILL\fR
+.RS 4
+\fBsystemd.kill\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5)
+.RE
+.PP
+\fBSIGPIPE\fR
+.RS 4
+\fBsystemd.exec\fR(5),
+\fBsystemd.service\fR(5)
+.RE
+.PP
+\fBSIGPWR\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+0\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+1\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+13\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+14\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+15\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+16\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+2\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+20\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+21\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+22\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+23\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+24\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+26\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+27\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+28\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+29\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+3\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+4\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+5\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGRTMIN+6\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGSTOP\fR
+.RS 4
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fBSIGSYS\fR
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fBSIGTERM\fR
+.RS 4
+\fBdaemon\fR(7),
+\fBloginctl\fR(1),
+\fBmachinectl\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd.kill\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.special\fR(7),
+\fBsystemd.swap\fR(5)
+.RE
+.PP
+\fBSIGUSR1\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGUSR2\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIGWINCH\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBSIG_DFL\fR
+.RS 4
+\fBdaemon\fR(7)
+.RE
+.PP
+\fBSOCK_DGRAM\fR
+.RS 4
+\fBsd_is_fifo\fR(3),
+\fBsystemd-journald.service\fR(8),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fBSOCK_SEQPACKET\fR
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fBSOCK_STREAM\fR
+.RS 4
+\fBsd_is_fifo\fR(3),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+\fBapplication/event\-stream\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+\fBapplication/json\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+\fBapplication/vnd\&.fdo\&.journal\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+\fBlibsystemd\-daemon\fR
+.RS 4
+\fBsd-daemon\fR(3),
+\fBsd_booted\fR(3),
+\fBsd_is_fifo\fR(3),
+\fBsd_listen_fds\fR(3),
+\fBsd_notify\fR(3)
+.RE
+.PP
+\fBlibsystemd\-journal\fR
+.RS 4
+\fBsd-journal\fR(3),
+\fBsd_journal_add_match\fR(3),
+\fBsd_journal_get_catalog\fR(3),
+\fBsd_journal_get_cursor\fR(3),
+\fBsd_journal_get_cutoff_realtime_usec\fR(3),
+\fBsd_journal_get_data\fR(3),
+\fBsd_journal_get_fd\fR(3),
+\fBsd_journal_get_realtime_usec\fR(3),
+\fBsd_journal_get_usage\fR(3),
+\fBsd_journal_next\fR(3),
+\fBsd_journal_open\fR(3),
+\fBsd_journal_print\fR(3),
+\fBsd_journal_query_unique\fR(3),
+\fBsd_journal_seek_head\fR(3),
+\fBsd_journal_stream_fd\fR(3)
+.RE
+.PP
+\fBlibsystemd\-login\fR
+.RS 4
+\fBsd-login\fR(3),
+\fBsd_get_seats\fR(3),
+\fBsd_login_monitor_new\fR(3),
+\fBsd_pid_get_session\fR(3),
+\fBsd_seat_get_active\fR(3),
+\fBsd_session_is_active\fR(3),
+\fBsd_uid_get_state\fR(3)
+.RE
+.PP
+\fBm\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fBr\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+\fBtext/plain\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+\fBw\fR
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.SH "MISCELLANEOUS OPTIONS AND DIRECTIVES"
+.PP
+Other configuration elements which don\*(Aqt fit in any of the above groups\&.
+.PP
+\fIANSI_COLOR=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIBUG_REPORT_URL=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIBUILD_ID=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fICHASSIS=\fR
+.RS 4
+\fBmachine-info\fR(5)
+.RE
+.PP
+\fICPE_NAME=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fICompress=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fID\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIF\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIFONT=\fR
+.RS 4
+\fBvconsole.conf\fR(5)
+.RE
+.PP
+\fIFONT_MAP=\fR
+.RS 4
+\fBvconsole.conf\fR(5)
+.RE
+.PP
+\fIFONT_UNIMAP=\fR
+.RS 4
+\fBvconsole.conf\fR(5)
+.RE
+.PP
+\fIForwardToConsole=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIForwardToKMsg=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIForwardToSyslog=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIHOME_URL=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIHandleHibernateKey=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIHandleLidSwitch=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIHandlePowerKey=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIHandleSuspendKey=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIHibernateKeyIgnoreInhibited=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIICON_NAME=\fR
+.RS 4
+\fBmachine-info\fR(5)
+.RE
+.PP
+\fIID=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIID_LIKE=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIIdleAction=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIIdleActionSec=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIInhibitDelayMaxSec=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIKEYMAP=\fR
+.RS 4
+\fBvconsole.conf\fR(5)
+.RE
+.PP
+\fIKEYMAP_TOGGLE=\fR
+.RS 4
+\fBvconsole.conf\fR(5)
+.RE
+.PP
+\fIKillExcludeUsers=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIKillOnlyUsers=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIKillUserProcesses=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIL\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fILidSwitchIgnoreInhibited=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIMaxFileSec=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIMaxLevelConsole=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIMaxLevelKMsg=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIMaxLevelStore=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIMaxLevelSyslog=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIMaxRetentionSec=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fINAME=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fINAutoVTs=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIPRETTY_HOSTNAME=\fR
+.RS 4
+\fBmachine-info\fR(5)
+.RE
+.PP
+\fIPRETTY_NAME=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIPowerKeyIgnoreInhibited=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIR\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIRateLimitBurst=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIRateLimitInterval=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIReserveVT=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fIRuntimeKeepFree=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIRuntimeMaxFileSize=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIRuntimeMaxUse=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fISUPPORT_URL=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fISeal=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fISplitMode=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIStorage=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fISuspendKeyIgnoreInhibited=\fR
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+\fISyncIntervalSec=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fISystemKeepFree=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fISystemMaxFileSize=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fISystemMaxUse=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fITTYPath=\fR
+.RS 4
+\fBjournald.conf\fR(5)
+.RE
+.PP
+\fIVERSION=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIVERSION_ID=\fR
+.RS 4
+\fBos-release\fR(5)
+.RE
+.PP
+\fIX\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIZ\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIb\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIc\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fId\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIequivalent\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fIextended\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fIf\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIh\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fBm\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fImasked\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fImin\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIms\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIoverridden\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fIp\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fBr\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIredirected\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fIs\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIudev_log\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+\fIunchanged\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fIus\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fBw\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIx\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+\fIz\fR
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.SH "FILES AND DIRECTORIES"
+.PP
+Paths and file names referred to in the documentation\&.
+.PP
+/
+.RS 4
+\fBsystemd-remount-fs.service\fR(8),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+$HOME/\&.config/systemd/user/
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\-\&.slice
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+/\&.readahead
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+/bin
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/bin/ls
+.RS 4
+\fBsystemd-cat\fR(1)
+.RE
+.PP
+/bin/sh
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/boot
+.RS 4
+\fBkernel-install\fR(8),
+\fBsystemd-efi-boot-generator\fR(8)
+.RE
+.PP
+/boot/loader/entries/\fIMACHINE\-ID\fR\-\fIKERNEL\-VERSION\fR\&.conf
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+/dev
+.RS 4
+\fBsystemd-nspawn\fR(1),
+\fBsystemd-remount-fs.service\fR(8),
+\fBsystemd.device\fR(5),
+\fBsystemd.journal-fields\fR(7),
+\fBudev\fR(7)
+.RE
+.PP
+/dev/console
+.RS 4
+\fBjournald.conf\fR(5),
+\fBsystemd-getty-generator\fR(8),
+\fBsystemd-tty-ask-password-agent\fR(1),
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/dev/full
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+/dev/hw_random
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+/dev/initctl
+.RS 4
+\fBsystemd\fR(1),
+\fBsystemd-initctl.service\fR(8)
+.RE
+.PP
+/dev/mapper/
+.RS 4
+\fBcrypttab\fR(5)
+.RE
+.PP
+/dev/null
+.RS 4
+\fBbinfmt.d\fR(5),
+\fBdaemon\fR(7),
+\fBmodules-load.d\fR(5),
+\fBsysctl.d\fR(5),
+\fBsystemctl\fR(1),
+\fBsystemd.exec\fR(5),
+\fBsystemd.preset\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.unit\fR(5),
+\fBtmpfiles.d\fR(5),
+\fBudev\fR(7)
+.RE
+.PP
+/dev/random
+.RS 4
+\fBcrypttab\fR(5),
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+/dev/urandom
+.RS 4
+\fBcrypttab\fR(5),
+\fBsd_id128_randomize\fR(3),
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+/dev/watchdog
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+/dev/zero
+.RS 4
+\fBsystemd.resource-control\fR(5)
+.RE
+.PP
+/etc/
+.RS 4
+\fBbinfmt.d\fR(5),
+\fBmodules-load.d\fR(5),
+\fBnss-myhostname\fR(8),
+\fBsysctl.d\fR(5),
+\fBsystemctl\fR(1),
+\fBsystemd-delta\fR(1),
+\fBsystemd.mount\fR(5),
+\fBsystemd.preset\fR(5),
+\fBtmpfiles.d\fR(5),
+\fBudev\fR(7)
+.RE
+.PP
+/etc/adjtime
+.RS 4
+\fBtimedatectl\fR(1)
+.RE
+.PP
+/etc/binfmt\&.d/
+.RS 4
+\fBbinfmt.d\fR(5)
+.RE
+.PP
+/etc/binfmt\&.d/*\&.conf
+.RS 4
+\fBbinfmt.d\fR(5)
+.RE
+.PP
+/etc/crypttab
+.RS 4
+\fBcrypttab\fR(5),
+\fBsystemd-cryptsetup-generator\fR(8),
+\fBsystemd-cryptsetup@.service\fR(8)
+.RE
+.PP
+/etc/fstab
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBsystemd\fR(1),
+\fBsystemd-cryptsetup-generator\fR(8),
+\fBsystemd-fstab-generator\fR(8),
+\fBsystemd-gpt-auto-generator\fR(8),
+\fBsystemd-remount-fs.service\fR(8),
+\fBsystemd.automount\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.special\fR(7),
+\fBsystemd.swap\fR(5)
+.RE
+.PP
+/etc/hostname
+.RS 4
+\fBhostname\fR(5),
+\fBhostnamectl\fR(1),
+\fBmachine-info\fR(5)
+.RE
+.PP
+/etc/hosts
+.RS 4
+\fBnss-myhostname\fR(8)
+.RE
+.PP
+/etc/kernel/cmdline
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+/etc/kernel/install\&.d/
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+/etc/kernel/install\&.d/*\&.install
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+/etc/locale\&.conf
+.RS 4
+\fBlocale.conf\fR(5),
+\fBsystemd\fR(1)
+.RE
+.PP
+/etc/localtime
+.RS 4
+\fBlocaltime\fR(5),
+\fBtimedatectl\fR(1)
+.RE
+.PP
+/etc/machine\-id
+.RS 4
+\fBkernel-install\fR(8),
+\fBmachine-id\fR(5),
+\fBsystemd-machine-id-setup\fR(1),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+/etc/machine\-info
+.RS 4
+\fBhostnamectl\fR(1),
+\fBmachine-info\fR(5)
+.RE
+.PP
+/etc/modules\-load\&.d/\fIprogram\fR\&.conf
+.RS 4
+\fBmodules-load.d\fR(5)
+.RE
+.PP
+/etc/modules\-load\&.d/*\&.conf
+.RS 4
+\fBmodules-load.d\fR(5)
+.RE
+.PP
+/etc/nsswitch\&.conf
+.RS 4
+\fBnss-myhostname\fR(8)
+.RE
+.PP
+/etc/os\-release
+.RS 4
+\fBkernel-install\fR(8),
+\fBos-release\fR(5),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+/etc/sysctl\&.d/
+.RS 4
+\fBsysctl.d\fR(5)
+.RE
+.PP
+/etc/sysctl\&.d/*\&.conf
+.RS 4
+\fBsysctl.d\fR(5)
+.RE
+.PP
+/etc/systemd/bootchart\&.conf
+.RS 4
+\fBbootchart.conf\fR(5),
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+/etc/systemd/journald\&.conf
+.RS 4
+\fBjournald.conf\fR(5),
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+/etc/systemd/logind\&.conf
+.RS 4
+\fBlogind.conf\fR(5)
+.RE
+.PP
+/etc/systemd/sleep\&.conf
+.RS 4
+\fBsystemd-sleep.conf\fR(5),
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+/etc/systemd/system/
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/etc/systemd/system\-preset/
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/etc/systemd/system\-preset/*\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/etc/systemd/system\-preset/00\-lennart\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/etc/systemd/system\&.conf
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+/etc/systemd/user/
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/etc/systemd/user\-preset/*\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/etc/systemd/user\&.conf
+.RS 4
+\fBsystemd-system.conf\fR(5)
+.RE
+.PP
+/etc/tmpfiles\&.d/
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+/etc/tmpfiles\&.d/*\&.conf
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+/etc/udev/hwdb\&.bin
+.RS 4
+\fBudev\fR(7),
+\fBudevadm\fR(8)
+.RE
+.PP
+/etc/udev/hwdb\&.d
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/etc/udev/rules\&.d
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/etc/udev/udev\&.conf
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+/etc/vconsole\&.conf
+.RS 4
+\fBvconsole.conf\fR(5)
+.RE
+.PP
+/home
+.RS 4
+\fBsystemd-gpt-auto-generator\fR(8)
+.RE
+.PP
+/home/lennart
+.RS 4
+\fBsystemd.automount\fR(5)
+.RE
+.PP
+/lib
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/proc
+.RS 4
+\fBsd-login\fR(3),
+\fBsystemd\fR(1),
+\fBsystemd-remount-fs.service\fR(8),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+/proc/cmdline
+.RS 4
+\fBkernel-command-line\fR(7),
+\fBkernel-install\fR(8),
+\fBsystemd\fR(1)
+.RE
+.PP
+/proc/self/fd
+.RS 4
+\fBdaemon\fR(7)
+.RE
+.PP
+/proc/self/mountinfo
+.RS 4
+\fBsystemd.mount\fR(5)
+.RE
+.PP
+/proc/self/sessionid
+.RS 4
+\fBpam_systemd\fR(8)
+.RE
+.PP
+/proc/sys
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+/proc/sys/kernel/random/boot_id
+.RS 4
+\fBsd_id128_get_machine\fR(3)
+.RE
+.PP
+/proc/sys/net/ipv4/tcp_keepalive_time
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+/proc/sys/net/ipv6/bindv6only
+.RS 4
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+/run/
+.RS 4
+\fBbinfmt.d\fR(5),
+\fBmodules-load.d\fR(5),
+\fBsd-login\fR(3),
+\fBsysctl.d\fR(5),
+\fBsystemctl\fR(1),
+\fBsystemd-journald.service\fR(8),
+\fBsystemd-nspawn\fR(1),
+\fBsystemd.preset\fR(5),
+\fBsystemd.unit\fR(5),
+\fBtmpfiles.d\fR(5),
+\fBudev\fR(7)
+.RE
+.PP
+/run/binfmt\&.d/*\&.conf
+.RS 4
+\fBbinfmt.d\fR(5)
+.RE
+.PP
+/run/log
+.RS 4
+\fBbootchart.conf\fR(5),
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+/run/log/journal
+.RS 4
+\fBjournald.conf\fR(5),
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+/run/modules\-load\&.d/*\&.conf
+.RS 4
+\fBmodules-load.d\fR(5)
+.RE
+.PP
+/run/nologin
+.RS 4
+\fBshutdown\fR(8),
+\fBsystemd-user-sessions.service\fR(8)
+.RE
+.PP
+/run/sysctl\&.d/*\&.conf
+.RS 4
+\fBsysctl.d\fR(5)
+.RE
+.PP
+/run/systemd/journal/syslog
+.RS 4
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+/run/systemd/notify
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+/run/systemd/private
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+/run/systemd/readahead/
+.RS 4
+\fBsd_readahead\fR(3)
+.RE
+.PP
+/run/systemd/shutdownd
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+/run/systemd/system/
+.RS 4
+\fBsd_booted\fR(3),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/run/systemd/system\-preset/*\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/run/systemd/user/
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/run/systemd/user\-preset/*\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/run/tmpfiles\&.d/*\&.conf
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+/run/udev/hwdb\&.d
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/run/udev/rules\&.d
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/run/udev/static_node\-tags/\fItag\fR
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/run/user/$USER
+.RS 4
+\fBpam_systemd\fR(8)
+.RE
+.PP
+/sbin
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/sbin/init
+.RS 4
+\fBbootchart.conf\fR(5)
+.RE
+.PP
+/sys
+.RS 4
+\fBloginctl\fR(1),
+\fBsystemd\fR(1),
+\fBsystemd-nspawn\fR(1),
+\fBsystemd-remount-fs.service\fR(8),
+\fBsystemd.device\fR(5),
+\fBsystemd.journal-fields\fR(7),
+\fBsystemd.socket\fR(5)
+.RE
+.PP
+/sys/fs/cgroup
+.RS 4
+\fBsd-login\fR(3),
+\fBsystemd-cgls\fR(1)
+.RE
+.PP
+/sys/fs/cgroup/systemd/
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+/sys/fs/selinux
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+/sys/power/disk
+.RS 4
+\fBsystemd-sleep.conf\fR(5)
+.RE
+.PP
+/sys/power/state
+.RS 4
+\fBsystemd-sleep.conf\fR(5),
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+/sysroot
+.RS 4
+\fBbootup\fR(7)
+.RE
+.PP
+/sysroot/etc/fstab
+.RS 4
+\fBbootup\fR(7)
+.RE
+.PP
+/system
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/system\-update
+.RS 4
+\fBsystemd-system-update-generator\fR(8),
+\fBsystemd.special\fR(7)
+.RE
+.PP
+/tmp
+.RS 4
+\fBcrypttab\fR(5),
+\fBsystemd.exec\fR(5),
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+/usr
+.RS 4
+\fBbootup\fR(7),
+\fBsystemd-delta\fR(1),
+\fBsystemd-remount-fs.service\fR(8),
+\fBsystemd.mount\fR(5)
+.RE
+.PP
+/usr/bin
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/usr/lib/
+.RS 4
+\fBbinfmt.d\fR(5),
+\fBmodules-load.d\fR(5),
+\fBsysctl.d\fR(5),
+\fBsystemd-delta\fR(1),
+\fBsystemd.preset\fR(5),
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+/usr/lib/binfmt\&.d/*\&.conf
+.RS 4
+\fBbinfmt.d\fR(5)
+.RE
+.PP
+/usr/lib/kernel/install\&.d/
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+/usr/lib/kernel/install\&.d/*\&.install
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+/usr/lib/modules\-load\&.d/*\&.conf
+.RS 4
+\fBmodules-load.d\fR(5)
+.RE
+.PP
+/usr/lib/sysctl\&.d/*\&.conf
+.RS 4
+\fBsysctl.d\fR(5)
+.RE
+.PP
+/usr/lib/systemd/system
+.RS 4
+\fBsystemd\fR(1),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/usr/lib/systemd/system\-generators/systemd\-cryptsetup\-generator
+.RS 4
+\fBsystemd-cryptsetup-generator\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-generators/systemd\-efi\-boot\-generator
+.RS 4
+\fBsystemd-efi-boot-generator\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-generators/systemd\-fstab\-generator
+.RS 4
+\fBsystemd-fstab-generator\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-generators/systemd\-getty\-generator
+.RS 4
+\fBsystemd-getty-generator\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-generators/systemd\-gpt\-auto\-generator
+.RS 4
+\fBsystemd-gpt-auto-generator\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-generators/systemd\-system\-update\-generator
+.RS 4
+\fBsystemd-system-update-generator\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-preset/*\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/usr/lib/systemd/system\-preset/50\-gnome\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/usr/lib/systemd/system\-preset/99\-default\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/usr/lib/systemd/system\-shutdown/
+.RS 4
+\fBsystemd-halt.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/system\-sleep/
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+\fB/usr/lib/systemd/systemd\-activate\fR
+.RS 4
+\fBsystemd-activate\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-backlight
+.RS 4
+\fBsystemd-backlight@.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-binfmt
+.RS 4
+\fBsystemd-binfmt.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-bootchart
+.RS 4
+\fBsystemd-bootchart\fR(1)
+.RE
+.PP
+/usr/lib/systemd/systemd\-cryptsetup
+.RS 4
+\fBsystemd-cryptsetup@.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-fsck
+.RS 4
+\fBsystemd-fsck@.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-hostnamed
+.RS 4
+\fBsystemd-hostnamed.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-initctl
+.RS 4
+\fBsystemd-initctl.service\fR(8)
+.RE
+.PP
+\fB/usr/lib/systemd/systemd\-journal\-gatewayd\fR
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-journald
+.RS 4
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-localed
+.RS 4
+\fBsystemd-localed.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-logind
+.RS 4
+\fBsystemd-logind.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-machined
+.RS 4
+\fBsystemd-machined.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-modules\-load
+.RS 4
+\fBsystemd-modules-load.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-quotacheck
+.RS 4
+\fBsystemd-quotacheck.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-random\-seed
+.RS 4
+\fBsystemd-random-seed.service\fR(8)
+.RE
+.PP
+\fB/usr/lib/systemd/systemd\-readahead/systemd\-readahead\fR
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-remount\-fs
+.RS 4
+\fBsystemd-remount-fs.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-shutdown
+.RS 4
+\fBsystemd-halt.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-shutdownd
+.RS 4
+\fBsystemd-shutdownd.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-sleep
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-sysctl
+.RS 4
+\fBsystemd-sysctl.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-timedated
+.RS 4
+\fBsystemd-timedated.service\fR(8)
+.RE
+.PP
+\fB/usr/lib/systemd/systemd\-udevd\fR
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-update\-utmp
+.RS 4
+\fBsystemd-update-utmp.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-user\-sessions
+.RS 4
+\fBsystemd-user-sessions.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/systemd\-vconsole\-setup
+.RS 4
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.PP
+/usr/lib/systemd/user/
+.RS 4
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+/usr/lib/systemd/user\-preset/*\&.preset
+.RS 4
+\fBsystemd.preset\fR(5)
+.RE
+.PP
+/usr/lib/tmpfiles\&.d/*\&.conf
+.RS 4
+\fBtmpfiles.d\fR(5)
+.RE
+.PP
+/usr/lib/udev/hwdb\&.d
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/usr/lib/udev/rules\&.d
+.RS 4
+\fBudev\fR(7)
+.RE
+.PP
+/usr/local/bin
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/usr/local/lib/systemd/system
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+/usr/local/sbin
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/usr/sbin
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+/usr/share/zoneinfo/
+.RS 4
+\fBlocaltime\fR(5)
+.RE
+.PP
+/var
+.RS 4
+\fBjournald.conf\fR(5),
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+/var/lib/backlight/
+.RS 4
+\fBsystemd-backlight@.service\fR(8)
+.RE
+.PP
+/var/lib/dbus/machine\-id
+.RS 4
+\fBmachine-id\fR(5)
+.RE
+.PP
+/var/lib/random\-seed
+.RS 4
+\fBsystemd-random-seed.service\fR(8)
+.RE
+.PP
+/var/log/journal
+.RS 4
+\fBjournald.conf\fR(5),
+\fBsystemd-journald.service\fR(8),
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+/var/run/foobar\&.pid
+.RS 4
+\fBdaemon\fR(7)
+.RE
+.PP
+/var/run/utmp
+.RS 4
+\fBrunlevel\fR(8)
+.RE
+.PP
+/var/tmp
+.RS 4
+\fBsystemd.exec\fR(5)
+.RE
+.PP
+\fIautomount\fR\&.automount
+.RS 4
+\fBsystemd.automount\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+basic\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+bluetooth\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+cryptsetup\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+ctrl\-alt\-del\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+dbus\&.service
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+dbus\&.socket
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+default\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fIdevice\fR\&.device
+.RS 4
+\fBsystemd.device\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+display\-manager\&.service
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+emergency\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+exit\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+final\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+getty\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+graphical\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBhalt\fR
+.RS 4
+\fBhalt\fR(8)
+.RE
+.PP
+halt\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+hibernate\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBhostnamectl\fR
+.RS 4
+\fBhostnamectl\fR(1)
+.RE
+.PP
+hybrid\-sleep\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBinit\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+initrd\-fs\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+initrd\-root\-fs\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBjournalctl\fR
+.RS 4
+\fBjournalctl\fR(1)
+.RE
+.PP
+kbrequest\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBkernel\-install\fR
+.RS 4
+\fBkernel-install\fR(8)
+.RE
+.PP
+kexec\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+local\-fs\-pre\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+local\-fs\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBlocalectl\fR
+.RS 4
+\fBlocalectl\fR(1)
+.RE
+.PP
+\fBloginctl\fR
+.RS 4
+\fBloginctl\fR(1)
+.RE
+.PP
+machine\&.slice
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBmachinectl\fR
+.RS 4
+\fBmachinectl\fR(1)
+.RE
+.PP
+\fImount\fR\&.mount
+.RS 4
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+multi\-user\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+network\-online\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+network\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+nss\-lookup\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+nss\-myhostname\&.la
+.RS 4
+\fBnss-myhostname\fR(8)
+.RE
+.PP
+nss\-user\-lookup\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+pam_systemd\&.so
+.RS 4
+\fBpam_systemd\fR(8)
+.RE
+.PP
+\fIpath\fR\&.path
+.RS 4
+\fBsystemd.path\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+paths\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBpkg\-config\fR
+.RS 4
+\fBsd-daemon\fR(3),
+\fBsd-id128\fR(3),
+\fBsd-journal\fR(3),
+\fBsd-login\fR(3)
+.RE
+.PP
+\fBpoweroff\fR
+.RS 4
+\fBhalt\fR(8)
+.RE
+.PP
+poweroff\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+printer\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBreboot\fR
+.RS 4
+\fBhalt\fR(8)
+.RE
+.PP
+reboot\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+remote\-fs\-pre\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+remote\-fs\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+rescue\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+rpcbind\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBrunlevel\fR
+.RS 4
+\fBrunlevel\fR(8)
+.RE
+.PP
+runlevel2\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+runlevel3\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+runlevel4\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+runlevel5\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fIscope\fR\&.scope
+.RS 4
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.scope\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIservice\fR\&.service
+.RS 4
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fBshutdown\fR
+.RS 4
+\fBshutdown\fR(8)
+.RE
+.PP
+shutdown\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+sigpwr\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+sleep\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fIslice\fR\&.slice
+.RS 4
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.slice\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+smartcard\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fIsnapshot\fR\&.snapshot
+.RS 4
+\fBsystemd.snapshot\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fIsocket\fR\&.socket
+.RS 4
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+sockets\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+sound\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+suspend\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fIswap\fR\&.swap
+.RS 4
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+swap\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+sysinit\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+syslog\&.socket
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+system\-update\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+system\&.slice
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBsystemctl\fR
+.RS 4
+\fBsystemctl\fR(1)
+.RE
+.PP
+\fBsystemd\fR
+.RS 4
+\fBsystemd\fR(1)
+.RE
+.PP
+\fBsystemd\-analyze\fR
+.RS 4
+\fBsystemd-analyze\fR(1)
+.RE
+.PP
+\fBsystemd\-ask\-password\fR
+.RS 4
+\fBsystemd-ask-password\fR(1)
+.RE
+.PP
+systemd\-ask\-password\-console\&.path
+.RS 4
+\fBsystemd-ask-password-console.service\fR(8)
+.RE
+.PP
+systemd\-ask\-password\-console\&.service
+.RS 4
+\fBsystemd-ask-password-console.service\fR(8)
+.RE
+.PP
+systemd\-ask\-password\-wall\&.path
+.RS 4
+\fBsystemd-ask-password-console.service\fR(8)
+.RE
+.PP
+systemd\-ask\-password\-wall\&.service
+.RS 4
+\fBsystemd-ask-password-console.service\fR(8)
+.RE
+.PP
+systemd\-backlight@\&.service
+.RS 4
+\fBsystemd-backlight@.service\fR(8)
+.RE
+.PP
+systemd\-binfmt\&.service
+.RS 4
+\fBsystemd-binfmt.service\fR(8)
+.RE
+.PP
+\fBsystemd\-cat\fR
+.RS 4
+\fBsystemd-cat\fR(1)
+.RE
+.PP
+\fBsystemd\-cgls\fR
+.RS 4
+\fBsystemd-cgls\fR(1)
+.RE
+.PP
+\fBsystemd\-cgtop\fR
+.RS 4
+\fBsystemd-cgtop\fR(1)
+.RE
+.PP
+\fBsystemd\-coredumpctl\fR
+.RS 4
+\fBsystemd-coredumpctl\fR(1)
+.RE
+.PP
+systemd\-cryptsetup@\&.service
+.RS 4
+\fBsystemd-cryptsetup@.service\fR(8)
+.RE
+.PP
+\fBsystemd\-delta\fR
+.RS 4
+\fBsystemd-delta\fR(1)
+.RE
+.PP
+\fBsystemd\-detect\-virt\fR
+.RS 4
+\fBsystemd-detect-virt\fR(1)
+.RE
+.PP
+systemd\-fsck\-root\&.service
+.RS 4
+\fBsystemd-fsck@.service\fR(8)
+.RE
+.PP
+systemd\-fsck@\&.service
+.RS 4
+\fBsystemd-fsck@.service\fR(8)
+.RE
+.PP
+systemd\-halt\&.service
+.RS 4
+\fBsystemd-halt.service\fR(8)
+.RE
+.PP
+systemd\-hibernate\&.service
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+systemd\-hostnamed\&.service
+.RS 4
+\fBsystemd-hostnamed.service\fR(8)
+.RE
+.PP
+systemd\-hybrid\-sleep\&.service
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+\fBsystemd\-inhibit\fR
+.RS 4
+\fBsystemd-inhibit\fR(1)
+.RE
+.PP
+systemd\-initctl\&.service
+.RS 4
+\fBsystemd-initctl.service\fR(8)
+.RE
+.PP
+systemd\-initctl\&.socket
+.RS 4
+\fBsystemd-initctl.service\fR(8)
+.RE
+.PP
+systemd\-journal\-gatewayd\&.service
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+systemd\-journal\-gatewayd\&.socket
+.RS 4
+\fBsystemd-journal-gatewayd.service\fR(8)
+.RE
+.PP
+systemd\-journald\&.service
+.RS 4
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+systemd\-journald\&.socket
+.RS 4
+\fBsystemd-journald.service\fR(8)
+.RE
+.PP
+systemd\-kexec\&.service
+.RS 4
+\fBsystemd-halt.service\fR(8)
+.RE
+.PP
+systemd\-localed\&.service
+.RS 4
+\fBsystemd-localed.service\fR(8)
+.RE
+.PP
+systemd\-logind\&.service
+.RS 4
+\fBsystemd-logind.service\fR(8)
+.RE
+.PP
+\fBsystemd\-machine\-id\-setup\fR
+.RS 4
+\fBsystemd-machine-id-setup\fR(1)
+.RE
+.PP
+systemd\-machined\&.service
+.RS 4
+\fBsystemd-machined.service\fR(8)
+.RE
+.PP
+systemd\-modules\-load\&.service
+.RS 4
+\fBsystemd-modules-load.service\fR(8)
+.RE
+.PP
+\fBsystemd\-notify\fR
+.RS 4
+\fBsystemd-notify\fR(1)
+.RE
+.PP
+\fBsystemd\-nspawn\fR
+.RS 4
+\fBsystemd-nspawn\fR(1)
+.RE
+.PP
+systemd\-poweroff\&.service
+.RS 4
+\fBsystemd-halt.service\fR(8)
+.RE
+.PP
+systemd\-quotacheck\&.service
+.RS 4
+\fBsystemd-quotacheck.service\fR(8)
+.RE
+.PP
+systemd\-random\-seed\&.service
+.RS 4
+\fBsystemd-random-seed.service\fR(8)
+.RE
+.PP
+systemd\-readahead\-collect\&.service
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+systemd\-readahead\-done\&.service
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+systemd\-readahead\-done\&.timer
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+systemd\-readahead\-replay\&.service
+.RS 4
+\fBsystemd-readahead-replay.service\fR(8)
+.RE
+.PP
+systemd\-reboot\&.service
+.RS 4
+\fBsystemd-halt.service\fR(8)
+.RE
+.PP
+systemd\-remount\-fs\&.service
+.RS 4
+\fBsystemd-remount-fs.service\fR(8)
+.RE
+.PP
+\fBsystemd\-run\fR
+.RS 4
+\fBsystemd-run\fR(1)
+.RE
+.PP
+systemd\-shutdownd\&.service
+.RS 4
+\fBsystemd-shutdownd.service\fR(8)
+.RE
+.PP
+systemd\-shutdownd\&.socket
+.RS 4
+\fBsystemd-shutdownd.service\fR(8)
+.RE
+.PP
+systemd\-suspend\&.service
+.RS 4
+\fBsystemd-suspend.service\fR(8)
+.RE
+.PP
+systemd\-sysctl\&.service
+.RS 4
+\fBsystemd-sysctl.service\fR(8)
+.RE
+.PP
+systemd\-timedated\&.service
+.RS 4
+\fBsystemd-timedated.service\fR(8)
+.RE
+.PP
+\fBsystemd\-tmpfiles\fR
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+systemd\-tmpfiles\-clean\&.service
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+systemd\-tmpfiles\-clean\&.timer
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+systemd\-tmpfiles\-setup\-dev\&.service
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+systemd\-tmpfiles\-setup\&.service
+.RS 4
+\fBsystemd-tmpfiles\fR(8)
+.RE
+.PP
+\fBsystemd\-tty\-ask\-password\-agent\fR
+.RS 4
+\fBsystemd-tty-ask-password-agent\fR(1)
+.RE
+.PP
+systemd\-udevd\-control\&.socket
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+systemd\-udevd\-kernel\&.socket
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+systemd\-udevd\&.service
+.RS 4
+\fBsystemd-udevd.service\fR(8)
+.RE
+.PP
+systemd\-update\-utmp\-runlevel\&.service
+.RS 4
+\fBsystemd-update-utmp.service\fR(8)
+.RE
+.PP
+systemd\-update\-utmp\&.service
+.RS 4
+\fBsystemd-update-utmp.service\fR(8)
+.RE
+.PP
+systemd\-user\-sessions\&.service
+.RS 4
+\fBsystemd-user-sessions.service\fR(8)
+.RE
+.PP
+systemd\-vconsole\-setup\&.service
+.RS 4
+\fBsystemd-vconsole-setup.service\fR(8)
+.RE
+.PP
+\fItarget\fR\&.target
+.RS 4
+\fBsystemd.target\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+\fBtelinit\fR
+.RS 4
+\fBtelinit\fR(8)
+.RE
+.PP
+time\-sync\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBtimedatectl\fR
+.RS 4
+\fBtimedatectl\fR(1)
+.RE
+.PP
+\fItimer\fR\&.timer
+.RS 4
+\fBsystemd.timer\fR(5),
+\fBsystemd.unit\fR(5)
+.RE
+.PP
+timers\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+\fBudevadm\fR
+.RS 4
+\fBudevadm\fR(8)
+.RE
+.PP
+umount\&.target
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.PP
+user\&.slice
+.RS 4
+\fBsystemd.special\fR(7)
+.RE
+.SH "COLOPHON"
+.PP
+This index contains 1235 entries in 13 sections, referring to 137 individual manual pages\&.
diff --git a/man/systemd.directives.html b/man/systemd.directives.html
index 607eda5fe9..426c3c9888 100644
--- a/man/systemd.directives.html
+++ b/man/systemd.directives.html
@@ -19,16 +19,16 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.directives"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.directives — Index of configuration directives</p></div><div class="refsect1"><a name="idm259778312800"></a><h2 id="Unit directives">Unit directives<a class="headerlink" title="Permalink to this headline" href="#Unit%20directives">¶</a></h2><p>Directives for configuring units, used in unit
- files.</p><div class="variablelist"><a name="unit-directives"></a><dl class="variablelist"><dt id="Accept="><span class="term"><code class="varname">Accept=</code></span><a class="headerlink" title="Permalink to this term" href="#Accept=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="After="><span class="term"><code class="varname">After=</code></span><a class="headerlink" title="Permalink to this term" href="#After=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Alias="><span class="term"><code class="varname">Alias=</code></span><a class="headerlink" title="Permalink to this term" href="#Alias=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="AllowIsolate="><span class="term"><code class="varname">AllowIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#AllowIsolate=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Also="><span class="term"><code class="varname">Also=</code></span><a class="headerlink" title="Permalink to this term" href="#Also=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Backlog="><span class="term"><code class="varname">Backlog=</code></span><a class="headerlink" title="Permalink to this term" href="#Backlog=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Before="><span class="term"><code class="varname">Before=</code></span><a class="headerlink" title="Permalink to this term" href="#Before=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="BindIPv6Only="><span class="term"><code class="varname">BindIPv6Only=</code></span><a class="headerlink" title="Permalink to this term" href="#BindIPv6Only=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="BindToDevice="><span class="term"><code class="varname">BindToDevice=</code></span><a class="headerlink" title="Permalink to this term" href="#BindToDevice=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="BindsTo="><span class="term"><code class="varname">BindsTo=</code></span><a class="headerlink" title="Permalink to this term" href="#BindsTo=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="BlockIOReadBandwidth="><span class="term"><code class="varname">BlockIOReadBandwidth=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOReadBandwidth=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="BlockIOWeight="><span class="term"><code class="varname">BlockIOWeight=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOWeight=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="BlockIOWriteBandwidth="><span class="term"><code class="varname">BlockIOWriteBandwidth=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOWriteBandwidth=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Broadcast="><span class="term"><code class="varname">Broadcast=</code></span><a class="headerlink" title="Permalink to this term" href="#Broadcast=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="BusName="><span class="term"><code class="varname">BusName=</code></span><a class="headerlink" title="Permalink to this term" href="#BusName=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="CPUAffinity="><span class="term"><code class="varname">CPUAffinity=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAffinity=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUSchedulingPolicy="><span class="term"><code class="varname">CPUSchedulingPolicy=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingPolicy=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUSchedulingPriority="><span class="term"><code class="varname">CPUSchedulingPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingPriority=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUSchedulingResetOnFork="><span class="term"><code class="varname">CPUSchedulingResetOnFork=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingResetOnFork=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUShares="><span class="term"><code class="varname">CPUShares=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUShares=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Capabilities="><span class="term"><code class="varname">Capabilities=</code></span><a class="headerlink" title="Permalink to this term" href="#Capabilities=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CapabilityBoundingSet="><span class="term"><code class="varname">CapabilityBoundingSet=</code></span><a class="headerlink" title="Permalink to this term" href="#CapabilityBoundingSet=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ConditionACPower="><span class="term"><code class="varname">ConditionACPower=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionACPower=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionCapability="><span class="term"><code class="varname">ConditionCapability=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionCapability=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionDirectoryNotEmpty="><span class="term"><code class="varname">ConditionDirectoryNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionDirectoryNotEmpty=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionFileIsExecutable="><span class="term"><code class="varname">ConditionFileIsExecutable=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionFileIsExecutable=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionFileNotEmpty="><span class="term"><code class="varname">ConditionFileNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionFileNotEmpty=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionHost="><span class="term"><code class="varname">ConditionHost=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionHost=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionKernelCommandLine="><span class="term"><code class="varname">ConditionKernelCommandLine=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionKernelCommandLine=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionNull="><span class="term"><code class="varname">ConditionNull=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionNull=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathExists="><span class="term"><code class="varname">ConditionPathExists=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathExists=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathExistsGlob="><span class="term"><code class="varname">ConditionPathExistsGlob=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathExistsGlob=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsDirectory="><span class="term"><code class="varname">ConditionPathIsDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsDirectory=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsMountPoint="><span class="term"><code class="varname">ConditionPathIsMountPoint=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsMountPoint=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsReadWrite="><span class="term"><code class="varname">ConditionPathIsReadWrite=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsReadWrite=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsSymbolicLink="><span class="term"><code class="varname">ConditionPathIsSymbolicLink=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsSymbolicLink=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionSecurity="><span class="term"><code class="varname">ConditionSecurity=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionSecurity=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionVirtualization="><span class="term"><code class="varname">ConditionVirtualization=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionVirtualization=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Conflicts="><span class="term"><code class="varname">Conflicts=</code></span><a class="headerlink" title="Permalink to this term" href="#Conflicts=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ControlGroup="><span class="term"><code class="varname">ControlGroup=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroup=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ControlGroupAttribute="><span class="term"><code class="varname">ControlGroupAttribute=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroupAttribute=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ControlGroupModify="><span class="term"><code class="varname">ControlGroupModify=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroupModify=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ControlGroupPersistent="><span class="term"><code class="varname">ControlGroupPersistent=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroupPersistent=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="DefaultDependencies="><span class="term"><code class="varname">DefaultDependencies=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultDependencies=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Description="><span class="term"><code class="varname">Description=</code></span><a class="headerlink" title="Permalink to this term" href="#Description=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="DeviceAllow="><span class="term"><code class="varname">DeviceAllow=</code></span><a class="headerlink" title="Permalink to this term" href="#DeviceAllow=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="DeviceDeny="><span class="term"><code class="varname">DeviceDeny=</code></span><a class="headerlink" title="Permalink to this term" href="#DeviceDeny=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="DirectoryMode="><span class="term"><code class="varname">DirectoryMode=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryMode=">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="DirectoryNotEmpty="><span class="term"><code class="varname">DirectoryNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryNotEmpty=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="Documentation="><span class="term"><code class="varname">Documentation=</code></span><a class="headerlink" title="Permalink to this term" href="#Documentation=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Environment="><span class="term"><code class="varname">Environment=</code></span><a class="headerlink" title="Permalink to this term" href="#Environment=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="EnvironmentFile="><span class="term"><code class="varname">EnvironmentFile=</code></span><a class="headerlink" title="Permalink to this term" href="#EnvironmentFile=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ExecReload="><span class="term"><code class="varname">ExecReload=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecReload=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ExecStart="><span class="term"><code class="varname">ExecStart=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStart=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ExecStartPost="><span class="term"><code class="varname">ExecStartPost=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStartPost=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ExecStartPre="><span class="term"><code class="varname">ExecStartPre=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStartPre=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ExecStop="><span class="term"><code class="varname">ExecStop=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStop=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ExecStopPost="><span class="term"><code class="varname">ExecStopPost=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStopPost=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ExecStopPre="><span class="term"><code class="varname">ExecStopPre=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStopPre=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="FreeBind="><span class="term"><code class="varname">FreeBind=</code></span><a class="headerlink" title="Permalink to this term" href="#FreeBind=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="FsckPassNo="><span class="term"><code class="varname">FsckPassNo=</code></span><a class="headerlink" title="Permalink to this term" href="#FsckPassNo=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="Group="><span class="term"><code class="varname">Group=</code></span><a class="headerlink" title="Permalink to this term" href="#Group=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="GuessMainPID="><span class="term"><code class="varname">GuessMainPID=</code></span><a class="headerlink" title="Permalink to this term" href="#GuessMainPID=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="IOSchedulingClass="><span class="term"><code class="varname">IOSchedulingClass=</code></span><a class="headerlink" title="Permalink to this term" href="#IOSchedulingClass=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="IOSchedulingPriority="><span class="term"><code class="varname">IOSchedulingPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#IOSchedulingPriority=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="IPTOS="><span class="term"><code class="varname">IPTOS=</code></span><a class="headerlink" title="Permalink to this term" href="#IPTOS=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="IPTTL="><span class="term"><code class="varname">IPTTL=</code></span><a class="headerlink" title="Permalink to this term" href="#IPTTL=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="IgnoreOnIsolate="><span class="term"><code class="varname">IgnoreOnIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreOnIsolate=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="IgnoreOnSnapshot="><span class="term"><code class="varname">IgnoreOnSnapshot=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreOnSnapshot=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="IgnoreSIGPIPE="><span class="term"><code class="varname">IgnoreSIGPIPE=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreSIGPIPE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="InaccessibleDirectories="><span class="term"><code class="varname">InaccessibleDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#InaccessibleDirectories=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="JobTimeoutSec="><span class="term"><code class="varname">JobTimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#JobTimeoutSec=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="KeepAlive="><span class="term"><code class="varname">KeepAlive=</code></span><a class="headerlink" title="Permalink to this term" href="#KeepAlive=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="KillMode="><span class="term"><code class="varname">KillMode=</code></span><a class="headerlink" title="Permalink to this term" href="#KillMode=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="KillSignal="><span class="term"><code class="varname">KillSignal=</code></span><a class="headerlink" title="Permalink to this term" href="#KillSignal=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="LimitAS="><span class="term"><code class="varname">LimitAS=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitAS=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitCORE="><span class="term"><code class="varname">LimitCORE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitCORE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitCPU="><span class="term"><code class="varname">LimitCPU=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitCPU=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitDATA="><span class="term"><code class="varname">LimitDATA=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitDATA=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitFSIZE="><span class="term"><code class="varname">LimitFSIZE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitFSIZE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitLOCKS="><span class="term"><code class="varname">LimitLOCKS=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitLOCKS=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitMEMLOCK="><span class="term"><code class="varname">LimitMEMLOCK=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitMEMLOCK=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitMSGQUEUE="><span class="term"><code class="varname">LimitMSGQUEUE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitMSGQUEUE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitNICE="><span class="term"><code class="varname">LimitNICE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitNICE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitNOFILE="><span class="term"><code class="varname">LimitNOFILE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitNOFILE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitNPROC="><span class="term"><code class="varname">LimitNPROC=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitNPROC=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitRSS="><span class="term"><code class="varname">LimitRSS=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitRSS=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitRTPRIO="><span class="term"><code class="varname">LimitRTPRIO=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitRTPRIO=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitRTTIME="><span class="term"><code class="varname">LimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitRTTIME=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitSIGPENDING="><span class="term"><code class="varname">LimitSIGPENDING=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitSIGPENDING=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitSTACK="><span class="term"><code class="varname">LimitSTACK=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitSTACK=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ListenDatagram="><span class="term"><code class="varname">ListenDatagram=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenDatagram=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenFIFO="><span class="term"><code class="varname">ListenFIFO=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenFIFO=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenMessageQueue="><span class="term"><code class="varname">ListenMessageQueue=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenMessageQueue=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenNetlink="><span class="term"><code class="varname">ListenNetlink=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenNetlink=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenSequentialPacket="><span class="term"><code class="varname">ListenSequentialPacket=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenSequentialPacket=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenSpecial="><span class="term"><code class="varname">ListenSpecial=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenSpecial=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenStream="><span class="term"><code class="varname">ListenStream=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenStream=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MakeDirectory="><span class="term"><code class="varname">MakeDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#MakeDirectory=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="Mark="><span class="term"><code class="varname">Mark=</code></span><a class="headerlink" title="Permalink to this term" href="#Mark=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MaxConnections="><span class="term"><code class="varname">MaxConnections=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxConnections=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MemoryLimit="><span class="term"><code class="varname">MemoryLimit=</code></span><a class="headerlink" title="Permalink to this term" href="#MemoryLimit=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="MemorySoftLimit="><span class="term"><code class="varname">MemorySoftLimit=</code></span><a class="headerlink" title="Permalink to this term" href="#MemorySoftLimit=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="MessageQueueMaxMessages="><span class="term"><code class="varname">MessageQueueMaxMessages=</code></span><a class="headerlink" title="Permalink to this term" href="#MessageQueueMaxMessages=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MessageQueueMessageSize="><span class="term"><code class="varname">MessageQueueMessageSize=</code></span><a class="headerlink" title="Permalink to this term" href="#MessageQueueMessageSize=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MountFlags="><span class="term"><code class="varname">MountFlags=</code></span><a class="headerlink" title="Permalink to this term" href="#MountFlags=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Nice="><span class="term"><code class="varname">Nice=</code></span><a class="headerlink" title="Permalink to this term" href="#Nice=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="NoNewPrivileges="><span class="term"><code class="varname">NoNewPrivileges=</code></span><a class="headerlink" title="Permalink to this term" href="#NoNewPrivileges=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="NonBlocking="><span class="term"><code class="varname">NonBlocking=</code></span><a class="headerlink" title="Permalink to this term" href="#NonBlocking=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="NotifyAccess="><span class="term"><code class="varname">NotifyAccess=</code></span><a class="headerlink" title="Permalink to this term" href="#NotifyAccess=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="OOMScoreAdjust="><span class="term"><code class="varname">OOMScoreAdjust=</code></span><a class="headerlink" title="Permalink to this term" href="#OOMScoreAdjust=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="OnActiveSec="><span class="term"><code class="varname">OnActiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnActiveSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnBootSec="><span class="term"><code class="varname">OnBootSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnBootSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnCalendar="><span class="term"><code class="varname">OnCalendar=</code></span><a class="headerlink" title="Permalink to this term" href="#OnCalendar=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnFailure="><span class="term"><code class="varname">OnFailure=</code></span><a class="headerlink" title="Permalink to this term" href="#OnFailure=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="OnFailureIsolate="><span class="term"><code class="varname">OnFailureIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#OnFailureIsolate=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="OnStartupSec="><span class="term"><code class="varname">OnStartupSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnStartupSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnUnitActiveSec="><span class="term"><code class="varname">OnUnitActiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnUnitActiveSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnUnitInactiveSec="><span class="term"><code class="varname">OnUnitInactiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnUnitInactiveSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="Options="><span class="term"><code class="varname">Options=</code></span><a class="headerlink" title="Permalink to this term" href="#Options=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="PAMName="><span class="term"><code class="varname">PAMName=</code></span><a class="headerlink" title="Permalink to this term" href="#PAMName=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="PIDFile="><span class="term"><code class="varname">PIDFile=</code></span><a class="headerlink" title="Permalink to this term" href="#PIDFile=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="PartOf="><span class="term"><code class="varname">PartOf=</code></span><a class="headerlink" title="Permalink to this term" href="#PartOf=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="PassCredentials="><span class="term"><code class="varname">PassCredentials=</code></span><a class="headerlink" title="Permalink to this term" href="#PassCredentials=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="PassSecurity="><span class="term"><code class="varname">PassSecurity=</code></span><a class="headerlink" title="Permalink to this term" href="#PassSecurity=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="PathChanged="><span class="term"><code class="varname">PathChanged=</code></span><a class="headerlink" title="Permalink to this term" href="#PathChanged=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PathExists="><span class="term"><code class="varname">PathExists=</code></span><a class="headerlink" title="Permalink to this term" href="#PathExists=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PathExistsGlob="><span class="term"><code class="varname">PathExistsGlob=</code></span><a class="headerlink" title="Permalink to this term" href="#PathExistsGlob=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PathModified="><span class="term"><code class="varname">PathModified=</code></span><a class="headerlink" title="Permalink to this term" href="#PathModified=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PermissionsStartOnly="><span class="term"><code class="varname">PermissionsStartOnly=</code></span><a class="headerlink" title="Permalink to this term" href="#PermissionsStartOnly=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="PipeSize="><span class="term"><code class="varname">PipeSize=</code></span><a class="headerlink" title="Permalink to this term" href="#PipeSize=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Priority="><span class="term"><code class="varname">Priority=</code></span><a class="headerlink" title="Permalink to this term" href="#Priority=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="PrivateNetwork="><span class="term"><code class="varname">PrivateNetwork=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateNetwork=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="PrivateTmp="><span class="term"><code class="varname">PrivateTmp=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateTmp=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="PropagatesReloadTo="><span class="term"><code class="varname">PropagatesReloadTo=</code></span><a class="headerlink" title="Permalink to this term" href="#PropagatesReloadTo=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ReadOnlyDirectories="><span class="term"><code class="varname">ReadOnlyDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#ReadOnlyDirectories=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ReadWriteDirectories="><span class="term"><code class="varname">ReadWriteDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#ReadWriteDirectories=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ReceiveBuffer="><span class="term"><code class="varname">ReceiveBuffer=</code></span><a class="headerlink" title="Permalink to this term" href="#ReceiveBuffer=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="RefuseManualStart="><span class="term"><code class="varname">RefuseManualStart=</code></span><a class="headerlink" title="Permalink to this term" href="#RefuseManualStart=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RefuseManualStop="><span class="term"><code class="varname">RefuseManualStop=</code></span><a class="headerlink" title="Permalink to this term" href="#RefuseManualStop=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ReloadPropagatedFrom="><span class="term"><code class="varname">ReloadPropagatedFrom=</code></span><a class="headerlink" title="Permalink to this term" href="#ReloadPropagatedFrom=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RemainAfterExit="><span class="term"><code class="varname">RemainAfterExit=</code></span><a class="headerlink" title="Permalink to this term" href="#RemainAfterExit=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RequiredBy="><span class="term"><code class="varname">RequiredBy=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiredBy=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Requires="><span class="term"><code class="varname">Requires=</code></span><a class="headerlink" title="Permalink to this term" href="#Requires=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RequiresMountsFor="><span class="term"><code class="varname">RequiresMountsFor=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiresMountsFor=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RequiresOverridable="><span class="term"><code class="varname">RequiresOverridable=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiresOverridable=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Requisite="><span class="term"><code class="varname">Requisite=</code></span><a class="headerlink" title="Permalink to this term" href="#Requisite=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RequisiteOverridable="><span class="term"><code class="varname">RequisiteOverridable=</code></span><a class="headerlink" title="Permalink to this term" href="#RequisiteOverridable=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Restart="><span class="term"><code class="varname">Restart=</code></span><a class="headerlink" title="Permalink to this term" href="#Restart=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RestartPreventExitStatus="><span class="term"><code class="varname">RestartPreventExitStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#RestartPreventExitStatus=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RestartSec="><span class="term"><code class="varname">RestartSec=</code></span><a class="headerlink" title="Permalink to this term" href="#RestartSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RootDirectory="><span class="term"><code class="varname">RootDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#RootDirectory=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="RootDirectoryStartOnly="><span class="term"><code class="varname">RootDirectoryStartOnly=</code></span><a class="headerlink" title="Permalink to this term" href="#RootDirectoryStartOnly=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SecureBits="><span class="term"><code class="varname">SecureBits=</code></span><a class="headerlink" title="Permalink to this term" href="#SecureBits=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SendBuffer="><span class="term"><code class="varname">SendBuffer=</code></span><a class="headerlink" title="Permalink to this term" href="#SendBuffer=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SendSIGKILL="><span class="term"><code class="varname">SendSIGKILL=</code></span><a class="headerlink" title="Permalink to this term" href="#SendSIGKILL=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="Service="><span class="term"><code class="varname">Service=</code></span><a class="headerlink" title="Permalink to this term" href="#Service=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SmackLabel="><span class="term"><code class="varname">SmackLabel=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabel=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SmackLabelIPIn="><span class="term"><code class="varname">SmackLabelIPIn=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabelIPIn=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SmackLabelIPOut="><span class="term"><code class="varname">SmackLabelIPOut=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabelIPOut=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SocketMode="><span class="term"><code class="varname">SocketMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SocketMode=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Sockets="><span class="term"><code class="varname">Sockets=</code></span><a class="headerlink" title="Permalink to this term" href="#Sockets=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SourcePath="><span class="term"><code class="varname">SourcePath=</code></span><a class="headerlink" title="Permalink to this term" href="#SourcePath=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="StandardError="><span class="term"><code class="varname">StandardError=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardError=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="StandardInput="><span class="term"><code class="varname">StandardInput=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardInput=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="StandardOutput="><span class="term"><code class="varname">StandardOutput=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardOutput=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="StartLimitAction="><span class="term"><code class="varname">StartLimitAction=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitAction=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="StartLimitBurst="><span class="term"><code class="varname">StartLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitBurst=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="StartLimitInterval="><span class="term"><code class="varname">StartLimitInterval=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitInterval=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="StopWhenUnneeded="><span class="term"><code class="varname">StopWhenUnneeded=</code></span><a class="headerlink" title="Permalink to this term" href="#StopWhenUnneeded=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="SuccessExitStatus="><span class="term"><code class="varname">SuccessExitStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#SuccessExitStatus=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SupplementaryGroups="><span class="term"><code class="varname">SupplementaryGroups=</code></span><a class="headerlink" title="Permalink to this term" href="#SupplementaryGroups=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SysVStartPriority="><span class="term"><code class="varname">SysVStartPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#SysVStartPriority=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SyslogFacility="><span class="term"><code class="varname">SyslogFacility=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogFacility=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SyslogIdentifier="><span class="term"><code class="varname">SyslogIdentifier=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogIdentifier=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SyslogLevel="><span class="term"><code class="varname">SyslogLevel=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogLevel=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SyslogLevelPrefix="><span class="term"><code class="varname">SyslogLevelPrefix=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogLevelPrefix=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SystemCallFilter="><span class="term"><code class="varname">SystemCallFilter=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemCallFilter=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TCPCongestion="><span class="term"><code class="varname">TCPCongestion=</code></span><a class="headerlink" title="Permalink to this term" href="#TCPCongestion=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="TCPWrapName="><span class="term"><code class="varname">TCPWrapName=</code></span><a class="headerlink" title="Permalink to this term" href="#TCPWrapName=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYPath="><span class="term"><code class="varname">TTYPath=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYPath=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYReset="><span class="term"><code class="varname">TTYReset=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYReset=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYVHangup="><span class="term"><code class="varname">TTYVHangup=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVHangup=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYVTDisallocate="><span class="term"><code class="varname">TTYVTDisallocate=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVTDisallocate=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TimeoutSec="><span class="term"><code class="varname">TimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutSec=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="TimeoutStartSec="><span class="term"><code class="varname">TimeoutStartSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutStartSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="TimeoutStopSec="><span class="term"><code class="varname">TimeoutStopSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutStopSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="TimerSlackNSec="><span class="term"><code class="varname">TimerSlackNSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimerSlackNSec=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Transparent="><span class="term"><code class="varname">Transparent=</code></span><a class="headerlink" title="Permalink to this term" href="#Transparent=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Type="><span class="term"><code class="varname">Type=</code></span><a class="headerlink" title="Permalink to this term" href="#Type=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="UMask="><span class="term"><code class="varname">UMask=</code></span><a class="headerlink" title="Permalink to this term" href="#UMask=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Unit="><span class="term"><code class="varname">Unit=</code></span><a class="headerlink" title="Permalink to this term" href="#Unit=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>, <a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="User="><span class="term"><code class="varname">User=</code></span><a class="headerlink" title="Permalink to this term" href="#User=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="UtmpIdentifier="><span class="term"><code class="varname">UtmpIdentifier=</code></span><a class="headerlink" title="Permalink to this term" href="#UtmpIdentifier=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="WantedBy="><span class="term"><code class="varname">WantedBy=</code></span><a class="headerlink" title="Permalink to this term" href="#WantedBy=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Wants="><span class="term"><code class="varname">Wants=</code></span><a class="headerlink" title="Permalink to this term" href="#Wants=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="WatchdogSec="><span class="term"><code class="varname">WatchdogSec=</code></span><a class="headerlink" title="Permalink to this term" href="#WatchdogSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="What="><span class="term"><code class="varname">What=</code></span><a class="headerlink" title="Permalink to this term" href="#What=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="Where="><span class="term"><code class="varname">Where=</code></span><a class="headerlink" title="Permalink to this term" href="#Where=">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="WorkingDirectory="><span class="term"><code class="varname">WorkingDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#WorkingDirectory=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777992544"></a><h2 id="Options on the kernel command line">Options on the kernel command line<a class="headerlink" title="Permalink to this headline" href="#Options%20on%20the%20kernel%20command%20line">¶</a></h2><p>Kernel boot options for configuring the behaviour of the
- systemd process.</p><div class="variablelist"><a name="kernel-commandline-options"></a><dl class="variablelist"><dt id="1"><span class="term"><code class="varname">1</code></span><a class="headerlink" title="Permalink to this term" href="#1">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="2"><span class="term"><code class="varname">2</code></span><a class="headerlink" title="Permalink to this term" href="#2">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="3"><span class="term"><code class="varname">3</code></span><a class="headerlink" title="Permalink to this term" href="#3">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="4"><span class="term"><code class="varname">4</code></span><a class="headerlink" title="Permalink to this term" href="#4">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="5"><span class="term"><code class="varname">5</code></span><a class="headerlink" title="Permalink to this term" href="#5">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="S"><span class="term"><code class="varname">S</code></span><a class="headerlink" title="Permalink to this term" href="#S">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="emergency"><span class="term"><code class="varname">emergency</code></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="fsck.mode="><span class="term"><code class="varname">fsck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#fsck.mode=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="fstab="><span class="term"><code class="varname">fstab=</code></span><a class="headerlink" title="Permalink to this term" href="#fstab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a></p></dd><dt id="locale.LANG="><span class="term"><code class="varname">locale.LANG=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LANG=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LANGUAGE="><span class="term"><code class="varname">locale.LANGUAGE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LANGUAGE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_ADDRESS="><span class="term"><code class="varname">locale.LC_ADDRESS=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_ADDRESS=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_COLLATE="><span class="term"><code class="varname">locale.LC_COLLATE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_COLLATE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_CTYPE="><span class="term"><code class="varname">locale.LC_CTYPE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_CTYPE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_IDENTIFICATION="><span class="term"><code class="varname">locale.LC_IDENTIFICATION=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_IDENTIFICATION=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_MEASUREMENT="><span class="term"><code class="varname">locale.LC_MEASUREMENT=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_MEASUREMENT=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_MESSAGES="><span class="term"><code class="varname">locale.LC_MESSAGES=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_MESSAGES=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_MONETARY="><span class="term"><code class="varname">locale.LC_MONETARY=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_MONETARY=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_NAME="><span class="term"><code class="varname">locale.LC_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_NAME=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_NUMERIC="><span class="term"><code class="varname">locale.LC_NUMERIC=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_NUMERIC=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_PAPER="><span class="term"><code class="varname">locale.LC_PAPER=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_PAPER=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_TELEPHONE="><span class="term"><code class="varname">locale.LC_TELEPHONE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_TELEPHONE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_TIME="><span class="term"><code class="varname">locale.LC_TIME=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_TIME=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="luks.crypttab="><span class="term"><code class="varname">luks.crypttab=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.crypttab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks.key="><span class="term"><code class="varname">luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.key=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks.uuid="><span class="term"><code class="varname">luks.uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.uuid=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks="><span class="term"><code class="varname">luks=</code></span><a class="headerlink" title="Permalink to this term" href="#luks=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="net.ifnames="><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#net.ifnames=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="plymouth.enable="><span class="term"><code class="varname">plymouth.enable=</code></span><a class="headerlink" title="Permalink to this term" href="#plymouth.enable=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a></p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="quotacheck.mode="><span class="term"><code class="varname">quotacheck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#quotacheck.mode=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a></p></dd><dt id="rd.fstab="><span class="term"><code class="varname">rd.fstab=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.fstab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a></p></dd><dt id="rd.luks.crypttab="><span class="term"><code class="varname">rd.luks.crypttab=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.crypttab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks.key="><span class="term"><code class="varname">rd.luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.key=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks.uuid="><span class="term"><code class="varname">rd.luks.uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.uuid=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks="><span class="term"><code class="varname">rd.luks=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.modules-load="><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.modules-load=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="rd.systemd.unit="><span class="term"><code class="varname">rd.systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.systemd.unit=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="rd.udev.children-max="><span class="term"><code class="varname">rd.udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.udev.children-max=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="rd.udev.exec-delay="><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.udev.exec-delay=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="rd.udev.log-priority="><span class="term"><code class="varname">rd.udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.udev.log-priority=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="s"><span class="term"><code class="varname">s</code></span><a class="headerlink" title="Permalink to this term" href="#s">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="single"><span class="term"><code class="varname">single</code></span><a class="headerlink" title="Permalink to this term" href="#single">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.confirm_spawn="><span class="term"><code class="varname">systemd.confirm_spawn=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.confirm_spawn=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.crash_chvt="><span class="term"><code class="varname">systemd.crash_chvt=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.crash_chvt=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.crash_shell="><span class="term"><code class="varname">systemd.crash_shell=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.crash_shell=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.default_standard_error="><span class="term"><code class="varname">systemd.default_standard_error=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.default_standard_error=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.default_standard_output="><span class="term"><code class="varname">systemd.default_standard_output=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.default_standard_output=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.dump_core="><span class="term"><code class="varname">systemd.dump_core=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.dump_core=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.journald.forward_to_console="><span class="term"><code class="varname">systemd.journald.forward_to_console=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_console=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd.journald.forward_to_kmsg="><span class="term"><code class="varname">systemd.journald.forward_to_kmsg=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_kmsg=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd.journald.forward_to_syslog="><span class="term"><code class="varname">systemd.journald.forward_to_syslog=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_syslog=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd.log_color="><span class="term"><code class="varname">systemd.log_color=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_color=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.log_level="><span class="term"><code class="varname">systemd.log_level=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_level=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.log_location="><span class="term"><code class="varname">systemd.log_location=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_location=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.log_target="><span class="term"><code class="varname">systemd.log_target=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_target=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.setenv="><span class="term"><code class="varname">systemd.setenv=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.setenv=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.show_status="><span class="term"><code class="varname">systemd.show_status=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.show_status=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="udev.children-max="><span class="term"><code class="varname">udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.children-max=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="udev.exec-delay="><span class="term"><code class="varname">udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.exec-delay=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="vconsole.font.map="><span class="term"><code class="varname">vconsole.font.map=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.font.map=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.font.unimap="><span class="term"><code class="varname">vconsole.font.unimap=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.font.unimap=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.font="><span class="term"><code class="varname">vconsole.font=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.font=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.keymap.toggle="><span class="term"><code class="varname">vconsole.keymap.toggle=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap.toggle=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.keymap="><span class="term"><code class="varname">vconsole.keymap=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777830608"></a><h2 id="Environment variables">Environment variables<a class="headerlink" title="Permalink to this headline" href="#Environment%20variables">¶</a></h2><p>Environment variables understood by the systemd
- manager and other programs.</p><div class="variablelist"><a name="environment-variables"></a><dl class="variablelist"><dt id="$LISTEN_FDS"><span class="term"><code class="varname">$LISTEN_FDS</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_FDS">¶</a></dt><dd><p><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$LISTEN_PID"><span class="term"><code class="varname">$LISTEN_PID</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_PID">¶</a></dt><dd><p><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$NOTIFY_SOCKET"><span class="term"><code class="varname">$NOTIFY_SOCKET</code></span><a class="headerlink" title="Permalink to this term" href="#%24NOTIFY_SOCKET">¶</a></dt><dd><p><a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$PREVLEVEL"><span class="term"><code class="varname">$PREVLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24PREVLEVEL">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="$RUNLEVEL"><span class="term"><code class="varname">$RUNLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24RUNLEVEL">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_COLOR"><span class="term"><code class="varname">$SYSTEMD_LOG_COLOR</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_COLOR">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_LEVEL"><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LEVEL">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_LOCATION"><span class="term"><code class="varname">$SYSTEMD_LOG_LOCATION</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LOCATION">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_TARGET"><span class="term"><code class="varname">$SYSTEMD_LOG_TARGET</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_TARGET">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="$SYSTEMD_SYSVINIT_PATH"><span class="term"><code class="varname">$SYSTEMD_SYSVINIT_PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_SYSVINIT_PATH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$SYSTEMD_SYSVRCND_PATH"><span class="term"><code class="varname">$SYSTEMD_SYSVRCND_PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_SYSVRCND_PATH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$SYSTEMD_UNIT_PATH"><span class="term"><code class="varname">$SYSTEMD_UNIT_PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_UNIT_PATH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="$XDG_CONFIG_DIRS"><span class="term"><code class="varname">$XDG_CONFIG_DIRS</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_CONFIG_DIRS">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_CONFIG_HOME"><span class="term"><code class="varname">$XDG_CONFIG_HOME</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_CONFIG_HOME">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_DATA_DIRS"><span class="term"><code class="varname">$XDG_DATA_DIRS</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_DATA_DIRS">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_DATA_HOME"><span class="term"><code class="varname">$XDG_DATA_HOME</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_DATA_HOME">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_RUNTIME_DIR"><span class="term"><code class="varname">$XDG_RUNTIME_DIR</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_RUNTIME_DIR">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="$XDG_SESSION_ID"><span class="term"><code class="varname">$XDG_SESSION_ID</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_SESSION_ID">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777786384"></a><h2 id="UDEV directives">UDEV directives<a class="headerlink" title="Permalink to this headline" href="#UDEV%20directives">¶</a></h2><p>Directives for configuring systemd units through the
- udev database.</p><div class="variablelist"><a name="udev-directives"></a><dl class="variablelist"><dt id="$attr{file}"><span class="term"><code class="option">$attr{<em class="replaceable"><code>file</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%24attr%7Bfile%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$devnode"><span class="term"><code class="option">$devnode</code></span><a class="headerlink" title="Permalink to this term" href="#%24devnode">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$devpath"><span class="term"><code class="option">$devpath</code></span><a class="headerlink" title="Permalink to this term" href="#%24devpath">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$driver"><span class="term"><code class="option">$driver</code></span><a class="headerlink" title="Permalink to this term" href="#%24driver">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$env{key}"><span class="term"><code class="option">$env{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%24env%7Bkey%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$id"><span class="term"><code class="option">$id</code></span><a class="headerlink" title="Permalink to this term" href="#%24id">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$kernel"><span class="term"><code class="option">$kernel</code></span><a class="headerlink" title="Permalink to this term" href="#%24kernel">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$links"><span class="term"><code class="option">$links</code></span><a class="headerlink" title="Permalink to this term" href="#%24links">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$major"><span class="term"><code class="option">$major</code></span><a class="headerlink" title="Permalink to this term" href="#%24major">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$minor"><span class="term"><code class="option">$minor</code></span><a class="headerlink" title="Permalink to this term" href="#%24minor">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$name"><span class="term"><code class="option">$name</code></span><a class="headerlink" title="Permalink to this term" href="#%24name">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$number"><span class="term"><code class="option">$number</code></span><a class="headerlink" title="Permalink to this term" href="#%24number">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$parent"><span class="term"><code class="option">$parent</code></span><a class="headerlink" title="Permalink to this term" href="#%24parent">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$result"><span class="term"><code class="option">$result</code></span><a class="headerlink" title="Permalink to this term" href="#%24result">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$root"><span class="term"><code class="option">$root</code></span><a class="headerlink" title="Permalink to this term" href="#%24root">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$sys"><span class="term"><code class="option">$sys</code></span><a class="headerlink" title="Permalink to this term" href="#%24sys">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%E{key}"><span class="term"><code class="option">%E{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%E%7Bkey%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%M"><span class="term"><code class="option">%M</code></span><a class="headerlink" title="Permalink to this term" href="#%M">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%N"><span class="term"><code class="option">%N</code></span><a class="headerlink" title="Permalink to this term" href="#%N">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%P"><span class="term"><code class="option">%P</code></span><a class="headerlink" title="Permalink to this term" href="#%P">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%S"><span class="term"><code class="option">%S</code></span><a class="headerlink" title="Permalink to this term" href="#%S">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%b"><span class="term"><code class="option">%b</code></span><a class="headerlink" title="Permalink to this term" href="#%b">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%c"><span class="term"><code class="option">%c</code></span><a class="headerlink" title="Permalink to this term" href="#%c">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%k"><span class="term"><code class="option">%k</code></span><a class="headerlink" title="Permalink to this term" href="#%k">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%m"><span class="term"><code class="option">%m</code></span><a class="headerlink" title="Permalink to this term" href="#%m">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%n"><span class="term"><code class="option">%n</code></span><a class="headerlink" title="Permalink to this term" href="#%n">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%p"><span class="term"><code class="option">%p</code></span><a class="headerlink" title="Permalink to this term" href="#%p">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%r"><span class="term"><code class="option">%r</code></span><a class="headerlink" title="Permalink to this term" href="#%r">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%s{file}"><span class="term"><code class="option">%s{<em class="replaceable"><code>file</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%s%7Bfile%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ACTION"><span class="term"><code class="option">ACTION</code></span><a class="headerlink" title="Permalink to this term" href="#ACTION">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ATTRS{filename}"><span class="term"><code class="option">ATTRS{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTRS%7Bfilename%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ATTR{filename}"><span class="term"><code class="option">ATTR{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTR%7Bfilename%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="DEVPATH"><span class="term"><code class="option">DEVPATH</code></span><a class="headerlink" title="Permalink to this term" href="#DEVPATH">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="DRIVER"><span class="term"><code class="option">DRIVER</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVER">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="DRIVERS"><span class="term"><code class="option">DRIVERS</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVERS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ENV{key}"><span class="term"><code class="option">ENV{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ENV%7Bkey%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="GOTO"><span class="term"><code class="option">GOTO</code></span><a class="headerlink" title="Permalink to this term" href="#GOTO">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="GROUP"><span class="term"><code class="option">GROUP</code></span><a class="headerlink" title="Permalink to this term" href="#GROUP">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ID_MODEL="><span class="term"><code class="varname">ID_MODEL=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_MODEL=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="ID_MODEL_FROM_DATABASE="><span class="term"><code class="varname">ID_MODEL_FROM_DATABASE=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_MODEL_FROM_DATABASE=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="IMPORT{type}"><span class="term"><code class="option">IMPORT{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#IMPORT%7Btype%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="KERNEL"><span class="term"><code class="option">KERNEL</code></span><a class="headerlink" title="Permalink to this term" href="#KERNEL">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="KERNELS"><span class="term"><code class="option">KERNELS</code></span><a class="headerlink" title="Permalink to this term" href="#KERNELS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="LABEL"><span class="term"><code class="option">LABEL</code></span><a class="headerlink" title="Permalink to this term" href="#LABEL">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="MODE"><span class="term"><code class="option">MODE</code></span><a class="headerlink" title="Permalink to this term" href="#MODE">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="NAME"><span class="term"><code class="option">NAME</code></span><a class="headerlink" title="Permalink to this term" href="#NAME">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="OPTIONS"><span class="term"><code class="option">OPTIONS</code></span><a class="headerlink" title="Permalink to this term" href="#OPTIONS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="OWNER"><span class="term"><code class="option">OWNER</code></span><a class="headerlink" title="Permalink to this term" href="#OWNER">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="PROGRAM"><span class="term"><code class="option">PROGRAM</code></span><a class="headerlink" title="Permalink to this term" href="#PROGRAM">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="RESULT"><span class="term"><code class="option">RESULT</code></span><a class="headerlink" title="Permalink to this term" href="#RESULT">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="RUN{type}"><span class="term"><code class="option">RUN{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#RUN%7Btype%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SUBSYSTEM"><span class="term"><code class="option">SUBSYSTEM</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEM">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SUBSYSTEMS"><span class="term"><code class="option">SUBSYSTEMS</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEMS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SYMLINK"><span class="term"><code class="option">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="#SYMLINK">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SYSTEMD_ALIAS="><span class="term"><code class="varname">SYSTEMD_ALIAS=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_ALIAS=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="SYSTEMD_READY="><span class="term"><code class="varname">SYSTEMD_READY=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_READY=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="SYSTEMD_WANTS="><span class="term"><code class="varname">SYSTEMD_WANTS=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_WANTS=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="TAG"><span class="term"><code class="option">TAG</code></span><a class="headerlink" title="Permalink to this term" href="#TAG">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="TAGS"><span class="term"><code class="option">TAGS</code></span><a class="headerlink" title="Permalink to this term" href="#TAGS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="TEST{octal mode mask}"><span class="term"><code class="option">TEST{<em class="replaceable"><code>octal mode mask</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#TEST%7Boctal%20mode%20mask%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="WAIT_FOR"><span class="term"><code class="option">WAIT_FOR</code></span><a class="headerlink" title="Permalink to this term" href="#WAIT_FOR">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="event_timeout="><span class="term"><code class="option">event_timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#event_timeout=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="link_priority="><span class="term"><code class="option">link_priority=</code></span><a class="headerlink" title="Permalink to this term" href="#link_priority=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="nowatch"><span class="term"><code class="option">nowatch</code></span><a class="headerlink" title="Permalink to this term" href="#nowatch">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="static_node="><span class="term"><code class="option">static_node=</code></span><a class="headerlink" title="Permalink to this term" href="#static_node=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="string_escape="><span class="term"><code class="option">string_escape=</code></span><a class="headerlink" title="Permalink to this term" href="#string_escape=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="watch"><span class="term"><code class="option">watch</code></span><a class="headerlink" title="Permalink to this term" href="#watch">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777673456"></a><h2 id="Journal fields">Journal fields<a class="headerlink" title="Permalink to this headline" href="#Journal%20fields">¶</a></h2><p>Fields in the journal events with a well known meaning.</p><div class="variablelist"><a name="journal-directives"></a><dl class="variablelist"><dt id="CODE_FILE="><span class="term"><code class="varname">CODE_FILE=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_FILE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="CODE_FUNC="><span class="term"><code class="varname">CODE_FUNC=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_FUNC=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="CODE_LINE="><span class="term"><code class="varname">CODE_LINE=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_LINE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="COREDUMP_UNIT="><span class="term"><code class="varname">COREDUMP_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#COREDUMP_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="COREDUMP_USER_UNIT="><span class="term"><code class="varname">COREDUMP_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#COREDUMP_USER_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="ERRNO="><span class="term"><code class="varname">ERRNO=</code></span><a class="headerlink" title="Permalink to this term" href="#ERRNO=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="MESSAGE="><span class="term"><code class="varname">MESSAGE=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="MESSAGE_ID="><span class="term"><code class="varname">MESSAGE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE_ID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="PRIORITY="><span class="term"><code class="varname">PRIORITY=</code></span><a class="headerlink" title="Permalink to this term" href="#PRIORITY=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="SYSLOG_FACILITY="><span class="term"><code class="varname">SYSLOG_FACILITY=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_FACILITY=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="SYSLOG_IDENTIFIER="><span class="term"><code class="varname">SYSLOG_IDENTIFIER=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_IDENTIFIER=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="SYSLOG_PID="><span class="term"><code class="varname">SYSLOG_PID=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_PID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_AUDIT_LOGINUID="><span class="term"><code class="varname">_AUDIT_LOGINUID=</code></span><a class="headerlink" title="Permalink to this term" href="#_AUDIT_LOGINUID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_AUDIT_SESSION="><span class="term"><code class="varname">_AUDIT_SESSION=</code></span><a class="headerlink" title="Permalink to this term" href="#_AUDIT_SESSION=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_BOOT_ID="><span class="term"><code class="varname">_BOOT_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#_BOOT_ID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_CMDLINE="><span class="term"><code class="varname">_CMDLINE=</code></span><a class="headerlink" title="Permalink to this term" href="#_CMDLINE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_COMM="><span class="term"><code class="varname">_COMM=</code></span><a class="headerlink" title="Permalink to this term" href="#_COMM=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_EXE="><span class="term"><code class="varname">_EXE=</code></span><a class="headerlink" title="Permalink to this term" href="#_EXE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_GID="><span class="term"><code class="varname">_GID=</code></span><a class="headerlink" title="Permalink to this term" href="#_GID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_HOSTNAME="><span class="term"><code class="varname">_HOSTNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#_HOSTNAME=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_KERNEL_DEVICE="><span class="term"><code class="varname">_KERNEL_DEVICE=</code></span><a class="headerlink" title="Permalink to this term" href="#_KERNEL_DEVICE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_KERNEL_SUBSYSTEM="><span class="term"><code class="varname">_KERNEL_SUBSYSTEM=</code></span><a class="headerlink" title="Permalink to this term" href="#_KERNEL_SUBSYSTEM=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_MACHINE_ID="><span class="term"><code class="varname">_MACHINE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#_MACHINE_ID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_PID="><span class="term"><code class="varname">_PID=</code></span><a class="headerlink" title="Permalink to this term" href="#_PID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SELINUX_CONTEXT="><span class="term"><code class="varname">_SELINUX_CONTEXT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SELINUX_CONTEXT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SOURCE_REALTIME_TIMESTAMP="><span class="term"><code class="varname">_SOURCE_REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#_SOURCE_REALTIME_TIMESTAMP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_CGROUP="><span class="term"><code class="varname">_SYSTEMD_CGROUP=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_CGROUP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_OWNER_UID="><span class="term"><code class="varname">_SYSTEMD_OWNER_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_OWNER_UID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_SESSION="><span class="term"><code class="varname">_SYSTEMD_SESSION=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_SESSION=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_UNIT="><span class="term"><code class="varname">_SYSTEMD_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_USER_UNIT="><span class="term"><code class="varname">_SYSTEMD_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_USER_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_TRANSPORT="><span class="term"><code class="varname">_TRANSPORT=</code></span><a class="headerlink" title="Permalink to this term" href="#_TRANSPORT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UDEV_DEVLINK="><span class="term"><code class="varname">_UDEV_DEVLINK=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_DEVLINK=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UDEV_DEVNODE="><span class="term"><code class="varname">_UDEV_DEVNODE=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_DEVNODE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UDEV_SYSNAME="><span class="term"><code class="varname">_UDEV_SYSNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_SYSNAME=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UID="><span class="term"><code class="varname">_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#_UID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="__CURSOR="><span class="term"><code class="varname">__CURSOR=</code></span><a class="headerlink" title="Permalink to this term" href="#__CURSOR=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="__MONOTONIC_TIMESTAMP="><span class="term"><code class="varname">__MONOTONIC_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__MONOTONIC_TIMESTAMP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="__REALTIME_TIMESTAMP="><span class="term"><code class="varname">__REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__REALTIME_TIMESTAMP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777609264"></a><h2 id="PAM configuration directives">PAM configuration directives<a class="headerlink" title="Permalink to this headline" href="#PAM%20configuration%20directives">¶</a></h2><p>Directives for configuring PAM behaviour.</p><div class="variablelist"><a name="pam-directives"></a><dl class="variablelist"><dt id="class="><span class="term"><code class="option">class=</code></span><a class="headerlink" title="Permalink to this term" href="#class=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="controllers="><span class="term"><code class="option">controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#controllers=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="debug="><span class="term"><code class="option">debug=</code></span><a class="headerlink" title="Permalink to this term" href="#debug=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="kill-exclude-users="><span class="term"><code class="option">kill-exclude-users=</code></span><a class="headerlink" title="Permalink to this term" href="#kill-exclude-users=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="kill-only-users="><span class="term"><code class="option">kill-only-users=</code></span><a class="headerlink" title="Permalink to this term" href="#kill-only-users=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="kill-session-processes="><span class="term"><code class="option">kill-session-processes=</code></span><a class="headerlink" title="Permalink to this term" href="#kill-session-processes=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="reset-controllers="><span class="term"><code class="option">reset-controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#reset-controllers=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777596272"></a><h2 id="crypttab options">crypttab options<a class="headerlink" title="Permalink to this headline" href="#crypttab%20options">¶</a></h2><p>Options which influence mounted filesystems and
- encrypted volumes.</p><div class="variablelist"><a name="crypttab-options"></a><dl class="variablelist"><dt id="allow-discards"><span class="term"><code class="varname">allow-discards</code></span><a class="headerlink" title="Permalink to this term" href="#allow-discards">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="cipher="><span class="term"><code class="varname">cipher=</code></span><a class="headerlink" title="Permalink to this term" href="#cipher=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="hash="><span class="term"><code class="varname">hash=</code></span><a class="headerlink" title="Permalink to this term" href="#hash=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="keyfile-offset="><span class="term"><code class="varname">keyfile-offset=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-offset=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="keyfile-size="><span class="term"><code class="varname">keyfile-size=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-size=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="luks"><span class="term"><code class="varname">luks</code></span><a class="headerlink" title="Permalink to this term" href="#luks">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="noauto"><span class="term"><code class="varname">noauto</code></span><a class="headerlink" title="Permalink to this term" href="#noauto">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="nofail"><span class="term"><code class="varname">nofail</code></span><a class="headerlink" title="Permalink to this term" href="#nofail">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="plain"><span class="term"><code class="varname">plain</code></span><a class="headerlink" title="Permalink to this term" href="#plain">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="read-only"><span class="term"><code class="varname">read-only</code></span><a class="headerlink" title="Permalink to this term" href="#read-only">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="readonly"><span class="term"><code class="varname">readonly</code></span><a class="headerlink" title="Permalink to this term" href="#readonly">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="size="><span class="term"><code class="varname">size=</code></span><a class="headerlink" title="Permalink to this term" href="#size=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="swap"><span class="term"><code class="varname">swap</code></span><a class="headerlink" title="Permalink to this term" href="#swap">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="timeout="><span class="term"><code class="varname">timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#timeout=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tmp"><span class="term"><code class="varname">tmp</code></span><a class="headerlink" title="Permalink to this term" href="#tmp">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tries="><span class="term"><code class="varname">tries=</code></span><a class="headerlink" title="Permalink to this term" href="#tries=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="verify"><span class="term"><code class="varname">verify</code></span><a class="headerlink" title="Permalink to this term" href="#verify">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777567296"></a><h2 id="System manager directives">System manager directives<a class="headerlink" title="Permalink to this headline" href="#System%20manager%20directives">¶</a></h2><p>Directives for configuring the behaviour of the
- systemd process.</p><div class="variablelist"><a name="systemd-directives"></a><dl class="variablelist"><dt id=""><span class="term"></span><a class="headerlink" title="Permalink to this term" href="#">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id=""><span class="term"></span><a class="headerlink" title="Permalink to this term" href="#">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="CrashChVT="><span class="term"><code class="varname">CrashChVT=</code></span><a class="headerlink" title="Permalink to this term" href="#CrashChVT=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="CrashShell="><span class="term"><code class="varname">CrashShell=</code></span><a class="headerlink" title="Permalink to this term" href="#CrashShell=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultControllers="><span class="term"><code class="varname">DefaultControllers=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultControllers=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitAS="><span class="term"><code class="varname">DefaultLimitAS=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitAS=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitCORE="><span class="term"><code class="varname">DefaultLimitCORE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCORE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitCPU="><span class="term"><code class="varname">DefaultLimitCPU=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCPU=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitDATA="><span class="term"><code class="varname">DefaultLimitDATA=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitDATA=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitFSIZE="><span class="term"><code class="varname">DefaultLimitFSIZE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitFSIZE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitLOCKS="><span class="term"><code class="varname">DefaultLimitLOCKS=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitLOCKS=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitMEMLOCK="><span class="term"><code class="varname">DefaultLimitMEMLOCK=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitMEMLOCK=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitMSGQUEUE="><span class="term"><code class="varname">DefaultLimitMSGQUEUE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitMSGQUEUE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitNICE="><span class="term"><code class="varname">DefaultLimitNICE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitNICE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitNOFILE="><span class="term"><code class="varname">DefaultLimitNOFILE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitNOFILE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitNPROC="><span class="term"><code class="varname">DefaultLimitNPROC=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitNPROC=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitRSS="><span class="term"><code class="varname">DefaultLimitRSS=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitRSS=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitRTPRIO="><span class="term"><code class="varname">DefaultLimitRTPRIO=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitRTPRIO=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitRTTIME="><span class="term"><code class="varname">DefaultLimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitRTTIME=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitSIGPENDING="><span class="term"><code class="varname">DefaultLimitSIGPENDING=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitSIGPENDING=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitSTACK="><span class="term"><code class="varname">DefaultLimitSTACK=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitSTACK=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultStandardError="><span class="term"><code class="varname">DefaultStandardError=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultStandardError=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultStandardOutput="><span class="term"><code class="varname">DefaultStandardOutput=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultStandardOutput=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DumpCore="><span class="term"><code class="varname">DumpCore=</code></span><a class="headerlink" title="Permalink to this term" href="#DumpCore=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="HibernateMode="><span class="term"><code class="varname">HibernateMode=</code></span><a class="headerlink" title="Permalink to this term" href="#HibernateMode=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="HibernateState="><span class="term"><code class="varname">HibernateState=</code></span><a class="headerlink" title="Permalink to this term" href="#HibernateState=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="HybridSleepMode="><span class="term"><code class="varname">HybridSleepMode=</code></span><a class="headerlink" title="Permalink to this term" href="#HybridSleepMode=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="HybridSleepState="><span class="term"><code class="varname">HybridSleepState=</code></span><a class="headerlink" title="Permalink to this term" href="#HybridSleepState=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="JoinControllers="><span class="term"><code class="varname">JoinControllers=</code></span><a class="headerlink" title="Permalink to this term" href="#JoinControllers=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogColor="><span class="term"><code class="varname">LogColor=</code></span><a class="headerlink" title="Permalink to this term" href="#LogColor=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogLevel="><span class="term"><code class="varname">LogLevel=</code></span><a class="headerlink" title="Permalink to this term" href="#LogLevel=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogLocation="><span class="term"><code class="varname">LogLocation=</code></span><a class="headerlink" title="Permalink to this term" href="#LogLocation=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogTarget="><span class="term"><code class="varname">LogTarget=</code></span><a class="headerlink" title="Permalink to this term" href="#LogTarget=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="RuntimeWatchdogSec="><span class="term"><code class="varname">RuntimeWatchdogSec=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeWatchdogSec=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="ShowStatus="><span class="term"><code class="varname">ShowStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#ShowStatus=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="ShutdownWatchdogSec="><span class="term"><code class="varname">ShutdownWatchdogSec=</code></span><a class="headerlink" title="Permalink to this term" href="#ShutdownWatchdogSec=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="SuspendMode="><span class="term"><code class="varname">SuspendMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendMode=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="SuspendState="><span class="term"><code class="varname">SuspendState=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendState=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id=""><span class="term"></span><a class="headerlink" title="Permalink to this term" href="#">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777503936"></a><h2 id="bootchart.conf directives">bootchart.conf directives<a class="headerlink" title="Permalink to this headline" href="#bootchart.conf%20directives">¶</a></h2><p>Directives for configuring the behaviour of the
- systemd-bootchart process.</p><div class="variablelist"><a name="bootchart-directives"></a><dl class="variablelist"><dt id="Filter="><span class="term"><code class="varname">Filter=</code></span><a class="headerlink" title="Permalink to this term" href="#Filter=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Frequency="><span class="term"><code class="varname">Frequency=</code></span><a class="headerlink" title="Permalink to this term" href="#Frequency=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Init="><span class="term"><code class="varname">Init=</code></span><a class="headerlink" title="Permalink to this term" href="#Init=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Output="><span class="term"><code class="varname">Output=</code></span><a class="headerlink" title="Permalink to this term" href="#Output=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="PlotEntropyGraph="><span class="term"><code class="varname">PlotEntropyGraph=</code></span><a class="headerlink" title="Permalink to this term" href="#PlotEntropyGraph=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="PlotMemoryUsage="><span class="term"><code class="varname">PlotMemoryUsage=</code></span><a class="headerlink" title="Permalink to this term" href="#PlotMemoryUsage=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Relative="><span class="term"><code class="varname">Relative=</code></span><a class="headerlink" title="Permalink to this term" href="#Relative=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Samples="><span class="term"><code class="varname">Samples=</code></span><a class="headerlink" title="Permalink to this term" href="#Samples=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="ScaleX="><span class="term"><code class="varname">ScaleX=</code></span><a class="headerlink" title="Permalink to this term" href="#ScaleX=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="ScaleY="><span class="term"><code class="varname">ScaleY=</code></span><a class="headerlink" title="Permalink to this term" href="#ScaleY=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259777486096"></a><h2 id="command-line options">command-line options<a class="headerlink" title="Permalink to this headline" href="#command-line%20options">¶</a></h2><p>Command-line options accepted by programs in the
- systemd suite.</p><div class="variablelist"><a name="options"></a><dl class="variablelist"><dt id="--accept"><span class="term"><code class="option">--accept</code></span><a class="headerlink" title="Permalink to this term" href="#--accept">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="--accept-cached"><span class="term"><code class="option">--accept-cached</code></span><a class="headerlink" title="Permalink to this term" href="#--accept-cached">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--action="><span class="term"><code class="option">--action=</code></span><a class="headerlink" title="Permalink to this term" href="#--action=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--adjust-system-clock"><span class="term"><code class="option">--adjust-system-clock</code></span><a class="headerlink" title="Permalink to this term" href="#--adjust-system-clock">¶</a></dt><dd><p><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--after"><span class="term"><code class="option">--after</code></span><a class="headerlink" title="Permalink to this term" href="#--after">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--all"><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#--all">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="--attr-match="><span class="term"><code class="option">--attr-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--attr-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--attr-nomatch="><span class="term"><code class="option">--attr-nomatch=</code></span><a class="headerlink" title="Permalink to this term" href="#--attr-nomatch=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--attribute-walk"><span class="term"><code class="option">--attribute-walk</code></span><a class="headerlink" title="Permalink to this term" href="#--attribute-walk">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--batch"><span class="term"><code class="option">--batch</code></span><a class="headerlink" title="Permalink to this term" href="#--batch">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--before"><span class="term"><code class="option">--before</code></span><a class="headerlink" title="Permalink to this term" href="#--before">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--bind-ro="><span class="term"><code class="option">--bind-ro=</code></span><a class="headerlink" title="Permalink to this term" href="#--bind-ro=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--bind="><span class="term"><code class="option">--bind=</code></span><a class="headerlink" title="Permalink to this term" href="#--bind=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--boot"><span class="term"><code class="option">--boot</code></span><a class="headerlink" title="Permalink to this term" href="#--boot">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--booted"><span class="term"><code class="option">--booted</code></span><a class="headerlink" title="Permalink to this term" href="#--booted">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--capability="><span class="term"><code class="option">--capability=</code></span><a class="headerlink" title="Permalink to this term" href="#--capability=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--catalog"><span class="term"><code class="option">--catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--cert="><span class="term"><code class="option">--cert=</code></span><a class="headerlink" title="Permalink to this term" href="#--cert=">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--cleanup-db"><span class="term"><code class="option">--cleanup-db</code></span><a class="headerlink" title="Permalink to this term" href="#--cleanup-db">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--cmdline"><span class="term"><code class="option">--cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#--cmdline">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--confirm-spawn"><span class="term"><code class="option">--confirm-spawn</code></span><a class="headerlink" title="Permalink to this term" href="#--confirm-spawn">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--console"><span class="term"><code class="option">--console</code></span><a class="headerlink" title="Permalink to this term" href="#--console">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--container"><span class="term"><code class="option">--container</code></span><a class="headerlink" title="Permalink to this term" href="#--container">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="--controllers="><span class="term"><code class="option">--controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#--controllers=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--crash-shell"><span class="term"><code class="option">--crash-shell</code></span><a class="headerlink" title="Permalink to this term" href="#--crash-shell">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--cursor="><span class="term"><code class="option">--cursor=</code></span><a class="headerlink" title="Permalink to this term" href="#--cursor=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--default-standard-error="><span class="term"><code class="option">--default-standard-error=</code></span><a class="headerlink" title="Permalink to this term" href="#--default-standard-error=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--default-standard-output="><span class="term"><code class="option">--default-standard-output=</code></span><a class="headerlink" title="Permalink to this term" href="#--default-standard-output=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--delay="><span class="term"><code class="option">--delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--delay=">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--depth="><span class="term"><code class="option">--depth=</code></span><a class="headerlink" title="Permalink to this term" href="#--depth=">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--device-id-of-file="><span class="term"><code class="option">--device-id-of-file=</code></span><a class="headerlink" title="Permalink to this term" href="#--device-id-of-file=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--diff="><span class="term"><code class="option">--diff=</code></span><a class="headerlink" title="Permalink to this term" href="#--diff=">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="--directory="><span class="term"><code class="option">--directory=</code></span><a class="headerlink" title="Permalink to this term" href="#--directory=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--disk-usage"><span class="term"><code class="option">--disk-usage</code></span><a class="headerlink" title="Permalink to this term" href="#--disk-usage">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--dry-run"><span class="term"><code class="option">--dry-run</code></span><a class="headerlink" title="Permalink to this term" href="#--dry-run">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--dump-catalog"><span class="term"><code class="option">--dump-catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--dump-catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--dump-configuration-items"><span class="term"><code class="option">--dump-configuration-items</code></span><a class="headerlink" title="Permalink to this term" href="#--dump-configuration-items">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--dump-core"><span class="term"><code class="option">--dump-core</code></span><a class="headerlink" title="Permalink to this term" href="#--dump-core">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--entropy"><span class="term"><code class="option">--entropy</code></span><a class="headerlink" title="Permalink to this term" href="#--entropy">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--environment="><span class="term"><code class="option">--environment=</code></span><a class="headerlink" title="Permalink to this term" href="#--environment=">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="--exit"><span class="term"><code class="option">--exit</code></span><a class="headerlink" title="Permalink to this term" href="#--exit">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--exit-if-exists="><span class="term"><code class="option">--exit-if-exists=</code></span><a class="headerlink" title="Permalink to this term" href="#--exit-if-exists=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--export"><span class="term"><code class="option">--export</code></span><a class="headerlink" title="Permalink to this term" href="#--export">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--export-db"><span class="term"><code class="option">--export-db</code></span><a class="headerlink" title="Permalink to this term" href="#--export-db">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--export-prefix="><span class="term"><code class="option">--export-prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--export-prefix=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--fail"><span class="term"><code class="option">--fail</code></span><a class="headerlink" title="Permalink to this term" href="#--fail">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--failed"><span class="term"><code class="option">--failed</code></span><a class="headerlink" title="Permalink to this term" href="#--failed">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--field="><span class="term"><code class="option">--field=</code></span><a class="headerlink" title="Permalink to this term" href="#--field=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="--follow"><span class="term"><code class="option">--follow</code></span><a class="headerlink" title="Permalink to this term" href="#--follow">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--force"><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#--force">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--freq"><span class="term"><code class="option">--freq</code></span><a class="headerlink" title="Permalink to this term" href="#--freq">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--from-pattern="><span class="term"><code class="option">--from-pattern=</code></span><a class="headerlink" title="Permalink to this term" href="#--from-pattern=">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--full"><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#--full">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="--fuzz="><span class="term"><code class="option">--fuzz=</code></span><a class="headerlink" title="Permalink to this term" href="#--fuzz=">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--global"><span class="term"><code class="option">--global</code></span><a class="headerlink" title="Permalink to this term" href="#--global">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--halt"><span class="term"><code class="option">--halt</code></span><a class="headerlink" title="Permalink to this term" href="#--halt">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="--header"><span class="term"><code class="option">--header</code></span><a class="headerlink" title="Permalink to this term" href="#--header">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>, <a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--host"><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#--host">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--icon="><span class="term"><code class="option">--icon=</code></span><a class="headerlink" title="Permalink to this term" href="#--icon=">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--identifier="><span class="term"><code class="option">--identifier=</code></span><a class="headerlink" title="Permalink to this term" href="#--identifier=">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="--ignore-dependencies"><span class="term"><code class="option">--ignore-dependencies</code></span><a class="headerlink" title="Permalink to this term" href="#--ignore-dependencies">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--ignore-inhibitors"><span class="term"><code class="option">--ignore-inhibitors</code></span><a class="headerlink" title="Permalink to this term" href="#--ignore-inhibitors">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--init"><span class="term"><code class="option">--init</code></span><a class="headerlink" title="Permalink to this term" href="#--init">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--interval="><span class="term"><code class="option">--interval=</code></span><a class="headerlink" title="Permalink to this term" href="#--interval=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--introspect="><span class="term"><code class="option">--introspect=</code></span><a class="headerlink" title="Permalink to this term" href="#--introspect=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--irreversible"><span class="term"><code class="option">--irreversible</code></span><a class="headerlink" title="Permalink to this term" href="#--irreversible">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--iterations="><span class="term"><code class="option">--iterations=</code></span><a class="headerlink" title="Permalink to this term" href="#--iterations=">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--kernel"><span class="term"><code class="option">--kernel</code></span><a class="headerlink" title="Permalink to this term" href="#--kernel">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--key="><span class="term"><code class="option">--key=</code></span><a class="headerlink" title="Permalink to this term" href="#--key=">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="--kill-who="><span class="term"><code class="option">--kill-who=</code></span><a class="headerlink" title="Permalink to this term" href="#--kill-who=">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--level-prefix="><span class="term"><code class="option">--level-prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--level-prefix=">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="--lines="><span class="term"><code class="option">--lines=</code></span><a class="headerlink" title="Permalink to this term" href="#--lines=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--link-journal="><span class="term"><code class="option">--link-journal=</code></span><a class="headerlink" title="Permalink to this term" href="#--link-journal=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--list"><span class="term"><code class="option">--list</code></span><a class="headerlink" title="Permalink to this term" href="#--list">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--list-catalog"><span class="term"><code class="option">--list-catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--list-catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--listen="><span class="term"><code class="option">--listen=</code></span><a class="headerlink" title="Permalink to this term" href="#--listen=">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="--log-color="><span class="term"><code class="option">--log-color=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-color=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--log-level="><span class="term"><code class="option">--log-level=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-level=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--log-location="><span class="term"><code class="option">--log-location=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-location=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--log-priority="><span class="term"><code class="option">--log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-priority=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--log-target="><span class="term"><code class="option">--log-target=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-target=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--machine="><span class="term"><code class="option">--machine=</code></span><a class="headerlink" title="Permalink to this term" href="#--machine=">¶</a></dt><dd><p><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="--merge"><span class="term"><code class="option">--merge</code></span><a class="headerlink" title="Permalink to this term" href="#--merge">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--mode="><span class="term"><code class="option">--mode=</code></span><a class="headerlink" title="Permalink to this term" href="#--mode=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--multiple"><span class="term"><code class="option">--multiple</code></span><a class="headerlink" title="Permalink to this term" href="#--multiple">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--name="><span class="term"><code class="option">--name=</code></span><a class="headerlink" title="Permalink to this term" href="#--name=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--new-id128"><span class="term"><code class="option">--new-id128</code></span><a class="headerlink" title="Permalink to this term" href="#--new-id128">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--no-block"><span class="term"><code class="option">--no-block</code></span><a class="headerlink" title="Permalink to this term" href="#--no-block">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--no-convert"><span class="term"><code class="option">--no-convert</code></span><a class="headerlink" title="Permalink to this term" href="#--no-convert">¶</a></dt><dd><p><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a></p></dd><dt id="--no-filter"><span class="term"><code class="option">--no-filter</code></span><a class="headerlink" title="Permalink to this term" href="#--no-filter">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--no-legend"><span class="term"><code class="option">--no-legend</code></span><a class="headerlink" title="Permalink to this term" href="#--no-legend">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--no-reload"><span class="term"><code class="option">--no-reload</code></span><a class="headerlink" title="Permalink to this term" href="#--no-reload">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--no-tail"><span class="term"><code class="option">--no-tail</code></span><a class="headerlink" title="Permalink to this term" href="#--no-tail">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--no-tty"><span class="term"><code class="option">--no-tty</code></span><a class="headerlink" title="Permalink to this term" href="#--no-tty">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a></p></dd><dt id="--no-wtmp"><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wtmp">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="--order"><span class="term"><code class="option">--order</code></span><a class="headerlink" title="Permalink to this term" href="#--order">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--output"><span class="term"><code class="option">--output</code></span><a class="headerlink" title="Permalink to this term" href="#--output">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--output="><span class="term"><code class="option">--output=</code></span><a class="headerlink" title="Permalink to this term" href="#--output=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="--pager-end"><span class="term"><code class="option">--pager-end</code></span><a class="headerlink" title="Permalink to this term" href="#--pager-end">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--parent-match="><span class="term"><code class="option">--parent-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--parent-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--path="><span class="term"><code class="option">--path=</code></span><a class="headerlink" title="Permalink to this term" href="#--path=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--pid="><span class="term"><code class="option">--pid=</code></span><a class="headerlink" title="Permalink to this term" href="#--pid=">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--plain"><span class="term"><code class="option">--plain</code></span><a class="headerlink" title="Permalink to this term" href="#--plain">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--plymouth"><span class="term"><code class="option">--plymouth</code></span><a class="headerlink" title="Permalink to this term" href="#--plymouth">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--poweroff"><span class="term"><code class="option">--poweroff</code></span><a class="headerlink" title="Permalink to this term" href="#--poweroff">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="--prefix="><span class="term"><code class="option">--prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--pretty"><span class="term"><code class="option">--pretty</code></span><a class="headerlink" title="Permalink to this term" href="#--pretty">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="--priority="><span class="term"><code class="option">--priority=</code></span><a class="headerlink" title="Permalink to this term" href="#--priority=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="--private-network"><span class="term"><code class="option">--private-network</code></span><a class="headerlink" title="Permalink to this term" href="#--private-network">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--privileged"><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#--privileged">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--property"><span class="term"><code class="option">--property</code></span><a class="headerlink" title="Permalink to this term" href="#--property">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--property-match="><span class="term"><code class="option">--property-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--property-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--property="><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="#--property=">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--pss"><span class="term"><code class="option">--pss</code></span><a class="headerlink" title="Permalink to this term" href="#--pss">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--query"><span class="term"><code class="option">--query</code></span><a class="headerlink" title="Permalink to this term" href="#--query">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--query="><span class="term"><code class="option">--query=</code></span><a class="headerlink" title="Permalink to this term" href="#--query=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--quiet"><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#--quiet">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--read-only"><span class="term"><code class="option">--read-only</code></span><a class="headerlink" title="Permalink to this term" href="#--read-only">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--readahead="><span class="term"><code class="option">--readahead=</code></span><a class="headerlink" title="Permalink to this term" href="#--readahead=">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--ready"><span class="term"><code class="option">--ready</code></span><a class="headerlink" title="Permalink to this term" href="#--ready">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--reboot"><span class="term"><code class="option">--reboot</code></span><a class="headerlink" title="Permalink to this term" href="#--reboot">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="--rel"><span class="term"><code class="option">--rel</code></span><a class="headerlink" title="Permalink to this term" href="#--rel">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--reload"><span class="term"><code class="option">--reload</code></span><a class="headerlink" title="Permalink to this term" href="#--reload">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--require"><span class="term"><code class="option">--require</code></span><a class="headerlink" title="Permalink to this term" href="#--require">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--resolve-names="><span class="term"><code class="option">--resolve-names=</code></span><a class="headerlink" title="Permalink to this term" href="#--resolve-names=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="--reverse"><span class="term"><code class="option">--reverse</code></span><a class="headerlink" title="Permalink to this term" href="#--reverse">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--root"><span class="term"><code class="option">--root</code></span><a class="headerlink" title="Permalink to this term" href="#--root">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--root="><span class="term"><code class="option">--root=</code></span><a class="headerlink" title="Permalink to this term" href="#--root=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--runtime"><span class="term"><code class="option">--runtime</code></span><a class="headerlink" title="Permalink to this term" href="#--runtime">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--sample"><span class="term"><code class="option">--sample</code></span><a class="headerlink" title="Permalink to this term" href="#--sample">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--scale-x"><span class="term"><code class="option">--scale-x</code></span><a class="headerlink" title="Permalink to this term" href="#--scale-x">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--scale-y"><span class="term"><code class="option">--scale-y</code></span><a class="headerlink" title="Permalink to this term" href="#--scale-y">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--seq-end="><span class="term"><code class="option">--seq-end=</code></span><a class="headerlink" title="Permalink to this term" href="#--seq-end=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--seq-start="><span class="term"><code class="option">--seq-start=</code></span><a class="headerlink" title="Permalink to this term" href="#--seq-start=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--setup-keys"><span class="term"><code class="option">--setup-keys</code></span><a class="headerlink" title="Permalink to this term" href="#--setup-keys">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--show-status="><span class="term"><code class="option">--show-status=</code></span><a class="headerlink" title="Permalink to this term" href="#--show-status=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--show-types"><span class="term"><code class="option">--show-types</code></span><a class="headerlink" title="Permalink to this term" href="#--show-types">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--signal="><span class="term"><code class="option">--signal=</code></span><a class="headerlink" title="Permalink to this term" href="#--signal=">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--since="><span class="term"><code class="option">--since=</code></span><a class="headerlink" title="Permalink to this term" href="#--since=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--start-exec-queue"><span class="term"><code class="option">--start-exec-queue</code></span><a class="headerlink" title="Permalink to this term" href="#--start-exec-queue">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--static"><span class="term"><code class="option">--static</code></span><a class="headerlink" title="Permalink to this term" href="#--static">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="--status="><span class="term"><code class="option">--status=</code></span><a class="headerlink" title="Permalink to this term" href="#--status=">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--stop-exec-queue"><span class="term"><code class="option">--stop-exec-queue</code></span><a class="headerlink" title="Permalink to this term" href="#--stop-exec-queue">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--subsystem-match="><span class="term"><code class="option">--subsystem-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--subsystem-nomatch="><span class="term"><code class="option">--subsystem-nomatch=</code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-nomatch=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--subsystem="><span class="term"><code class="option">--subsystem=</code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--sysname-match="><span class="term"><code class="option">--sysname-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--sysname-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--system"><span class="term"><code class="option">--system</code></span><a class="headerlink" title="Permalink to this term" href="#--system">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--tag-match="><span class="term"><code class="option">--tag-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--tag-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--test"><span class="term"><code class="option">--test</code></span><a class="headerlink" title="Permalink to this term" href="#--test">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--test="><span class="term"><code class="option">--test=</code></span><a class="headerlink" title="Permalink to this term" href="#--test=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--this-boot"><span class="term"><code class="option">--this-boot</code></span><a class="headerlink" title="Permalink to this term" href="#--this-boot">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a>, <a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--to-pattern="><span class="term"><code class="option">--to-pattern=</code></span><a class="headerlink" title="Permalink to this term" href="#--to-pattern=">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--transient"><span class="term"><code class="option">--transient</code></span><a class="headerlink" title="Permalink to this term" href="#--transient">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="--type="><span class="term"><code class="option">--type=</code></span><a class="headerlink" title="Permalink to this term" href="#--type=">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--udev"><span class="term"><code class="option">--udev</code></span><a class="headerlink" title="Permalink to this term" href="#--udev">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--unit="><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--unit=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--until="><span class="term"><code class="option">--until=</code></span><a class="headerlink" title="Permalink to this term" href="#--until=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--update"><span class="term"><code class="option">--update</code></span><a class="headerlink" title="Permalink to this term" href="#--update">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--update-catalog"><span class="term"><code class="option">--update-catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--update-catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--user"><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--user">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--user-unit="><span class="term"><code class="option">--user-unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--user-unit=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--user="><span class="term"><code class="option">--user=</code></span><a class="headerlink" title="Permalink to this term" href="#--user=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--uuid="><span class="term"><code class="option">--uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#--uuid=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--verbose"><span class="term"><code class="option">--verbose</code></span><a class="headerlink" title="Permalink to this term" href="#--verbose">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--verify"><span class="term"><code class="option">--verify</code></span><a class="headerlink" title="Permalink to this term" href="#--verify">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--verify-key="><span class="term"><code class="option">--verify-key=</code></span><a class="headerlink" title="Permalink to this term" href="#--verify-key=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--vm"><span class="term"><code class="option">--vm</code></span><a class="headerlink" title="Permalink to this term" href="#--vm">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="--wall"><span class="term"><code class="option">--wall</code></span><a class="headerlink" title="Permalink to this term" href="#--wall">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--watch"><span class="term"><code class="option">--watch</code></span><a class="headerlink" title="Permalink to this term" href="#--watch">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--what="><span class="term"><code class="option">--what=</code></span><a class="headerlink" title="Permalink to this term" href="#--what=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--who="><span class="term"><code class="option">--who=</code></span><a class="headerlink" title="Permalink to this term" href="#--who=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--why="><span class="term"><code class="option">--why=</code></span><a class="headerlink" title="Permalink to this term" href="#--why=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--wtmp-only"><span class="term"><code class="option">--wtmp-only</code></span><a class="headerlink" title="Permalink to this term" href="#--wtmp-only">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="-C"><span class="term"><code class="option">-C</code></span><a class="headerlink" title="Permalink to this term" href="#-C">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-D"><span class="term"><code class="option">-D</code></span><a class="headerlink" title="Permalink to this term" href="#-D">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-E"><span class="term"><code class="option">-E</code></span><a class="headerlink" title="Permalink to this term" href="#-E">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="-F"><span class="term"><code class="option">-F</code></span><a class="headerlink" title="Permalink to this term" href="#-F">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="-H"><span class="term"><code class="option">-H</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="-M"><span class="term"><code class="option">-M</code></span><a class="headerlink" title="Permalink to this term" href="#-M">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-P"><span class="term"><code class="option">-P</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="-a"><span class="term"><code class="option">-a</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="-b"><span class="term"><code class="option">-b</code></span><a class="headerlink" title="Permalink to this term" href="#-b">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-c"><span class="term"><code class="option">-c</code></span><a class="headerlink" title="Permalink to this term" href="#-c">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="-d"><span class="term"><code class="option">-d</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-e"><span class="term"><code class="option">-e</code></span><a class="headerlink" title="Permalink to this term" href="#-e">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-f"><span class="term"><code class="option">-f</code></span><a class="headerlink" title="Permalink to this term" href="#-f">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-h"><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="-i"><span class="term"><code class="option">-i</code></span><a class="headerlink" title="Permalink to this term" href="#-i">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-j"><span class="term"><code class="option">-j</code></span><a class="headerlink" title="Permalink to this term" href="#-j">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-k"><span class="term"><code class="option">-k</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="-l"><span class="term"><code class="option">-l</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="-m"><span class="term"><code class="option">-m</code></span><a class="headerlink" title="Permalink to this term" href="#-m">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-n"><span class="term"><code class="option">-n</code></span><a class="headerlink" title="Permalink to this term" href="#-n">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-o"><span class="term"><code class="option">-o</code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="-p"><span class="term"><code class="option">-p</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-q"><span class="term"><code class="option">-q</code></span><a class="headerlink" title="Permalink to this term" href="#-q">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="-r"><span class="term"><code class="option">-r</code></span><a class="headerlink" title="Permalink to this term" href="#-r">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-s"><span class="term"><code class="option">-s</code></span><a class="headerlink" title="Permalink to this term" href="#-s">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="-t"><span class="term"><code class="option">-t</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="-u"><span class="term"><code class="option">-u</code></span><a class="headerlink" title="Permalink to this term" href="#-u">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-v"><span class="term"><code class="option">-v</code></span><a class="headerlink" title="Permalink to this term" href="#-v">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="-w"><span class="term"><code class="option">-w</code></span><a class="headerlink" title="Permalink to this term" href="#-w">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="-x"><span class="term"><code class="option">-x</code></span><a class="headerlink" title="Permalink to this term" href="#-x">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-y"><span class="term"><code class="option">-y</code></span><a class="headerlink" title="Permalink to this term" href="#-y">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="hibernate"><span class="term"><code class="option">hibernate</code></span><a class="headerlink" title="Permalink to this term" href="#hibernate">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="hybrid-sleep"><span class="term"><code class="option">hybrid-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#hybrid-sleep">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="suspend"><span class="term"><code class="option">suspend</code></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259776977712"></a><h2 id="Miscellaneous options and directives">Miscellaneous options and directives<a class="headerlink" title="Permalink to this headline" href="#Miscellaneous%20options%20and%20directives">¶</a></h2><p>Other configuration elements which don't fit in
- any of the above groups.</p><div class="variablelist"><a name="miscellaneous"></a><dl class="variablelist"><dt id="ANSI_COLOR="><span class="term"><code class="varname">ANSI_COLOR=</code></span><a class="headerlink" title="Permalink to this term" href="#ANSI_COLOR=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="BUG_REPORT_URL="><span class="term"><code class="varname">BUG_REPORT_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#BUG_REPORT_URL=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="BUILD_ID="><span class="term"><code class="varname">BUILD_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#BUILD_ID=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="CHASSIS="><span class="term"><code class="varname">CHASSIS=</code></span><a class="headerlink" title="Permalink to this term" href="#CHASSIS=">¶</a></dt><dd><p><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="CPE_NAME="><span class="term"><code class="varname">CPE_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#CPE_NAME=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="Compress="><span class="term"><code class="varname">Compress=</code></span><a class="headerlink" title="Permalink to this term" href="#Compress=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="Controllers="><span class="term"><code class="varname">Controllers=</code></span><a class="headerlink" title="Permalink to this term" href="#Controllers=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="D"><span class="term"><code class="varname">D</code></span><a class="headerlink" title="Permalink to this term" href="#D">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="F"><span class="term"><code class="varname">F</code></span><a class="headerlink" title="Permalink to this term" href="#F">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="FONT="><span class="term"><code class="varname">FONT=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="FONT_MAP="><span class="term"><code class="varname">FONT_MAP=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT_MAP=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="FONT_UNIMAP="><span class="term"><code class="varname">FONT_UNIMAP=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT_UNIMAP=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="ForwardToConsole="><span class="term"><code class="varname">ForwardToConsole=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToConsole=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="ForwardToKMsg="><span class="term"><code class="varname">ForwardToKMsg=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToKMsg=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="ForwardToSyslog="><span class="term"><code class="varname">ForwardToSyslog=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToSyslog=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="HOME_URL="><span class="term"><code class="varname">HOME_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#HOME_URL=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="HandleHibernateKey="><span class="term"><code class="varname">HandleHibernateKey=</code></span><a class="headerlink" title="Permalink to this term" href="#HandleHibernateKey=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HandleLidSwitch="><span class="term"><code class="varname">HandleLidSwitch=</code></span><a class="headerlink" title="Permalink to this term" href="#HandleLidSwitch=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HandlePowerKey="><span class="term"><code class="varname">HandlePowerKey=</code></span><a class="headerlink" title="Permalink to this term" href="#HandlePowerKey=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HandleSuspendKey="><span class="term"><code class="varname">HandleSuspendKey=</code></span><a class="headerlink" title="Permalink to this term" href="#HandleSuspendKey=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HibernateKeyIgnoreInhibited="><span class="term"><code class="varname">HibernateKeyIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#HibernateKeyIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="ICON_NAME="><span class="term"><code class="varname">ICON_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#ICON_NAME=">¶</a></dt><dd><p><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="ID="><span class="term"><code class="varname">ID=</code></span><a class="headerlink" title="Permalink to this term" href="#ID=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="ID_LIKE="><span class="term"><code class="varname">ID_LIKE=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_LIKE=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="IdleAction="><span class="term"><code class="varname">IdleAction=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleAction=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="IdleActionSec="><span class="term"><code class="varname">IdleActionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleActionSec=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="InhibitDelayMaxSec="><span class="term"><code class="varname">InhibitDelayMaxSec=</code></span><a class="headerlink" title="Permalink to this term" href="#InhibitDelayMaxSec=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="KEYMAP="><span class="term"><code class="varname">KEYMAP=</code></span><a class="headerlink" title="Permalink to this term" href="#KEYMAP=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="KEYMAP_TOGGLE="><span class="term"><code class="varname">KEYMAP_TOGGLE=</code></span><a class="headerlink" title="Permalink to this term" href="#KEYMAP_TOGGLE=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="KillExcludeUsers="><span class="term"><code class="varname">KillExcludeUsers=</code></span><a class="headerlink" title="Permalink to this term" href="#KillExcludeUsers=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="KillOnlyUsers="><span class="term"><code class="varname">KillOnlyUsers=</code></span><a class="headerlink" title="Permalink to this term" href="#KillOnlyUsers=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="KillUserProcesses="><span class="term"><code class="varname">KillUserProcesses=</code></span><a class="headerlink" title="Permalink to this term" href="#KillUserProcesses=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="L"><span class="term"><code class="varname">L</code></span><a class="headerlink" title="Permalink to this term" href="#L">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="LidSwitchIgnoreInhibited="><span class="term"><code class="varname">LidSwitchIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#LidSwitchIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="MaxFileSec="><span class="term"><code class="varname">MaxFileSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxFileSec=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelConsole="><span class="term"><code class="varname">MaxLevelConsole=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelConsole=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelKMsg="><span class="term"><code class="varname">MaxLevelKMsg=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelKMsg=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelStore="><span class="term"><code class="varname">MaxLevelStore=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelStore=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelSyslog="><span class="term"><code class="varname">MaxLevelSyslog=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelSyslog=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxRetentionSec="><span class="term"><code class="varname">MaxRetentionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxRetentionSec=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="NAME="><span class="term"><code class="varname">NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#NAME=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="NAutoVTs="><span class="term"><code class="varname">NAutoVTs=</code></span><a class="headerlink" title="Permalink to this term" href="#NAutoVTs=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="PRETTY_HOSTNAME="><span class="term"><code class="varname">PRETTY_HOSTNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_HOSTNAME=">¶</a></dt><dd><p><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="PRETTY_NAME="><span class="term"><code class="varname">PRETTY_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_NAME=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="PowerKeyIgnoreInhibited="><span class="term"><code class="varname">PowerKeyIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#PowerKeyIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="R"><span class="term"><code class="varname">R</code></span><a class="headerlink" title="Permalink to this term" href="#R">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="RateLimitBurst="><span class="term"><code class="varname">RateLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#RateLimitBurst=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="RateLimitInterval="><span class="term"><code class="varname">RateLimitInterval=</code></span><a class="headerlink" title="Permalink to this term" href="#RateLimitInterval=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="ReserveVT="><span class="term"><code class="varname">ReserveVT=</code></span><a class="headerlink" title="Permalink to this term" href="#ReserveVT=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="ResetControllers="><span class="term"><code class="varname">ResetControllers=</code></span><a class="headerlink" title="Permalink to this term" href="#ResetControllers=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="RuntimeKeepFree="><span class="term"><code class="varname">RuntimeKeepFree=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeKeepFree=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="RuntimeMaxFileSize="><span class="term"><code class="varname">RuntimeMaxFileSize=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeMaxFileSize=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="RuntimeMaxUse="><span class="term"><code class="varname">RuntimeMaxUse=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeMaxUse=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SUPPORT_URL="><span class="term"><code class="varname">SUPPORT_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#SUPPORT_URL=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="Seal="><span class="term"><code class="varname">Seal=</code></span><a class="headerlink" title="Permalink to this term" href="#Seal=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SplitMode="><span class="term"><code class="varname">SplitMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SplitMode=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="Storage="><span class="term"><code class="varname">Storage=</code></span><a class="headerlink" title="Permalink to this term" href="#Storage=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SuspendKeyIgnoreInhibited="><span class="term"><code class="varname">SuspendKeyIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendKeyIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="SyncIntervalSec="><span class="term"><code class="varname">SyncIntervalSec=</code></span><a class="headerlink" title="Permalink to this term" href="#SyncIntervalSec=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SystemKeepFree="><span class="term"><code class="varname">SystemKeepFree=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemKeepFree=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SystemMaxFileSize="><span class="term"><code class="varname">SystemMaxFileSize=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemMaxFileSize=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SystemMaxUse="><span class="term"><code class="varname">SystemMaxUse=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemMaxUse=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id=""><span class="term"></span><a class="headerlink" title="Permalink to this term" href="#">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="VERSION="><span class="term"><code class="varname">VERSION=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="VERSION_ID="><span class="term"><code class="varname">VERSION_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION_ID=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="X"><span class="term"><code class="varname">X</code></span><a class="headerlink" title="Permalink to this term" href="#X">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="Z"><span class="term"><code class="varname">Z</code></span><a class="headerlink" title="Permalink to this term" href="#Z">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="b"><span class="term"><code class="varname">b</code></span><a class="headerlink" title="Permalink to this term" href="#b">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="c"><span class="term"><code class="varname">c</code></span><a class="headerlink" title="Permalink to this term" href="#c">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="d"><span class="term"><code class="varname">d</code></span><a class="headerlink" title="Permalink to this term" href="#d">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="equivalent"><span class="term"><code class="varname">equivalent</code></span><a class="headerlink" title="Permalink to this term" href="#equivalent">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="f"><span class="term"><code class="varname">f</code></span><a class="headerlink" title="Permalink to this term" href="#f">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="h"><span class="term"><code class="varname">h</code></span><a class="headerlink" title="Permalink to this term" href="#h">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="m"><span class="term"><code class="varname">m</code></span><a class="headerlink" title="Permalink to this term" href="#m">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="masked"><span class="term"><code class="varname">masked</code></span><a class="headerlink" title="Permalink to this term" href="#masked">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="min"><span class="term"><code class="varname">min</code></span><a class="headerlink" title="Permalink to this term" href="#min">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="ms"><span class="term"><code class="varname">ms</code></span><a class="headerlink" title="Permalink to this term" href="#ms">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="overridden"><span class="term"><code class="varname">overridden</code></span><a class="headerlink" title="Permalink to this term" href="#overridden">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="p"><span class="term"><code class="varname">p</code></span><a class="headerlink" title="Permalink to this term" href="#p">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="r"><span class="term"><code class="varname">r</code></span><a class="headerlink" title="Permalink to this term" href="#r">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="redirected"><span class="term"><code class="varname">redirected</code></span><a class="headerlink" title="Permalink to this term" href="#redirected">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id=""><span class="term"></span><a class="headerlink" title="Permalink to this term" href="#">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="udev_log"><span class="term"><code class="varname">udev_log</code></span><a class="headerlink" title="Permalink to this term" href="#udev_log">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="unchanged"><span class="term"><code class="varname">unchanged</code></span><a class="headerlink" title="Permalink to this term" href="#unchanged">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="us"><span class="term"><code class="varname">us</code></span><a class="headerlink" title="Permalink to this term" href="#us">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="w"><span class="term"><code class="varname">w</code></span><a class="headerlink" title="Permalink to this term" href="#w">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="x"><span class="term"><code class="varname">x</code></span><a class="headerlink" title="Permalink to this term" href="#x">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="z"><span class="term"><code class="varname">z</code></span><a class="headerlink" title="Permalink to this term" href="#z">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259776817056"></a><h2 id="Files and directories">Files and directories<a class="headerlink" title="Permalink to this headline" href="#Files%20and%20directories">¶</a></h2><p>Paths and file names referred to in the
- documentation.</p><div class="variablelist"><a name="filenames"></a><dl class="variablelist"><dt id="/"><span class="term"><code class="filename">/</code></span><a class="headerlink" title="Permalink to this term" href="#/">¶</a></dt><dd><p><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/.readahead"><span class="term"><code class="filename">/.readahead</code></span><a class="headerlink" title="Permalink to this term" href="#/.readahead">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="/bin/ls"><span class="term"><code class="filename">/bin/ls</code></span><a class="headerlink" title="Permalink to this term" href="#/bin/ls">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="/bin/sh"><span class="term"><code class="filename">/bin/sh</code></span><a class="headerlink" title="Permalink to this term" href="#/bin/sh">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/boot"><span class="term"><code class="filename">/boot</code></span><a class="headerlink" title="Permalink to this term" href="#/boot">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf"><span class="term"><code class="filename">/boot/loader/entries/<em class="replaceable"><code>MACHINE-ID</code></em>-<em class="replaceable"><code>KERNEL-VERSION</code></em>.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/dev"><span class="term"><code class="filename">/dev</code></span><a class="headerlink" title="Permalink to this term" href="#/dev">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>, <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/dev/console"><span class="term"><code class="filename">/dev/console</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/console">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/dev/hw_random"><span class="term"><code class="filename">/dev/hw_random</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/hw_random">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="/dev/initctl"><span class="term"><code class="filename">/dev/initctl</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/initctl">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="/dev/mapper/"><span class="term"><code class="filename">/dev/mapper/</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/mapper/">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="/dev/null"><span class="term"><code class="filename">/dev/null</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/null">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/dev/random"><span class="term"><code class="filename">/dev/random</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/random">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="/dev/urandom"><span class="term"><code class="filename">/dev/urandom</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/urandom">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a></p></dd><dt id="/dev/watchdog"><span class="term"><code class="filename">/dev/watchdog</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/watchdog">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="/etc/"><span class="term"><code class="filename">/etc/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/etc/adjtime"><span class="term"><code class="filename">/etc/adjtime</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/adjtime">¶</a></dt><dd><p><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="/etc/binfmt.d/"><span class="term"><code class="filename">/etc/binfmt.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/binfmt.d/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/etc/binfmt.d/*.conf"><span class="term"><code class="filename">/etc/binfmt.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/binfmt.d/*.conf">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/etc/crypttab"><span class="term"><code class="filename">/etc/crypttab</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/crypttab">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>, <a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a></p></dd><dt id="/etc/fstab"><span class="term"><code class="filename">/etc/fstab</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/fstab">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>, <a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="/etc/hostname"><span class="term"><code class="filename">/etc/hostname</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/hostname">¶</a></dt><dd><p><a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>, <a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="/etc/hosts"><span class="term"><code class="filename">/etc/hosts</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/hosts">¶</a></dt><dd><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a></p></dd><dt id="/etc/kernel/cmdline"><span class="term"><code class="filename">/etc/kernel/cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/kernel/cmdline">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/etc/kernel/install.d/"><span class="term"><code class="filename">/etc/kernel/install.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/kernel/install.d/">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/etc/kernel/install.d/*.install"><span class="term"><code class="filename">/etc/kernel/install.d/*.install</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/kernel/install.d/*.install">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/etc/locale.conf"><span class="term"><code class="filename">/etc/locale.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/locale.conf">¶</a></dt><dd><p><a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/etc/localtime"><span class="term"><code class="filename">/etc/localtime</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/localtime">¶</a></dt><dd><p><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="/etc/machine-id"><span class="term"><code class="filename">/etc/machine-id</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/machine-id">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/etc/machine-info"><span class="term"><code class="filename">/etc/machine-info</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/machine-info">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="/etc/modules-load.d/program.conf"><span class="term"><code class="filename">/etc/modules-load.d/<em class="replaceable"><code>program</code></em>.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/modules-load.d/program.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/etc/modules-load.d/*.conf"><span class="term"><code class="filename">/etc/modules-load.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/modules-load.d/*.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/etc/nsswitch.conf"><span class="term"><code class="filename">/etc/nsswitch.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/nsswitch.conf">¶</a></dt><dd><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a></p></dd><dt id="/etc/os-release"><span class="term"><code class="filename">/etc/os-release</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/os-release">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/etc/sysctl.d/"><span class="term"><code class="filename">/etc/sysctl.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/sysctl.d/">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/etc/sysctl.d/*.conf"><span class="term"><code class="filename">/etc/sysctl.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/sysctl.d/*.conf">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/etc/systemd/bootchart.conf"><span class="term"><code class="filename">/etc/systemd/bootchart.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/bootchart.conf">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="/etc/systemd/journald.conf"><span class="term"><code class="filename">/etc/systemd/journald.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/journald.conf">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="/etc/systemd/logind.conf"><span class="term"><code class="filename">/etc/systemd/logind.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/logind.conf">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="/etc/systemd/sleep.conf"><span class="term"><code class="filename">/etc/systemd/sleep.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/sleep.conf">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/etc/systemd/system/"><span class="term"><code class="filename">/etc/systemd/system/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/etc/systemd/system-preset/"><span class="term"><code class="filename">/etc/systemd/system-preset/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system-preset/">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/system-preset/*.preset"><span class="term"><code class="filename">/etc/systemd/system-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/system-preset/00-lennart.preset"><span class="term"><code class="filename">/etc/systemd/system-preset/00-lennart.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system-preset/00-lennart.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/system.conf"><span class="term"><code class="filename">/etc/systemd/system.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system.conf">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="/etc/systemd/user/"><span class="term"><code class="filename">/etc/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/etc/systemd/user-preset/*.preset"><span class="term"><code class="filename">/etc/systemd/user-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/user-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/user.conf"><span class="term"><code class="filename">/etc/systemd/user.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/user.conf">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="/etc/tmpfiles.d/"><span class="term"><code class="filename">/etc/tmpfiles.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/tmpfiles.d/">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/etc/tmpfiles.d/*.conf"><span class="term"><code class="filename">/etc/tmpfiles.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/tmpfiles.d/*.conf">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/etc/udev/hwdb.bin"><span class="term"><code class="filename">/etc/udev/hwdb.bin</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/hwdb.bin">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="/etc/udev/rules.d"><span class="term"><code class="filename">/etc/udev/rules.d</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/rules.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/etc/udev/udev.conf"><span class="term"><code class="filename">/etc/udev/udev.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/udev.conf">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="/etc/vconsole.conf"><span class="term"><code class="filename">/etc/vconsole.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/vconsole.conf">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="/home/lennart"><span class="term"><code class="filename">/home/lennart</code></span><a class="headerlink" title="Permalink to this term" href="#/home/lennart">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a></p></dd><dt id="/lib"><span class="term"><code class="filename">/lib</code></span><a class="headerlink" title="Permalink to this term" href="#/lib">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/proc"><span class="term"><code class="filename">/proc</code></span><a class="headerlink" title="Permalink to this term" href="#/proc">¶</a></dt><dd><p><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/proc/cmdline"><span class="term"><code class="filename">/proc/cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/cmdline">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/proc/self/fd"><span class="term"><code class="filename">/proc/self/fd</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/self/fd">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a></p></dd><dt id="/proc/self/mountinfo"><span class="term"><code class="filename">/proc/self/mountinfo</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/self/mountinfo">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="/proc/self/sessionid"><span class="term"><code class="filename">/proc/self/sessionid</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/self/sessionid">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="/proc/sys"><span class="term"><code class="filename">/proc/sys</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/proc/sys/kernel/random/boot_id"><span class="term"><code class="filename">/proc/sys/kernel/random/boot_id</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys/kernel/random/boot_id">¶</a></dt><dd><p><a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a></p></dd><dt id="/proc/sys/net/ipv4/tcp_keepalive_time"><span class="term"><code class="filename">/proc/sys/net/ipv4/tcp_keepalive_time</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys/net/ipv4/tcp_keepalive_time">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/proc/sys/net/ipv6/bindv6only"><span class="term"><code class="filename">/proc/sys/net/ipv6/bindv6only</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys/net/ipv6/bindv6only">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/run/"><span class="term"><code class="filename">/run/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/run/binfmt.d/*.conf"><span class="term"><code class="filename">/run/binfmt.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/binfmt.d/*.conf">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/run/log"><span class="term"><code class="filename">/run/log</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="/run/log/journal"><span class="term"><code class="filename">/run/log/journal</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log/journal">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/run/modules-load.d/*.conf"><span class="term"><code class="filename">/run/modules-load.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/modules-load.d/*.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/run/nologin"><span class="term"><code class="filename">/run/nologin</code></span><a class="headerlink" title="Permalink to this term" href="#/run/nologin">¶</a></dt><dd><p><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a></p></dd><dt id="/run/sysctl.d/*.conf"><span class="term"><code class="filename">/run/sysctl.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/sysctl.d/*.conf">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/run/systemd/generator"><span class="term"><code class="filename">/run/systemd/generator</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/generator">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/generator.early"><span class="term"><code class="filename">/run/systemd/generator.early</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/generator.early">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/generator.late"><span class="term"><code class="filename">/run/systemd/generator.late</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/generator.late">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/journal/syslog"><span class="term"><code class="filename">/run/systemd/journal/syslog</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/journal/syslog">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/run/systemd/notify"><span class="term"><code class="filename">/run/systemd/notify</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/notify">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/run/systemd/private"><span class="term"><code class="filename">/run/systemd/private</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/private">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/run/systemd/readahead/"><span class="term"><code class="filename">/run/systemd/readahead/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/readahead/">¶</a></dt><dd><p><a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a></p></dd><dt id="/run/systemd/shutdownd"><span class="term"><code class="filename">/run/systemd/shutdownd</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/shutdownd">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/run/systemd/system/"><span class="term"><code class="filename">/run/systemd/system/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/system/">¶</a></dt><dd><p><a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/system-preset/*.preset"><span class="term"><code class="filename">/run/systemd/system-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/system-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/run/systemd/systemd"><span class="term"><code class="filename">/run/systemd/systemd</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/systemd">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/user/"><span class="term"><code class="filename">/run/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/user-preset/*.preset"><span class="term"><code class="filename">/run/systemd/user-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/user-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/run/tmpfiles.d/*.conf"><span class="term"><code class="filename">/run/tmpfiles.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/tmpfiles.d/*.conf">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/run/udev/rules.d"><span class="term"><code class="filename">/run/udev/rules.d</code></span><a class="headerlink" title="Permalink to this term" href="#/run/udev/rules.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/run/user/$USER"><span class="term"><code class="filename">/run/user/$USER</code></span><a class="headerlink" title="Permalink to this term" href="#/run/user/%24USER">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="/sbin/init"><span class="term"><code class="filename">/sbin/init</code></span><a class="headerlink" title="Permalink to this term" href="#/sbin/init">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="/sys"><span class="term"><code class="filename">/sys</code></span><a class="headerlink" title="Permalink to this term" href="#/sys">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>, <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/sys/fs/cgroup"><span class="term"><code class="filename">/sys/fs/cgroup</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/fs/cgroup">¶</a></dt><dd><p><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="/sys/fs/cgroup/systemd/"><span class="term"><code class="filename">/sys/fs/cgroup/systemd/</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/fs/cgroup/systemd/">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/sys/fs/selinux"><span class="term"><code class="filename">/sys/fs/selinux</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/fs/selinux">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/sys/power/disk"><span class="term"><code class="filename">/sys/power/disk</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/power/disk">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="/sys/power/state"><span class="term"><code class="filename">/sys/power/state</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/power/state">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/sysroot"><span class="term"><code class="filename">/sysroot</code></span><a class="headerlink" title="Permalink to this term" href="#/sysroot">¶</a></dt><dd><p><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a></p></dd><dt id="/sysroot/etc/fstab"><span class="term"><code class="filename">/sysroot/etc/fstab</code></span><a class="headerlink" title="Permalink to this term" href="#/sysroot/etc/fstab">¶</a></dt><dd><p><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a></p></dd><dt id="/system"><span class="term"><code class="filename">/system</code></span><a class="headerlink" title="Permalink to this term" href="#/system">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/system-update"><span class="term"><code class="filename">/system-update</code></span><a class="headerlink" title="Permalink to this term" href="#/system-update">¶</a></dt><dd><p><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a>, <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="/tmp"><span class="term"><code class="filename">/tmp</code></span><a class="headerlink" title="Permalink to this term" href="#/tmp">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/tmp/systemd-generator.XXXXXX"><span class="term"><code class="filename">/tmp/systemd-generator.<em class="replaceable"><code>XXXXXX</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/tmp/systemd-generator.XXXXXX">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/tmp/systemd-generator.early.XXXXXX"><span class="term"><code class="filename">/tmp/systemd-generator.early.<em class="replaceable"><code>XXXXXX</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/tmp/systemd-generator.early.XXXXXX">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/tmp/systemd-generator.late.XXXXXX"><span class="term"><code class="filename">/tmp/systemd-generator.late.<em class="replaceable"><code>XXXXXX</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/tmp/systemd-generator.late.XXXXXX">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/user/$USER"><span class="term"><code class="filename">/user/$USER</code></span><a class="headerlink" title="Permalink to this term" href="#/user/%24USER">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="/user/$USER/$XDG_SESSION_ID"><span class="term"><code class="filename">/user/$USER/$XDG_SESSION_ID</code></span><a class="headerlink" title="Permalink to this term" href="#/user/%24USER/%24XDG_SESSION_ID">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="/usr"><span class="term"><code class="filename">/usr</code></span><a class="headerlink" title="Permalink to this term" href="#/usr">¶</a></dt><dd><p><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="/usr/lib/"><span class="term"><code class="filename">/usr/lib/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/usr/lib/binfmt.d/*.conf"><span class="term"><code class="filename">/usr/lib/binfmt.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/binfmt.d/*.conf">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/usr/lib/kernel/install.d/"><span class="term"><code class="filename">/usr/lib/kernel/install.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/kernel/install.d/">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/usr/lib/kernel/install.d/*.install"><span class="term"><code class="filename">/usr/lib/kernel/install.d/*.install</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/kernel/install.d/*.install">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/usr/lib/modules-load.d/*.conf"><span class="term"><code class="filename">/usr/lib/modules-load.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/modules-load.d/*.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/usr/lib/sysctl.d/*.conf"><span class="term"><code class="filename">/usr/lib/sysctl.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/sysctl.d/*.conf">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system"><span class="term"><code class="filename">/usr/lib/systemd/system</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-cryptsetup-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-cryptsetup-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-cryptsetup-generator">¶</a></dt><dd><p><a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-fstab-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-fstab-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-fstab-generator">¶</a></dt><dd><p><a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-getty-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-getty-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-getty-generator">¶</a></dt><dd><p><a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-system-update-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-system-update-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-system-update-generator">¶</a></dt><dd><p><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-preset/*.preset"><span class="term"><code class="filename">/usr/lib/systemd/system-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-preset/50-gnome.preset"><span class="term"><code class="filename">/usr/lib/systemd/system-preset/50-gnome.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-preset/50-gnome.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-preset/99-default.preset"><span class="term"><code class="filename">/usr/lib/systemd/system-preset/99-default.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-preset/99-default.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-shutdown/"><span class="term"><code class="filename">/usr/lib/systemd/system-shutdown/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-shutdown/">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-sleep/"><span class="term"><code class="filename">/usr/lib/systemd/system-sleep/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-sleep/">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-activate"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-activate</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-activate">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-binfmt"><span class="term"><code class="filename">/usr/lib/systemd/systemd-binfmt</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-binfmt">¶</a></dt><dd><p><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-bootchart"><span class="term"><code class="filename">/usr/lib/systemd/systemd-bootchart</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-bootchart">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-cryptsetup"><span class="term"><code class="filename">/usr/lib/systemd/systemd-cryptsetup</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-cryptsetup">¶</a></dt><dd><p><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-fsck"><span class="term"><code class="filename">/usr/lib/systemd/systemd-fsck</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-fsck">¶</a></dt><dd><p><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-hostnamed"><span class="term"><code class="filename">/usr/lib/systemd/systemd-hostnamed</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-hostnamed">¶</a></dt><dd><p><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-initctl"><span class="term"><code class="filename">/usr/lib/systemd/systemd-initctl</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-initctl">¶</a></dt><dd><p><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-journal-gatewayd"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-journal-gatewayd</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-journal-gatewayd">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-journald"><span class="term"><code class="filename">/usr/lib/systemd/systemd-journald</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-journald">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-localed"><span class="term"><code class="filename">/usr/lib/systemd/systemd-localed</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-localed">¶</a></dt><dd><p><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-logind"><span class="term"><code class="filename">/usr/lib/systemd/systemd-logind</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-logind">¶</a></dt><dd><p><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-modules-load"><span class="term"><code class="filename">/usr/lib/systemd/systemd-modules-load</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-modules-load">¶</a></dt><dd><p><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-quotacheck"><span class="term"><code class="filename">/usr/lib/systemd/systemd-quotacheck</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-quotacheck">¶</a></dt><dd><p><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-random-seed"><span class="term"><code class="filename">/usr/lib/systemd/systemd-random-seed</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-random-seed">¶</a></dt><dd><p><a href="systemd-random-seed-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-load.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-readahead/systemd-readahead"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-readahead/systemd-readahead</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-readahead/systemd-readahead">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-remount-fs"><span class="term"><code class="filename">/usr/lib/systemd/systemd-remount-fs</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-remount-fs">¶</a></dt><dd><p><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-shutdown"><span class="term"><code class="filename">/usr/lib/systemd/systemd-shutdown</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-shutdown">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-shutdownd"><span class="term"><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-shutdownd">¶</a></dt><dd><p><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-sleep"><span class="term"><code class="filename">/usr/lib/systemd/systemd-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-sleep">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-sysctl"><span class="term"><code class="filename">/usr/lib/systemd/systemd-sysctl</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-sysctl">¶</a></dt><dd><p><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-timedated"><span class="term"><code class="filename">/usr/lib/systemd/systemd-timedated</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-timedated">¶</a></dt><dd><p><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-udevd"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-udevd</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-udevd">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-update-utmp"><span class="term"><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-update-utmp">¶</a></dt><dd><p><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-user-sessions"><span class="term"><code class="filename">/usr/lib/systemd/systemd-user-sessions</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-user-sessions">¶</a></dt><dd><p><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-vconsole-setup"><span class="term"><code class="filename">/usr/lib/systemd/systemd-vconsole-setup</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-vconsole-setup">¶</a></dt><dd><p><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/user/"><span class="term"><code class="filename">/usr/lib/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/user-preset/*.preset"><span class="term"><code class="filename">/usr/lib/systemd/user-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/user-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/tmpfiles.d/*.conf"><span class="term"><code class="filename">/usr/lib/tmpfiles.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/tmpfiles.d/*.conf">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/usr/lib/udev/rules.d"><span class="term"><code class="filename">/usr/lib/udev/rules.d</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/udev/rules.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/usr/local/lib/systemd/system"><span class="term"><code class="filename">/usr/local/lib/systemd/system</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/local/lib/systemd/system">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/usr/local/lib/systemd/user"><span class="term"><code class="filename">/usr/local/lib/systemd/user</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/local/lib/systemd/user">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/usr/share/zoneinfo/"><span class="term"><code class="filename">/usr/share/zoneinfo/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/share/zoneinfo/">¶</a></dt><dd><p><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a></p></dd><dt id="/var"><span class="term"><code class="filename">/var</code></span><a class="headerlink" title="Permalink to this term" href="#/var">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/var/lib/dbus/machine-id"><span class="term"><code class="filename">/var/lib/dbus/machine-id</code></span><a class="headerlink" title="Permalink to this term" href="#/var/lib/dbus/machine-id">¶</a></dt><dd><p><a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a></p></dd><dt id="/var/lib/random-seed"><span class="term"><code class="filename">/var/lib/random-seed</code></span><a class="headerlink" title="Permalink to this term" href="#/var/lib/random-seed">¶</a></dt><dd><p><a href="systemd-random-seed-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-load.service</span>(8)</span></a></p></dd><dt id="/var/log/journal"><span class="term"><code class="filename">/var/log/journal</code></span><a class="headerlink" title="Permalink to this term" href="#/var/log/journal">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/var/run/foobar.pid"><span class="term"><code class="filename">/var/run/foobar.pid</code></span><a class="headerlink" title="Permalink to this term" href="#/var/run/foobar.pid">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a></p></dd><dt id="/var/run/utmp"><span class="term"><code class="filename">/var/run/utmp</code></span><a class="headerlink" title="Permalink to this term" href="#/var/run/utmp">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="/var/tmp"><span class="term"><code class="filename">/var/tmp</code></span><a class="headerlink" title="Permalink to this term" href="#/var/tmp">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="automount.automount"><span class="term"><code class="filename"><em class="replaceable"><code>automount</code></em>.automount</code></span><a class="headerlink" title="Permalink to this term" href="#automount.automount">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="basic.target"><span class="term"><code class="filename">basic.target</code></span><a class="headerlink" title="Permalink to this term" href="#basic.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="bluetooth.target"><span class="term"><code class="filename">bluetooth.target</code></span><a class="headerlink" title="Permalink to this term" href="#bluetooth.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="cryptsetup.target"><span class="term"><code class="filename">cryptsetup.target</code></span><a class="headerlink" title="Permalink to this term" href="#cryptsetup.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="ctrl-alt-del.target"><span class="term"><code class="filename">ctrl-alt-del.target</code></span><a class="headerlink" title="Permalink to this term" href="#ctrl-alt-del.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="dbus.service"><span class="term"><code class="filename">dbus.service</code></span><a class="headerlink" title="Permalink to this term" href="#dbus.service">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="dbus.socket"><span class="term"><code class="filename">dbus.socket</code></span><a class="headerlink" title="Permalink to this term" href="#dbus.socket">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="default.target"><span class="term"><code class="filename">default.target</code></span><a class="headerlink" title="Permalink to this term" href="#default.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="device.device"><span class="term"><code class="filename"><em class="replaceable"><code>device</code></em>.device</code></span><a class="headerlink" title="Permalink to this term" href="#device.device">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="display-manager.service"><span class="term"><code class="filename">display-manager.service</code></span><a class="headerlink" title="Permalink to this term" href="#display-manager.service">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="emergency.target"><span class="term"><code class="filename">emergency.target</code></span><a class="headerlink" title="Permalink to this term" href="#emergency.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="exit.target"><span class="term"><code class="filename">exit.target</code></span><a class="headerlink" title="Permalink to this term" href="#exit.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="final.target"><span class="term"><code class="filename">final.target</code></span><a class="headerlink" title="Permalink to this term" href="#final.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="getty.target"><span class="term"><code class="filename">getty.target</code></span><a class="headerlink" title="Permalink to this term" href="#getty.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="graphical.target"><span class="term"><code class="filename">graphical.target</code></span><a class="headerlink" title="Permalink to this term" href="#graphical.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="halt"><span class="term"><span class="command"><strong>halt</strong></span></span><a class="headerlink" title="Permalink to this term" href="#halt">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="halt.target"><span class="term"><code class="filename">halt.target</code></span><a class="headerlink" title="Permalink to this term" href="#halt.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="hibernate.target"><span class="term"><code class="filename">hibernate.target</code></span><a class="headerlink" title="Permalink to this term" href="#hibernate.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="hostnamectl"><span class="term"><span class="command"><strong>hostnamectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#hostnamectl">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="hybrid-sleep.target"><span class="term"><code class="filename">hybrid-sleep.target</code></span><a class="headerlink" title="Permalink to this term" href="#hybrid-sleep.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="init"><span class="term"><span class="command"><strong>init</strong></span></span><a class="headerlink" title="Permalink to this term" href="#init">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="initrd-fs.target"><span class="term"><code class="filename">initrd-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#initrd-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="initrd-root-fs.target"><span class="term"><code class="filename">initrd-root-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#initrd-root-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="journalctl"><span class="term"><span class="command"><strong>journalctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#journalctl">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="kbrequest.target"><span class="term"><code class="filename">kbrequest.target</code></span><a class="headerlink" title="Permalink to this term" href="#kbrequest.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="kernel-install"><span class="term"><span class="command"><strong>kernel-install</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kernel-install">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="kexec.target"><span class="term"><code class="filename">kexec.target</code></span><a class="headerlink" title="Permalink to this term" href="#kexec.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="local-fs-pre.target"><span class="term"><code class="filename">local-fs-pre.target</code></span><a class="headerlink" title="Permalink to this term" href="#local-fs-pre.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="local-fs.target"><span class="term"><code class="filename">local-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#local-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="localectl"><span class="term"><span class="command"><strong>localectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#localectl">¶</a></dt><dd><p><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a></p></dd><dt id="loginctl"><span class="term"><span class="command"><strong>loginctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#loginctl">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a></p></dd><dt id="mount.mount"><span class="term"><code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code></span><a class="headerlink" title="Permalink to this term" href="#mount.mount">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="multi-user.target"><span class="term"><code class="filename">multi-user.target</code></span><a class="headerlink" title="Permalink to this term" href="#multi-user.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="network-online.target"><span class="term"><code class="filename">network-online.target</code></span><a class="headerlink" title="Permalink to this term" href="#network-online.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="network.target"><span class="term"><code class="filename">network.target</code></span><a class="headerlink" title="Permalink to this term" href="#network.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="nss-lookup.target"><span class="term"><code class="filename">nss-lookup.target</code></span><a class="headerlink" title="Permalink to this term" href="#nss-lookup.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="nss-myhostname.la"><span class="term"><code class="filename">nss-myhostname.la</code></span><a class="headerlink" title="Permalink to this term" href="#nss-myhostname.la">¶</a></dt><dd><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a></p></dd><dt id="nss-user-lookup.target"><span class="term"><code class="filename">nss-user-lookup.target</code></span><a class="headerlink" title="Permalink to this term" href="#nss-user-lookup.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="pam_systemd.so"><span class="term"><code class="filename">pam_systemd.so</code></span><a class="headerlink" title="Permalink to this term" href="#pam_systemd.so">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="path.path"><span class="term"><code class="filename"><em class="replaceable"><code>path</code></em>.path</code></span><a class="headerlink" title="Permalink to this term" href="#path.path">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="paths.target"><span class="term"><code class="filename">paths.target</code></span><a class="headerlink" title="Permalink to this term" href="#paths.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="pkg-config"><span class="term"><span class="command"><strong>pkg-config</strong></span></span><a class="headerlink" title="Permalink to this term" href="#pkg-config">¶</a></dt><dd><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>, <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>, <a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>, <a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a></p></dd><dt id="poweroff"><span class="term"><span class="command"><strong>poweroff</strong></span></span><a class="headerlink" title="Permalink to this term" href="#poweroff">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="poweroff.target"><span class="term"><code class="filename">poweroff.target</code></span><a class="headerlink" title="Permalink to this term" href="#poweroff.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="printer.target"><span class="term"><code class="filename">printer.target</code></span><a class="headerlink" title="Permalink to this term" href="#printer.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="reboot"><span class="term"><span class="command"><strong>reboot</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reboot">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="reboot.target"><span class="term"><code class="filename">reboot.target</code></span><a class="headerlink" title="Permalink to this term" href="#reboot.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="remote-fs-pre.target"><span class="term"><code class="filename">remote-fs-pre.target</code></span><a class="headerlink" title="Permalink to this term" href="#remote-fs-pre.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="remote-fs.target"><span class="term"><code class="filename">remote-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#remote-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="rescue.target"><span class="term"><code class="filename">rescue.target</code></span><a class="headerlink" title="Permalink to this term" href="#rescue.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="rpcbind.target"><span class="term"><code class="filename">rpcbind.target</code></span><a class="headerlink" title="Permalink to this term" href="#rpcbind.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel"><span class="term"><span class="command"><strong>runlevel</strong></span></span><a class="headerlink" title="Permalink to this term" href="#runlevel">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="runlevel2.target"><span class="term"><code class="filename">runlevel2.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel2.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel3.target"><span class="term"><code class="filename">runlevel3.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel3.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel4.target"><span class="term"><code class="filename">runlevel4.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel4.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel5.target"><span class="term"><code class="filename">runlevel5.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel5.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="service.service"><span class="term"><code class="filename"><em class="replaceable"><code>service</code></em>.service</code></span><a class="headerlink" title="Permalink to this term" href="#service.service">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="shutdown"><span class="term"><span class="command"><strong>shutdown</strong></span></span><a class="headerlink" title="Permalink to this term" href="#shutdown">¶</a></dt><dd><p><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="shutdown.target"><span class="term"><code class="filename">shutdown.target</code></span><a class="headerlink" title="Permalink to this term" href="#shutdown.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sigpwr.target"><span class="term"><code class="filename">sigpwr.target</code></span><a class="headerlink" title="Permalink to this term" href="#sigpwr.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sleep.target"><span class="term"><code class="filename">sleep.target</code></span><a class="headerlink" title="Permalink to this term" href="#sleep.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="smartcard.target"><span class="term"><code class="filename">smartcard.target</code></span><a class="headerlink" title="Permalink to this term" href="#smartcard.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="snapshot.snapshot"><span class="term"><code class="filename"><em class="replaceable"><code>snapshot</code></em>.snapshot</code></span><a class="headerlink" title="Permalink to this term" href="#snapshot.snapshot">¶</a></dt><dd><p><a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="socket.socket"><span class="term"><code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code></span><a class="headerlink" title="Permalink to this term" href="#socket.socket">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="sockets.target"><span class="term"><code class="filename">sockets.target</code></span><a class="headerlink" title="Permalink to this term" href="#sockets.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sound.target"><span class="term"><code class="filename">sound.target</code></span><a class="headerlink" title="Permalink to this term" href="#sound.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="suspend.target"><span class="term"><code class="filename">suspend.target</code></span><a class="headerlink" title="Permalink to this term" href="#suspend.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="swap.swap"><span class="term"><code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></span><a class="headerlink" title="Permalink to this term" href="#swap.swap">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="swap.target"><span class="term"><code class="filename">swap.target</code></span><a class="headerlink" title="Permalink to this term" href="#swap.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sysinit.target"><span class="term"><code class="filename">sysinit.target</code></span><a class="headerlink" title="Permalink to this term" href="#sysinit.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="syslog.socket"><span class="term"><code class="filename">syslog.socket</code></span><a class="headerlink" title="Permalink to this term" href="#syslog.socket">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="system-update.target"><span class="term"><code class="filename">system-update.target</code></span><a class="headerlink" title="Permalink to this term" href="#system-update.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="systemctl"><span class="term"><span class="command"><strong>systemctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemctl">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="systemd"><span class="term"><span class="command"><strong>systemd</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd-analyze"><span class="term"><span class="command"><strong>systemd-analyze</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-analyze">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="systemd-ask-password"><span class="term"><span class="command"><strong>systemd-ask-password</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="systemd-ask-password-console.path"><span class="term"><code class="filename">systemd-ask-password-console.path</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-console.path">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-ask-password-console.service"><span class="term"><code class="filename">systemd-ask-password-console.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-console.service">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-ask-password-wall.path"><span class="term"><code class="filename">systemd-ask-password-wall.path</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-wall.path">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-ask-password-wall.service"><span class="term"><code class="filename">systemd-ask-password-wall.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-wall.service">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-binfmt.service"><span class="term"><code class="filename">systemd-binfmt.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-binfmt.service">¶</a></dt><dd><p><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a></p></dd><dt id="systemd-cat"><span class="term"><span class="command"><strong>systemd-cat</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-cat">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="systemd-cgls"><span class="term"><span class="command"><strong>systemd-cgls</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-cgls">¶</a></dt><dd><p><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="systemd-cgtop"><span class="term"><span class="command"><strong>systemd-cgtop</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-cgtop">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="systemd-coredumpctl"><span class="term"><span class="command"><strong>systemd-coredumpctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-coredumpctl">¶</a></dt><dd><p><a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="systemd-cryptsetup@.service"><span class="term"><code class="filename">systemd-cryptsetup@.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-cryptsetup@.service">¶</a></dt><dd><p><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a></p></dd><dt id="systemd-delta"><span class="term"><span class="command"><strong>systemd-delta</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-delta">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="systemd-detect-virt"><span class="term"><span class="command"><strong>systemd-detect-virt</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-detect-virt">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="systemd-fsck-root.service"><span class="term"><code class="filename">systemd-fsck-root.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-fsck-root.service">¶</a></dt><dd><p><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="systemd-fsck@.service"><span class="term"><code class="filename">systemd-fsck@.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-fsck@.service">¶</a></dt><dd><p><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="systemd-halt.service"><span class="term"><code class="filename">systemd-halt.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-halt.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-hibernate.service"><span class="term"><code class="filename">systemd-hibernate.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-hibernate.service">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="systemd-hostnamed.service"><span class="term"><code class="filename">systemd-hostnamed.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-hostnamed.service">¶</a></dt><dd><p><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a></p></dd><dt id="systemd-hybrid-sleep.service"><span class="term"><code class="filename">systemd-hybrid-sleep.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-hybrid-sleep.service">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="systemd-inhibit"><span class="term"><span class="command"><strong>systemd-inhibit</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-inhibit">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="systemd-initctl.service"><span class="term"><code class="filename">systemd-initctl.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-initctl.service">¶</a></dt><dd><p><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="systemd-initctl.socket"><span class="term"><code class="filename">systemd-initctl.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-initctl.socket">¶</a></dt><dd><p><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="systemd-journal-gatewayd.service"><span class="term"><code class="filename">systemd-journal-gatewayd.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journal-gatewayd.service">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="systemd-journal-gatewayd.socket"><span class="term"><code class="filename">systemd-journal-gatewayd.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journal-gatewayd.socket">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="systemd-journald.service"><span class="term"><code class="filename">systemd-journald.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journald.service">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd-journald.socket"><span class="term"><code class="filename">systemd-journald.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journald.socket">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd-kexec.service"><span class="term"><code class="filename">systemd-kexec.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-kexec.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-localed.service"><span class="term"><code class="filename">systemd-localed.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-localed.service">¶</a></dt><dd><p><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a></p></dd><dt id="systemd-logind.service"><span class="term"><code class="filename">systemd-logind.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-logind.service">¶</a></dt><dd><p><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a></p></dd><dt id="systemd-machine-id-setup"><span class="term"><span class="command"><strong>systemd-machine-id-setup</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-machine-id-setup">¶</a></dt><dd><p><a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a></p></dd><dt id="systemd-modules-load.service"><span class="term"><code class="filename">systemd-modules-load.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-modules-load.service">¶</a></dt><dd><p><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="systemd-notify"><span class="term"><span class="command"><strong>systemd-notify</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-notify">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="systemd-nspawn"><span class="term"><span class="command"><strong>systemd-nspawn</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-nspawn">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="systemd-poweroff.service"><span class="term"><code class="filename">systemd-poweroff.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-poweroff.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-quotacheck.service"><span class="term"><code class="filename">systemd-quotacheck.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-quotacheck.service">¶</a></dt><dd><p><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a></p></dd><dt id="systemd-random-seed-load.service"><span class="term"><code class="filename">systemd-random-seed-load.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-random-seed-load.service">¶</a></dt><dd><p><a href="systemd-random-seed-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-load.service</span>(8)</span></a></p></dd><dt id="systemd-random-seed-save.service"><span class="term"><code class="filename">systemd-random-seed-save.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-random-seed-save.service">¶</a></dt><dd><p><a href="systemd-random-seed-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-load.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-collect.service"><span class="term"><code class="filename">systemd-readahead-collect.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-collect.service">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-done.service"><span class="term"><code class="filename">systemd-readahead-done.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-done.service">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-done.timer"><span class="term"><code class="filename">systemd-readahead-done.timer</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-done.timer">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-replay.service"><span class="term"><code class="filename">systemd-readahead-replay.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-replay.service">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-reboot.service"><span class="term"><code class="filename">systemd-reboot.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-reboot.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-remount-fs.service"><span class="term"><code class="filename">systemd-remount-fs.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-remount-fs.service">¶</a></dt><dd><p><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a></p></dd><dt id="systemd-shutdownd.service"><span class="term"><code class="filename">systemd-shutdownd.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-shutdownd.service">¶</a></dt><dd><p><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a></p></dd><dt id="systemd-shutdownd.socket"><span class="term"><code class="filename">systemd-shutdownd.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-shutdownd.socket">¶</a></dt><dd><p><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a></p></dd><dt id="systemd-suspend.service"><span class="term"><code class="filename">systemd-suspend.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-suspend.service">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="systemd-sysctl.service"><span class="term"><code class="filename">systemd-sysctl.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-sysctl.service">¶</a></dt><dd><p><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a></p></dd><dt id="systemd-timedated.service"><span class="term"><code class="filename">systemd-timedated.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-timedated.service">¶</a></dt><dd><p><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles"><span class="term"><span class="command"><strong>systemd-tmpfiles</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-clean.service"><span class="term"><code class="filename">systemd-tmpfiles-clean.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-clean.service">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-clean.timer"><span class="term"><code class="filename">systemd-tmpfiles-clean.timer</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-clean.timer">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-setup-dev.service"><span class="term"><code class="filename">systemd-tmpfiles-setup-dev.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-setup-dev.service">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-setup.service"><span class="term"><code class="filename">systemd-tmpfiles-setup.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-setup.service">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tty-ask-password-agent"><span class="term"><span class="command"><strong>systemd-tty-ask-password-agent</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-tty-ask-password-agent">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="systemd-udevd-control.socket"><span class="term"><code class="filename">systemd-udevd-control.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-udevd-control.socket">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="systemd-udevd-kernel.socket"><span class="term"><code class="filename">systemd-udevd-kernel.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-udevd-kernel.socket">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="systemd-udevd.service"><span class="term"><code class="filename">systemd-udevd.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-udevd.service">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="systemd-update-utmp-runlevel.service"><span class="term"><code class="filename">systemd-update-utmp-runlevel.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-update-utmp-runlevel.service">¶</a></dt><dd><p><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a></p></dd><dt id="systemd-update-utmp-shutdown.service"><span class="term"><code class="filename">systemd-update-utmp-shutdown.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-update-utmp-shutdown.service">¶</a></dt><dd><p><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a></p></dd><dt id="systemd-user-sessions.service"><span class="term"><code class="filename">systemd-user-sessions.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-user-sessions.service">¶</a></dt><dd><p><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a></p></dd><dt id="systemd-vconsole-setup.service"><span class="term"><code class="filename">systemd-vconsole-setup.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-vconsole-setup.service">¶</a></dt><dd><p><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="target.target"><span class="term"><code class="filename"><em class="replaceable"><code>target</code></em>.target</code></span><a class="headerlink" title="Permalink to this term" href="#target.target">¶</a></dt><dd><p><a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="telinit"><span class="term"><span class="command"><strong>telinit</strong></span></span><a class="headerlink" title="Permalink to this term" href="#telinit">¶</a></dt><dd><p><a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a></p></dd><dt id="time-sync.target"><span class="term"><code class="filename">time-sync.target</code></span><a class="headerlink" title="Permalink to this term" href="#time-sync.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="timedatectl"><span class="term"><span class="command"><strong>timedatectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#timedatectl">¶</a></dt><dd><p><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="timer.timer"><span class="term"><code class="filename"><em class="replaceable"><code>timer</code></em>.timer</code></span><a class="headerlink" title="Permalink to this term" href="#timer.timer">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="timers.target"><span class="term"><code class="filename">timers.target</code></span><a class="headerlink" title="Permalink to this term" href="#timers.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="udevadm"><span class="term"><span class="command"><strong>udevadm</strong></span></span><a class="headerlink" title="Permalink to this term" href="#udevadm">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="umount.target"><span class="term"><code class="filename">umount.target</code></span><a class="headerlink" title="Permalink to this term" href="#umount.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm259776226512"></a><h2 id="Colophon">Colophon<a class="headerlink" title="Permalink to this headline" href="#Colophon">¶</a></h2><p><a name="colophon"></a>This index contains 1083 entries in 12 sections,
-referring to 106 individual manual pages.
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.directives"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.directives — Index of configuration directives</p></div><div class="refsect1"><a name="idm274681414928"></a><h2 id="Unit directives">Unit directives<a class="headerlink" title="Permalink to this headline" href="#Unit%20directives">¶</a></h2><p>Directives for configuring units, used in unit
+ files.</p><div class="variablelist"><a name="unit-directives"></a><dl class="variablelist"><dt id="Accept="><span class="term"><code class="varname">Accept=</code></span><a class="headerlink" title="Permalink to this term" href="#Accept=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="After="><span class="term"><code class="varname">After=</code></span><a class="headerlink" title="Permalink to this term" href="#After=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Alias="><span class="term"><code class="varname">Alias=</code></span><a class="headerlink" title="Permalink to this term" href="#Alias=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="AllowIsolate="><span class="term"><code class="varname">AllowIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#AllowIsolate=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Also="><span class="term"><code class="varname">Also=</code></span><a class="headerlink" title="Permalink to this term" href="#Also=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Backlog="><span class="term"><code class="varname">Backlog=</code></span><a class="headerlink" title="Permalink to this term" href="#Backlog=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Before="><span class="term"><code class="varname">Before=</code></span><a class="headerlink" title="Permalink to this term" href="#Before=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="BindIPv6Only="><span class="term"><code class="varname">BindIPv6Only=</code></span><a class="headerlink" title="Permalink to this term" href="#BindIPv6Only=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="BindToDevice="><span class="term"><code class="varname">BindToDevice=</code></span><a class="headerlink" title="Permalink to this term" href="#BindToDevice=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="BindsTo="><span class="term"><code class="varname">BindsTo=</code></span><a class="headerlink" title="Permalink to this term" href="#BindsTo=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="BlockIOAccounting="><span class="term"><code class="varname">BlockIOAccounting=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOAccounting=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="BlockIODeviceWeight="><span class="term"><code class="varname">BlockIODeviceWeight=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIODeviceWeight=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="BlockIOReadBandwidth="><span class="term"><code class="varname">BlockIOReadBandwidth=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOReadBandwidth=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="BlockIOWeight="><span class="term"><code class="varname">BlockIOWeight=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOWeight=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="BlockIOWriteBandwidth="><span class="term"><code class="varname">BlockIOWriteBandwidth=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOWriteBandwidth=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="Broadcast="><span class="term"><code class="varname">Broadcast=</code></span><a class="headerlink" title="Permalink to this term" href="#Broadcast=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="BusName="><span class="term"><code class="varname">BusName=</code></span><a class="headerlink" title="Permalink to this term" href="#BusName=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="CPUAccounting="><span class="term"><code class="varname">CPUAccounting=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAccounting=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="CPUAffinity="><span class="term"><code class="varname">CPUAffinity=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAffinity=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUSchedulingPolicy="><span class="term"><code class="varname">CPUSchedulingPolicy=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingPolicy=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUSchedulingPriority="><span class="term"><code class="varname">CPUSchedulingPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingPriority=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUSchedulingResetOnFork="><span class="term"><code class="varname">CPUSchedulingResetOnFork=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingResetOnFork=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CPUShares="><span class="term"><code class="varname">CPUShares=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUShares=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="Capabilities="><span class="term"><code class="varname">Capabilities=</code></span><a class="headerlink" title="Permalink to this term" href="#Capabilities=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CapabilityBoundingSet="><span class="term"><code class="varname">CapabilityBoundingSet=</code></span><a class="headerlink" title="Permalink to this term" href="#CapabilityBoundingSet=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ConditionACPower="><span class="term"><code class="varname">ConditionACPower=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionACPower=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionCapability="><span class="term"><code class="varname">ConditionCapability=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionCapability=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionDirectoryNotEmpty="><span class="term"><code class="varname">ConditionDirectoryNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionDirectoryNotEmpty=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionFileIsExecutable="><span class="term"><code class="varname">ConditionFileIsExecutable=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionFileIsExecutable=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionFileNotEmpty="><span class="term"><code class="varname">ConditionFileNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionFileNotEmpty=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionHost="><span class="term"><code class="varname">ConditionHost=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionHost=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionKernelCommandLine="><span class="term"><code class="varname">ConditionKernelCommandLine=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionKernelCommandLine=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionNull="><span class="term"><code class="varname">ConditionNull=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionNull=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathExists="><span class="term"><code class="varname">ConditionPathExists=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathExists=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathExistsGlob="><span class="term"><code class="varname">ConditionPathExistsGlob=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathExistsGlob=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsDirectory="><span class="term"><code class="varname">ConditionPathIsDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsDirectory=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsMountPoint="><span class="term"><code class="varname">ConditionPathIsMountPoint=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsMountPoint=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsReadWrite="><span class="term"><code class="varname">ConditionPathIsReadWrite=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsReadWrite=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionPathIsSymbolicLink="><span class="term"><code class="varname">ConditionPathIsSymbolicLink=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathIsSymbolicLink=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionSecurity="><span class="term"><code class="varname">ConditionSecurity=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionSecurity=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ConditionVirtualization="><span class="term"><code class="varname">ConditionVirtualization=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionVirtualization=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Conflicts="><span class="term"><code class="varname">Conflicts=</code></span><a class="headerlink" title="Permalink to this term" href="#Conflicts=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="DefaultDependencies="><span class="term"><code class="varname">DefaultDependencies=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultDependencies=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Description="><span class="term"><code class="varname">Description=</code></span><a class="headerlink" title="Permalink to this term" href="#Description=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="DeviceAllow="><span class="term"><code class="varname">DeviceAllow=</code></span><a class="headerlink" title="Permalink to this term" href="#DeviceAllow=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="DevicePolicy="><span class="term"><code class="varname">DevicePolicy=</code></span><a class="headerlink" title="Permalink to this term" href="#DevicePolicy=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="DirectoryMode="><span class="term"><code class="varname">DirectoryMode=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryMode=">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="DirectoryNotEmpty="><span class="term"><code class="varname">DirectoryNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryNotEmpty=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="Documentation="><span class="term"><code class="varname">Documentation=</code></span><a class="headerlink" title="Permalink to this term" href="#Documentation=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Environment="><span class="term"><code class="varname">Environment=</code></span><a class="headerlink" title="Permalink to this term" href="#Environment=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="EnvironmentFile="><span class="term"><code class="varname">EnvironmentFile=</code></span><a class="headerlink" title="Permalink to this term" href="#EnvironmentFile=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ExecReload="><span class="term"><code class="varname">ExecReload=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecReload=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ExecStart="><span class="term"><code class="varname">ExecStart=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStart=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ExecStartPost="><span class="term"><code class="varname">ExecStartPost=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStartPost=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ExecStartPre="><span class="term"><code class="varname">ExecStartPre=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStartPre=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ExecStop="><span class="term"><code class="varname">ExecStop=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStop=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ExecStopPost="><span class="term"><code class="varname">ExecStopPost=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStopPost=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ExecStopPre="><span class="term"><code class="varname">ExecStopPre=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecStopPre=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="FreeBind="><span class="term"><code class="varname">FreeBind=</code></span><a class="headerlink" title="Permalink to this term" href="#FreeBind=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="FsckPassNo="><span class="term"><code class="varname">FsckPassNo=</code></span><a class="headerlink" title="Permalink to this term" href="#FsckPassNo=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="Group="><span class="term"><code class="varname">Group=</code></span><a class="headerlink" title="Permalink to this term" href="#Group=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="GuessMainPID="><span class="term"><code class="varname">GuessMainPID=</code></span><a class="headerlink" title="Permalink to this term" href="#GuessMainPID=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="IOSchedulingClass="><span class="term"><code class="varname">IOSchedulingClass=</code></span><a class="headerlink" title="Permalink to this term" href="#IOSchedulingClass=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="IOSchedulingPriority="><span class="term"><code class="varname">IOSchedulingPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#IOSchedulingPriority=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="IPTOS="><span class="term"><code class="varname">IPTOS=</code></span><a class="headerlink" title="Permalink to this term" href="#IPTOS=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="IPTTL="><span class="term"><code class="varname">IPTTL=</code></span><a class="headerlink" title="Permalink to this term" href="#IPTTL=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="IgnoreOnIsolate="><span class="term"><code class="varname">IgnoreOnIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreOnIsolate=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="IgnoreOnSnapshot="><span class="term"><code class="varname">IgnoreOnSnapshot=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreOnSnapshot=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="IgnoreSIGPIPE="><span class="term"><code class="varname">IgnoreSIGPIPE=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreSIGPIPE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="InaccessibleDirectories="><span class="term"><code class="varname">InaccessibleDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#InaccessibleDirectories=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="JobTimeoutSec="><span class="term"><code class="varname">JobTimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#JobTimeoutSec=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="KeepAlive="><span class="term"><code class="varname">KeepAlive=</code></span><a class="headerlink" title="Permalink to this term" href="#KeepAlive=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="KillMode="><span class="term"><code class="varname">KillMode=</code></span><a class="headerlink" title="Permalink to this term" href="#KillMode=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="KillSignal="><span class="term"><code class="varname">KillSignal=</code></span><a class="headerlink" title="Permalink to this term" href="#KillSignal=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="LimitAS="><span class="term"><code class="varname">LimitAS=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitAS=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitCORE="><span class="term"><code class="varname">LimitCORE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitCORE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitCPU="><span class="term"><code class="varname">LimitCPU=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitCPU=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitDATA="><span class="term"><code class="varname">LimitDATA=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitDATA=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitFSIZE="><span class="term"><code class="varname">LimitFSIZE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitFSIZE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitLOCKS="><span class="term"><code class="varname">LimitLOCKS=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitLOCKS=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitMEMLOCK="><span class="term"><code class="varname">LimitMEMLOCK=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitMEMLOCK=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitMSGQUEUE="><span class="term"><code class="varname">LimitMSGQUEUE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitMSGQUEUE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitNICE="><span class="term"><code class="varname">LimitNICE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitNICE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitNOFILE="><span class="term"><code class="varname">LimitNOFILE=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitNOFILE=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitNPROC="><span class="term"><code class="varname">LimitNPROC=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitNPROC=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitRSS="><span class="term"><code class="varname">LimitRSS=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitRSS=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitRTPRIO="><span class="term"><code class="varname">LimitRTPRIO=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitRTPRIO=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitRTTIME="><span class="term"><code class="varname">LimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitRTTIME=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitSIGPENDING="><span class="term"><code class="varname">LimitSIGPENDING=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitSIGPENDING=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="LimitSTACK="><span class="term"><code class="varname">LimitSTACK=</code></span><a class="headerlink" title="Permalink to this term" href="#LimitSTACK=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ListenDatagram="><span class="term"><code class="varname">ListenDatagram=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenDatagram=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenFIFO="><span class="term"><code class="varname">ListenFIFO=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenFIFO=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenMessageQueue="><span class="term"><code class="varname">ListenMessageQueue=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenMessageQueue=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenNetlink="><span class="term"><code class="varname">ListenNetlink=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenNetlink=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenSequentialPacket="><span class="term"><code class="varname">ListenSequentialPacket=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenSequentialPacket=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenSpecial="><span class="term"><code class="varname">ListenSpecial=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenSpecial=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="ListenStream="><span class="term"><code class="varname">ListenStream=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenStream=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MakeDirectory="><span class="term"><code class="varname">MakeDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#MakeDirectory=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="Mark="><span class="term"><code class="varname">Mark=</code></span><a class="headerlink" title="Permalink to this term" href="#Mark=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MaxConnections="><span class="term"><code class="varname">MaxConnections=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxConnections=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MemoryAccounting="><span class="term"><code class="varname">MemoryAccounting=</code></span><a class="headerlink" title="Permalink to this term" href="#MemoryAccounting=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="MemoryLimit="><span class="term"><code class="varname">MemoryLimit=</code></span><a class="headerlink" title="Permalink to this term" href="#MemoryLimit=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="MessageQueueMaxMessages="><span class="term"><code class="varname">MessageQueueMaxMessages=</code></span><a class="headerlink" title="Permalink to this term" href="#MessageQueueMaxMessages=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MessageQueueMessageSize="><span class="term"><code class="varname">MessageQueueMessageSize=</code></span><a class="headerlink" title="Permalink to this term" href="#MessageQueueMessageSize=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="MountFlags="><span class="term"><code class="varname">MountFlags=</code></span><a class="headerlink" title="Permalink to this term" href="#MountFlags=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Nice="><span class="term"><code class="varname">Nice=</code></span><a class="headerlink" title="Permalink to this term" href="#Nice=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="NoNewPrivileges="><span class="term"><code class="varname">NoNewPrivileges=</code></span><a class="headerlink" title="Permalink to this term" href="#NoNewPrivileges=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="NonBlocking="><span class="term"><code class="varname">NonBlocking=</code></span><a class="headerlink" title="Permalink to this term" href="#NonBlocking=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="NotifyAccess="><span class="term"><code class="varname">NotifyAccess=</code></span><a class="headerlink" title="Permalink to this term" href="#NotifyAccess=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="OOMScoreAdjust="><span class="term"><code class="varname">OOMScoreAdjust=</code></span><a class="headerlink" title="Permalink to this term" href="#OOMScoreAdjust=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="OnActiveSec="><span class="term"><code class="varname">OnActiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnActiveSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnBootSec="><span class="term"><code class="varname">OnBootSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnBootSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnCalendar="><span class="term"><code class="varname">OnCalendar=</code></span><a class="headerlink" title="Permalink to this term" href="#OnCalendar=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnFailure="><span class="term"><code class="varname">OnFailure=</code></span><a class="headerlink" title="Permalink to this term" href="#OnFailure=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="OnFailureIsolate="><span class="term"><code class="varname">OnFailureIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#OnFailureIsolate=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="OnStartupSec="><span class="term"><code class="varname">OnStartupSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnStartupSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnUnitActiveSec="><span class="term"><code class="varname">OnUnitActiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnUnitActiveSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="OnUnitInactiveSec="><span class="term"><code class="varname">OnUnitInactiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnUnitInactiveSec=">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="Options="><span class="term"><code class="varname">Options=</code></span><a class="headerlink" title="Permalink to this term" href="#Options=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="PAMName="><span class="term"><code class="varname">PAMName=</code></span><a class="headerlink" title="Permalink to this term" href="#PAMName=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="PIDFile="><span class="term"><code class="varname">PIDFile=</code></span><a class="headerlink" title="Permalink to this term" href="#PIDFile=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="PartOf="><span class="term"><code class="varname">PartOf=</code></span><a class="headerlink" title="Permalink to this term" href="#PartOf=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="PassCredentials="><span class="term"><code class="varname">PassCredentials=</code></span><a class="headerlink" title="Permalink to this term" href="#PassCredentials=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="PassSecurity="><span class="term"><code class="varname">PassSecurity=</code></span><a class="headerlink" title="Permalink to this term" href="#PassSecurity=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="PathChanged="><span class="term"><code class="varname">PathChanged=</code></span><a class="headerlink" title="Permalink to this term" href="#PathChanged=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PathExists="><span class="term"><code class="varname">PathExists=</code></span><a class="headerlink" title="Permalink to this term" href="#PathExists=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PathExistsGlob="><span class="term"><code class="varname">PathExistsGlob=</code></span><a class="headerlink" title="Permalink to this term" href="#PathExistsGlob=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PathModified="><span class="term"><code class="varname">PathModified=</code></span><a class="headerlink" title="Permalink to this term" href="#PathModified=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a></p></dd><dt id="PermissionsStartOnly="><span class="term"><code class="varname">PermissionsStartOnly=</code></span><a class="headerlink" title="Permalink to this term" href="#PermissionsStartOnly=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="PipeSize="><span class="term"><code class="varname">PipeSize=</code></span><a class="headerlink" title="Permalink to this term" href="#PipeSize=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Priority="><span class="term"><code class="varname">Priority=</code></span><a class="headerlink" title="Permalink to this term" href="#Priority=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="PrivateNetwork="><span class="term"><code class="varname">PrivateNetwork=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateNetwork=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="PrivateTmp="><span class="term"><code class="varname">PrivateTmp=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateTmp=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="PropagatesReloadTo="><span class="term"><code class="varname">PropagatesReloadTo=</code></span><a class="headerlink" title="Permalink to this term" href="#PropagatesReloadTo=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ReadOnlyDirectories="><span class="term"><code class="varname">ReadOnlyDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#ReadOnlyDirectories=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ReadWriteDirectories="><span class="term"><code class="varname">ReadWriteDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#ReadWriteDirectories=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="ReceiveBuffer="><span class="term"><code class="varname">ReceiveBuffer=</code></span><a class="headerlink" title="Permalink to this term" href="#ReceiveBuffer=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="RefuseManualStart="><span class="term"><code class="varname">RefuseManualStart=</code></span><a class="headerlink" title="Permalink to this term" href="#RefuseManualStart=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RefuseManualStop="><span class="term"><code class="varname">RefuseManualStop=</code></span><a class="headerlink" title="Permalink to this term" href="#RefuseManualStop=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="ReloadPropagatedFrom="><span class="term"><code class="varname">ReloadPropagatedFrom=</code></span><a class="headerlink" title="Permalink to this term" href="#ReloadPropagatedFrom=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RemainAfterExit="><span class="term"><code class="varname">RemainAfterExit=</code></span><a class="headerlink" title="Permalink to this term" href="#RemainAfterExit=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RequiredBy="><span class="term"><code class="varname">RequiredBy=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiredBy=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Requires="><span class="term"><code class="varname">Requires=</code></span><a class="headerlink" title="Permalink to this term" href="#Requires=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RequiresMountsFor="><span class="term"><code class="varname">RequiresMountsFor=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiresMountsFor=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RequiresOverridable="><span class="term"><code class="varname">RequiresOverridable=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiresOverridable=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Requisite="><span class="term"><code class="varname">Requisite=</code></span><a class="headerlink" title="Permalink to this term" href="#Requisite=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="RequisiteOverridable="><span class="term"><code class="varname">RequisiteOverridable=</code></span><a class="headerlink" title="Permalink to this term" href="#RequisiteOverridable=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Restart="><span class="term"><code class="varname">Restart=</code></span><a class="headerlink" title="Permalink to this term" href="#Restart=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RestartPreventExitStatus="><span class="term"><code class="varname">RestartPreventExitStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#RestartPreventExitStatus=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="RestartSec="><span class="term"><code class="varname">RestartSec=</code></span><a class="headerlink" title="Permalink to this term" href="#RestartSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="ReusePort="><span class="term"><code class="varname">ReusePort=</code></span><a class="headerlink" title="Permalink to this term" href="#ReusePort=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="RootDirectory="><span class="term"><code class="varname">RootDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#RootDirectory=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="RootDirectoryStartOnly="><span class="term"><code class="varname">RootDirectoryStartOnly=</code></span><a class="headerlink" title="Permalink to this term" href="#RootDirectoryStartOnly=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SecureBits="><span class="term"><code class="varname">SecureBits=</code></span><a class="headerlink" title="Permalink to this term" href="#SecureBits=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SendBuffer="><span class="term"><code class="varname">SendBuffer=</code></span><a class="headerlink" title="Permalink to this term" href="#SendBuffer=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SendSIGHUP="><span class="term"><code class="varname">SendSIGHUP=</code></span><a class="headerlink" title="Permalink to this term" href="#SendSIGHUP=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="SendSIGKILL="><span class="term"><code class="varname">SendSIGKILL=</code></span><a class="headerlink" title="Permalink to this term" href="#SendSIGKILL=">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a></p></dd><dt id="Service="><span class="term"><code class="varname">Service=</code></span><a class="headerlink" title="Permalink to this term" href="#Service=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Slice="><span class="term"><code class="varname">Slice=</code></span><a class="headerlink" title="Permalink to this term" href="#Slice=">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="SmackLabel="><span class="term"><code class="varname">SmackLabel=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabel=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SmackLabelIPIn="><span class="term"><code class="varname">SmackLabelIPIn=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabelIPIn=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SmackLabelIPOut="><span class="term"><code class="varname">SmackLabelIPOut=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabelIPOut=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SocketMode="><span class="term"><code class="varname">SocketMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SocketMode=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Sockets="><span class="term"><code class="varname">Sockets=</code></span><a class="headerlink" title="Permalink to this term" href="#Sockets=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SourcePath="><span class="term"><code class="varname">SourcePath=</code></span><a class="headerlink" title="Permalink to this term" href="#SourcePath=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="StandardError="><span class="term"><code class="varname">StandardError=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardError=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="StandardInput="><span class="term"><code class="varname">StandardInput=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardInput=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="StandardOutput="><span class="term"><code class="varname">StandardOutput=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardOutput=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="StartLimitAction="><span class="term"><code class="varname">StartLimitAction=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitAction=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="StartLimitBurst="><span class="term"><code class="varname">StartLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitBurst=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="StartLimitInterval="><span class="term"><code class="varname">StartLimitInterval=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitInterval=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="StopWhenUnneeded="><span class="term"><code class="varname">StopWhenUnneeded=</code></span><a class="headerlink" title="Permalink to this term" href="#StopWhenUnneeded=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="SuccessExitStatus="><span class="term"><code class="varname">SuccessExitStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#SuccessExitStatus=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SupplementaryGroups="><span class="term"><code class="varname">SupplementaryGroups=</code></span><a class="headerlink" title="Permalink to this term" href="#SupplementaryGroups=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SysVStartPriority="><span class="term"><code class="varname">SysVStartPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#SysVStartPriority=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SyslogFacility="><span class="term"><code class="varname">SyslogFacility=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogFacility=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SyslogIdentifier="><span class="term"><code class="varname">SyslogIdentifier=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogIdentifier=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SyslogLevel="><span class="term"><code class="varname">SyslogLevel=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogLevel=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SyslogLevelPrefix="><span class="term"><code class="varname">SyslogLevelPrefix=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogLevelPrefix=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SystemCallFilter="><span class="term"><code class="varname">SystemCallFilter=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemCallFilter=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TCPCongestion="><span class="term"><code class="varname">TCPCongestion=</code></span><a class="headerlink" title="Permalink to this term" href="#TCPCongestion=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="TCPWrapName="><span class="term"><code class="varname">TCPWrapName=</code></span><a class="headerlink" title="Permalink to this term" href="#TCPWrapName=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYPath="><span class="term"><code class="varname">TTYPath=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYPath=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYReset="><span class="term"><code class="varname">TTYReset=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYReset=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYVHangup="><span class="term"><code class="varname">TTYVHangup=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVHangup=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TTYVTDisallocate="><span class="term"><code class="varname">TTYVTDisallocate=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVTDisallocate=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="TimeoutSec="><span class="term"><code class="varname">TimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutSec=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="TimeoutStartSec="><span class="term"><code class="varname">TimeoutStartSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutStartSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="TimeoutStopSec="><span class="term"><code class="varname">TimeoutStopSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutStopSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="TimerSlackNSec="><span class="term"><code class="varname">TimerSlackNSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimerSlackNSec=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Transparent="><span class="term"><code class="varname">Transparent=</code></span><a class="headerlink" title="Permalink to this term" href="#Transparent=">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="Type="><span class="term"><code class="varname">Type=</code></span><a class="headerlink" title="Permalink to this term" href="#Type=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="UMask="><span class="term"><code class="varname">UMask=</code></span><a class="headerlink" title="Permalink to this term" href="#UMask=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="Unit="><span class="term"><code class="varname">Unit=</code></span><a class="headerlink" title="Permalink to this term" href="#Unit=">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>, <a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a></p></dd><dt id="User="><span class="term"><code class="varname">User=</code></span><a class="headerlink" title="Permalink to this term" href="#User=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="UtmpIdentifier="><span class="term"><code class="varname">UtmpIdentifier=</code></span><a class="headerlink" title="Permalink to this term" href="#UtmpIdentifier=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="WantedBy="><span class="term"><code class="varname">WantedBy=</code></span><a class="headerlink" title="Permalink to this term" href="#WantedBy=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="Wants="><span class="term"><code class="varname">Wants=</code></span><a class="headerlink" title="Permalink to this term" href="#Wants=">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="WatchdogSec="><span class="term"><code class="varname">WatchdogSec=</code></span><a class="headerlink" title="Permalink to this term" href="#WatchdogSec=">¶</a></dt><dd><p><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="What="><span class="term"><code class="varname">What=</code></span><a class="headerlink" title="Permalink to this term" href="#What=">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="Where="><span class="term"><code class="varname">Where=</code></span><a class="headerlink" title="Permalink to this term" href="#Where=">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="WorkingDirectory="><span class="term"><code class="varname">WorkingDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#WorkingDirectory=">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274681091472"></a><h2 id="Options on the kernel command line">Options on the kernel command line<a class="headerlink" title="Permalink to this headline" href="#Options%20on%20the%20kernel%20command%20line">¶</a></h2><p>Kernel boot options for configuring the behaviour of the
+ systemd process.</p><div class="variablelist"><a name="kernel-commandline-options"></a><dl class="variablelist"><dt id="1"><span class="term"><code class="constant">1</code></span><a class="headerlink" title="Permalink to this term" href="#1">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="2"><span class="term"><code class="constant">2</code></span><a class="headerlink" title="Permalink to this term" href="#2">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="3"><span class="term"><code class="varname">3</code></span><a class="headerlink" title="Permalink to this term" href="#3">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="4"><span class="term"><code class="varname">4</code></span><a class="headerlink" title="Permalink to this term" href="#4">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="5"><span class="term"><code class="varname">5</code></span><a class="headerlink" title="Permalink to this term" href="#5">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="S"><span class="term"><code class="varname">S</code></span><a class="headerlink" title="Permalink to this term" href="#S">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="debug"><span class="term"><code class="varname">debug</code></span><a class="headerlink" title="Permalink to this term" href="#debug">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="emergency"><span class="term"><code class="varname">emergency</code></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="fsck.mode="><span class="term"><code class="varname">fsck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#fsck.mode=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="fstab="><span class="term"><code class="varname">fstab=</code></span><a class="headerlink" title="Permalink to this term" href="#fstab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a></p></dd><dt id="locale.LANG="><span class="term"><code class="varname">locale.LANG=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LANG=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LANGUAGE="><span class="term"><code class="varname">locale.LANGUAGE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LANGUAGE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_ADDRESS="><span class="term"><code class="varname">locale.LC_ADDRESS=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_ADDRESS=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_COLLATE="><span class="term"><code class="varname">locale.LC_COLLATE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_COLLATE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_CTYPE="><span class="term"><code class="varname">locale.LC_CTYPE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_CTYPE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_IDENTIFICATION="><span class="term"><code class="varname">locale.LC_IDENTIFICATION=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_IDENTIFICATION=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_MEASUREMENT="><span class="term"><code class="varname">locale.LC_MEASUREMENT=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_MEASUREMENT=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_MESSAGES="><span class="term"><code class="varname">locale.LC_MESSAGES=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_MESSAGES=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_MONETARY="><span class="term"><code class="varname">locale.LC_MONETARY=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_MONETARY=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_NAME="><span class="term"><code class="varname">locale.LC_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_NAME=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_NUMERIC="><span class="term"><code class="varname">locale.LC_NUMERIC=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_NUMERIC=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_PAPER="><span class="term"><code class="varname">locale.LC_PAPER=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_PAPER=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_TELEPHONE="><span class="term"><code class="varname">locale.LC_TELEPHONE=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_TELEPHONE=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="locale.LC_TIME="><span class="term"><code class="varname">locale.LC_TIME=</code></span><a class="headerlink" title="Permalink to this term" href="#locale.LC_TIME=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="luks.crypttab="><span class="term"><code class="varname">luks.crypttab=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.crypttab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks.key="><span class="term"><code class="varname">luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.key=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks.options="><span class="term"><code class="varname">luks.options=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.options=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks.uuid="><span class="term"><code class="varname">luks.uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#luks.uuid=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="luks="><span class="term"><code class="varname">luks=</code></span><a class="headerlink" title="Permalink to this term" href="#luks=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="modules-load="><span class="term"><code class="varname">modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#modules-load=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="net.ifnames="><span class="term"><code class="varname">net.ifnames=</code></span><a class="headerlink" title="Permalink to this term" href="#net.ifnames=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="plymouth.enable="><span class="term"><code class="varname">plymouth.enable=</code></span><a class="headerlink" title="Permalink to this term" href="#plymouth.enable=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a></p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="quotacheck.mode="><span class="term"><code class="varname">quotacheck.mode=</code></span><a class="headerlink" title="Permalink to this term" href="#quotacheck.mode=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a></p></dd><dt id="rd.fstab="><span class="term"><code class="varname">rd.fstab=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.fstab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a></p></dd><dt id="rd.luks.crypttab="><span class="term"><code class="varname">rd.luks.crypttab=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.crypttab=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks.key="><span class="term"><code class="varname">rd.luks.key=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.key=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks.options="><span class="term"><code class="varname">rd.luks.options=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.options=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks.uuid="><span class="term"><code class="varname">rd.luks.uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks.uuid=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.luks="><span class="term"><code class="varname">rd.luks=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.luks=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="rd.modules-load="><span class="term"><code class="varname">rd.modules-load=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.modules-load=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="rd.systemd.unit="><span class="term"><code class="varname">rd.systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.systemd.unit=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="rd.udev.children-max="><span class="term"><code class="varname">rd.udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.udev.children-max=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="rd.udev.exec-delay="><span class="term"><code class="varname">rd.udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.udev.exec-delay=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="rd.udev.log-priority="><span class="term"><code class="varname">rd.udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#rd.udev.log-priority=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="s"><span class="term"><code class="varname">s</code></span><a class="headerlink" title="Permalink to this term" href="#s">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="single"><span class="term"><code class="varname">single</code></span><a class="headerlink" title="Permalink to this term" href="#single">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.confirm_spawn="><span class="term"><code class="varname">systemd.confirm_spawn=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.confirm_spawn=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.crash_chvt="><span class="term"><code class="varname">systemd.crash_chvt=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.crash_chvt=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.crash_shell="><span class="term"><code class="varname">systemd.crash_shell=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.crash_shell=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.default_standard_error="><span class="term"><code class="varname">systemd.default_standard_error=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.default_standard_error=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.default_standard_output="><span class="term"><code class="varname">systemd.default_standard_output=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.default_standard_output=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.dump_core="><span class="term"><code class="varname">systemd.dump_core=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.dump_core=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.journald.forward_to_console="><span class="term"><code class="varname">systemd.journald.forward_to_console=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_console=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd.journald.forward_to_kmsg="><span class="term"><code class="varname">systemd.journald.forward_to_kmsg=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_kmsg=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd.journald.forward_to_syslog="><span class="term"><code class="varname">systemd.journald.forward_to_syslog=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.journald.forward_to_syslog=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd.log_color="><span class="term"><code class="varname">systemd.log_color=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_color=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.log_level="><span class="term"><code class="varname">systemd.log_level=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_level=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.log_location="><span class="term"><code class="varname">systemd.log_location=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_location=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.log_target="><span class="term"><code class="varname">systemd.log_target=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.log_target=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.setenv="><span class="term"><code class="varname">systemd.setenv=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.setenv=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.show_status="><span class="term"><code class="varname">systemd.show_status=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.show_status=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="udev.children-max="><span class="term"><code class="varname">udev.children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.children-max=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="udev.exec-delay="><span class="term"><code class="varname">udev.exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.exec-delay=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="udev.log-priority="><span class="term"><code class="varname">udev.log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#udev.log-priority=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="vconsole.font.map="><span class="term"><code class="varname">vconsole.font.map=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.font.map=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.font.unimap="><span class="term"><code class="varname">vconsole.font.unimap=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.font.unimap=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.font="><span class="term"><code class="varname">vconsole.font=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.font=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.keymap.toggle="><span class="term"><code class="varname">vconsole.keymap.toggle=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap.toggle=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="vconsole.keymap="><span class="term"><code class="varname">vconsole.keymap=</code></span><a class="headerlink" title="Permalink to this term" href="#vconsole.keymap=">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680919472"></a><h2 id="Environment variables">Environment variables<a class="headerlink" title="Permalink to this headline" href="#Environment%20variables">¶</a></h2><p>Environment variables understood by the systemd
+ manager and other programs.</p><div class="variablelist"><a name="environment-variables"></a><dl class="variablelist"><dt id="$HOME"><span class="term"><code class="varname">$HOME</code></span><a class="headerlink" title="Permalink to this term" href="#%24HOME">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$LANG"><span class="term"><code class="varname">$LANG</code></span><a class="headerlink" title="Permalink to this term" href="#%24LANG">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$LISTEN_FDS"><span class="term"><code class="varname">$LISTEN_FDS</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_FDS">¶</a></dt><dd><p><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$LISTEN_PID"><span class="term"><code class="varname">$LISTEN_PID</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_PID">¶</a></dt><dd><p><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$MANAGERPID"><span class="term"><code class="varname">$MANAGERPID</code></span><a class="headerlink" title="Permalink to this term" href="#%24MANAGERPID">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$NOTIFY_SOCKET"><span class="term"><code class="varname">$NOTIFY_SOCKET</code></span><a class="headerlink" title="Permalink to this term" href="#%24NOTIFY_SOCKET">¶</a></dt><dd><p><a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$PATH"><span class="term"><code class="varname">$PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24PATH">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$PREVLEVEL"><span class="term"><code class="varname">$PREVLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24PREVLEVEL">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="$RUNLEVEL"><span class="term"><code class="varname">$RUNLEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24RUNLEVEL">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_COLOR"><span class="term"><code class="varname">$SYSTEMD_LOG_COLOR</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_COLOR">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_LEVEL"><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LEVEL">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_LOCATION"><span class="term"><code class="varname">$SYSTEMD_LOG_LOCATION</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LOCATION">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_LOG_TARGET"><span class="term"><code class="varname">$SYSTEMD_LOG_TARGET</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_TARGET">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="$SYSTEMD_SYSVINIT_PATH"><span class="term"><code class="varname">$SYSTEMD_SYSVINIT_PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_SYSVINIT_PATH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$SYSTEMD_SYSVRCND_PATH"><span class="term"><code class="varname">$SYSTEMD_SYSVRCND_PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_SYSVRCND_PATH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$SYSTEMD_UNIT_PATH"><span class="term"><code class="varname">$SYSTEMD_UNIT_PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_UNIT_PATH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$UDEV_LOG="><span class="term"><code class="varname">$UDEV_LOG=</code></span><a class="headerlink" title="Permalink to this term" href="#%24UDEV_LOG=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="$USER"><span class="term"><code class="varname">$USER</code></span><a class="headerlink" title="Permalink to this term" href="#%24USER">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$XDG_CONFIG_DIRS"><span class="term"><code class="varname">$XDG_CONFIG_DIRS</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_CONFIG_DIRS">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_CONFIG_HOME"><span class="term"><code class="varname">$XDG_CONFIG_HOME</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_CONFIG_HOME">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_DATA_DIRS"><span class="term"><code class="varname">$XDG_DATA_DIRS</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_DATA_DIRS">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_DATA_HOME"><span class="term"><code class="varname">$XDG_DATA_HOME</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_DATA_HOME">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="$XDG_RUNTIME_DIR"><span class="term"><code class="varname">$XDG_RUNTIME_DIR</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_RUNTIME_DIR">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$XDG_SEAT"><span class="term"><code class="varname">$XDG_SEAT</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_SEAT">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$XDG_SESSION_ID"><span class="term"><code class="varname">$XDG_SESSION_ID</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_SESSION_ID">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="$XDG_VTNR"><span class="term"><code class="varname">$XDG_VTNR</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_VTNR">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680859248"></a><h2 id="UDEV directives">UDEV directives<a class="headerlink" title="Permalink to this headline" href="#UDEV%20directives">¶</a></h2><p>Directives for configuring systemd units through the
+ udev database.</p><div class="variablelist"><a name="udev-directives"></a><dl class="variablelist"><dt id="$$"><span class="term"><code class="option">$$</code></span><a class="headerlink" title="Permalink to this term" href="#%24%24">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$attr{file}"><span class="term"><code class="option">$attr{<em class="replaceable"><code>file</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%24attr%7Bfile%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$devnode"><span class="term"><code class="option">$devnode</code></span><a class="headerlink" title="Permalink to this term" href="#%24devnode">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$devpath"><span class="term"><code class="option">$devpath</code></span><a class="headerlink" title="Permalink to this term" href="#%24devpath">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$driver"><span class="term"><code class="option">$driver</code></span><a class="headerlink" title="Permalink to this term" href="#%24driver">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$env{key}"><span class="term"><code class="option">$env{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%24env%7Bkey%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$id"><span class="term"><code class="option">$id</code></span><a class="headerlink" title="Permalink to this term" href="#%24id">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$kernel"><span class="term"><code class="option">$kernel</code></span><a class="headerlink" title="Permalink to this term" href="#%24kernel">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$links"><span class="term"><code class="option">$links</code></span><a class="headerlink" title="Permalink to this term" href="#%24links">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$major"><span class="term"><code class="option">$major</code></span><a class="headerlink" title="Permalink to this term" href="#%24major">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$minor"><span class="term"><code class="option">$minor</code></span><a class="headerlink" title="Permalink to this term" href="#%24minor">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$name"><span class="term"><code class="option">$name</code></span><a class="headerlink" title="Permalink to this term" href="#%24name">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$number"><span class="term"><code class="option">$number</code></span><a class="headerlink" title="Permalink to this term" href="#%24number">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$parent"><span class="term"><code class="option">$parent</code></span><a class="headerlink" title="Permalink to this term" href="#%24parent">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$result"><span class="term"><code class="option">$result</code></span><a class="headerlink" title="Permalink to this term" href="#%24result">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$root"><span class="term"><code class="option">$root</code></span><a class="headerlink" title="Permalink to this term" href="#%24root">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="$sys"><span class="term"><code class="option">$sys</code></span><a class="headerlink" title="Permalink to this term" href="#%24sys">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%%"><span class="term"><code class="option">%%</code></span><a class="headerlink" title="Permalink to this term" href="#%%">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%E{key}"><span class="term"><code class="option">%E{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%E%7Bkey%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%M"><span class="term"><code class="option">%M</code></span><a class="headerlink" title="Permalink to this term" href="#%M">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%N"><span class="term"><code class="option">%N</code></span><a class="headerlink" title="Permalink to this term" href="#%N">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%P"><span class="term"><code class="option">%P</code></span><a class="headerlink" title="Permalink to this term" href="#%P">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%S"><span class="term"><code class="option">%S</code></span><a class="headerlink" title="Permalink to this term" href="#%S">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%b"><span class="term"><code class="option">%b</code></span><a class="headerlink" title="Permalink to this term" href="#%b">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%c"><span class="term"><code class="option">%c</code></span><a class="headerlink" title="Permalink to this term" href="#%c">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%k"><span class="term"><code class="option">%k</code></span><a class="headerlink" title="Permalink to this term" href="#%k">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%m"><span class="term"><code class="option">%m</code></span><a class="headerlink" title="Permalink to this term" href="#%m">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%n"><span class="term"><code class="option">%n</code></span><a class="headerlink" title="Permalink to this term" href="#%n">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%p"><span class="term"><code class="option">%p</code></span><a class="headerlink" title="Permalink to this term" href="#%p">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%r"><span class="term"><code class="option">%r</code></span><a class="headerlink" title="Permalink to this term" href="#%r">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="%s{file}"><span class="term"><code class="option">%s{<em class="replaceable"><code>file</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#%s%7Bfile%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ACTION"><span class="term"><code class="varname">ACTION</code></span><a class="headerlink" title="Permalink to this term" href="#ACTION">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ATTRS{filename}"><span class="term"><code class="varname">ATTRS{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTRS%7Bfilename%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ATTR{filename}"><span class="term"><code class="varname">ATTR{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTR%7Bfilename%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="DEVPATH"><span class="term"><code class="varname">DEVPATH</code></span><a class="headerlink" title="Permalink to this term" href="#DEVPATH">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="DRIVER"><span class="term"><code class="varname">DRIVER</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVER">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="DRIVERS"><span class="term"><code class="varname">DRIVERS</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVERS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ENV{key}"><span class="term"><code class="varname">ENV{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ENV%7Bkey%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="GOTO"><span class="term"><code class="varname">GOTO</code></span><a class="headerlink" title="Permalink to this term" href="#GOTO">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="GROUP"><span class="term"><code class="varname">GROUP</code></span><a class="headerlink" title="Permalink to this term" href="#GROUP">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="ID_MODEL="><span class="term"><code class="varname">ID_MODEL=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_MODEL=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="ID_MODEL_FROM_DATABASE="><span class="term"><code class="varname">ID_MODEL_FROM_DATABASE=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_MODEL_FROM_DATABASE=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="IMPORT{type}"><span class="term"><code class="varname">IMPORT{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#IMPORT%7Btype%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="KERNEL"><span class="term"><code class="varname">KERNEL</code></span><a class="headerlink" title="Permalink to this term" href="#KERNEL">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="KERNELS"><span class="term"><code class="varname">KERNELS</code></span><a class="headerlink" title="Permalink to this term" href="#KERNELS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="LABEL"><span class="term"><code class="varname">LABEL</code></span><a class="headerlink" title="Permalink to this term" href="#LABEL">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="MODE"><span class="term"><code class="varname">MODE</code></span><a class="headerlink" title="Permalink to this term" href="#MODE">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="NAME"><span class="term"><code class="varname">NAME</code></span><a class="headerlink" title="Permalink to this term" href="#NAME">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="OPTIONS"><span class="term"><code class="varname">OPTIONS</code></span><a class="headerlink" title="Permalink to this term" href="#OPTIONS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="OWNER"><span class="term"><code class="varname">OWNER</code></span><a class="headerlink" title="Permalink to this term" href="#OWNER">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="PROGRAM"><span class="term"><code class="varname">PROGRAM</code></span><a class="headerlink" title="Permalink to this term" href="#PROGRAM">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="RESULT"><span class="term"><code class="varname">RESULT</code></span><a class="headerlink" title="Permalink to this term" href="#RESULT">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="RUN{type}"><span class="term"><code class="varname">RUN{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#RUN%7Btype%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SUBSYSTEM"><span class="term"><code class="varname">SUBSYSTEM</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEM">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SUBSYSTEMS"><span class="term"><code class="varname">SUBSYSTEMS</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEMS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SYMLINK"><span class="term"><code class="varname">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="#SYMLINK">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="SYSTEMD_ALIAS="><span class="term"><code class="varname">SYSTEMD_ALIAS=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_ALIAS=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="SYSTEMD_READY="><span class="term"><code class="varname">SYSTEMD_READY=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_READY=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="SYSTEMD_WANTS="><span class="term"><code class="varname">SYSTEMD_WANTS=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSTEMD_WANTS=">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a></p></dd><dt id="TAG"><span class="term"><code class="varname">TAG</code></span><a class="headerlink" title="Permalink to this term" href="#TAG">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="TAGS"><span class="term"><code class="varname">TAGS</code></span><a class="headerlink" title="Permalink to this term" href="#TAGS">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="TEST{octal mode mask}"><span class="term"><code class="varname">TEST{<em class="replaceable"><code>octal mode mask</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#TEST%7Boctal%20mode%20mask%7D">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="WAIT_FOR"><span class="term"><code class="varname">WAIT_FOR</code></span><a class="headerlink" title="Permalink to this term" href="#WAIT_FOR">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="event_timeout="><span class="term"><code class="option">event_timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#event_timeout=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="link_priority="><span class="term"><code class="option">link_priority=</code></span><a class="headerlink" title="Permalink to this term" href="#link_priority=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="nowatch"><span class="term"><code class="option">nowatch</code></span><a class="headerlink" title="Permalink to this term" href="#nowatch">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="static_node="><span class="term"><code class="option">static_node=</code></span><a class="headerlink" title="Permalink to this term" href="#static_node=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="string_escape="><span class="term"><code class="option">string_escape=</code></span><a class="headerlink" title="Permalink to this term" href="#string_escape=">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="watch"><span class="term"><code class="option">watch</code></span><a class="headerlink" title="Permalink to this term" href="#watch">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680743184"></a><h2 id="Journal fields">Journal fields<a class="headerlink" title="Permalink to this headline" href="#Journal%20fields">¶</a></h2><p>Fields in the journal events with a well known meaning.</p><div class="variablelist"><a name="journal-directives"></a><dl class="variablelist"><dt id="CODE_FILE="><span class="term"><code class="varname">CODE_FILE=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_FILE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="CODE_FUNC="><span class="term"><code class="varname">CODE_FUNC=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_FUNC=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="CODE_LINE="><span class="term"><code class="varname">CODE_LINE=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_LINE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="COREDUMP_UNIT="><span class="term"><code class="varname">COREDUMP_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#COREDUMP_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="COREDUMP_USER_UNIT="><span class="term"><code class="varname">COREDUMP_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#COREDUMP_USER_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="ERRNO="><span class="term"><code class="varname">ERRNO=</code></span><a class="headerlink" title="Permalink to this term" href="#ERRNO=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="MESSAGE="><span class="term"><code class="varname">MESSAGE=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="MESSAGE_ID="><span class="term"><code class="varname">MESSAGE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE_ID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_AUDIT_LOGINUID="><span class="term"><code class="varname">OBJECT_AUDIT_LOGINUID=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_AUDIT_LOGINUID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_AUDIT_SESSION="><span class="term"><code class="varname">OBJECT_AUDIT_SESSION=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_AUDIT_SESSION=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_CMDLINE="><span class="term"><code class="varname">OBJECT_CMDLINE=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_CMDLINE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_COMM="><span class="term"><code class="varname">OBJECT_COMM=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_COMM=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_EXE="><span class="term"><code class="varname">OBJECT_EXE=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_EXE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_GID="><span class="term"><code class="varname">OBJECT_GID=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_GID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_PID="><span class="term"><code class="varname">OBJECT_PID=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_PID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_SYSTEMD_CGROUP="><span class="term"><code class="varname">OBJECT_SYSTEMD_CGROUP=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_SYSTEMD_CGROUP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_SYSTEMD_OWNER_UID="><span class="term"><code class="varname">OBJECT_SYSTEMD_OWNER_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_SYSTEMD_OWNER_UID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_SYSTEMD_SESSION="><span class="term"><code class="varname">OBJECT_SYSTEMD_SESSION=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_SYSTEMD_SESSION=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_SYSTEMD_UNIT="><span class="term"><code class="varname">OBJECT_SYSTEMD_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_SYSTEMD_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_SYSTEMD_USER_UNIT="><span class="term"><code class="varname">OBJECT_SYSTEMD_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_SYSTEMD_USER_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="OBJECT_UID="><span class="term"><code class="varname">OBJECT_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_UID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="PRIORITY="><span class="term"><code class="varname">PRIORITY=</code></span><a class="headerlink" title="Permalink to this term" href="#PRIORITY=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="SYSLOG_FACILITY="><span class="term"><code class="varname">SYSLOG_FACILITY=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_FACILITY=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="SYSLOG_IDENTIFIER="><span class="term"><code class="varname">SYSLOG_IDENTIFIER=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_IDENTIFIER=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="SYSLOG_PID="><span class="term"><code class="varname">SYSLOG_PID=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_PID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_AUDIT_LOGINUID="><span class="term"><code class="varname">_AUDIT_LOGINUID=</code></span><a class="headerlink" title="Permalink to this term" href="#_AUDIT_LOGINUID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_AUDIT_SESSION="><span class="term"><code class="varname">_AUDIT_SESSION=</code></span><a class="headerlink" title="Permalink to this term" href="#_AUDIT_SESSION=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_BOOT_ID="><span class="term"><code class="varname">_BOOT_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#_BOOT_ID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_CAP_EFFECTIVE="><span class="term"><code class="varname">_CAP_EFFECTIVE=</code></span><a class="headerlink" title="Permalink to this term" href="#_CAP_EFFECTIVE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_CMDLINE="><span class="term"><code class="varname">_CMDLINE=</code></span><a class="headerlink" title="Permalink to this term" href="#_CMDLINE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_COMM="><span class="term"><code class="varname">_COMM=</code></span><a class="headerlink" title="Permalink to this term" href="#_COMM=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_EXE="><span class="term"><code class="varname">_EXE=</code></span><a class="headerlink" title="Permalink to this term" href="#_EXE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_GID="><span class="term"><code class="varname">_GID=</code></span><a class="headerlink" title="Permalink to this term" href="#_GID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_HOSTNAME="><span class="term"><code class="varname">_HOSTNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#_HOSTNAME=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_KERNEL_DEVICE="><span class="term"><code class="varname">_KERNEL_DEVICE=</code></span><a class="headerlink" title="Permalink to this term" href="#_KERNEL_DEVICE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_KERNEL_SUBSYSTEM="><span class="term"><code class="varname">_KERNEL_SUBSYSTEM=</code></span><a class="headerlink" title="Permalink to this term" href="#_KERNEL_SUBSYSTEM=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_MACHINE_ID="><span class="term"><code class="varname">_MACHINE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#_MACHINE_ID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_PID="><span class="term"><code class="varname">_PID=</code></span><a class="headerlink" title="Permalink to this term" href="#_PID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SELINUX_CONTEXT="><span class="term"><code class="varname">_SELINUX_CONTEXT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SELINUX_CONTEXT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SOURCE_REALTIME_TIMESTAMP="><span class="term"><code class="varname">_SOURCE_REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#_SOURCE_REALTIME_TIMESTAMP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_CGROUP="><span class="term"><code class="varname">_SYSTEMD_CGROUP=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_CGROUP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_OWNER_UID="><span class="term"><code class="varname">_SYSTEMD_OWNER_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_OWNER_UID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_SESSION="><span class="term"><code class="varname">_SYSTEMD_SESSION=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_SESSION=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_SLICE="><span class="term"><code class="varname">_SYSTEMD_SLICE=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_SLICE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_UNIT="><span class="term"><code class="varname">_SYSTEMD_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_SYSTEMD_USER_UNIT="><span class="term"><code class="varname">_SYSTEMD_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_USER_UNIT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_TRANSPORT="><span class="term"><code class="varname">_TRANSPORT=</code></span><a class="headerlink" title="Permalink to this term" href="#_TRANSPORT=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UDEV_DEVLINK="><span class="term"><code class="varname">_UDEV_DEVLINK=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_DEVLINK=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UDEV_DEVNODE="><span class="term"><code class="varname">_UDEV_DEVNODE=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_DEVNODE=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UDEV_SYSNAME="><span class="term"><code class="varname">_UDEV_SYSNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_SYSNAME=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="_UID="><span class="term"><code class="varname">_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#_UID=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="__CURSOR="><span class="term"><code class="varname">__CURSOR=</code></span><a class="headerlink" title="Permalink to this term" href="#__CURSOR=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="__MONOTONIC_TIMESTAMP="><span class="term"><code class="varname">__MONOTONIC_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__MONOTONIC_TIMESTAMP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="__REALTIME_TIMESTAMP="><span class="term"><code class="varname">__REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__REALTIME_TIMESTAMP=">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680654960"></a><h2 id="PAM configuration directives">PAM configuration directives<a class="headerlink" title="Permalink to this headline" href="#PAM%20configuration%20directives">¶</a></h2><p>Directives for configuring PAM behaviour.</p><div class="variablelist"><a name="pam-directives"></a><dl class="variablelist"><dt id="class="><span class="term"><code class="option">class=</code></span><a class="headerlink" title="Permalink to this term" href="#class=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="debug="><span class="term"><code class="option">debug=</code></span><a class="headerlink" title="Permalink to this term" href="#debug=">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680649968"></a><h2 id="crypttab options">crypttab options<a class="headerlink" title="Permalink to this headline" href="#crypttab%20options">¶</a></h2><p>Options which influence mounted filesystems and
+ encrypted volumes.</p><div class="variablelist"><a name="crypttab-options"></a><dl class="variablelist"><dt id="cipher="><span class="term"><code class="varname">cipher=</code></span><a class="headerlink" title="Permalink to this term" href="#cipher=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="discard"><span class="term"><code class="varname">discard</code></span><a class="headerlink" title="Permalink to this term" href="#discard">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="hash="><span class="term"><code class="varname">hash=</code></span><a class="headerlink" title="Permalink to this term" href="#hash=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="keyfile-offset="><span class="term"><code class="varname">keyfile-offset=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-offset=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="keyfile-size="><span class="term"><code class="varname">keyfile-size=</code></span><a class="headerlink" title="Permalink to this term" href="#keyfile-size=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="luks"><span class="term"><code class="varname">luks</code></span><a class="headerlink" title="Permalink to this term" href="#luks">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="noauto"><span class="term"><code class="varname">noauto</code></span><a class="headerlink" title="Permalink to this term" href="#noauto">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="nofail"><span class="term"><code class="varname">nofail</code></span><a class="headerlink" title="Permalink to this term" href="#nofail">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="plain"><span class="term"><code class="varname">plain</code></span><a class="headerlink" title="Permalink to this term" href="#plain">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="read-only"><span class="term"><code class="varname">read-only</code></span><a class="headerlink" title="Permalink to this term" href="#read-only">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="readonly"><span class="term"><code class="varname">readonly</code></span><a class="headerlink" title="Permalink to this term" href="#readonly">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="size="><span class="term"><code class="varname">size=</code></span><a class="headerlink" title="Permalink to this term" href="#size=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="swap"><span class="term"><code class="varname">swap</code></span><a class="headerlink" title="Permalink to this term" href="#swap">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tcrypt"><span class="term"><code class="varname">tcrypt</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tcrypt-hidden"><span class="term"><code class="varname">tcrypt-hidden</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt-hidden">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tcrypt-keyfile="><span class="term"><code class="varname">tcrypt-keyfile=</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt-keyfile=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tcrypt-system"><span class="term"><code class="varname">tcrypt-system</code></span><a class="headerlink" title="Permalink to this term" href="#tcrypt-system">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="timeout="><span class="term"><code class="varname">timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#timeout=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tmp"><span class="term"><code class="varname">tmp</code></span><a class="headerlink" title="Permalink to this term" href="#tmp">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="tries="><span class="term"><code class="varname">tries=</code></span><a class="headerlink" title="Permalink to this term" href="#tries=">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="verify"><span class="term"><code class="varname">verify</code></span><a class="headerlink" title="Permalink to this term" href="#verify">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680614592"></a><h2 id="System manager directives">System manager directives<a class="headerlink" title="Permalink to this headline" href="#System%20manager%20directives">¶</a></h2><p>Directives for configuring the behaviour of the
+ systemd process.</p><div class="variablelist"><a name="systemd-directives"></a><dl class="variablelist"><dt id="CPUAffinity="><span class="term"><code class="varname">CPUAffinity=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAffinity=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="CapabilityBoundingSet="><span class="term"><code class="varname">CapabilityBoundingSet=</code></span><a class="headerlink" title="Permalink to this term" href="#CapabilityBoundingSet=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="CrashChVT="><span class="term"><code class="varname">CrashChVT=</code></span><a class="headerlink" title="Permalink to this term" href="#CrashChVT=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="CrashShell="><span class="term"><code class="varname">CrashShell=</code></span><a class="headerlink" title="Permalink to this term" href="#CrashShell=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultEnvironment="><span class="term"><code class="varname">DefaultEnvironment=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultEnvironment=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitAS="><span class="term"><code class="varname">DefaultLimitAS=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitAS=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitCORE="><span class="term"><code class="varname">DefaultLimitCORE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCORE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitCPU="><span class="term"><code class="varname">DefaultLimitCPU=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitCPU=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitDATA="><span class="term"><code class="varname">DefaultLimitDATA=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitDATA=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitFSIZE="><span class="term"><code class="varname">DefaultLimitFSIZE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitFSIZE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitLOCKS="><span class="term"><code class="varname">DefaultLimitLOCKS=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitLOCKS=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitMEMLOCK="><span class="term"><code class="varname">DefaultLimitMEMLOCK=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitMEMLOCK=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitMSGQUEUE="><span class="term"><code class="varname">DefaultLimitMSGQUEUE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitMSGQUEUE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitNICE="><span class="term"><code class="varname">DefaultLimitNICE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitNICE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitNOFILE="><span class="term"><code class="varname">DefaultLimitNOFILE=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitNOFILE=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitNPROC="><span class="term"><code class="varname">DefaultLimitNPROC=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitNPROC=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitRSS="><span class="term"><code class="varname">DefaultLimitRSS=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitRSS=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitRTPRIO="><span class="term"><code class="varname">DefaultLimitRTPRIO=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitRTPRIO=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitRTTIME="><span class="term"><code class="varname">DefaultLimitRTTIME=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitRTTIME=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitSIGPENDING="><span class="term"><code class="varname">DefaultLimitSIGPENDING=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitSIGPENDING=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultLimitSTACK="><span class="term"><code class="varname">DefaultLimitSTACK=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultLimitSTACK=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultStandardError="><span class="term"><code class="varname">DefaultStandardError=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultStandardError=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DefaultStandardOutput="><span class="term"><code class="varname">DefaultStandardOutput=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultStandardOutput=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="DumpCore="><span class="term"><code class="varname">DumpCore=</code></span><a class="headerlink" title="Permalink to this term" href="#DumpCore=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="HibernateMode="><span class="term"><code class="varname">HibernateMode=</code></span><a class="headerlink" title="Permalink to this term" href="#HibernateMode=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="HibernateState="><span class="term"><code class="varname">HibernateState=</code></span><a class="headerlink" title="Permalink to this term" href="#HibernateState=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="HybridSleepMode="><span class="term"><code class="varname">HybridSleepMode=</code></span><a class="headerlink" title="Permalink to this term" href="#HybridSleepMode=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="HybridSleepState="><span class="term"><code class="varname">HybridSleepState=</code></span><a class="headerlink" title="Permalink to this term" href="#HybridSleepState=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="JoinControllers="><span class="term"><code class="varname">JoinControllers=</code></span><a class="headerlink" title="Permalink to this term" href="#JoinControllers=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogColor="><span class="term"><code class="varname">LogColor=</code></span><a class="headerlink" title="Permalink to this term" href="#LogColor=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogLevel="><span class="term"><code class="varname">LogLevel=</code></span><a class="headerlink" title="Permalink to this term" href="#LogLevel=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogLocation="><span class="term"><code class="varname">LogLocation=</code></span><a class="headerlink" title="Permalink to this term" href="#LogLocation=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="LogTarget="><span class="term"><code class="varname">LogTarget=</code></span><a class="headerlink" title="Permalink to this term" href="#LogTarget=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="RuntimeWatchdogSec="><span class="term"><code class="varname">RuntimeWatchdogSec=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeWatchdogSec=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="ShowStatus="><span class="term"><code class="varname">ShowStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#ShowStatus=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="ShutdownWatchdogSec="><span class="term"><code class="varname">ShutdownWatchdogSec=</code></span><a class="headerlink" title="Permalink to this term" href="#ShutdownWatchdogSec=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="SuspendMode="><span class="term"><code class="varname">SuspendMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendMode=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="SuspendState="><span class="term"><code class="varname">SuspendState=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendState=">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="TimerSlackNSec="><span class="term"><code class="varname">TimerSlackNSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimerSlackNSec=">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680550368"></a><h2 id="bootchart.conf directives">bootchart.conf directives<a class="headerlink" title="Permalink to this headline" href="#bootchart.conf%20directives">¶</a></h2><p>Directives for configuring the behaviour of the
+ systemd-bootchart process.</p><div class="variablelist"><a name="bootchart-directives"></a><dl class="variablelist"><dt id="Filter="><span class="term"><code class="varname">Filter=</code></span><a class="headerlink" title="Permalink to this term" href="#Filter=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Frequency="><span class="term"><code class="varname">Frequency=</code></span><a class="headerlink" title="Permalink to this term" href="#Frequency=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Init="><span class="term"><code class="varname">Init=</code></span><a class="headerlink" title="Permalink to this term" href="#Init=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Output="><span class="term"><code class="varname">Output=</code></span><a class="headerlink" title="Permalink to this term" href="#Output=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="PlotEntropyGraph="><span class="term"><code class="varname">PlotEntropyGraph=</code></span><a class="headerlink" title="Permalink to this term" href="#PlotEntropyGraph=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="PlotMemoryUsage="><span class="term"><code class="varname">PlotMemoryUsage=</code></span><a class="headerlink" title="Permalink to this term" href="#PlotMemoryUsage=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Relative="><span class="term"><code class="varname">Relative=</code></span><a class="headerlink" title="Permalink to this term" href="#Relative=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="Samples="><span class="term"><code class="varname">Samples=</code></span><a class="headerlink" title="Permalink to this term" href="#Samples=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="ScaleX="><span class="term"><code class="varname">ScaleX=</code></span><a class="headerlink" title="Permalink to this term" href="#ScaleX=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="ScaleY="><span class="term"><code class="varname">ScaleY=</code></span><a class="headerlink" title="Permalink to this term" href="#ScaleY=">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274680532528"></a><h2 id="command-line options">command-line options<a class="headerlink" title="Permalink to this headline" href="#command-line%20options">¶</a></h2><p>Command-line options accepted by programs in the
+ systemd suite.</p><div class="variablelist"><a name="options"></a><dl class="variablelist"><dt id="--accept"><span class="term"><code class="option">--accept</code></span><a class="headerlink" title="Permalink to this term" href="#--accept">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="--accept-cached"><span class="term"><code class="option">--accept-cached</code></span><a class="headerlink" title="Permalink to this term" href="#--accept-cached">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--action="><span class="term"><code class="option">--action=</code></span><a class="headerlink" title="Permalink to this term" href="#--action=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--adjust-system-clock"><span class="term"><code class="option">--adjust-system-clock</code></span><a class="headerlink" title="Permalink to this term" href="#--adjust-system-clock">¶</a></dt><dd><p><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--after"><span class="term"><code class="option">--after</code></span><a class="headerlink" title="Permalink to this term" href="#--after">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--after-cursor="><span class="term"><code class="option">--after-cursor=</code></span><a class="headerlink" title="Permalink to this term" href="#--after-cursor=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--all"><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="#--all">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="--attr-match="><span class="term"><code class="option">--attr-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--attr-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--attr-nomatch="><span class="term"><code class="option">--attr-nomatch=</code></span><a class="headerlink" title="Permalink to this term" href="#--attr-nomatch=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--attribute-walk"><span class="term"><code class="option">--attribute-walk</code></span><a class="headerlink" title="Permalink to this term" href="#--attribute-walk">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--batch"><span class="term"><code class="option">--batch</code></span><a class="headerlink" title="Permalink to this term" href="#--batch">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--before"><span class="term"><code class="option">--before</code></span><a class="headerlink" title="Permalink to this term" href="#--before">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--bind-ro="><span class="term"><code class="option">--bind-ro=</code></span><a class="headerlink" title="Permalink to this term" href="#--bind-ro=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--bind="><span class="term"><code class="option">--bind=</code></span><a class="headerlink" title="Permalink to this term" href="#--bind=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--boot"><span class="term"><code class="option">--boot</code></span><a class="headerlink" title="Permalink to this term" href="#--boot">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--boot="><span class="term"><code class="option">--boot=</code></span><a class="headerlink" title="Permalink to this term" href="#--boot=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--booted"><span class="term"><code class="option">--booted</code></span><a class="headerlink" title="Permalink to this term" href="#--booted">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--capability="><span class="term"><code class="option">--capability=</code></span><a class="headerlink" title="Permalink to this term" href="#--capability=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--catalog"><span class="term"><code class="option">--catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--cert="><span class="term"><code class="option">--cert=</code></span><a class="headerlink" title="Permalink to this term" href="#--cert=">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="--children-max="><span class="term"><code class="option">--children-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--children-max=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--clean"><span class="term"><code class="option">--clean</code></span><a class="headerlink" title="Permalink to this term" href="#--clean">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--cleanup-db"><span class="term"><code class="option">--cleanup-db</code></span><a class="headerlink" title="Permalink to this term" href="#--cleanup-db">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--cmdline"><span class="term"><code class="option">--cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#--cmdline">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--confirm-spawn"><span class="term"><code class="option">--confirm-spawn</code></span><a class="headerlink" title="Permalink to this term" href="#--confirm-spawn">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--console"><span class="term"><code class="option">--console</code></span><a class="headerlink" title="Permalink to this term" href="#--console">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--container"><span class="term"><code class="option">--container</code></span><a class="headerlink" title="Permalink to this term" href="#--container">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="--crash-shell"><span class="term"><code class="option">--crash-shell</code></span><a class="headerlink" title="Permalink to this term" href="#--crash-shell">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--create"><span class="term"><code class="option">--create</code></span><a class="headerlink" title="Permalink to this term" href="#--create">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--cursor="><span class="term"><code class="option">--cursor=</code></span><a class="headerlink" title="Permalink to this term" href="#--cursor=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--daemon"><span class="term"><code class="option">--daemon</code></span><a class="headerlink" title="Permalink to this term" href="#--daemon">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--default-standard-error="><span class="term"><code class="option">--default-standard-error=</code></span><a class="headerlink" title="Permalink to this term" href="#--default-standard-error=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--default-standard-output="><span class="term"><code class="option">--default-standard-output=</code></span><a class="headerlink" title="Permalink to this term" href="#--default-standard-output=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--delay="><span class="term"><code class="option">--delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--delay=">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--depth="><span class="term"><code class="option">--depth=</code></span><a class="headerlink" title="Permalink to this term" href="#--depth=">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--description="><span class="term"><code class="option">--description=</code></span><a class="headerlink" title="Permalink to this term" href="#--description=">¶</a></dt><dd><p><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--device-id-of-file="><span class="term"><code class="option">--device-id-of-file=</code></span><a class="headerlink" title="Permalink to this term" href="#--device-id-of-file=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--diff="><span class="term"><code class="option">--diff=</code></span><a class="headerlink" title="Permalink to this term" href="#--diff=">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="--directory="><span class="term"><code class="option">--directory=</code></span><a class="headerlink" title="Permalink to this term" href="#--directory=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--disk-usage"><span class="term"><code class="option">--disk-usage</code></span><a class="headerlink" title="Permalink to this term" href="#--disk-usage">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--dmesg"><span class="term"><code class="option">--dmesg</code></span><a class="headerlink" title="Permalink to this term" href="#--dmesg">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--dry-run"><span class="term"><code class="option">--dry-run</code></span><a class="headerlink" title="Permalink to this term" href="#--dry-run">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--dump-catalog"><span class="term"><code class="option">--dump-catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--dump-catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--dump-configuration-items"><span class="term"><code class="option">--dump-configuration-items</code></span><a class="headerlink" title="Permalink to this term" href="#--dump-configuration-items">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--dump-core"><span class="term"><code class="option">--dump-core</code></span><a class="headerlink" title="Permalink to this term" href="#--dump-core">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--entropy"><span class="term"><code class="option">--entropy</code></span><a class="headerlink" title="Permalink to this term" href="#--entropy">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--environment="><span class="term"><code class="option">--environment=</code></span><a class="headerlink" title="Permalink to this term" href="#--environment=">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="--exclude-prefix="><span class="term"><code class="option">--exclude-prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--exclude-prefix=">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--exec-delay="><span class="term"><code class="option">--exec-delay=</code></span><a class="headerlink" title="Permalink to this term" href="#--exec-delay=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="--exit"><span class="term"><code class="option">--exit</code></span><a class="headerlink" title="Permalink to this term" href="#--exit">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--exit-if-exists="><span class="term"><code class="option">--exit-if-exists=</code></span><a class="headerlink" title="Permalink to this term" href="#--exit-if-exists=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--export"><span class="term"><code class="option">--export</code></span><a class="headerlink" title="Permalink to this term" href="#--export">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--export-db"><span class="term"><code class="option">--export-db</code></span><a class="headerlink" title="Permalink to this term" href="#--export-db">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--export-prefix="><span class="term"><code class="option">--export-prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--export-prefix=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--fail"><span class="term"><code class="option">--fail</code></span><a class="headerlink" title="Permalink to this term" href="#--fail">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--field="><span class="term"><code class="option">--field=</code></span><a class="headerlink" title="Permalink to this term" href="#--field=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="--file-size-max="><span class="term"><code class="option">--file-size-max=</code></span><a class="headerlink" title="Permalink to this term" href="#--file-size-max=">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="--file="><span class="term"><code class="option">--file=</code></span><a class="headerlink" title="Permalink to this term" href="#--file=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--follow"><span class="term"><code class="option">--follow</code></span><a class="headerlink" title="Permalink to this term" href="#--follow">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--force"><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="#--force">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--freq"><span class="term"><code class="option">--freq</code></span><a class="headerlink" title="Permalink to this term" href="#--freq">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--from-pattern="><span class="term"><code class="option">--from-pattern=</code></span><a class="headerlink" title="Permalink to this term" href="#--from-pattern=">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--full"><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="#--full">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="--fuzz="><span class="term"><code class="option">--fuzz=</code></span><a class="headerlink" title="Permalink to this term" href="#--fuzz=">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--global"><span class="term"><code class="option">--global</code></span><a class="headerlink" title="Permalink to this term" href="#--global">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--halt"><span class="term"><code class="option">--halt</code></span><a class="headerlink" title="Permalink to this term" href="#--halt">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="--header"><span class="term"><code class="option">--header</code></span><a class="headerlink" title="Permalink to this term" href="#--header">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a>, <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>, <a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--host"><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#--host">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--icon="><span class="term"><code class="option">--icon=</code></span><a class="headerlink" title="Permalink to this term" href="#--icon=">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--identifier="><span class="term"><code class="option">--identifier=</code></span><a class="headerlink" title="Permalink to this term" href="#--identifier=">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="--ignore-dependencies"><span class="term"><code class="option">--ignore-dependencies</code></span><a class="headerlink" title="Permalink to this term" href="#--ignore-dependencies">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--ignore-inhibitors"><span class="term"><code class="option">--ignore-inhibitors</code></span><a class="headerlink" title="Permalink to this term" href="#--ignore-inhibitors">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--init"><span class="term"><code class="option">--init</code></span><a class="headerlink" title="Permalink to this term" href="#--init">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--interval="><span class="term"><code class="option">--interval=</code></span><a class="headerlink" title="Permalink to this term" href="#--interval=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--introspect="><span class="term"><code class="option">--introspect=</code></span><a class="headerlink" title="Permalink to this term" href="#--introspect=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--irreversible"><span class="term"><code class="option">--irreversible</code></span><a class="headerlink" title="Permalink to this term" href="#--irreversible">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--iterations="><span class="term"><code class="option">--iterations=</code></span><a class="headerlink" title="Permalink to this term" href="#--iterations=">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="--kernel"><span class="term"><code class="option">--kernel</code></span><a class="headerlink" title="Permalink to this term" href="#--kernel">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--key="><span class="term"><code class="option">--key=</code></span><a class="headerlink" title="Permalink to this term" href="#--key=">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="--kill-who="><span class="term"><code class="option">--kill-who=</code></span><a class="headerlink" title="Permalink to this term" href="#--kill-who=">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--level-prefix="><span class="term"><code class="option">--level-prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--level-prefix=">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="--lines="><span class="term"><code class="option">--lines=</code></span><a class="headerlink" title="Permalink to this term" href="#--lines=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--link-journal="><span class="term"><code class="option">--link-journal=</code></span><a class="headerlink" title="Permalink to this term" href="#--link-journal=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--list"><span class="term"><code class="option">--list</code></span><a class="headerlink" title="Permalink to this term" href="#--list">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--list-catalog"><span class="term"><code class="option">--list-catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--list-catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--listen="><span class="term"><code class="option">--listen=</code></span><a class="headerlink" title="Permalink to this term" href="#--listen=">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="--log-color="><span class="term"><code class="option">--log-color=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-color=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--log-level="><span class="term"><code class="option">--log-level=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-level=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--log-location="><span class="term"><code class="option">--log-location=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-location=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--log-priority="><span class="term"><code class="option">--log-priority=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-priority=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--log-target="><span class="term"><code class="option">--log-target=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-target=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--machine="><span class="term"><code class="option">--machine=</code></span><a class="headerlink" title="Permalink to this term" href="#--machine=">¶</a></dt><dd><p><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--max-files="><span class="term"><code class="option">--max-files=</code></span><a class="headerlink" title="Permalink to this term" href="#--max-files=">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="--merge"><span class="term"><code class="option">--merge</code></span><a class="headerlink" title="Permalink to this term" href="#--merge">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--mode="><span class="term"><code class="option">--mode=</code></span><a class="headerlink" title="Permalink to this term" href="#--mode=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--multiple"><span class="term"><code class="option">--multiple</code></span><a class="headerlink" title="Permalink to this term" href="#--multiple">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--name="><span class="term"><code class="option">--name=</code></span><a class="headerlink" title="Permalink to this term" href="#--name=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--new-id128"><span class="term"><code class="option">--new-id128</code></span><a class="headerlink" title="Permalink to this term" href="#--new-id128">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--no-block"><span class="term"><code class="option">--no-block</code></span><a class="headerlink" title="Permalink to this term" href="#--no-block">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--no-convert"><span class="term"><code class="option">--no-convert</code></span><a class="headerlink" title="Permalink to this term" href="#--no-convert">¶</a></dt><dd><p><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a></p></dd><dt id="--no-filter"><span class="term"><code class="option">--no-filter</code></span><a class="headerlink" title="Permalink to this term" href="#--no-filter">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--no-legend"><span class="term"><code class="option">--no-legend</code></span><a class="headerlink" title="Permalink to this term" href="#--no-legend">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--no-reload"><span class="term"><code class="option">--no-reload</code></span><a class="headerlink" title="Permalink to this term" href="#--no-reload">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--no-tail"><span class="term"><code class="option">--no-tail</code></span><a class="headerlink" title="Permalink to this term" href="#--no-tail">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--no-tty"><span class="term"><code class="option">--no-tty</code></span><a class="headerlink" title="Permalink to this term" href="#--no-tty">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a></p></dd><dt id="--no-wtmp"><span class="term"><code class="option">--no-wtmp</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wtmp">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="--order"><span class="term"><code class="option">--order</code></span><a class="headerlink" title="Permalink to this term" href="#--order">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--output"><span class="term"><code class="option">--output</code></span><a class="headerlink" title="Permalink to this term" href="#--output">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--output="><span class="term"><code class="option">--output=</code></span><a class="headerlink" title="Permalink to this term" href="#--output=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="--pager-end"><span class="term"><code class="option">--pager-end</code></span><a class="headerlink" title="Permalink to this term" href="#--pager-end">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--parent-match="><span class="term"><code class="option">--parent-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--parent-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--path="><span class="term"><code class="option">--path=</code></span><a class="headerlink" title="Permalink to this term" href="#--path=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--pid="><span class="term"><code class="option">--pid=</code></span><a class="headerlink" title="Permalink to this term" href="#--pid=">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--plain"><span class="term"><code class="option">--plain</code></span><a class="headerlink" title="Permalink to this term" href="#--plain">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--plymouth"><span class="term"><code class="option">--plymouth</code></span><a class="headerlink" title="Permalink to this term" href="#--plymouth">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--poweroff"><span class="term"><code class="option">--poweroff</code></span><a class="headerlink" title="Permalink to this term" href="#--poweroff">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="--prefix="><span class="term"><code class="option">--prefix=</code></span><a class="headerlink" title="Permalink to this term" href="#--prefix=">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--pretty"><span class="term"><code class="option">--pretty</code></span><a class="headerlink" title="Permalink to this term" href="#--pretty">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="--priority="><span class="term"><code class="option">--priority=</code></span><a class="headerlink" title="Permalink to this term" href="#--priority=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="--private-network"><span class="term"><code class="option">--private-network</code></span><a class="headerlink" title="Permalink to this term" href="#--private-network">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--privileged"><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#--privileged">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="--property"><span class="term"><code class="option">--property</code></span><a class="headerlink" title="Permalink to this term" href="#--property">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--property-match="><span class="term"><code class="option">--property-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--property-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--property="><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="#--property=">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--pss"><span class="term"><code class="option">--pss</code></span><a class="headerlink" title="Permalink to this term" href="#--pss">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--query"><span class="term"><code class="option">--query</code></span><a class="headerlink" title="Permalink to this term" href="#--query">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--query="><span class="term"><code class="option">--query=</code></span><a class="headerlink" title="Permalink to this term" href="#--query=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--quiet"><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#--quiet">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--read-only"><span class="term"><code class="option">--read-only</code></span><a class="headerlink" title="Permalink to this term" href="#--read-only">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--readahead="><span class="term"><code class="option">--readahead=</code></span><a class="headerlink" title="Permalink to this term" href="#--readahead=">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--ready"><span class="term"><code class="option">--ready</code></span><a class="headerlink" title="Permalink to this term" href="#--ready">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--reboot"><span class="term"><code class="option">--reboot</code></span><a class="headerlink" title="Permalink to this term" href="#--reboot">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="--rel"><span class="term"><code class="option">--rel</code></span><a class="headerlink" title="Permalink to this term" href="#--rel">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--reload"><span class="term"><code class="option">--reload</code></span><a class="headerlink" title="Permalink to this term" href="#--reload">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--remain-after-exit"><span class="term"><code class="option">--remain-after-exit</code></span><a class="headerlink" title="Permalink to this term" href="#--remain-after-exit">¶</a></dt><dd><p><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--remove"><span class="term"><code class="option">--remove</code></span><a class="headerlink" title="Permalink to this term" href="#--remove">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="--require"><span class="term"><code class="option">--require</code></span><a class="headerlink" title="Permalink to this term" href="#--require">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--resolve-names="><span class="term"><code class="option">--resolve-names=</code></span><a class="headerlink" title="Permalink to this term" href="#--resolve-names=">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="--reverse"><span class="term"><code class="option">--reverse</code></span><a class="headerlink" title="Permalink to this term" href="#--reverse">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--root"><span class="term"><code class="option">--root</code></span><a class="headerlink" title="Permalink to this term" href="#--root">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--root="><span class="term"><code class="option">--root=</code></span><a class="headerlink" title="Permalink to this term" href="#--root=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--runtime"><span class="term"><code class="option">--runtime</code></span><a class="headerlink" title="Permalink to this term" href="#--runtime">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--sample"><span class="term"><code class="option">--sample</code></span><a class="headerlink" title="Permalink to this term" href="#--sample">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--scale-x"><span class="term"><code class="option">--scale-x</code></span><a class="headerlink" title="Permalink to this term" href="#--scale-x">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--scale-y"><span class="term"><code class="option">--scale-y</code></span><a class="headerlink" title="Permalink to this term" href="#--scale-y">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="--scope"><span class="term"><code class="option">--scope</code></span><a class="headerlink" title="Permalink to this term" href="#--scope">¶</a></dt><dd><p><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--send-sighup"><span class="term"><code class="option">--send-sighup</code></span><a class="headerlink" title="Permalink to this term" href="#--send-sighup">¶</a></dt><dd><p><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--seq-end="><span class="term"><code class="option">--seq-end=</code></span><a class="headerlink" title="Permalink to this term" href="#--seq-end=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--seq-start="><span class="term"><code class="option">--seq-start=</code></span><a class="headerlink" title="Permalink to this term" href="#--seq-start=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--setup-keys"><span class="term"><code class="option">--setup-keys</code></span><a class="headerlink" title="Permalink to this term" href="#--setup-keys">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--show-status="><span class="term"><code class="option">--show-status=</code></span><a class="headerlink" title="Permalink to this term" href="#--show-status=">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--show-types"><span class="term"><code class="option">--show-types</code></span><a class="headerlink" title="Permalink to this term" href="#--show-types">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--signal="><span class="term"><code class="option">--signal=</code></span><a class="headerlink" title="Permalink to this term" href="#--signal=">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--since="><span class="term"><code class="option">--since=</code></span><a class="headerlink" title="Permalink to this term" href="#--since=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--slice="><span class="term"><code class="option">--slice=</code></span><a class="headerlink" title="Permalink to this term" href="#--slice=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--start-exec-queue"><span class="term"><code class="option">--start-exec-queue</code></span><a class="headerlink" title="Permalink to this term" href="#--start-exec-queue">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--state="><span class="term"><code class="option">--state=</code></span><a class="headerlink" title="Permalink to this term" href="#--state=">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="--static"><span class="term"><code class="option">--static</code></span><a class="headerlink" title="Permalink to this term" href="#--static">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="--status="><span class="term"><code class="option">--status=</code></span><a class="headerlink" title="Permalink to this term" href="#--status=">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="--stop-exec-queue"><span class="term"><code class="option">--stop-exec-queue</code></span><a class="headerlink" title="Permalink to this term" href="#--stop-exec-queue">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--subsystem-match="><span class="term"><code class="option">--subsystem-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--subsystem-nomatch="><span class="term"><code class="option">--subsystem-nomatch=</code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-nomatch=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--subsystem="><span class="term"><code class="option">--subsystem=</code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--sysname-match="><span class="term"><code class="option">--sysname-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--sysname-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--system"><span class="term"><code class="option">--system</code></span><a class="headerlink" title="Permalink to this term" href="#--system">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--tag-match="><span class="term"><code class="option">--tag-match=</code></span><a class="headerlink" title="Permalink to this term" href="#--tag-match=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--test"><span class="term"><code class="option">--test</code></span><a class="headerlink" title="Permalink to this term" href="#--test">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="--test="><span class="term"><code class="option">--test=</code></span><a class="headerlink" title="Permalink to this term" href="#--test=">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--timeout="><span class="term"><code class="option">--timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a>, <a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--to-pattern="><span class="term"><code class="option">--to-pattern=</code></span><a class="headerlink" title="Permalink to this term" href="#--to-pattern=">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="--transient"><span class="term"><code class="option">--transient</code></span><a class="headerlink" title="Permalink to this term" href="#--transient">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="--type="><span class="term"><code class="option">--type=</code></span><a class="headerlink" title="Permalink to this term" href="#--type=">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--udev"><span class="term"><code class="option">--udev</code></span><a class="headerlink" title="Permalink to this term" href="#--udev">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--unit="><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--unit=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--until="><span class="term"><code class="option">--until=</code></span><a class="headerlink" title="Permalink to this term" href="#--until=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--update"><span class="term"><code class="option">--update</code></span><a class="headerlink" title="Permalink to this term" href="#--update">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--update-catalog"><span class="term"><code class="option">--update-catalog</code></span><a class="headerlink" title="Permalink to this term" href="#--update-catalog">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--user"><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--user">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="--user-unit="><span class="term"><code class="option">--user-unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--user-unit=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--user="><span class="term"><code class="option">--user=</code></span><a class="headerlink" title="Permalink to this term" href="#--user=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--uuid="><span class="term"><code class="option">--uuid=</code></span><a class="headerlink" title="Permalink to this term" href="#--uuid=">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="--verbose"><span class="term"><code class="option">--verbose</code></span><a class="headerlink" title="Permalink to this term" href="#--verbose">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--verify"><span class="term"><code class="option">--verify</code></span><a class="headerlink" title="Permalink to this term" href="#--verify">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--verify-key="><span class="term"><code class="option">--verify-key=</code></span><a class="headerlink" title="Permalink to this term" href="#--verify-key=">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="--vm"><span class="term"><code class="option">--vm</code></span><a class="headerlink" title="Permalink to this term" href="#--vm">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="--wall"><span class="term"><code class="option">--wall</code></span><a class="headerlink" title="Permalink to this term" href="#--wall">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--watch"><span class="term"><code class="option">--watch</code></span><a class="headerlink" title="Permalink to this term" href="#--watch">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="--what="><span class="term"><code class="option">--what=</code></span><a class="headerlink" title="Permalink to this term" href="#--what=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--who="><span class="term"><code class="option">--who=</code></span><a class="headerlink" title="Permalink to this term" href="#--who=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--why="><span class="term"><code class="option">--why=</code></span><a class="headerlink" title="Permalink to this term" href="#--why=">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="--wtmp-only"><span class="term"><code class="option">--wtmp-only</code></span><a class="headerlink" title="Permalink to this term" href="#--wtmp-only">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="-C"><span class="term"><code class="option">-C</code></span><a class="headerlink" title="Permalink to this term" href="#-C">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-D"><span class="term"><code class="option">-D</code></span><a class="headerlink" title="Permalink to this term" href="#-D">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-E"><span class="term"><code class="option">-E</code></span><a class="headerlink" title="Permalink to this term" href="#-E">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="-F"><span class="term"><code class="option">-F</code></span><a class="headerlink" title="Permalink to this term" href="#-F">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="-H"><span class="term"><code class="option">-H</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="-M"><span class="term"><code class="option">-M</code></span><a class="headerlink" title="Permalink to this term" href="#-M">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-P"><span class="term"><code class="option">-P</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="-a"><span class="term"><code class="option">-a</code></span><a class="headerlink" title="Permalink to this term" href="#-a">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="-b"><span class="term"><code class="option">-b</code></span><a class="headerlink" title="Permalink to this term" href="#-b">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-c"><span class="term"><code class="option">-c</code></span><a class="headerlink" title="Permalink to this term" href="#-c">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="-d"><span class="term"><code class="option">-d</code></span><a class="headerlink" title="Permalink to this term" href="#-d">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-e"><span class="term"><code class="option">-e</code></span><a class="headerlink" title="Permalink to this term" href="#-e">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-f"><span class="term"><code class="option">-f</code></span><a class="headerlink" title="Permalink to this term" href="#-f">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-h"><span class="term"><code class="option">-h</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a>, <a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a>, <a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a>, <a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a>, <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="-i"><span class="term"><code class="option">-i</code></span><a class="headerlink" title="Permalink to this term" href="#-i">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-j"><span class="term"><code class="option">-j</code></span><a class="headerlink" title="Permalink to this term" href="#-j">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-k"><span class="term"><code class="option">-k</code></span><a class="headerlink" title="Permalink to this term" href="#-k">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="-l"><span class="term"><code class="option">-l</code></span><a class="headerlink" title="Permalink to this term" href="#-l">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="-m"><span class="term"><code class="option">-m</code></span><a class="headerlink" title="Permalink to this term" href="#-m">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-n"><span class="term"><code class="option">-n</code></span><a class="headerlink" title="Permalink to this term" href="#-n">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-o"><span class="term"><code class="option">-o</code></span><a class="headerlink" title="Permalink to this term" href="#-o">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="-p"><span class="term"><code class="option">-p</code></span><a class="headerlink" title="Permalink to this term" href="#-p">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a>, <a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="-q"><span class="term"><code class="option">-q</code></span><a class="headerlink" title="Permalink to this term" href="#-q">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="-r"><span class="term"><code class="option">-r</code></span><a class="headerlink" title="Permalink to this term" href="#-r">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-s"><span class="term"><code class="option">-s</code></span><a class="headerlink" title="Permalink to this term" href="#-s">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="-t"><span class="term"><code class="option">-t</code></span><a class="headerlink" title="Permalink to this term" href="#-t">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a>, <a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="-u"><span class="term"><code class="option">-u</code></span><a class="headerlink" title="Permalink to this term" href="#-u">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="-v"><span class="term"><code class="option">-v</code></span><a class="headerlink" title="Permalink to this term" href="#-v">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="-w"><span class="term"><code class="option">-w</code></span><a class="headerlink" title="Permalink to this term" href="#-w">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="-x"><span class="term"><code class="option">-x</code></span><a class="headerlink" title="Permalink to this term" href="#-x">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="-y"><span class="term"><code class="option">-y</code></span><a class="headerlink" title="Permalink to this term" href="#-y">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="auto"><span class="term"><code class="option">auto</code></span><a class="headerlink" title="Permalink to this term" href="#auto">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="cat"><span class="term"><code class="option">cat</code></span><a class="headerlink" title="Permalink to this term" href="#cat">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="closed"><span class="term"><code class="option">closed</code></span><a class="headerlink" title="Permalink to this term" href="#closed">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="driver"><span class="term"><code class="option">driver</code></span><a class="headerlink" title="Permalink to this term" href="#driver">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="export"><span class="term"><code class="option">export</code></span><a class="headerlink" title="Permalink to this term" href="#export">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="hibernate"><span class="term"><code class="option">hibernate</code></span><a class="headerlink" title="Permalink to this term" href="#hibernate">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="hybrid-sleep"><span class="term"><code class="option">hybrid-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#hybrid-sleep">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="journal"><span class="term"><code class="option">journal</code></span><a class="headerlink" title="Permalink to this term" href="#journal">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="json"><span class="term"><code class="option">json</code></span><a class="headerlink" title="Permalink to this term" href="#json">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="json-pretty"><span class="term"><code class="option">json-pretty</code></span><a class="headerlink" title="Permalink to this term" href="#json-pretty">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="json-sse"><span class="term"><code class="option">json-sse</code></span><a class="headerlink" title="Permalink to this term" href="#json-sse">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="kernel"><span class="term"><code class="option">kernel</code></span><a class="headerlink" title="Permalink to this term" href="#kernel">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="short"><span class="term"><code class="option">short</code></span><a class="headerlink" title="Permalink to this term" href="#short">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="short-iso"><span class="term"><code class="option">short-iso</code></span><a class="headerlink" title="Permalink to this term" href="#short-iso">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="short-monotonic"><span class="term"><code class="option">short-monotonic</code></span><a class="headerlink" title="Permalink to this term" href="#short-monotonic">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="short-precise"><span class="term"><code class="option">short-precise</code></span><a class="headerlink" title="Permalink to this term" href="#short-precise">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="stdout"><span class="term"><code class="option">stdout</code></span><a class="headerlink" title="Permalink to this term" href="#stdout">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="strict"><span class="term"><code class="option">strict</code></span><a class="headerlink" title="Permalink to this term" href="#strict">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="suspend"><span class="term"><code class="option">suspend</code></span><a class="headerlink" title="Permalink to this term" href="#suspend">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="syslog"><span class="term"><code class="option">syslog</code></span><a class="headerlink" title="Permalink to this term" href="#syslog">¶</a></dt><dd><p><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="verbose"><span class="term"><code class="option">verbose</code></span><a class="headerlink" title="Permalink to this term" href="#verbose">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274679952128"></a><h2 id="Constants">Constants<a class="headerlink" title="Permalink to this headline" href="#Constants">¶</a></h2><p>Various constant used and/or defined by systemd.</p><div class="variablelist"><a name="constants"></a><dl class="variablelist"><dt id="-0"><span class="term"><code class="constant">-0</code></span><a class="headerlink" title="Permalink to this term" href="#-0">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="-1"><span class="term"><code class="constant">-1</code></span><a class="headerlink" title="Permalink to this term" href="#-1">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>, <a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a>, <a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="-ECHILD"><span class="term"><code class="constant">-ECHILD</code></span><a class="headerlink" title="Permalink to this term" href="#-ECHILD">¶</a></dt><dd><p><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a></p></dd><dt id="1"><span class="term"><code class="constant">1</code></span><a class="headerlink" title="Permalink to this term" href="#1">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="2"><span class="term"><code class="constant">2</code></span><a class="headerlink" title="Permalink to this term" href="#2">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="AF_INET"><span class="term"><code class="constant">AF_INET</code></span><a class="headerlink" title="Permalink to this term" href="#AF_INET">¶</a></dt><dd><p><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a></p></dd><dt id="AF_INET6"><span class="term"><code class="constant">AF_INET6</code></span><a class="headerlink" title="Permalink to this term" href="#AF_INET6">¶</a></dt><dd><p><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a></p></dd><dt id="AF_NETLINK"><span class="term"><code class="constant">AF_NETLINK</code></span><a class="headerlink" title="Permalink to this term" href="#AF_NETLINK">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="AF_UNIX"><span class="term"><code class="constant">AF_UNIX</code></span><a class="headerlink" title="Permalink to this term" href="#AF_UNIX">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>, <a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a>, <a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>, <a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="AF_UNSPEC"><span class="term"><code class="constant">AF_UNSPEC</code></span><a class="headerlink" title="Permalink to this term" href="#AF_UNSPEC">¶</a></dt><dd><p><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a></p></dd><dt id="CAP_DAC_OVERRIDE"><span class="term"><code class="constant">CAP_DAC_OVERRIDE</code></span><a class="headerlink" title="Permalink to this term" href="#CAP_DAC_OVERRIDE">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CAP_SYS_ADMIN"><span class="term"><code class="constant">CAP_SYS_ADMIN</code></span><a class="headerlink" title="Permalink to this term" href="#CAP_SYS_ADMIN">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CAP_SYS_PTRACE"><span class="term"><code class="constant">CAP_SYS_PTRACE</code></span><a class="headerlink" title="Permalink to this term" href="#CAP_SYS_PTRACE">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="CLOCK_MONOTONIC"><span class="term"><code class="constant">CLOCK_MONOTONIC</code></span><a class="headerlink" title="Permalink to this term" href="#CLOCK_MONOTONIC">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>, <a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a>, <a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a>, <a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a>, <a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a>, <a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a>, <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="CLOCK_REALTIME"><span class="term"><code class="constant">CLOCK_REALTIME</code></span><a class="headerlink" title="Permalink to this term" href="#CLOCK_REALTIME">¶</a></dt><dd><p><a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a>, <a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a>, <a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a>, <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a></p></dd><dt id="LOG_ALERT"><span class="term"><code class="constant">LOG_ALERT</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_ALERT">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_CRIT"><span class="term"><code class="constant">LOG_CRIT</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_CRIT">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_DEBUG"><span class="term"><code class="constant">LOG_DEBUG</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_DEBUG">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_EMERG"><span class="term"><code class="constant">LOG_EMERG</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_EMERG">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_ERR"><span class="term"><code class="constant">LOG_ERR</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_ERR">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_INFO"><span class="term"><code class="constant">LOG_INFO</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_INFO">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_NOTICE"><span class="term"><code class="constant">LOG_NOTICE</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_NOTICE">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="LOG_WARNING"><span class="term"><code class="constant">LOG_WARNING</code></span><a class="headerlink" title="Permalink to this term" href="#LOG_WARNING">¶</a></dt><dd><p><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="NUL"><span class="term"><code class="constant">NUL</code></span><a class="headerlink" title="Permalink to this term" href="#NUL">¶</a></dt><dd><p><a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="NULL"><span class="term"><code class="constant">NULL</code></span><a class="headerlink" title="Permalink to this term" href="#NULL">¶</a></dt><dd><p><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>, <a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>, <a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a>, <a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a>, <a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>, <a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a>, <a href="sd_seat_get_active.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_active</span>(3)</span></a>, <a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>, <a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a></p></dd><dt id="POLLIN"><span class="term"><code class="constant">POLLIN</code></span><a class="headerlink" title="Permalink to this term" href="#POLLIN">¶</a></dt><dd><p><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a>, <a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a></p></dd><dt id="POLLOUT"><span class="term"><code class="constant">POLLOUT</code></span><a class="headerlink" title="Permalink to this term" href="#POLLOUT">¶</a></dt><dd><p><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a>, <a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_APPEND"><span class="term"><code class="constant">SD_JOURNAL_APPEND</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_APPEND">¶</a></dt><dd><p><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_CURRENT_USER"><span class="term"><code class="constant">SD_JOURNAL_CURRENT_USER</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_CURRENT_USER">¶</a></dt><dd><p><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_INVALIDATE"><span class="term"><code class="constant">SD_JOURNAL_INVALIDATE</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_INVALIDATE">¶</a></dt><dd><p><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_LOCAL_ONLY"><span class="term"><code class="constant">SD_JOURNAL_LOCAL_ONLY</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_LOCAL_ONLY">¶</a></dt><dd><p><a href="sd_journal_get_usage.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_usage</span>(3)</span></a>, <a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_NOP"><span class="term"><code class="constant">SD_JOURNAL_NOP</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_NOP">¶</a></dt><dd><p><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_RUNTIME_ONLY"><span class="term"><code class="constant">SD_JOURNAL_RUNTIME_ONLY</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_RUNTIME_ONLY">¶</a></dt><dd><p><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_SYSTEM"><span class="term"><code class="constant">SD_JOURNAL_SYSTEM</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_SYSTEM">¶</a></dt><dd><p><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a></p></dd><dt id="SD_JOURNAL_SYSTEM_ONLY"><span class="term"><code class="constant">SD_JOURNAL_SYSTEM_ONLY</code></span><a class="headerlink" title="Permalink to this term" href="#SD_JOURNAL_SYSTEM_ONLY">¶</a></dt><dd><p><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a></p></dd><dt id="SD_WARNING"><span class="term"><code class="constant">SD_WARNING</code></span><a class="headerlink" title="Permalink to this term" href="#SD_WARNING">¶</a></dt><dd><p><a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="SIGHUP"><span class="term"><code class="constant">SIGHUP</code></span><a class="headerlink" title="Permalink to this term" href="#SIGHUP">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SIGINT"><span class="term"><code class="constant">SIGINT</code></span><a class="headerlink" title="Permalink to this term" href="#SIGINT">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="SIGKILL"><span class="term"><code class="constant">SIGKILL</code></span><a class="headerlink" title="Permalink to this term" href="#SIGKILL">¶</a></dt><dd><p><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="SIGPIPE"><span class="term"><code class="constant">SIGPIPE</code></span><a class="headerlink" title="Permalink to this term" href="#SIGPIPE">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a></p></dd><dt id="SIGPWR"><span class="term"><code class="constant">SIGPWR</code></span><a class="headerlink" title="Permalink to this term" href="#SIGPWR">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+0"><span class="term"><code class="constant">SIGRTMIN+0</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+0">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+1"><span class="term"><code class="constant">SIGRTMIN+1</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+1">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+13"><span class="term"><code class="constant">SIGRTMIN+13</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+13">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+14"><span class="term"><code class="constant">SIGRTMIN+14</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+14">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+15"><span class="term"><code class="constant">SIGRTMIN+15</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+15">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+16"><span class="term"><code class="constant">SIGRTMIN+16</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+16">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+2"><span class="term"><code class="constant">SIGRTMIN+2</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+2">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+20"><span class="term"><code class="constant">SIGRTMIN+20</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+20">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+21"><span class="term"><code class="constant">SIGRTMIN+21</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+21">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+22"><span class="term"><code class="constant">SIGRTMIN+22</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+22">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+23"><span class="term"><code class="constant">SIGRTMIN+23</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+23">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+24"><span class="term"><code class="constant">SIGRTMIN+24</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+24">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+26"><span class="term"><code class="constant">SIGRTMIN+26</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+26">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+27"><span class="term"><code class="constant">SIGRTMIN+27</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+27">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+28"><span class="term"><code class="constant">SIGRTMIN+28</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+28">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+29"><span class="term"><code class="constant">SIGRTMIN+29</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+29">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+3"><span class="term"><code class="constant">SIGRTMIN+3</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+3">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+4"><span class="term"><code class="constant">SIGRTMIN+4</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+4">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+5"><span class="term"><code class="constant">SIGRTMIN+5</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+5">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGRTMIN+6"><span class="term"><code class="constant">SIGRTMIN+6</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+6">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGSTOP"><span class="term"><code class="constant">SIGSTOP</code></span><a class="headerlink" title="Permalink to this term" href="#SIGSTOP">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="SIGSYS"><span class="term"><code class="constant">SIGSYS</code></span><a class="headerlink" title="Permalink to this term" href="#SIGSYS">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="SIGTERM"><span class="term"><code class="constant">SIGTERM</code></span><a class="headerlink" title="Permalink to this term" href="#SIGTERM">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>, <a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="SIGUSR1"><span class="term"><code class="constant">SIGUSR1</code></span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGUSR2"><span class="term"><code class="constant">SIGUSR2</code></span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIGWINCH"><span class="term"><code class="constant">SIGWINCH</code></span><a class="headerlink" title="Permalink to this term" href="#SIGWINCH">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="SIG_DFL"><span class="term"><code class="constant">SIG_DFL</code></span><a class="headerlink" title="Permalink to this term" href="#SIG_DFL">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a></p></dd><dt id="SOCK_DGRAM"><span class="term"><code class="constant">SOCK_DGRAM</code></span><a class="headerlink" title="Permalink to this term" href="#SOCK_DGRAM">¶</a></dt><dd><p><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SOCK_SEQPACKET"><span class="term"><code class="constant">SOCK_SEQPACKET</code></span><a class="headerlink" title="Permalink to this term" href="#SOCK_SEQPACKET">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="SOCK_STREAM"><span class="term"><code class="constant">SOCK_STREAM</code></span><a class="headerlink" title="Permalink to this term" href="#SOCK_STREAM">¶</a></dt><dd><p><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="application/event-stream"><span class="term"><code class="constant">application/event-stream</code></span><a class="headerlink" title="Permalink to this term" href="#application/event-stream">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="application/json"><span class="term"><code class="constant">application/json</code></span><a class="headerlink" title="Permalink to this term" href="#application/json">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="application/vnd.fdo.journal"><span class="term"><code class="constant">application/vnd.fdo.journal</code></span><a class="headerlink" title="Permalink to this term" href="#application/vnd.fdo.journal">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="libsystemd-daemon"><span class="term"><code class="constant">libsystemd-daemon</code></span><a class="headerlink" title="Permalink to this term" href="#libsystemd-daemon">¶</a></dt><dd><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>, <a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a>, <a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a>, <a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>, <a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a></p></dd><dt id="libsystemd-journal"><span class="term"><code class="constant">libsystemd-journal</code></span><a class="headerlink" title="Permalink to this term" href="#libsystemd-journal">¶</a></dt><dd><p><a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>, <a href="sd_journal_add_match.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_match</span>(3)</span></a>, <a href="sd_journal_get_catalog.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog</span>(3)</span></a>, <a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a>, <a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a>, <a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a>, <a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a>, <a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a>, <a href="sd_journal_get_usage.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_usage</span>(3)</span></a>, <a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a>, <a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a>, <a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a>, <a href="sd_journal_query_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_query_unique</span>(3)</span></a>, <a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a>, <a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a></p></dd><dt id="libsystemd-login"><span class="term"><code class="constant">libsystemd-login</code></span><a class="headerlink" title="Permalink to this term" href="#libsystemd-login">¶</a></dt><dd><p><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a>, <a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a>, <a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a>, <a href="sd_seat_get_active.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_active</span>(3)</span></a>, <a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a>, <a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a></p></dd><dt id="m"><span class="term"><code class="constant">m</code></span><a class="headerlink" title="Permalink to this term" href="#m">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="r"><span class="term"><code class="constant">r</code></span><a class="headerlink" title="Permalink to this term" href="#r">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="text/plain"><span class="term"><code class="constant">text/plain</code></span><a class="headerlink" title="Permalink to this term" href="#text/plain">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="w"><span class="term"><code class="constant">w</code></span><a class="headerlink" title="Permalink to this term" href="#w">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274681463024"></a><h2 id="Miscellaneous options and directives">Miscellaneous options and directives<a class="headerlink" title="Permalink to this headline" href="#Miscellaneous%20options%20and%20directives">¶</a></h2><p>Other configuration elements which don't fit in
+ any of the above groups.</p><div class="variablelist"><a name="miscellaneous"></a><dl class="variablelist"><dt id="ANSI_COLOR="><span class="term"><code class="varname">ANSI_COLOR=</code></span><a class="headerlink" title="Permalink to this term" href="#ANSI_COLOR=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="BUG_REPORT_URL="><span class="term"><code class="varname">BUG_REPORT_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#BUG_REPORT_URL=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="BUILD_ID="><span class="term"><code class="varname">BUILD_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#BUILD_ID=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="CHASSIS="><span class="term"><code class="varname">CHASSIS=</code></span><a class="headerlink" title="Permalink to this term" href="#CHASSIS=">¶</a></dt><dd><p><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="CPE_NAME="><span class="term"><code class="varname">CPE_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#CPE_NAME=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="Compress="><span class="term"><code class="varname">Compress=</code></span><a class="headerlink" title="Permalink to this term" href="#Compress=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="D"><span class="term"><code class="varname">D</code></span><a class="headerlink" title="Permalink to this term" href="#D">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="F"><span class="term"><code class="varname">F</code></span><a class="headerlink" title="Permalink to this term" href="#F">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="FONT="><span class="term"><code class="varname">FONT=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="FONT_MAP="><span class="term"><code class="varname">FONT_MAP=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT_MAP=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="FONT_UNIMAP="><span class="term"><code class="varname">FONT_UNIMAP=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT_UNIMAP=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="ForwardToConsole="><span class="term"><code class="varname">ForwardToConsole=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToConsole=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="ForwardToKMsg="><span class="term"><code class="varname">ForwardToKMsg=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToKMsg=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="ForwardToSyslog="><span class="term"><code class="varname">ForwardToSyslog=</code></span><a class="headerlink" title="Permalink to this term" href="#ForwardToSyslog=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="HOME_URL="><span class="term"><code class="varname">HOME_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#HOME_URL=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="HandleHibernateKey="><span class="term"><code class="varname">HandleHibernateKey=</code></span><a class="headerlink" title="Permalink to this term" href="#HandleHibernateKey=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HandleLidSwitch="><span class="term"><code class="varname">HandleLidSwitch=</code></span><a class="headerlink" title="Permalink to this term" href="#HandleLidSwitch=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HandlePowerKey="><span class="term"><code class="varname">HandlePowerKey=</code></span><a class="headerlink" title="Permalink to this term" href="#HandlePowerKey=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HandleSuspendKey="><span class="term"><code class="varname">HandleSuspendKey=</code></span><a class="headerlink" title="Permalink to this term" href="#HandleSuspendKey=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="HibernateKeyIgnoreInhibited="><span class="term"><code class="varname">HibernateKeyIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#HibernateKeyIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="ICON_NAME="><span class="term"><code class="varname">ICON_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#ICON_NAME=">¶</a></dt><dd><p><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="ID="><span class="term"><code class="varname">ID=</code></span><a class="headerlink" title="Permalink to this term" href="#ID=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="ID_LIKE="><span class="term"><code class="varname">ID_LIKE=</code></span><a class="headerlink" title="Permalink to this term" href="#ID_LIKE=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="IdleAction="><span class="term"><code class="varname">IdleAction=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleAction=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="IdleActionSec="><span class="term"><code class="varname">IdleActionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#IdleActionSec=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="InhibitDelayMaxSec="><span class="term"><code class="varname">InhibitDelayMaxSec=</code></span><a class="headerlink" title="Permalink to this term" href="#InhibitDelayMaxSec=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="KEYMAP="><span class="term"><code class="varname">KEYMAP=</code></span><a class="headerlink" title="Permalink to this term" href="#KEYMAP=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="KEYMAP_TOGGLE="><span class="term"><code class="varname">KEYMAP_TOGGLE=</code></span><a class="headerlink" title="Permalink to this term" href="#KEYMAP_TOGGLE=">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="KillExcludeUsers="><span class="term"><code class="varname">KillExcludeUsers=</code></span><a class="headerlink" title="Permalink to this term" href="#KillExcludeUsers=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="KillOnlyUsers="><span class="term"><code class="varname">KillOnlyUsers=</code></span><a class="headerlink" title="Permalink to this term" href="#KillOnlyUsers=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="KillUserProcesses="><span class="term"><code class="varname">KillUserProcesses=</code></span><a class="headerlink" title="Permalink to this term" href="#KillUserProcesses=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="L"><span class="term"><code class="varname">L</code></span><a class="headerlink" title="Permalink to this term" href="#L">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="LidSwitchIgnoreInhibited="><span class="term"><code class="varname">LidSwitchIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#LidSwitchIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="MaxFileSec="><span class="term"><code class="varname">MaxFileSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxFileSec=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelConsole="><span class="term"><code class="varname">MaxLevelConsole=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelConsole=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelKMsg="><span class="term"><code class="varname">MaxLevelKMsg=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelKMsg=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelStore="><span class="term"><code class="varname">MaxLevelStore=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelStore=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxLevelSyslog="><span class="term"><code class="varname">MaxLevelSyslog=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxLevelSyslog=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="MaxRetentionSec="><span class="term"><code class="varname">MaxRetentionSec=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxRetentionSec=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="NAME="><span class="term"><code class="varname">NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#NAME=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="NAutoVTs="><span class="term"><code class="varname">NAutoVTs=</code></span><a class="headerlink" title="Permalink to this term" href="#NAutoVTs=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="PRETTY_HOSTNAME="><span class="term"><code class="varname">PRETTY_HOSTNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_HOSTNAME=">¶</a></dt><dd><p><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="PRETTY_NAME="><span class="term"><code class="varname">PRETTY_NAME=</code></span><a class="headerlink" title="Permalink to this term" href="#PRETTY_NAME=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="PowerKeyIgnoreInhibited="><span class="term"><code class="varname">PowerKeyIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#PowerKeyIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="R"><span class="term"><code class="varname">R</code></span><a class="headerlink" title="Permalink to this term" href="#R">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="RateLimitBurst="><span class="term"><code class="varname">RateLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#RateLimitBurst=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="RateLimitInterval="><span class="term"><code class="varname">RateLimitInterval=</code></span><a class="headerlink" title="Permalink to this term" href="#RateLimitInterval=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="ReserveVT="><span class="term"><code class="varname">ReserveVT=</code></span><a class="headerlink" title="Permalink to this term" href="#ReserveVT=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="RuntimeKeepFree="><span class="term"><code class="varname">RuntimeKeepFree=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeKeepFree=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="RuntimeMaxFileSize="><span class="term"><code class="varname">RuntimeMaxFileSize=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeMaxFileSize=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="RuntimeMaxUse="><span class="term"><code class="varname">RuntimeMaxUse=</code></span><a class="headerlink" title="Permalink to this term" href="#RuntimeMaxUse=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SUPPORT_URL="><span class="term"><code class="varname">SUPPORT_URL=</code></span><a class="headerlink" title="Permalink to this term" href="#SUPPORT_URL=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="Seal="><span class="term"><code class="varname">Seal=</code></span><a class="headerlink" title="Permalink to this term" href="#Seal=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SplitMode="><span class="term"><code class="varname">SplitMode=</code></span><a class="headerlink" title="Permalink to this term" href="#SplitMode=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="Storage="><span class="term"><code class="varname">Storage=</code></span><a class="headerlink" title="Permalink to this term" href="#Storage=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SuspendKeyIgnoreInhibited="><span class="term"><code class="varname">SuspendKeyIgnoreInhibited=</code></span><a class="headerlink" title="Permalink to this term" href="#SuspendKeyIgnoreInhibited=">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="SyncIntervalSec="><span class="term"><code class="varname">SyncIntervalSec=</code></span><a class="headerlink" title="Permalink to this term" href="#SyncIntervalSec=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SystemKeepFree="><span class="term"><code class="varname">SystemKeepFree=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemKeepFree=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SystemMaxFileSize="><span class="term"><code class="varname">SystemMaxFileSize=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemMaxFileSize=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="SystemMaxUse="><span class="term"><code class="varname">SystemMaxUse=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemMaxUse=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="TTYPath="><span class="term"><code class="varname">TTYPath=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYPath=">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a></p></dd><dt id="VERSION="><span class="term"><code class="varname">VERSION=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="VERSION_ID="><span class="term"><code class="varname">VERSION_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#VERSION_ID=">¶</a></dt><dd><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a></p></dd><dt id="X"><span class="term"><code class="varname">X</code></span><a class="headerlink" title="Permalink to this term" href="#X">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="Z"><span class="term"><code class="varname">Z</code></span><a class="headerlink" title="Permalink to this term" href="#Z">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="b"><span class="term"><code class="varname">b</code></span><a class="headerlink" title="Permalink to this term" href="#b">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="c"><span class="term"><code class="varname">c</code></span><a class="headerlink" title="Permalink to this term" href="#c">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="d"><span class="term"><code class="varname">d</code></span><a class="headerlink" title="Permalink to this term" href="#d">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="equivalent"><span class="term"><code class="varname">equivalent</code></span><a class="headerlink" title="Permalink to this term" href="#equivalent">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="extended"><span class="term"><code class="varname">extended</code></span><a class="headerlink" title="Permalink to this term" href="#extended">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="f"><span class="term"><code class="varname">f</code></span><a class="headerlink" title="Permalink to this term" href="#f">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="h"><span class="term"><code class="varname">h</code></span><a class="headerlink" title="Permalink to this term" href="#h">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="m"><span class="term"><code class="constant">m</code></span><a class="headerlink" title="Permalink to this term" href="#m">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="masked"><span class="term"><code class="varname">masked</code></span><a class="headerlink" title="Permalink to this term" href="#masked">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="min"><span class="term"><code class="varname">min</code></span><a class="headerlink" title="Permalink to this term" href="#min">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="ms"><span class="term"><code class="varname">ms</code></span><a class="headerlink" title="Permalink to this term" href="#ms">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="overridden"><span class="term"><code class="varname">overridden</code></span><a class="headerlink" title="Permalink to this term" href="#overridden">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="p"><span class="term"><code class="varname">p</code></span><a class="headerlink" title="Permalink to this term" href="#p">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="r"><span class="term"><code class="constant">r</code></span><a class="headerlink" title="Permalink to this term" href="#r">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="redirected"><span class="term"><code class="varname">redirected</code></span><a class="headerlink" title="Permalink to this term" href="#redirected">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="s"><span class="term"><code class="varname">s</code></span><a class="headerlink" title="Permalink to this term" href="#s">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="udev_log"><span class="term"><code class="varname">udev_log</code></span><a class="headerlink" title="Permalink to this term" href="#udev_log">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="unchanged"><span class="term"><code class="varname">unchanged</code></span><a class="headerlink" title="Permalink to this term" href="#unchanged">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="us"><span class="term"><code class="varname">us</code></span><a class="headerlink" title="Permalink to this term" href="#us">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="w"><span class="term"><code class="constant">w</code></span><a class="headerlink" title="Permalink to this term" href="#w">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="x"><span class="term"><code class="varname">x</code></span><a class="headerlink" title="Permalink to this term" href="#x">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="z"><span class="term"><code class="varname">z</code></span><a class="headerlink" title="Permalink to this term" href="#z">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274679587024"></a><h2 id="Files and directories">Files and directories<a class="headerlink" title="Permalink to this headline" href="#Files%20and%20directories">¶</a></h2><p>Paths and file names referred to in the
+ documentation.</p><div class="variablelist"><a name="filenames"></a><dl class="variablelist"><dt id="/"><span class="term"><code class="filename">/</code></span><a class="headerlink" title="Permalink to this term" href="#/">¶</a></dt><dd><p><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="$HOME/.config/systemd/user/"><span class="term"><code class="filename">$HOME/.config/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#%24HOME/.config/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="-.slice"><span class="term"><code class="filename">-.slice</code></span><a class="headerlink" title="Permalink to this term" href="#-.slice">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="/.readahead"><span class="term"><code class="filename">/.readahead</code></span><a class="headerlink" title="Permalink to this term" href="#/.readahead">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="/bin"><span class="term"><code class="filename">/bin</code></span><a class="headerlink" title="Permalink to this term" href="#/bin">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/bin/ls"><span class="term"><code class="filename">/bin/ls</code></span><a class="headerlink" title="Permalink to this term" href="#/bin/ls">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="/bin/sh"><span class="term"><code class="filename">/bin/sh</code></span><a class="headerlink" title="Permalink to this term" href="#/bin/sh">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/boot"><span class="term"><code class="filename">/boot</code></span><a class="headerlink" title="Permalink to this term" href="#/boot">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="systemd-efi-boot-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-efi-boot-generator</span>(8)</span></a></p></dd><dt id="/boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf"><span class="term"><code class="filename">/boot/loader/entries/<em class="replaceable"><code>MACHINE-ID</code></em>-<em class="replaceable"><code>KERNEL-VERSION</code></em>.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/dev"><span class="term"><code class="filename">/dev</code></span><a class="headerlink" title="Permalink to this term" href="#/dev">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>, <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/dev/console"><span class="term"><code class="filename">/dev/console</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/console">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a>, <a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/dev/full"><span class="term"><code class="filename">/dev/full</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/full">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="/dev/hw_random"><span class="term"><code class="filename">/dev/hw_random</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/hw_random">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="/dev/initctl"><span class="term"><code class="filename">/dev/initctl</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/initctl">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="/dev/mapper/"><span class="term"><code class="filename">/dev/mapper/</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/mapper/">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a></p></dd><dt id="/dev/null"><span class="term"><code class="filename">/dev/null</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/null">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/dev/random"><span class="term"><code class="filename">/dev/random</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/random">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="/dev/urandom"><span class="term"><code class="filename">/dev/urandom</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/urandom">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="/dev/watchdog"><span class="term"><code class="filename">/dev/watchdog</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/watchdog">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="/dev/zero"><span class="term"><code class="filename">/dev/zero</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/zero">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a></p></dd><dt id="/etc/"><span class="term"><code class="filename">/etc/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/etc/adjtime"><span class="term"><code class="filename">/etc/adjtime</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/adjtime">¶</a></dt><dd><p><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="/etc/binfmt.d/"><span class="term"><code class="filename">/etc/binfmt.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/binfmt.d/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/etc/binfmt.d/*.conf"><span class="term"><code class="filename">/etc/binfmt.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/binfmt.d/*.conf">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/etc/crypttab"><span class="term"><code class="filename">/etc/crypttab</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/crypttab">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>, <a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a></p></dd><dt id="/etc/fstab"><span class="term"><code class="filename">/etc/fstab</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/fstab">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a>, <a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a>, <a href="systemd-gpt-auto-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a></p></dd><dt id="/etc/hostname"><span class="term"><code class="filename">/etc/hostname</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/hostname">¶</a></dt><dd><p><a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a>, <a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="/etc/hosts"><span class="term"><code class="filename">/etc/hosts</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/hosts">¶</a></dt><dd><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a></p></dd><dt id="/etc/kernel/cmdline"><span class="term"><code class="filename">/etc/kernel/cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/kernel/cmdline">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/etc/kernel/install.d/"><span class="term"><code class="filename">/etc/kernel/install.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/kernel/install.d/">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/etc/kernel/install.d/*.install"><span class="term"><code class="filename">/etc/kernel/install.d/*.install</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/kernel/install.d/*.install">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/etc/locale.conf"><span class="term"><code class="filename">/etc/locale.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/locale.conf">¶</a></dt><dd><p><a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/etc/localtime"><span class="term"><code class="filename">/etc/localtime</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/localtime">¶</a></dt><dd><p><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a>, <a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="/etc/machine-id"><span class="term"><code class="filename">/etc/machine-id</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/machine-id">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>, <a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/etc/machine-info"><span class="term"><code class="filename">/etc/machine-info</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/machine-info">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a>, <a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a></p></dd><dt id="/etc/modules-load.d/program.conf"><span class="term"><code class="filename">/etc/modules-load.d/<em class="replaceable"><code>program</code></em>.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/modules-load.d/program.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/etc/modules-load.d/*.conf"><span class="term"><code class="filename">/etc/modules-load.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/modules-load.d/*.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/etc/nsswitch.conf"><span class="term"><code class="filename">/etc/nsswitch.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/nsswitch.conf">¶</a></dt><dd><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a></p></dd><dt id="/etc/os-release"><span class="term"><code class="filename">/etc/os-release</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/os-release">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/etc/sysctl.d/"><span class="term"><code class="filename">/etc/sysctl.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/sysctl.d/">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/etc/sysctl.d/*.conf"><span class="term"><code class="filename">/etc/sysctl.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/sysctl.d/*.conf">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/etc/systemd/bootchart.conf"><span class="term"><code class="filename">/etc/systemd/bootchart.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/bootchart.conf">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="/etc/systemd/journald.conf"><span class="term"><code class="filename">/etc/systemd/journald.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/journald.conf">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/etc/systemd/logind.conf"><span class="term"><code class="filename">/etc/systemd/logind.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/logind.conf">¶</a></dt><dd><p><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a></p></dd><dt id="/etc/systemd/sleep.conf"><span class="term"><code class="filename">/etc/systemd/sleep.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/sleep.conf">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/etc/systemd/system/"><span class="term"><code class="filename">/etc/systemd/system/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/etc/systemd/system-preset/"><span class="term"><code class="filename">/etc/systemd/system-preset/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system-preset/">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/system-preset/*.preset"><span class="term"><code class="filename">/etc/systemd/system-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/system-preset/00-lennart.preset"><span class="term"><code class="filename">/etc/systemd/system-preset/00-lennart.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system-preset/00-lennart.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/system.conf"><span class="term"><code class="filename">/etc/systemd/system.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/system.conf">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="/etc/systemd/user/"><span class="term"><code class="filename">/etc/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/etc/systemd/user-preset/*.preset"><span class="term"><code class="filename">/etc/systemd/user-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/user-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/etc/systemd/user.conf"><span class="term"><code class="filename">/etc/systemd/user.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/systemd/user.conf">¶</a></dt><dd><p><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a></p></dd><dt id="/etc/tmpfiles.d/"><span class="term"><code class="filename">/etc/tmpfiles.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/tmpfiles.d/">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/etc/tmpfiles.d/*.conf"><span class="term"><code class="filename">/etc/tmpfiles.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/tmpfiles.d/*.conf">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/etc/udev/hwdb.bin"><span class="term"><code class="filename">/etc/udev/hwdb.bin</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/hwdb.bin">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>, <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="/etc/udev/hwdb.d"><span class="term"><code class="filename">/etc/udev/hwdb.d</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/hwdb.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/etc/udev/rules.d"><span class="term"><code class="filename">/etc/udev/rules.d</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/rules.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/etc/udev/udev.conf"><span class="term"><code class="filename">/etc/udev/udev.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/udev/udev.conf">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="/etc/vconsole.conf"><span class="term"><code class="filename">/etc/vconsole.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/etc/vconsole.conf">¶</a></dt><dd><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a></p></dd><dt id="/home"><span class="term"><code class="filename">/home</code></span><a class="headerlink" title="Permalink to this term" href="#/home">¶</a></dt><dd><p><a href="systemd-gpt-auto-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a></p></dd><dt id="/home/lennart"><span class="term"><code class="filename">/home/lennart</code></span><a class="headerlink" title="Permalink to this term" href="#/home/lennart">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a></p></dd><dt id="/lib"><span class="term"><code class="filename">/lib</code></span><a class="headerlink" title="Permalink to this term" href="#/lib">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/proc"><span class="term"><code class="filename">/proc</code></span><a class="headerlink" title="Permalink to this term" href="#/proc">¶</a></dt><dd><p><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/proc/cmdline"><span class="term"><code class="filename">/proc/cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/cmdline">¶</a></dt><dd><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>, <a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/proc/self/fd"><span class="term"><code class="filename">/proc/self/fd</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/self/fd">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a></p></dd><dt id="/proc/self/mountinfo"><span class="term"><code class="filename">/proc/self/mountinfo</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/self/mountinfo">¶</a></dt><dd><p><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="/proc/self/sessionid"><span class="term"><code class="filename">/proc/self/sessionid</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/self/sessionid">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="/proc/sys"><span class="term"><code class="filename">/proc/sys</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/proc/sys/kernel/random/boot_id"><span class="term"><code class="filename">/proc/sys/kernel/random/boot_id</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys/kernel/random/boot_id">¶</a></dt><dd><p><a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a></p></dd><dt id="/proc/sys/net/ipv4/tcp_keepalive_time"><span class="term"><code class="filename">/proc/sys/net/ipv4/tcp_keepalive_time</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys/net/ipv4/tcp_keepalive_time">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/proc/sys/net/ipv6/bindv6only"><span class="term"><code class="filename">/proc/sys/net/ipv6/bindv6only</code></span><a class="headerlink" title="Permalink to this term" href="#/proc/sys/net/ipv6/bindv6only">¶</a></dt><dd><p><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/run/"><span class="term"><code class="filename">/run/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a>, <a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/run/binfmt.d/*.conf"><span class="term"><code class="filename">/run/binfmt.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/binfmt.d/*.conf">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/run/log"><span class="term"><code class="filename">/run/log</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a>, <a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="/run/log/journal"><span class="term"><code class="filename">/run/log/journal</code></span><a class="headerlink" title="Permalink to this term" href="#/run/log/journal">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/run/modules-load.d/*.conf"><span class="term"><code class="filename">/run/modules-load.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/modules-load.d/*.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/run/nologin"><span class="term"><code class="filename">/run/nologin</code></span><a class="headerlink" title="Permalink to this term" href="#/run/nologin">¶</a></dt><dd><p><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>, <a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a></p></dd><dt id="/run/sysctl.d/*.conf"><span class="term"><code class="filename">/run/sysctl.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/sysctl.d/*.conf">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/run/systemd/journal/syslog"><span class="term"><code class="filename">/run/systemd/journal/syslog</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/journal/syslog">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/run/systemd/notify"><span class="term"><code class="filename">/run/systemd/notify</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/notify">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/run/systemd/private"><span class="term"><code class="filename">/run/systemd/private</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/private">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/run/systemd/readahead/"><span class="term"><code class="filename">/run/systemd/readahead/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/readahead/">¶</a></dt><dd><p><a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a></p></dd><dt id="/run/systemd/shutdownd"><span class="term"><code class="filename">/run/systemd/shutdownd</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/shutdownd">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/run/systemd/system/"><span class="term"><code class="filename">/run/systemd/system/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/system/">¶</a></dt><dd><p><a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/system-preset/*.preset"><span class="term"><code class="filename">/run/systemd/system-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/system-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/run/systemd/user/"><span class="term"><code class="filename">/run/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/run/systemd/user-preset/*.preset"><span class="term"><code class="filename">/run/systemd/user-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/user-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/run/tmpfiles.d/*.conf"><span class="term"><code class="filename">/run/tmpfiles.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/run/tmpfiles.d/*.conf">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/run/udev/hwdb.d"><span class="term"><code class="filename">/run/udev/hwdb.d</code></span><a class="headerlink" title="Permalink to this term" href="#/run/udev/hwdb.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/run/udev/rules.d"><span class="term"><code class="filename">/run/udev/rules.d</code></span><a class="headerlink" title="Permalink to this term" href="#/run/udev/rules.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/run/udev/static_node-tags/tag"><span class="term"><code class="filename">/run/udev/static_node-tags/<em class="replaceable"><code>tag</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#/run/udev/static_node-tags/tag">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/run/user/$USER"><span class="term"><code class="filename">/run/user/$USER</code></span><a class="headerlink" title="Permalink to this term" href="#/run/user/%24USER">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="/sbin"><span class="term"><code class="filename">/sbin</code></span><a class="headerlink" title="Permalink to this term" href="#/sbin">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/sbin/init"><span class="term"><code class="filename">/sbin/init</code></span><a class="headerlink" title="Permalink to this term" href="#/sbin/init">¶</a></dt><dd><p><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a></p></dd><dt id="/sys"><span class="term"><code class="filename">/sys</code></span><a class="headerlink" title="Permalink to this term" href="#/sys">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a>, <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>, <a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a></p></dd><dt id="/sys/fs/cgroup"><span class="term"><code class="filename">/sys/fs/cgroup</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/fs/cgroup">¶</a></dt><dd><p><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a>, <a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="/sys/fs/cgroup/systemd/"><span class="term"><code class="filename">/sys/fs/cgroup/systemd/</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/fs/cgroup/systemd/">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/sys/fs/selinux"><span class="term"><code class="filename">/sys/fs/selinux</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/fs/selinux">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/sys/power/disk"><span class="term"><code class="filename">/sys/power/disk</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/power/disk">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a></p></dd><dt id="/sys/power/state"><span class="term"><code class="filename">/sys/power/state</code></span><a class="headerlink" title="Permalink to this term" href="#/sys/power/state">¶</a></dt><dd><p><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a>, <a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/sysroot"><span class="term"><code class="filename">/sysroot</code></span><a class="headerlink" title="Permalink to this term" href="#/sysroot">¶</a></dt><dd><p><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a></p></dd><dt id="/sysroot/etc/fstab"><span class="term"><code class="filename">/sysroot/etc/fstab</code></span><a class="headerlink" title="Permalink to this term" href="#/sysroot/etc/fstab">¶</a></dt><dd><p><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a></p></dd><dt id="/system"><span class="term"><code class="filename">/system</code></span><a class="headerlink" title="Permalink to this term" href="#/system">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/system-update"><span class="term"><code class="filename">/system-update</code></span><a class="headerlink" title="Permalink to this term" href="#/system-update">¶</a></dt><dd><p><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a>, <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="/tmp"><span class="term"><code class="filename">/tmp</code></span><a class="headerlink" title="Permalink to this term" href="#/tmp">¶</a></dt><dd><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a>, <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/usr"><span class="term"><code class="filename">/usr</code></span><a class="headerlink" title="Permalink to this term" href="#/usr">¶</a></dt><dd><p><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a></p></dd><dt id="/usr/bin"><span class="term"><code class="filename">/usr/bin</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/bin">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/usr/lib/"><span class="term"><code class="filename">/usr/lib/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a>, <a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a>, <a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a>, <a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>, <a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a>, <a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/usr/lib/binfmt.d/*.conf"><span class="term"><code class="filename">/usr/lib/binfmt.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/binfmt.d/*.conf">¶</a></dt><dd><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a></p></dd><dt id="/usr/lib/kernel/install.d/"><span class="term"><code class="filename">/usr/lib/kernel/install.d/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/kernel/install.d/">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/usr/lib/kernel/install.d/*.install"><span class="term"><code class="filename">/usr/lib/kernel/install.d/*.install</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/kernel/install.d/*.install">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="/usr/lib/modules-load.d/*.conf"><span class="term"><code class="filename">/usr/lib/modules-load.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/modules-load.d/*.conf">¶</a></dt><dd><p><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a></p></dd><dt id="/usr/lib/sysctl.d/*.conf"><span class="term"><code class="filename">/usr/lib/sysctl.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/sysctl.d/*.conf">¶</a></dt><dd><p><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system"><span class="term"><code class="filename">/usr/lib/systemd/system</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-cryptsetup-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-cryptsetup-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-cryptsetup-generator">¶</a></dt><dd><p><a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-efi-boot-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-efi-boot-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-efi-boot-generator">¶</a></dt><dd><p><a href="systemd-efi-boot-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-efi-boot-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-fstab-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-fstab-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-fstab-generator">¶</a></dt><dd><p><a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-getty-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-getty-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-getty-generator">¶</a></dt><dd><p><a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-gpt-auto-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-gpt-auto-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-gpt-auto-generator">¶</a></dt><dd><p><a href="systemd-gpt-auto-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-generators/systemd-system-update-generator"><span class="term"><code class="filename">/usr/lib/systemd/system-generators/systemd-system-update-generator</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-generators/systemd-system-update-generator">¶</a></dt><dd><p><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-preset/*.preset"><span class="term"><code class="filename">/usr/lib/systemd/system-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-preset/50-gnome.preset"><span class="term"><code class="filename">/usr/lib/systemd/system-preset/50-gnome.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-preset/50-gnome.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-preset/99-default.preset"><span class="term"><code class="filename">/usr/lib/systemd/system-preset/99-default.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-preset/99-default.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/system-shutdown/"><span class="term"><code class="filename">/usr/lib/systemd/system-shutdown/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-shutdown/">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/system-sleep/"><span class="term"><code class="filename">/usr/lib/systemd/system-sleep/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/system-sleep/">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-activate"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-activate</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-activate">¶</a></dt><dd><p><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-backlight"><span class="term"><code class="filename">/usr/lib/systemd/systemd-backlight</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-backlight">¶</a></dt><dd><p><a href="systemd-backlight@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight@.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-binfmt"><span class="term"><code class="filename">/usr/lib/systemd/systemd-binfmt</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-binfmt">¶</a></dt><dd><p><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-bootchart"><span class="term"><code class="filename">/usr/lib/systemd/systemd-bootchart</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-bootchart">¶</a></dt><dd><p><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-cryptsetup"><span class="term"><code class="filename">/usr/lib/systemd/systemd-cryptsetup</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-cryptsetup">¶</a></dt><dd><p><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-fsck"><span class="term"><code class="filename">/usr/lib/systemd/systemd-fsck</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-fsck">¶</a></dt><dd><p><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-hostnamed"><span class="term"><code class="filename">/usr/lib/systemd/systemd-hostnamed</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-hostnamed">¶</a></dt><dd><p><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-initctl"><span class="term"><code class="filename">/usr/lib/systemd/systemd-initctl</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-initctl">¶</a></dt><dd><p><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-journal-gatewayd"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-journal-gatewayd</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-journal-gatewayd">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-journald"><span class="term"><code class="filename">/usr/lib/systemd/systemd-journald</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-journald">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-localed"><span class="term"><code class="filename">/usr/lib/systemd/systemd-localed</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-localed">¶</a></dt><dd><p><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-logind"><span class="term"><code class="filename">/usr/lib/systemd/systemd-logind</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-logind">¶</a></dt><dd><p><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-machined"><span class="term"><code class="filename">/usr/lib/systemd/systemd-machined</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-machined">¶</a></dt><dd><p><a href="systemd-machined.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-modules-load"><span class="term"><code class="filename">/usr/lib/systemd/systemd-modules-load</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-modules-load">¶</a></dt><dd><p><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-quotacheck"><span class="term"><code class="filename">/usr/lib/systemd/systemd-quotacheck</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-quotacheck">¶</a></dt><dd><p><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-random-seed"><span class="term"><code class="filename">/usr/lib/systemd/systemd-random-seed</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-random-seed">¶</a></dt><dd><p><a href="systemd-random-seed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-readahead/systemd-readahead"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-readahead/systemd-readahead</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-readahead/systemd-readahead">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-remount-fs"><span class="term"><code class="filename">/usr/lib/systemd/systemd-remount-fs</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-remount-fs">¶</a></dt><dd><p><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-shutdown"><span class="term"><code class="filename">/usr/lib/systemd/systemd-shutdown</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-shutdown">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-shutdownd"><span class="term"><code class="filename">/usr/lib/systemd/systemd-shutdownd</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-shutdownd">¶</a></dt><dd><p><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-sleep"><span class="term"><code class="filename">/usr/lib/systemd/systemd-sleep</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-sleep">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-sysctl"><span class="term"><code class="filename">/usr/lib/systemd/systemd-sysctl</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-sysctl">¶</a></dt><dd><p><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-timedated"><span class="term"><code class="filename">/usr/lib/systemd/systemd-timedated</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-timedated">¶</a></dt><dd><p><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-udevd"><span class="term"><span class="command"><strong>/usr/lib/systemd/systemd-udevd</strong></span></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-udevd">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-update-utmp"><span class="term"><code class="filename">/usr/lib/systemd/systemd-update-utmp</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-update-utmp">¶</a></dt><dd><p><a href="systemd-update-utmp.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-user-sessions"><span class="term"><code class="filename">/usr/lib/systemd/systemd-user-sessions</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-user-sessions">¶</a></dt><dd><p><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/systemd-vconsole-setup"><span class="term"><code class="filename">/usr/lib/systemd/systemd-vconsole-setup</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/systemd-vconsole-setup">¶</a></dt><dd><p><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="/usr/lib/systemd/user/"><span class="term"><code class="filename">/usr/lib/systemd/user/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/user/">¶</a></dt><dd><p><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="/usr/lib/systemd/user-preset/*.preset"><span class="term"><code class="filename">/usr/lib/systemd/user-preset/*.preset</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/systemd/user-preset/*.preset">¶</a></dt><dd><p><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a></p></dd><dt id="/usr/lib/tmpfiles.d/*.conf"><span class="term"><code class="filename">/usr/lib/tmpfiles.d/*.conf</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/tmpfiles.d/*.conf">¶</a></dt><dd><p><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a></p></dd><dt id="/usr/lib/udev/hwdb.d"><span class="term"><code class="filename">/usr/lib/udev/hwdb.d</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/udev/hwdb.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/usr/lib/udev/rules.d"><span class="term"><code class="filename">/usr/lib/udev/rules.d</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/lib/udev/rules.d">¶</a></dt><dd><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a></p></dd><dt id="/usr/local/bin"><span class="term"><code class="filename">/usr/local/bin</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/local/bin">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/usr/local/lib/systemd/system"><span class="term"><code class="filename">/usr/local/lib/systemd/system</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/local/lib/systemd/system">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="/usr/local/sbin"><span class="term"><code class="filename">/usr/local/sbin</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/local/sbin">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/usr/sbin"><span class="term"><code class="filename">/usr/sbin</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/sbin">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="/usr/share/zoneinfo/"><span class="term"><code class="filename">/usr/share/zoneinfo/</code></span><a class="headerlink" title="Permalink to this term" href="#/usr/share/zoneinfo/">¶</a></dt><dd><p><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a></p></dd><dt id="/var"><span class="term"><code class="filename">/var</code></span><a class="headerlink" title="Permalink to this term" href="#/var">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="/var/lib/backlight/"><span class="term"><code class="filename">/var/lib/backlight/</code></span><a class="headerlink" title="Permalink to this term" href="#/var/lib/backlight/">¶</a></dt><dd><p><a href="systemd-backlight@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight@.service</span>(8)</span></a></p></dd><dt id="/var/lib/dbus/machine-id"><span class="term"><code class="filename">/var/lib/dbus/machine-id</code></span><a class="headerlink" title="Permalink to this term" href="#/var/lib/dbus/machine-id">¶</a></dt><dd><p><a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a></p></dd><dt id="/var/lib/random-seed"><span class="term"><code class="filename">/var/lib/random-seed</code></span><a class="headerlink" title="Permalink to this term" href="#/var/lib/random-seed">¶</a></dt><dd><p><a href="systemd-random-seed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed.service</span>(8)</span></a></p></dd><dt id="/var/log/journal"><span class="term"><code class="filename">/var/log/journal</code></span><a class="headerlink" title="Permalink to this term" href="#/var/log/journal">¶</a></dt><dd><p><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>, <a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a>, <a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="/var/run/foobar.pid"><span class="term"><code class="filename">/var/run/foobar.pid</code></span><a class="headerlink" title="Permalink to this term" href="#/var/run/foobar.pid">¶</a></dt><dd><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a></p></dd><dt id="/var/run/utmp"><span class="term"><code class="filename">/var/run/utmp</code></span><a class="headerlink" title="Permalink to this term" href="#/var/run/utmp">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="/var/tmp"><span class="term"><code class="filename">/var/tmp</code></span><a class="headerlink" title="Permalink to this term" href="#/var/tmp">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a></p></dd><dt id="automount.automount"><span class="term"><code class="filename"><em class="replaceable"><code>automount</code></em>.automount</code></span><a class="headerlink" title="Permalink to this term" href="#automount.automount">¶</a></dt><dd><p><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="basic.target"><span class="term"><code class="filename">basic.target</code></span><a class="headerlink" title="Permalink to this term" href="#basic.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="bluetooth.target"><span class="term"><code class="filename">bluetooth.target</code></span><a class="headerlink" title="Permalink to this term" href="#bluetooth.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="cryptsetup.target"><span class="term"><code class="filename">cryptsetup.target</code></span><a class="headerlink" title="Permalink to this term" href="#cryptsetup.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="ctrl-alt-del.target"><span class="term"><code class="filename">ctrl-alt-del.target</code></span><a class="headerlink" title="Permalink to this term" href="#ctrl-alt-del.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="dbus.service"><span class="term"><code class="filename">dbus.service</code></span><a class="headerlink" title="Permalink to this term" href="#dbus.service">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="dbus.socket"><span class="term"><code class="filename">dbus.socket</code></span><a class="headerlink" title="Permalink to this term" href="#dbus.socket">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="default.target"><span class="term"><code class="filename">default.target</code></span><a class="headerlink" title="Permalink to this term" href="#default.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="device.device"><span class="term"><code class="filename"><em class="replaceable"><code>device</code></em>.device</code></span><a class="headerlink" title="Permalink to this term" href="#device.device">¶</a></dt><dd><p><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="display-manager.service"><span class="term"><code class="filename">display-manager.service</code></span><a class="headerlink" title="Permalink to this term" href="#display-manager.service">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="emergency.target"><span class="term"><code class="filename">emergency.target</code></span><a class="headerlink" title="Permalink to this term" href="#emergency.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="exit.target"><span class="term"><code class="filename">exit.target</code></span><a class="headerlink" title="Permalink to this term" href="#exit.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="final.target"><span class="term"><code class="filename">final.target</code></span><a class="headerlink" title="Permalink to this term" href="#final.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="getty.target"><span class="term"><code class="filename">getty.target</code></span><a class="headerlink" title="Permalink to this term" href="#getty.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="graphical.target"><span class="term"><code class="filename">graphical.target</code></span><a class="headerlink" title="Permalink to this term" href="#graphical.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="halt"><span class="term"><span class="command"><strong>halt</strong></span></span><a class="headerlink" title="Permalink to this term" href="#halt">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="halt.target"><span class="term"><code class="filename">halt.target</code></span><a class="headerlink" title="Permalink to this term" href="#halt.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="hibernate.target"><span class="term"><code class="filename">hibernate.target</code></span><a class="headerlink" title="Permalink to this term" href="#hibernate.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="hostnamectl"><span class="term"><span class="command"><strong>hostnamectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#hostnamectl">¶</a></dt><dd><p><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a></p></dd><dt id="hybrid-sleep.target"><span class="term"><code class="filename">hybrid-sleep.target</code></span><a class="headerlink" title="Permalink to this term" href="#hybrid-sleep.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="init"><span class="term"><span class="command"><strong>init</strong></span></span><a class="headerlink" title="Permalink to this term" href="#init">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="initrd-fs.target"><span class="term"><code class="filename">initrd-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#initrd-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="initrd-root-fs.target"><span class="term"><code class="filename">initrd-root-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#initrd-root-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="journalctl"><span class="term"><span class="command"><strong>journalctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#journalctl">¶</a></dt><dd><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a></p></dd><dt id="kbrequest.target"><span class="term"><code class="filename">kbrequest.target</code></span><a class="headerlink" title="Permalink to this term" href="#kbrequest.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="kernel-install"><span class="term"><span class="command"><strong>kernel-install</strong></span></span><a class="headerlink" title="Permalink to this term" href="#kernel-install">¶</a></dt><dd><p><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a></p></dd><dt id="kexec.target"><span class="term"><code class="filename">kexec.target</code></span><a class="headerlink" title="Permalink to this term" href="#kexec.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="local-fs-pre.target"><span class="term"><code class="filename">local-fs-pre.target</code></span><a class="headerlink" title="Permalink to this term" href="#local-fs-pre.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="local-fs.target"><span class="term"><code class="filename">local-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#local-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="localectl"><span class="term"><span class="command"><strong>localectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#localectl">¶</a></dt><dd><p><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a></p></dd><dt id="loginctl"><span class="term"><span class="command"><strong>loginctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#loginctl">¶</a></dt><dd><p><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a></p></dd><dt id="machine.slice"><span class="term"><code class="filename">machine.slice</code></span><a class="headerlink" title="Permalink to this term" href="#machine.slice">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="machinectl"><span class="term"><span class="command"><strong>machinectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#machinectl">¶</a></dt><dd><p><a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a></p></dd><dt id="mount.mount"><span class="term"><code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code></span><a class="headerlink" title="Permalink to this term" href="#mount.mount">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="multi-user.target"><span class="term"><code class="filename">multi-user.target</code></span><a class="headerlink" title="Permalink to this term" href="#multi-user.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="network-online.target"><span class="term"><code class="filename">network-online.target</code></span><a class="headerlink" title="Permalink to this term" href="#network-online.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="network.target"><span class="term"><code class="filename">network.target</code></span><a class="headerlink" title="Permalink to this term" href="#network.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="nss-lookup.target"><span class="term"><code class="filename">nss-lookup.target</code></span><a class="headerlink" title="Permalink to this term" href="#nss-lookup.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="nss-myhostname.la"><span class="term"><code class="filename">nss-myhostname.la</code></span><a class="headerlink" title="Permalink to this term" href="#nss-myhostname.la">¶</a></dt><dd><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a></p></dd><dt id="nss-user-lookup.target"><span class="term"><code class="filename">nss-user-lookup.target</code></span><a class="headerlink" title="Permalink to this term" href="#nss-user-lookup.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="pam_systemd.so"><span class="term"><code class="filename">pam_systemd.so</code></span><a class="headerlink" title="Permalink to this term" href="#pam_systemd.so">¶</a></dt><dd><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a></p></dd><dt id="path.path"><span class="term"><code class="filename"><em class="replaceable"><code>path</code></em>.path</code></span><a class="headerlink" title="Permalink to this term" href="#path.path">¶</a></dt><dd><p><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="paths.target"><span class="term"><code class="filename">paths.target</code></span><a class="headerlink" title="Permalink to this term" href="#paths.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="pkg-config"><span class="term"><span class="command"><strong>pkg-config</strong></span></span><a class="headerlink" title="Permalink to this term" href="#pkg-config">¶</a></dt><dd><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a>, <a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a>, <a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a>, <a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a></p></dd><dt id="poweroff"><span class="term"><span class="command"><strong>poweroff</strong></span></span><a class="headerlink" title="Permalink to this term" href="#poweroff">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="poweroff.target"><span class="term"><code class="filename">poweroff.target</code></span><a class="headerlink" title="Permalink to this term" href="#poweroff.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="printer.target"><span class="term"><code class="filename">printer.target</code></span><a class="headerlink" title="Permalink to this term" href="#printer.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="reboot"><span class="term"><span class="command"><strong>reboot</strong></span></span><a class="headerlink" title="Permalink to this term" href="#reboot">¶</a></dt><dd><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a></p></dd><dt id="reboot.target"><span class="term"><code class="filename">reboot.target</code></span><a class="headerlink" title="Permalink to this term" href="#reboot.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="remote-fs-pre.target"><span class="term"><code class="filename">remote-fs-pre.target</code></span><a class="headerlink" title="Permalink to this term" href="#remote-fs-pre.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="remote-fs.target"><span class="term"><code class="filename">remote-fs.target</code></span><a class="headerlink" title="Permalink to this term" href="#remote-fs.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="rescue.target"><span class="term"><code class="filename">rescue.target</code></span><a class="headerlink" title="Permalink to this term" href="#rescue.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="rpcbind.target"><span class="term"><code class="filename">rpcbind.target</code></span><a class="headerlink" title="Permalink to this term" href="#rpcbind.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel"><span class="term"><span class="command"><strong>runlevel</strong></span></span><a class="headerlink" title="Permalink to this term" href="#runlevel">¶</a></dt><dd><p><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a></p></dd><dt id="runlevel2.target"><span class="term"><code class="filename">runlevel2.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel2.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel3.target"><span class="term"><code class="filename">runlevel3.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel3.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel4.target"><span class="term"><code class="filename">runlevel4.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel4.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="runlevel5.target"><span class="term"><code class="filename">runlevel5.target</code></span><a class="headerlink" title="Permalink to this term" href="#runlevel5.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="scope.scope"><span class="term"><code class="filename"><em class="replaceable"><code>scope</code></em>.scope</code></span><a class="headerlink" title="Permalink to this term" href="#scope.scope">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="service.service"><span class="term"><code class="filename"><em class="replaceable"><code>service</code></em>.service</code></span><a class="headerlink" title="Permalink to this term" href="#service.service">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="shutdown"><span class="term"><span class="command"><strong>shutdown</strong></span></span><a class="headerlink" title="Permalink to this term" href="#shutdown">¶</a></dt><dd><p><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a></p></dd><dt id="shutdown.target"><span class="term"><code class="filename">shutdown.target</code></span><a class="headerlink" title="Permalink to this term" href="#shutdown.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sigpwr.target"><span class="term"><code class="filename">sigpwr.target</code></span><a class="headerlink" title="Permalink to this term" href="#sigpwr.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sleep.target"><span class="term"><code class="filename">sleep.target</code></span><a class="headerlink" title="Permalink to this term" href="#sleep.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="slice.slice"><span class="term"><code class="filename"><em class="replaceable"><code>slice</code></em>.slice</code></span><a class="headerlink" title="Permalink to this term" href="#slice.slice">¶</a></dt><dd><p><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="smartcard.target"><span class="term"><code class="filename">smartcard.target</code></span><a class="headerlink" title="Permalink to this term" href="#smartcard.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="snapshot.snapshot"><span class="term"><code class="filename"><em class="replaceable"><code>snapshot</code></em>.snapshot</code></span><a class="headerlink" title="Permalink to this term" href="#snapshot.snapshot">¶</a></dt><dd><p><a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="socket.socket"><span class="term"><code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code></span><a class="headerlink" title="Permalink to this term" href="#socket.socket">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="sockets.target"><span class="term"><code class="filename">sockets.target</code></span><a class="headerlink" title="Permalink to this term" href="#sockets.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sound.target"><span class="term"><code class="filename">sound.target</code></span><a class="headerlink" title="Permalink to this term" href="#sound.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="suspend.target"><span class="term"><code class="filename">suspend.target</code></span><a class="headerlink" title="Permalink to this term" href="#suspend.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="swap.swap"><span class="term"><code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></span><a class="headerlink" title="Permalink to this term" href="#swap.swap">¶</a></dt><dd><p><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>, <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>, <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>, <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="swap.target"><span class="term"><code class="filename">swap.target</code></span><a class="headerlink" title="Permalink to this term" href="#swap.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="sysinit.target"><span class="term"><code class="filename">sysinit.target</code></span><a class="headerlink" title="Permalink to this term" href="#sysinit.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="syslog.socket"><span class="term"><code class="filename">syslog.socket</code></span><a class="headerlink" title="Permalink to this term" href="#syslog.socket">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="system-update.target"><span class="term"><code class="filename">system-update.target</code></span><a class="headerlink" title="Permalink to this term" href="#system-update.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="system.slice"><span class="term"><code class="filename">system.slice</code></span><a class="headerlink" title="Permalink to this term" href="#system.slice">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="systemctl"><span class="term"><span class="command"><strong>systemctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemctl">¶</a></dt><dd><p><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a></p></dd><dt id="systemd"><span class="term"><span class="command"><strong>systemd</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd">¶</a></dt><dd><p><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a></p></dd><dt id="systemd-analyze"><span class="term"><span class="command"><strong>systemd-analyze</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-analyze">¶</a></dt><dd><p><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a></p></dd><dt id="systemd-ask-password"><span class="term"><span class="command"><strong>systemd-ask-password</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password">¶</a></dt><dd><p><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a></p></dd><dt id="systemd-ask-password-console.path"><span class="term"><code class="filename">systemd-ask-password-console.path</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-console.path">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-ask-password-console.service"><span class="term"><code class="filename">systemd-ask-password-console.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-console.service">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-ask-password-wall.path"><span class="term"><code class="filename">systemd-ask-password-wall.path</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-wall.path">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-ask-password-wall.service"><span class="term"><code class="filename">systemd-ask-password-wall.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-ask-password-wall.service">¶</a></dt><dd><p><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a></p></dd><dt id="systemd-backlight@.service"><span class="term"><code class="filename">systemd-backlight@.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-backlight@.service">¶</a></dt><dd><p><a href="systemd-backlight@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight@.service</span>(8)</span></a></p></dd><dt id="systemd-binfmt.service"><span class="term"><code class="filename">systemd-binfmt.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-binfmt.service">¶</a></dt><dd><p><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a></p></dd><dt id="systemd-cat"><span class="term"><span class="command"><strong>systemd-cat</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-cat">¶</a></dt><dd><p><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a></p></dd><dt id="systemd-cgls"><span class="term"><span class="command"><strong>systemd-cgls</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-cgls">¶</a></dt><dd><p><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a></p></dd><dt id="systemd-cgtop"><span class="term"><span class="command"><strong>systemd-cgtop</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-cgtop">¶</a></dt><dd><p><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a></p></dd><dt id="systemd-coredumpctl"><span class="term"><span class="command"><strong>systemd-coredumpctl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-coredumpctl">¶</a></dt><dd><p><a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a></p></dd><dt id="systemd-cryptsetup@.service"><span class="term"><code class="filename">systemd-cryptsetup@.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-cryptsetup@.service">¶</a></dt><dd><p><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a></p></dd><dt id="systemd-delta"><span class="term"><span class="command"><strong>systemd-delta</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-delta">¶</a></dt><dd><p><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a></p></dd><dt id="systemd-detect-virt"><span class="term"><span class="command"><strong>systemd-detect-virt</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-detect-virt">¶</a></dt><dd><p><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a></p></dd><dt id="systemd-fsck-root.service"><span class="term"><code class="filename">systemd-fsck-root.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-fsck-root.service">¶</a></dt><dd><p><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="systemd-fsck@.service"><span class="term"><code class="filename">systemd-fsck@.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-fsck@.service">¶</a></dt><dd><p><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a></p></dd><dt id="systemd-halt.service"><span class="term"><code class="filename">systemd-halt.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-halt.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-hibernate.service"><span class="term"><code class="filename">systemd-hibernate.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-hibernate.service">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="systemd-hostnamed.service"><span class="term"><code class="filename">systemd-hostnamed.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-hostnamed.service">¶</a></dt><dd><p><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a></p></dd><dt id="systemd-hybrid-sleep.service"><span class="term"><code class="filename">systemd-hybrid-sleep.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-hybrid-sleep.service">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="systemd-inhibit"><span class="term"><span class="command"><strong>systemd-inhibit</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-inhibit">¶</a></dt><dd><p><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a></p></dd><dt id="systemd-initctl.service"><span class="term"><code class="filename">systemd-initctl.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-initctl.service">¶</a></dt><dd><p><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="systemd-initctl.socket"><span class="term"><code class="filename">systemd-initctl.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-initctl.socket">¶</a></dt><dd><p><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a></p></dd><dt id="systemd-journal-gatewayd.service"><span class="term"><code class="filename">systemd-journal-gatewayd.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journal-gatewayd.service">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="systemd-journal-gatewayd.socket"><span class="term"><code class="filename">systemd-journal-gatewayd.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journal-gatewayd.socket">¶</a></dt><dd><p><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a></p></dd><dt id="systemd-journald.service"><span class="term"><code class="filename">systemd-journald.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journald.service">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd-journald.socket"><span class="term"><code class="filename">systemd-journald.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-journald.socket">¶</a></dt><dd><p><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a></p></dd><dt id="systemd-kexec.service"><span class="term"><code class="filename">systemd-kexec.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-kexec.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-localed.service"><span class="term"><code class="filename">systemd-localed.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-localed.service">¶</a></dt><dd><p><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a></p></dd><dt id="systemd-logind.service"><span class="term"><code class="filename">systemd-logind.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-logind.service">¶</a></dt><dd><p><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a></p></dd><dt id="systemd-machine-id-setup"><span class="term"><span class="command"><strong>systemd-machine-id-setup</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-machine-id-setup">¶</a></dt><dd><p><a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a></p></dd><dt id="systemd-machined.service"><span class="term"><code class="filename">systemd-machined.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-machined.service">¶</a></dt><dd><p><a href="systemd-machined.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a></p></dd><dt id="systemd-modules-load.service"><span class="term"><code class="filename">systemd-modules-load.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-modules-load.service">¶</a></dt><dd><p><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a></p></dd><dt id="systemd-notify"><span class="term"><span class="command"><strong>systemd-notify</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-notify">¶</a></dt><dd><p><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a></p></dd><dt id="systemd-nspawn"><span class="term"><span class="command"><strong>systemd-nspawn</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-nspawn">¶</a></dt><dd><p><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a></p></dd><dt id="systemd-poweroff.service"><span class="term"><code class="filename">systemd-poweroff.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-poweroff.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-quotacheck.service"><span class="term"><code class="filename">systemd-quotacheck.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-quotacheck.service">¶</a></dt><dd><p><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a></p></dd><dt id="systemd-random-seed.service"><span class="term"><code class="filename">systemd-random-seed.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-random-seed.service">¶</a></dt><dd><p><a href="systemd-random-seed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-collect.service"><span class="term"><code class="filename">systemd-readahead-collect.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-collect.service">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-done.service"><span class="term"><code class="filename">systemd-readahead-done.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-done.service">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-done.timer"><span class="term"><code class="filename">systemd-readahead-done.timer</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-done.timer">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-readahead-replay.service"><span class="term"><code class="filename">systemd-readahead-replay.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-readahead-replay.service">¶</a></dt><dd><p><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a></p></dd><dt id="systemd-reboot.service"><span class="term"><code class="filename">systemd-reboot.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-reboot.service">¶</a></dt><dd><p><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a></p></dd><dt id="systemd-remount-fs.service"><span class="term"><code class="filename">systemd-remount-fs.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-remount-fs.service">¶</a></dt><dd><p><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a></p></dd><dt id="systemd-run"><span class="term"><span class="command"><strong>systemd-run</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-run">¶</a></dt><dd><p><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a></p></dd><dt id="systemd-shutdownd.service"><span class="term"><code class="filename">systemd-shutdownd.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-shutdownd.service">¶</a></dt><dd><p><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a></p></dd><dt id="systemd-shutdownd.socket"><span class="term"><code class="filename">systemd-shutdownd.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-shutdownd.socket">¶</a></dt><dd><p><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a></p></dd><dt id="systemd-suspend.service"><span class="term"><code class="filename">systemd-suspend.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-suspend.service">¶</a></dt><dd><p><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a></p></dd><dt id="systemd-sysctl.service"><span class="term"><code class="filename">systemd-sysctl.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-sysctl.service">¶</a></dt><dd><p><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a></p></dd><dt id="systemd-timedated.service"><span class="term"><code class="filename">systemd-timedated.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-timedated.service">¶</a></dt><dd><p><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles"><span class="term"><span class="command"><strong>systemd-tmpfiles</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-clean.service"><span class="term"><code class="filename">systemd-tmpfiles-clean.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-clean.service">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-clean.timer"><span class="term"><code class="filename">systemd-tmpfiles-clean.timer</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-clean.timer">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-setup-dev.service"><span class="term"><code class="filename">systemd-tmpfiles-setup-dev.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-setup-dev.service">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tmpfiles-setup.service"><span class="term"><code class="filename">systemd-tmpfiles-setup.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-tmpfiles-setup.service">¶</a></dt><dd><p><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a></p></dd><dt id="systemd-tty-ask-password-agent"><span class="term"><span class="command"><strong>systemd-tty-ask-password-agent</strong></span></span><a class="headerlink" title="Permalink to this term" href="#systemd-tty-ask-password-agent">¶</a></dt><dd><p><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a></p></dd><dt id="systemd-udevd-control.socket"><span class="term"><code class="filename">systemd-udevd-control.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-udevd-control.socket">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="systemd-udevd-kernel.socket"><span class="term"><code class="filename">systemd-udevd-kernel.socket</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-udevd-kernel.socket">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="systemd-udevd.service"><span class="term"><code class="filename">systemd-udevd.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-udevd.service">¶</a></dt><dd><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></dd><dt id="systemd-update-utmp-runlevel.service"><span class="term"><code class="filename">systemd-update-utmp-runlevel.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-update-utmp-runlevel.service">¶</a></dt><dd><p><a href="systemd-update-utmp.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp.service</span>(8)</span></a></p></dd><dt id="systemd-update-utmp.service"><span class="term"><code class="filename">systemd-update-utmp.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-update-utmp.service">¶</a></dt><dd><p><a href="systemd-update-utmp.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp.service</span>(8)</span></a></p></dd><dt id="systemd-user-sessions.service"><span class="term"><code class="filename">systemd-user-sessions.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-user-sessions.service">¶</a></dt><dd><p><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a></p></dd><dt id="systemd-vconsole-setup.service"><span class="term"><code class="filename">systemd-vconsole-setup.service</code></span><a class="headerlink" title="Permalink to this term" href="#systemd-vconsole-setup.service">¶</a></dt><dd><p><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a></p></dd><dt id="target.target"><span class="term"><code class="filename"><em class="replaceable"><code>target</code></em>.target</code></span><a class="headerlink" title="Permalink to this term" href="#target.target">¶</a></dt><dd><p><a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="telinit"><span class="term"><span class="command"><strong>telinit</strong></span></span><a class="headerlink" title="Permalink to this term" href="#telinit">¶</a></dt><dd><p><a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a></p></dd><dt id="time-sync.target"><span class="term"><code class="filename">time-sync.target</code></span><a class="headerlink" title="Permalink to this term" href="#time-sync.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="timedatectl"><span class="term"><span class="command"><strong>timedatectl</strong></span></span><a class="headerlink" title="Permalink to this term" href="#timedatectl">¶</a></dt><dd><p><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a></p></dd><dt id="timer.timer"><span class="term"><code class="filename"><em class="replaceable"><code>timer</code></em>.timer</code></span><a class="headerlink" title="Permalink to this term" href="#timer.timer">¶</a></dt><dd><p><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>, <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a></p></dd><dt id="timers.target"><span class="term"><code class="filename">timers.target</code></span><a class="headerlink" title="Permalink to this term" href="#timers.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="udevadm"><span class="term"><span class="command"><strong>udevadm</strong></span></span><a class="headerlink" title="Permalink to this term" href="#udevadm">¶</a></dt><dd><p><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></dd><dt id="umount.target"><span class="term"><code class="filename">umount.target</code></span><a class="headerlink" title="Permalink to this term" href="#umount.target">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd><dt id="user.slice"><span class="term"><code class="filename">user.slice</code></span><a class="headerlink" title="Permalink to this term" href="#user.slice">¶</a></dt><dd><p><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a></p></dd></dl></div></div><div class="refsect1"><a name="idm274678956848"></a><h2 id="Colophon">Colophon<a class="headerlink" title="Permalink to this headline" href="#Colophon">¶</a></h2><p><a name="colophon"></a>This index contains 1235 entries in 13 sections,
+referring to 137 individual manual pages.
</p></div></div></body></html>
diff --git a/man/systemd.directives.xml b/man/systemd.directives.xml
index 812307a67b..307cca1d39 100644
--- a/man/systemd.directives.xml
+++ b/man/systemd.directives.xml
@@ -1,4 +1,4 @@
-<refentry id="systemd.directives" conditional="HAVE_PYTHON">
+<refentry conditional="HAVE_PYTHON" id="systemd.directives">
<refentryinfo>
<title>systemd.directives</title>
@@ -50,16 +50,22 @@
<varlistentry><term><varname>BindsTo=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>BlockIOReadBandwidth=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>BlockIOAccounting=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>BlockIOWeight=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>BlockIODeviceWeight=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>BlockIOWriteBandwidth=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>BlockIOReadBandwidth=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>BlockIOWeight=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>BlockIOWriteBandwidth=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>Broadcast=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>BusName=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>CPUAccounting=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>CPUAffinity=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>CPUSchedulingPolicy=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -68,7 +74,7 @@
<varlistentry><term><varname>CPUSchedulingResetOnFork=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>CPUShares=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>CPUShares=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>Capabilities=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -108,21 +114,13 @@
<varlistentry><term><varname>Conflicts=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>ControlGroup=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><varname>ControlGroupAttribute=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><varname>ControlGroupModify=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><varname>ControlGroupPersistent=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><varname>DefaultDependencies=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>Description=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>DeviceAllow=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>DeviceAllow=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>DeviceDeny=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>DevicePolicy=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>DirectoryMode=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -232,9 +230,9 @@
<varlistentry><term><varname>MaxConnections=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>MemoryLimit=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>MemoryAccounting=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>MemorySoftLimit=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>MemoryLimit=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>MessageQueueMaxMessages=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -332,6 +330,8 @@
<varlistentry><term><varname>RestartSec=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>ReusePort=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>RootDirectory=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>RootDirectoryStartOnly=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -340,10 +340,14 @@
<varlistentry><term><varname>SendBuffer=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>SendSIGHUP=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>SendSIGKILL=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>Service=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>Slice=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>SmackLabel=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>SmackLabelIPIn=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -439,9 +443,9 @@
<para>Kernel boot options for configuring the behaviour of the
systemd process.</para>
- <variablelist id="kernel-commandline-options"><varlistentry><term><varname>1</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+ <variablelist id="kernel-commandline-options"><varlistentry><term><constant>1</constant></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>2</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><constant>2</constant></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>3</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -451,6 +455,8 @@
<varlistentry><term><varname>S</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>debug</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>emergency</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>fsck.mode=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-fsck@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -489,13 +495,15 @@
<varlistentry><term><varname>luks.key=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>luks.options=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>luks.uuid=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>luks=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>modules-load=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>net.ifnames=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>net.ifnames=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>plymouth.enable=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -509,6 +517,8 @@
<varlistentry><term><varname>rd.luks.key=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>rd.luks.options=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>rd.luks.uuid=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>rd.luks=</varname></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -584,12 +594,20 @@
<para>Environment variables understood by the systemd
manager and other programs.</para>
- <variablelist id="environment-variables"><varlistentry><term><varname>$LISTEN_FDS</varname></term><listitem><para><citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+ <variablelist id="environment-variables"><varlistentry><term><varname>$HOME</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>$LISTEN_PID</varname></term><listitem><para><citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>$LANG</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>$LISTEN_FDS</varname></term><listitem><para><citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>$LISTEN_PID</varname></term><listitem><para><citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>$MANAGERPID</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>$NOTIFY_SOCKET</varname></term><listitem><para><citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>$PATH</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>$PREVLEVEL</varname></term><listitem><para><citerefentry><refentrytitle>runlevel</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>$RUNLEVEL</varname></term><listitem><para><citerefentry><refentrytitle>runlevel</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -602,7 +620,7 @@
<varlistentry><term><varname>$SYSTEMD_LOG_TARGET</varname></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>$SYSTEMD_PAGER</varname></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>$SYSTEMD_PAGER</varname></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>$SYSTEMD_SYSVINIT_PATH</varname></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -612,6 +630,8 @@
<varlistentry><term><varname>$UDEV_LOG=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>$USER</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>$XDG_CONFIG_DIRS</varname></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>$XDG_CONFIG_HOME</varname></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -620,9 +640,13 @@
<varlistentry><term><varname>$XDG_DATA_HOME</varname></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>$XDG_RUNTIME_DIR</varname></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>$XDG_RUNTIME_DIR</varname></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>$XDG_SEAT</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>$XDG_SESSION_ID</varname></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>$XDG_SESSION_ID</varname></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>$XDG_VTNR</varname></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
</variablelist>
</refsect1>
@@ -633,7 +657,9 @@
<para>Directives for configuring systemd units through the
udev database.</para>
- <variablelist id="udev-directives"><varlistentry><term><option>$attr{<replaceable>file</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+ <variablelist id="udev-directives"><varlistentry><term><option>$$</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>$attr{<replaceable>file</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>$devnode</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -665,6 +691,8 @@
<varlistentry><term><option>$sys</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>%%</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>%E{<replaceable>key</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>%M</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -691,55 +719,55 @@
<varlistentry><term><option>%s{<replaceable>file</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>ACTION</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>ACTION</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>ATTRS{<replaceable>filename</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>ATTRS{<replaceable>filename</replaceable>}</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>ATTR{<replaceable>filename</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>ATTR{<replaceable>filename</replaceable>}</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>DEVPATH</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>DEVPATH</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>DRIVER</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>DRIVER</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>DRIVERS</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>DRIVERS</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>ENV{<replaceable>key</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>ENV{<replaceable>key</replaceable>}</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>GOTO</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>GOTO</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>GROUP</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>GROUP</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>ID_MODEL=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>ID_MODEL_FROM_DATABASE=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>IMPORT{<replaceable>type</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>IMPORT{<replaceable>type</replaceable>}</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>KERNEL</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>KERNEL</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>KERNELS</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>KERNELS</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>LABEL</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>LABEL</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>MODE</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>MODE</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>NAME</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>NAME</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>OPTIONS</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>OPTIONS</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>OWNER</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>OWNER</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>PROGRAM</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>PROGRAM</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>RESULT</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>RESULT</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>RUN{<replaceable>type</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>RUN{<replaceable>type</replaceable>}</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>SUBSYSTEM</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>SUBSYSTEM</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>SUBSYSTEMS</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>SUBSYSTEMS</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>SYMLINK</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>SYMLINK</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>SYSTEMD_ALIAS=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -747,13 +775,13 @@
<varlistentry><term><varname>SYSTEMD_WANTS=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>TAG</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>TAG</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>TAGS</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>TAGS</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>TEST{<replaceable>octal mode mask</replaceable>}</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>TEST{<replaceable>octal mode mask</replaceable>}</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>WAIT_FOR</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>WAIT_FOR</varname></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>event_timeout=</option></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -791,6 +819,32 @@
<varlistentry><term><varname>MESSAGE_ID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>OBJECT_AUDIT_LOGINUID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_AUDIT_SESSION=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_CMDLINE=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_COMM=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_EXE=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_GID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_PID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_SYSTEMD_CGROUP=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_SYSTEMD_OWNER_UID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_SYSTEMD_SESSION=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_SYSTEMD_UNIT=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_SYSTEMD_USER_UNIT=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>OBJECT_UID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>PRIORITY=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>SYSLOG_FACILITY=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -805,6 +859,8 @@
<varlistentry><term><varname>_BOOT_ID=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>_CAP_EFFECTIVE=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>_CMDLINE=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>_COMM=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -833,6 +889,8 @@
<varlistentry><term><varname>_SYSTEMD_SESSION=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>_SYSTEMD_SLICE=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>_SYSTEMD_UNIT=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>_SYSTEMD_USER_UNIT=</varname></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -863,18 +921,8 @@
<variablelist id="pam-directives"><varlistentry><term><option>class=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>controllers=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><option>debug=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>kill-exclude-users=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><option>kill-only-users=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><option>kill-session-processes=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><option>reset-controllers=</option></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
</variablelist>
</refsect1>
@@ -884,9 +932,9 @@
<para>Options which influence mounted filesystems and
encrypted volumes.</para>
- <variablelist id="crypttab-options"><varlistentry><term><varname>allow-discards</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+ <variablelist id="crypttab-options"><varlistentry><term><varname>cipher=</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>cipher=</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>discard</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>hash=</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -910,6 +958,14 @@
<varlistentry><term><varname>swap</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>tcrypt</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>tcrypt-hidden</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>tcrypt-keyfile=</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><varname>tcrypt-system</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>timeout=</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>tmp</varname></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -927,15 +983,15 @@
<para>Directives for configuring the behaviour of the
systemd process.</para>
- <variablelist id="systemd-directives"><varlistentry><term/><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+ <variablelist id="systemd-directives"><varlistentry><term><varname>CPUAffinity=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term/><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>CapabilityBoundingSet=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>CrashChVT=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>CrashShell=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>DefaultControllers=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>DefaultEnvironment=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>DefaultLimitAS=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1003,7 +1059,7 @@
<varlistentry><term><varname>SuspendState=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-sleep.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term/><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>TimerSlackNSec=</varname></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
</variablelist>
</refsect1>
@@ -1053,7 +1109,9 @@
<varlistentry><term><option>--after</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--all</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--after-cursor=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>--all</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--attr-match=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1071,6 +1129,8 @@
<varlistentry><term><option>--boot</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--boot=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--booted</option></term><listitem><para><citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--capability=</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1093,8 +1153,6 @@
<varlistentry><term><option>--container</option></term><listitem><para><citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--controllers=</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><option>--crash-shell</option></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--create</option></term><listitem><para><citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1113,6 +1171,8 @@
<varlistentry><term><option>--depth=</option></term><listitem><para><citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--description=</option></term><listitem><para><citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--device-id-of-file=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--diff=</option></term><listitem><para><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1121,6 +1181,8 @@
<varlistentry><term><option>--disk-usage</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--dmesg</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--dry-run</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--dump-catalog</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1133,6 +1195,8 @@
<varlistentry><term><option>--environment=</option></term><listitem><para><citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--exclude-prefix=</option></term><listitem><para><citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--exec-delay=</option></term><listitem><para><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--exit</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1147,21 +1211,21 @@
<varlistentry><term><option>--fail</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--failed</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><option>--field=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--file-size-max=</option></term><listitem><para><citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--file=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--follow</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--force</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--force</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--freq</option></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--from-pattern=</option></term><listitem><para><citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--full</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--full</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--fuzz=</option></term><listitem><para><citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1171,9 +1235,9 @@
<varlistentry><term><option>--header</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--help</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>runlevel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>telinit</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--help</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>runlevel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>telinit</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--host</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--host</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--icon=</option></term><listitem><para><citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1197,7 +1261,7 @@
<varlistentry><term><option>--key=</option></term><listitem><para><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--kill-who=</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--kill-who=</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--level-prefix=</option></term><listitem><para><citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1235,7 +1299,7 @@
<varlistentry><term><option>--new-id128</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--no-ask-password</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--no-ask-password</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--no-block</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1245,7 +1309,7 @@
<varlistentry><term><option>--no-legend</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--no-pager</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--no-pager</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--no-reload</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1285,13 +1349,13 @@
<varlistentry><term><option>--private-network</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--privileged</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--privileged</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--property</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--property-match=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--property=</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--property=</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--pss</option></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1313,6 +1377,8 @@
<varlistentry><term><option>--reload</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--remain-after-exit</option></term><listitem><para><citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--remove</option></term><listitem><para><citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--require</option></term><listitem><para><citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1333,6 +1399,10 @@
<varlistentry><term><option>--scale-y</option></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--scope</option></term><listitem><para><citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>--send-sighup</option></term><listitem><para><citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--seq-end=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--seq-start=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1343,12 +1413,16 @@
<varlistentry><term><option>--show-types</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--signal=</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--signal=</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--since=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--slice=</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--start-exec-queue</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--state=</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>--static</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--status=</option></term><listitem><para><citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1363,7 +1437,7 @@
<varlistentry><term><option>--sysname-match=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--system</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--system</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--tag-match=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1371,8 +1445,6 @@
<varlistentry><term><option>--test=</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--this-boot</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><option>--timeout=</option></term><listitem><para><citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--to-pattern=</option></term><listitem><para><citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1383,7 +1455,7 @@
<varlistentry><term><option>--udev</option></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--unit=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--unit=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--until=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1391,7 +1463,7 @@
<varlistentry><term><option>--update-catalog</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--user</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--user</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--user-unit=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1405,7 +1477,7 @@
<varlistentry><term><option>--verify-key=</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>--version</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>--version</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>--vm</option></term><listitem><para><citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1421,7 +1493,7 @@
<varlistentry><term><option>--wtmp-only</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-C</option></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-C</option></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-D</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1429,13 +1501,13 @@
<varlistentry><term><option>-F</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-H</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-H</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-M</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-P</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-P</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-a</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-a</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-b</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1447,15 +1519,15 @@
<varlistentry><term><option>-f</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-h</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-h</option></term><listitem><para><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-i</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-j</option></term><listitem><para><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-k</option></term><listitem><para><citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-k</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-l</option></term><listitem><para><citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-l</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-m</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1463,13 +1535,13 @@
<varlistentry><term><option>-o</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-p</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-p</option></term><listitem><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-q</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-r</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><option>-s</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>-s</option></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>-t</option></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1483,12 +1555,218 @@
<varlistentry><term><option>-y</option></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>auto</option></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>cat</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>closed</option></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>driver</option></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>export</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>hibernate</option></term><listitem><para><citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><option>hybrid-sleep</option></term><listitem><para><citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>journal</option></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>json</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>json-pretty</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>json-sse</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>kernel</option></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>short</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>short-iso</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>short-monotonic</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>short-precise</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>stdout</option></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>strict</option></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><option>suspend</option></term><listitem><para><citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><option>syslog</option></term><listitem><para><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><option>verbose</option></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+</variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Constants</title>
+
+ <para>Various constant used and/or defined by systemd.</para>
+
+ <variablelist id="constants"><varlistentry><term><constant>-0</constant></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>-1</constant></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>-ECHILD</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>1</constant></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>2</constant></term><listitem><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>AF_INET</constant></term><listitem><para><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>AF_INET6</constant></term><listitem><para><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>AF_NETLINK</constant></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>AF_UNIX</constant></term><listitem><para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>AF_UNSPEC</constant></term><listitem><para><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>CAP_DAC_OVERRIDE</constant></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>CAP_SYS_ADMIN</constant></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>CAP_SYS_PTRACE</constant></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>CLOCK_MONOTONIC</constant></term><listitem><para><citerefentry><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>CLOCK_REALTIME</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_ALERT</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_CRIT</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_DEBUG</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_EMERG</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_ERR</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_INFO</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_NOTICE</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>LOG_WARNING</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>NUL</constant></term><listitem><para><citerefentry><refentrytitle>sd_id128_to_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>NULL</constant></term><listitem><para><citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_seat_get_active</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_session_is_active</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_uid_get_state</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>POLLIN</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>POLLOUT</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_APPEND</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_CURRENT_USER</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_INVALIDATE</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_LOCAL_ONLY</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_usage</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_NOP</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_RUNTIME_ONLY</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_SYSTEM</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_JOURNAL_SYSTEM_ONLY</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SD_WARNING</constant></term><listitem><para><citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGHUP</constant></term><listitem><para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGINT</constant></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGKILL</constant></term><listitem><para><citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGPIPE</constant></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGPWR</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+0</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+1</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+13</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+14</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+15</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+16</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+2</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+20</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+21</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+22</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+23</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+24</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+26</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+27</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+28</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+29</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+3</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+4</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+5</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGRTMIN+6</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGSTOP</constant></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGSYS</constant></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGTERM</constant></term><listitem><para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGUSR1</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGUSR2</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIGWINCH</constant></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SIG_DFL</constant></term><listitem><para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SOCK_DGRAM</constant></term><listitem><para><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SOCK_SEQPACKET</constant></term><listitem><para><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>SOCK_STREAM</constant></term><listitem><para><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>application/event-stream</constant></term><listitem><para><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>application/json</constant></term><listitem><para><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>application/vnd.fdo.journal</constant></term><listitem><para><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>libsystemd-daemon</constant></term><listitem><para><citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>libsystemd-journal</constant></term><listitem><para><citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_catalog</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_get_usage</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_query_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>libsystemd-login</constant></term><listitem><para><citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_pid_get_session</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_seat_get_active</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_session_is_active</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_uid_get_state</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>m</constant></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>r</constant></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>text/plain</constant></term><listitem><para><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><constant>w</constant></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
</variablelist>
</refsect1>
@@ -1510,8 +1788,6 @@
<varlistentry><term><varname>Compress=</varname></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>Controllers=</varname></term><listitem><para><citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><varname>D</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>F</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1596,8 +1872,6 @@
<varlistentry><term><varname>ReserveVT=</varname></term><listitem><para><citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>ResetControllers=</varname></term><listitem><para><citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><varname>RuntimeKeepFree=</varname></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>RuntimeMaxFileSize=</varname></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1622,7 +1896,7 @@
<varlistentry><term><varname>SystemMaxUse=</varname></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term/><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>TTYPath=</varname></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>VERSION=</varname></term><listitem><para><citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1640,11 +1914,13 @@
<varlistentry><term><varname>equivalent</varname></term><listitem><para><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>extended</varname></term><listitem><para><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><varname>f</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>h</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>m</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><constant>m</constant></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>masked</varname></term><listitem><para><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1656,11 +1932,11 @@
<varlistentry><term><varname>p</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>r</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><constant>r</constant></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>redirected</varname></term><listitem><para><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term/><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><varname>s</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>udev_log</varname></term><listitem><para><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1668,7 +1944,7 @@
<varlistentry><term><varname>us</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><varname>w</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><constant>w</constant></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><varname>x</varname></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1685,13 +1961,19 @@
<variablelist id="filenames"><varlistentry><term><filename>/</filename></term><listitem><para><citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>$HOME/.config/systemd/user/</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><filename>-.slice</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/.readahead</filename></term><listitem><para><citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/bin</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/bin/ls</filename></term><listitem><para><citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/bin/sh</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/boot</filename></term><listitem><para><citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/boot</filename></term><listitem><para><citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-efi-boot-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename></term><listitem><para><citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1699,20 +1981,24 @@
<varlistentry><term><filename>/dev/console</filename></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-getty-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/dev/full</filename></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/dev/hw_random</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/dev/initctl</filename></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-initctl.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/dev/mapper/</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/dev/null</filename></term><listitem><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/dev/null</filename></term><listitem><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/dev/random</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/dev/random</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/dev/urandom</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_id128_randomize</refentrytitle><manvolnum>3</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/dev/urandom</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd_id128_randomize</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/dev/watchdog</filename></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/dev/zero</filename></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/etc/</filename></term><listitem><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/etc/adjtime</filename></term><listitem><para><citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1723,7 +2009,7 @@
<varlistentry><term><filename>/etc/crypttab</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/etc/fstab</filename></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/etc/fstab</filename></term><listitem><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/etc/hostname</filename></term><listitem><para><citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1757,7 +2043,7 @@
<varlistentry><term><filename>/etc/systemd/bootchart.conf</filename></term><listitem><para><citerefentry><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/etc/systemd/journald.conf</filename></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/etc/systemd/journald.conf</filename></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/etc/systemd/logind.conf</filename></term><listitem><para><citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1771,7 +2057,7 @@
<varlistentry><term><filename>/etc/systemd/system-preset/00-lennart.preset</filename></term><listitem><para><citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/etc/systemd/system.conf</filename></term><listitem><para><citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/etc/systemd/system.conf</filename></term><listitem><para><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/etc/systemd/user/</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1783,7 +2069,9 @@
<varlistentry><term><filename>/etc/tmpfiles.d/*.conf</filename></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/etc/udev/hwdb.bin</filename></term><listitem><para><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/etc/udev/hwdb.bin</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><filename>/etc/udev/hwdb.d</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/etc/udev/rules.d</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1791,6 +2079,8 @@
<varlistentry><term><filename>/etc/vconsole.conf</filename></term><listitem><para><citerefentry><refentrytitle>vconsole.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/home</filename></term><listitem><para><citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/home/lennart</filename></term><listitem><para><citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/lib</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1827,12 +2117,6 @@
<varlistentry><term><filename>/run/sysctl.d/*.conf</filename></term><listitem><para><citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/run/systemd/generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>/run/systemd/generator.early</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>/run/systemd/generator.late</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><filename>/run/systemd/journal/syslog</filename></term><listitem><para><citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/run/systemd/notify</filename></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1847,18 +2131,22 @@
<varlistentry><term><filename>/run/systemd/system-preset/*.preset</filename></term><listitem><para><citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/run/systemd/systemd</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><filename>/run/systemd/user/</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/run/systemd/user-preset/*.preset</filename></term><listitem><para><citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/run/tmpfiles.d/*.conf</filename></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/run/udev/hwdb.d</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/run/udev/rules.d</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/run/udev/static_node-tags/<replaceable>tag</replaceable></filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/run/user/$USER</filename></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/sbin</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/sbin/init</filename></term><listitem><para><citerefentry><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/sys</filename></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1883,18 +2171,10 @@
<varlistentry><term><filename>/tmp</filename></term><listitem><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/tmp/systemd-generator.<replaceable>XXXXXX</replaceable></filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>/tmp/systemd-generator.early.<replaceable>XXXXXX</replaceable></filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>/tmp/systemd-generator.late.<replaceable>XXXXXX</replaceable></filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>/user/$USER</filename></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>/user/$USER/$XDG_SESSION_ID</filename></term><listitem><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
<varlistentry><term><filename>/usr</filename></term><listitem><para><citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/bin</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/usr/lib/</filename></term><listitem><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/lib/binfmt.d/*.conf</filename></term><listitem><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1911,10 +2191,14 @@
<varlistentry><term><filename>/usr/lib/systemd/system-generators/systemd-cryptsetup-generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/systemd/system-generators/systemd-efi-boot-generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd-efi-boot-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/usr/lib/systemd/system-generators/systemd-fstab-generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/lib/systemd/system-generators/systemd-getty-generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd-getty-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/systemd/system-generators/systemd-gpt-auto-generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/usr/lib/systemd/system-generators/systemd-system-update-generator</filename></term><listitem><para><citerefentry><refentrytitle>systemd-system-update-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/lib/systemd/system-preset/*.preset</filename></term><listitem><para><citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1929,6 +2213,8 @@
<varlistentry><term><command>/usr/lib/systemd/systemd-activate</command></term><listitem><para><citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/systemd/systemd-backlight</filename></term><listitem><para><citerefentry><refentrytitle>systemd-backlight@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/usr/lib/systemd/systemd-binfmt</filename></term><listitem><para><citerefentry><refentrytitle>systemd-binfmt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/lib/systemd/systemd-bootchart</filename></term><listitem><para><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1949,11 +2235,13 @@
<varlistentry><term><filename>/usr/lib/systemd/systemd-logind</filename></term><listitem><para><citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/systemd/systemd-machined</filename></term><listitem><para><citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/usr/lib/systemd/systemd-modules-load</filename></term><listitem><para><citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/lib/systemd/systemd-quotacheck</filename></term><listitem><para><citerefentry><refentrytitle>systemd-quotacheck.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/usr/lib/systemd/systemd-random-seed</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/systemd/systemd-random-seed</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><command>/usr/lib/systemd/systemd-readahead/systemd-readahead</command></term><listitem><para><citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1971,7 +2259,7 @@
<varlistentry><term><command>/usr/lib/systemd/systemd-udevd</command></term><listitem><para><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/usr/lib/systemd/systemd-update-utmp</filename></term><listitem><para><citerefentry><refentrytitle>systemd-update-utmp-runlevel.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/systemd/systemd-update-utmp</filename></term><listitem><para><citerefentry><refentrytitle>systemd-update-utmp.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/lib/systemd/systemd-user-sessions</filename></term><listitem><para><citerefentry><refentrytitle>systemd-user-sessions.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -1983,19 +2271,27 @@
<varlistentry><term><filename>/usr/lib/tmpfiles.d/*.conf</filename></term><listitem><para><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/lib/udev/hwdb.d</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/usr/lib/udev/rules.d</filename></term><listitem><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/usr/local/lib/systemd/system</filename></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/local/bin</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><filename>/usr/local/lib/systemd/system</filename></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/usr/local/lib/systemd/user</filename></term><listitem><para><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/usr/local/sbin</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><filename>/usr/sbin</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/usr/share/zoneinfo/</filename></term><listitem><para><citerefentry><refentrytitle>localtime</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/var</filename></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/var/lib/backlight/</filename></term><listitem><para><citerefentry><refentrytitle>systemd-backlight@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>/var/lib/dbus/machine-id</filename></term><listitem><para><citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>/var/lib/random-seed</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>/var/lib/random-seed</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>/var/log/journal</filename></term><listitem><para><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2067,7 +2363,11 @@
<varlistentry><term><command>loginctl</command></term><listitem><para><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename><replaceable>mount</replaceable>.mount</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>machine.slice</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><command>machinectl</command></term><listitem><para><citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><filename><replaceable>mount</replaceable>.mount</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>multi-user.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2117,7 +2417,9 @@
<varlistentry><term><filename>runlevel5.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename><replaceable>service</replaceable>.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename><replaceable>scope</replaceable>.scope</filename></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
+<varlistentry><term><filename><replaceable>service</replaceable>.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><command>shutdown</command></term><listitem><para><citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2127,11 +2429,13 @@
<varlistentry><term><filename>sleep.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename><replaceable>slice</replaceable>.slice</filename></term><listitem><para><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>smartcard.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename><replaceable>snapshot</replaceable>.snapshot</filename></term><listitem><para><citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename><replaceable>socket</replaceable>.socket</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename><replaceable>socket</replaceable>.socket</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>sockets.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2139,7 +2443,7 @@
<varlistentry><term><filename>suspend.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename><replaceable>swap</replaceable>.swap</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename><replaceable>swap</replaceable>.swap</filename></term><listitem><para><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>swap.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2149,6 +2453,8 @@
<varlistentry><term><filename>system-update.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>system.slice</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><command>systemctl</command></term><listitem><para><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><command>systemd</command></term><listitem><para><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2165,6 +2471,8 @@
<varlistentry><term><filename>systemd-ask-password-wall.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-ask-password-console.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>systemd-backlight@.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-backlight@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>systemd-binfmt.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-binfmt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><command>systemd-cat</command></term><listitem><para><citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2215,6 +2523,8 @@
<varlistentry><term><command>systemd-machine-id-setup</command></term><listitem><para><citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>systemd-machined.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>systemd-modules-load.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><command>systemd-notify</command></term><listitem><para><citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2225,9 +2535,7 @@
<varlistentry><term><filename>systemd-quotacheck.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-quotacheck.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>systemd-random-seed-load.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-
-<varlistentry><term><filename>systemd-random-seed-save.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>systemd-random-seed.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>systemd-readahead-collect.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2241,6 +2549,8 @@
<varlistentry><term><filename>systemd-remount-fs.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><command>systemd-run</command></term><listitem><para><citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></listitem></varlistentry>
+
<varlistentry><term><filename>systemd-shutdownd.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-shutdownd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>systemd-shutdownd.socket</filename></term><listitem><para><citerefentry><refentrytitle>systemd-shutdownd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2269,9 +2579,9 @@
<varlistentry><term><filename>systemd-udevd.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>systemd-update-utmp-runlevel.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-update-utmp-runlevel.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>systemd-update-utmp-runlevel.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-update-utmp.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
-<varlistentry><term><filename>systemd-update-utmp-shutdown.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-update-utmp-runlevel.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>systemd-update-utmp.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-update-utmp.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
<varlistentry><term><filename>systemd-user-sessions.service</filename></term><listitem><para><citerefentry><refentrytitle>systemd-user-sessions.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem></varlistentry>
@@ -2293,13 +2603,15 @@
<varlistentry><term><filename>umount.target</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+<varlistentry><term><filename>user.slice</filename></term><listitem><para><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></para></listitem></varlistentry>
+
</variablelist>
</refsect1>
<refsect1>
<title>Colophon</title>
- <para id="colophon">This index contains 1083 entries in 12 sections,
-referring to 106 individual manual pages.
+ <para id="colophon">This index contains 1235 entries in 13 sections,
+referring to 137 individual manual pages.
</para>
</refsect1>
-</refentry>
+</refentry> \ No newline at end of file
diff --git a/man/systemd.exec.5 b/man/systemd.exec.5
new file mode 100644
index 0000000000..e5e540ddcc
--- /dev/null
+++ b/man/systemd.exec.5
@@ -0,0 +1,635 @@
+'\" t
+.TH "SYSTEMD\&.EXEC" "5" "" "systemd 208" "systemd.exec"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.exec \- Execution environment configuration
+.SH "SYNOPSIS"
+.PP
+\fIservice\fR\&.service,
+\fIsocket\fR\&.socket,
+\fImount\fR\&.mount,
+\fIswap\fR\&.swap
+.SH "DESCRIPTION"
+.PP
+Unit configuration files for services, sockets, mount points, and swap devices share a subset of configuration options which define the execution environment of spawned processes\&.
+.PP
+This man page lists the configuration options shared by these four unit types\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files, and
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5), and
+\fBsystemd.mount\fR(5)
+for more information on the specific unit configuration files\&. The execution specific configuration options are configured in the [Service], [Socket], [Mount], or [Swap] sections, depending on the unit type\&.
+.SH "OPTIONS"
+.PP
+\fIWorkingDirectory=\fR
+.RS 4
+Takes an absolute directory path\&. Sets the working directory for executed processes\&. If not set, defaults to the root directory when systemd is running as a system instance and the respective user\*(Aqs home directory if run as user\&.
+.RE
+.PP
+\fIRootDirectory=\fR
+.RS 4
+Takes an absolute directory path\&. Sets the root directory for executed processes, with the
+\fBchroot\fR(2)
+system call\&. If this is used, it must be ensured that the process and all its auxiliary files are available in the
+\fBchroot()\fR
+jail\&.
+.RE
+.PP
+\fIUser=\fR, \fIGroup=\fR
+.RS 4
+Sets the Unix user or group that the processes are executed as, respectively\&. Takes a single user or group name or ID as argument\&. If no group is set, the default group of the user is chosen\&.
+.RE
+.PP
+\fISupplementaryGroups=\fR
+.RS 4
+Sets the supplementary Unix groups the processes are executed as\&. This takes a space\-separated list of group names or IDs\&. This option may be specified more than once in which case all listed groups are set as supplementary groups\&. When the empty string is assigned the list of supplementary groups is reset, and all assignments prior to this one will have no effect\&. In any way, this option does not override, but extends the list of supplementary groups configured in the system group database for the user\&.
+.RE
+.PP
+\fINice=\fR
+.RS 4
+Sets the default nice level (scheduling priority) for executed processes\&. Takes an integer between \-20 (highest priority) and 19 (lowest priority)\&. See
+\fBsetpriority\fR(2)
+for details\&.
+.RE
+.PP
+\fIOOMScoreAdjust=\fR
+.RS 4
+Sets the adjustment level for the Out\-Of\-Memory killer for executed processes\&. Takes an integer between \-1000 (to disable OOM killing for this process) and 1000 (to make killing of this process under memory pressure very likely)\&. See
+\m[blue]\fBproc\&.txt\fR\m[]\&\s-2\u[1]\d\s+2
+for details\&.
+.RE
+.PP
+\fIIOSchedulingClass=\fR
+.RS 4
+Sets the IO scheduling class for executed processes\&. Takes an integer between 0 and 3 or one of the strings
+\fBnone\fR,
+\fBrealtime\fR,
+\fBbest\-effort\fR
+or
+\fBidle\fR\&. See
+\fBioprio_set\fR(2)
+for details\&.
+.RE
+.PP
+\fIIOSchedulingPriority=\fR
+.RS 4
+Sets the IO scheduling priority for executed processes\&. Takes an integer between 0 (highest priority) and 7 (lowest priority)\&. The available priorities depend on the selected IO scheduling class (see above)\&. See
+\fBioprio_set\fR(2)
+for details\&.
+.RE
+.PP
+\fICPUSchedulingPolicy=\fR
+.RS 4
+Sets the CPU scheduling policy for executed processes\&. Takes one of
+\fBother\fR,
+\fBbatch\fR,
+\fBidle\fR,
+\fBfifo\fR
+or
+\fBrr\fR\&. See
+\fBsched_setscheduler\fR(2)
+for details\&.
+.RE
+.PP
+\fICPUSchedulingPriority=\fR
+.RS 4
+Sets the CPU scheduling priority for executed processes\&. The available priority range depends on the selected CPU scheduling policy (see above)\&. For real\-time scheduling policies an integer between 1 (lowest priority) and 99 (highest priority) can be used\&. See
+\fBsched_setscheduler\fR(2)
+for details\&.
+.RE
+.PP
+\fICPUSchedulingResetOnFork=\fR
+.RS 4
+Takes a boolean argument\&. If true, elevated CPU scheduling priorities and policies will be reset when the executed processes fork, and can hence not leak into child processes\&. See
+\fBsched_setscheduler\fR(2)
+for details\&. Defaults to false\&.
+.RE
+.PP
+\fICPUAffinity=\fR
+.RS 4
+Controls the CPU affinity of the executed processes\&. Takes a space\-separated list of CPU indexes\&. This option may be specified more than once in which case the specificed CPU affinity masks are merged\&. If the empty string is assigned, the mask is reset, all assignments prior to this will have no effect\&. See
+\fBsched_setaffinity\fR(2)
+for details\&.
+.RE
+.PP
+\fIUMask=\fR
+.RS 4
+Controls the file mode creation mask\&. Takes an access mode in octal notation\&. See
+\fBumask\fR(2)
+for details\&. Defaults to 0022\&.
+.RE
+.PP
+\fIEnvironment=\fR
+.RS 4
+Sets environment variables for executed processes\&. Takes a space\-separated list of variable assignments\&. This option may be specified more than once in which case all listed variables will be set\&. If the same variable is set twice, the later setting will override the earlier setting\&. If the empty string is assigned to this option, the list of environment variables is reset, all prior assignments have no effect\&. Variable expansion is not performed inside the strings, however, specifier expansion is possible\&. The $ character has no special meaning\&. If you need to assign a value containing spaces to a variable, use double quotes (") for the assignment\&.
+.sp
+Example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+gives three variables
+"VAR1",
+"VAR2",
+"VAR3"\&.
+.sp
+See
+\fBenviron\fR(7)
+for details about environment variables\&.
+.RE
+.PP
+\fIEnvironmentFile=\fR
+.RS 4
+Similar to
+\fIEnvironment=\fR
+but reads the environment variables from a text file\&. The text file should contain new\-line\-separated variable assignments\&. Empty lines and lines starting with ; or # will be ignored, which may be used for commenting\&. A line ending with a backslash will be concatenated with the following one, allowing multiline variable definitions\&. The parser strips leading and trailing whitespace from the values of assignments, unless you use double quotes (")\&.
+.sp
+The argument passed should be an absolute filename or wildcard expression, optionally prefixed with
+"\-", which indicates that if the file does not exist, it will not be read and no error or warning message is logged\&. This option may be specified more than once in which case all specified files are read\&. If the empty string is assigned to this option, the list of file to read is reset, all prior assignments have no effect\&.
+.sp
+The files listed with this directive will be read shortly before the process is executed\&. Settings from these files override settings made with
+\fIEnvironment=\fR\&. If the same variable is set twice from these files, the files will be read in the order they are specified and the later setting will override the earlier setting\&.
+.RE
+.PP
+\fIStandardInput=\fR
+.RS 4
+Controls where file descriptor 0 (STDIN) of the executed processes is connected to\&. Takes one of
+\fBnull\fR,
+\fBtty\fR,
+\fBtty\-force\fR,
+\fBtty\-fail\fR
+or
+\fBsocket\fR\&. If
+\fBnull\fR
+is selected, standard input will be connected to
+/dev/null, i\&.e\&. all read attempts by the process will result in immediate EOF\&. If
+\fBtty\fR
+is selected, standard input is connected to a TTY (as configured by
+\fITTYPath=\fR, see below) and the executed process becomes the controlling process of the terminal\&. If the terminal is already being controlled by another process, the executed process waits until the current controlling process releases the terminal\&.
+\fBtty\-force\fR
+is similar to
+\fBtty\fR, but the executed process is forcefully and immediately made the controlling process of the terminal, potentially removing previous controlling processes from the terminal\&.
+\fBtty\-fail\fR
+is similar to
+\fBtty\fR
+but if the terminal already has a controlling process start\-up of the executed process fails\&. The
+\fBsocket\fR
+option is only valid in socket\-activated services, and only when the socket configuration file (see
+\fBsystemd.socket\fR(5)
+for details) specifies a single socket only\&. If this option is set, standard input will be connected to the socket the service was activated from, which is primarily useful for compatibility with daemons designed for use with the traditional
+\fBinetd\fR(8)
+daemon\&. This setting defaults to
+\fBnull\fR\&.
+.RE
+.PP
+\fIStandardOutput=\fR
+.RS 4
+Controls where file descriptor 1 (STDOUT) of the executed processes is connected to\&. Takes one of
+\fBinherit\fR,
+\fBnull\fR,
+\fBtty\fR,
+\fBsyslog\fR,
+\fBkmsg\fR,
+\fBjournal\fR,
+\fBsyslog+console\fR,
+\fBkmsg+console\fR,
+\fBjournal+console\fR
+or
+\fBsocket\fR\&. If set to
+\fBinherit\fR, the file descriptor of standard input is duplicated for standard output\&. If set to
+\fBnull\fR, standard output will be connected to
+/dev/null, i\&.e\&. everything written to it will be lost\&. If set to
+\fBtty\fR, standard output will be connected to a tty (as configured via
+\fITTYPath=\fR, see below)\&. If the TTY is used for output only, the executed process will not become the controlling process of the terminal, and will not fail or wait for other processes to release the terminal\&.
+\fBsyslog\fR
+connects standard output to the
+\fBsyslog\fR(3)
+system syslog service\&.
+\fBkmsg\fR
+connects it with the kernel log buffer which is accessible via
+\fBdmesg\fR(1)\&.
+\fBjournal\fR
+connects it with the journal which is accessible via
+\fBjournalctl\fR(1)
+(Note that everything that is written to syslog or kmsg is implicitly stored in the journal as well, those options are hence supersets of this one)\&.
+\fBsyslog+console\fR,
+\fBjournal+console\fR
+and
+\fBkmsg+console\fR
+work similarly but copy the output to the system console as well\&.
+\fBsocket\fR
+connects standard output to a socket from socket activation, semantics are similar to the respective option of
+\fIStandardInput=\fR\&. This setting defaults to the value set with
+\fBDefaultStandardOutput=\fR
+in
+\fBsystemd-system.conf\fR(5), which defaults to
+\fBjournal\fR\&.
+.RE
+.PP
+\fIStandardError=\fR
+.RS 4
+Controls where file descriptor 2 (STDERR) of the executed processes is connected to\&. The available options are identical to those of
+\fIStandardOutput=\fR, with one exception: if set to
+\fBinherit\fR
+the file descriptor used for standard output is duplicated for standard error\&. This setting defaults to the value set with
+\fBDefaultStandardError=\fR
+in
+\fBsystemd-system.conf\fR(5), which defaults to
+\fBinherit\fR\&.
+.RE
+.PP
+\fITTYPath=\fR
+.RS 4
+Sets the terminal device node to use if standard input, output or stderr are connected to a TTY (see above)\&. Defaults to
+/dev/console\&.
+.RE
+.PP
+\fITTYReset=\fR
+.RS 4
+Reset the terminal device specified with
+\fITTYPath=\fR
+before and after execution\&. Defaults to
+"no"\&.
+.RE
+.PP
+\fITTYVHangup=\fR
+.RS 4
+Disconnect all clients which have opened the terminal device specified with
+\fITTYPath=\fR
+before and after execution\&. Defaults to
+"no"\&.
+.RE
+.PP
+\fITTYVTDisallocate=\fR
+.RS 4
+If the terminal device specified with
+\fITTYPath=\fR
+is a virtual console terminal, try to deallocate the TTY before and after execution\&. This ensures that the screen and scrollback buffer is cleared\&. Defaults to
+"no"\&.
+.RE
+.PP
+\fISyslogIdentifier=\fR
+.RS 4
+Sets the process name to prefix log lines sent to syslog or the kernel log buffer with\&. If not set, defaults to the process name of the executed process\&. This option is only useful when
+\fIStandardOutput=\fR
+or
+\fIStandardError=\fR
+are set to
+\fBsyslog\fR
+or
+\fBkmsg\fR\&.
+.RE
+.PP
+\fISyslogFacility=\fR
+.RS 4
+Sets the syslog facility to use when logging to syslog\&. One of
+\fBkern\fR,
+\fBuser\fR,
+\fBmail\fR,
+\fBdaemon\fR,
+\fBauth\fR,
+\fBsyslog\fR,
+\fBlpr\fR,
+\fBnews\fR,
+\fBuucp\fR,
+\fBcron\fR,
+\fBauthpriv\fR,
+\fBftp\fR,
+\fBlocal0\fR,
+\fBlocal1\fR,
+\fBlocal2\fR,
+\fBlocal3\fR,
+\fBlocal4\fR,
+\fBlocal5\fR,
+\fBlocal6\fR
+or
+\fBlocal7\fR\&. See
+\fBsyslog\fR(3)
+for details\&. This option is only useful when
+\fIStandardOutput=\fR
+or
+\fIStandardError=\fR
+are set to
+\fBsyslog\fR\&. Defaults to
+\fBdaemon\fR\&.
+.RE
+.PP
+\fISyslogLevel=\fR
+.RS 4
+Default syslog level to use when logging to syslog or the kernel log buffer\&. One of
+\fBemerg\fR,
+\fBalert\fR,
+\fBcrit\fR,
+\fBerr\fR,
+\fBwarning\fR,
+\fBnotice\fR,
+\fBinfo\fR,
+\fBdebug\fR\&. See
+\fBsyslog\fR(3)
+for details\&. This option is only useful when
+\fIStandardOutput=\fR
+or
+\fIStandardError=\fR
+are set to
+\fBsyslog\fR
+or
+\fBkmsg\fR\&. Note that individual lines output by the daemon might be prefixed with a different log level which can be used to override the default log level specified here\&. The interpretation of these prefixes may be disabled with
+\fISyslogLevelPrefix=\fR, see below\&. For details see
+\fBsd-daemon\fR(3)\&. Defaults to
+\fBinfo\fR\&.
+.RE
+.PP
+\fISyslogLevelPrefix=\fR
+.RS 4
+Takes a boolean argument\&. If true and
+\fIStandardOutput=\fR
+or
+\fIStandardError=\fR
+are set to
+\fBsyslog\fR,
+\fBkmsg\fR
+or
+\fBjournal\fR, log lines written by the executed process that are prefixed with a log level will be passed on to syslog with this log level set but the prefix removed\&. If set to false, the interpretation of these prefixes is disabled and the logged lines are passed on as\-is\&. For details about this prefixing see
+\fBsd-daemon\fR(3)\&. Defaults to true\&.
+.RE
+.PP
+\fITimerSlackNSec=\fR
+.RS 4
+Sets the timer slack in nanoseconds for the executed processes\&. The timer slack controls the accuracy of wake\-ups triggered by timers\&. See
+\fBprctl\fR(2)
+for more information\&. Note that in contrast to most other time span definitions this parameter takes an integer value in nano\-seconds if no unit is specified\&. The usual time units are understood too\&.
+.RE
+.PP
+\fILimitCPU=\fR, \fILimitFSIZE=\fR, \fILimitDATA=\fR, \fILimitSTACK=\fR, \fILimitCORE=\fR, \fILimitRSS=\fR, \fILimitNOFILE=\fR, \fILimitAS=\fR, \fILimitNPROC=\fR, \fILimitMEMLOCK=\fR, \fILimitLOCKS=\fR, \fILimitSIGPENDING=\fR, \fILimitMSGQUEUE=\fR, \fILimitNICE=\fR, \fILimitRTPRIO=\fR, \fILimitRTTIME=\fR
+.RS 4
+These settings control various resource limits for executed processes\&. See
+\fBsetrlimit\fR(2)
+for details\&. Use the string
+\fIinfinity\fR
+to configure no limit on a specific resource\&.
+.RE
+.PP
+\fIPAMName=\fR
+.RS 4
+Sets the PAM service name to set up a session as\&. If set, the executed process will be registered as a PAM session under the specified service name\&. This is only useful in conjunction with the
+\fIUser=\fR
+setting\&. If not set, no PAM session will be opened for the executed processes\&. See
+\fBpam\fR(8)
+for details\&.
+.RE
+.PP
+\fITCPWrapName=\fR
+.RS 4
+If this is a socket\-activated service, this sets the tcpwrap service name to check the permission for the current connection with\&. This is only useful in conjunction with socket\-activated services, and stream sockets (TCP) in particular\&. It has no effect on other socket types (e\&.g\&. datagram/UDP) and on processes unrelated to socket\-based activation\&. If the tcpwrap verification fails, daemon start\-up will fail and the connection is terminated\&. See
+\fBtcpd\fR(8)
+for details\&. Note that this option may be used to do access control checks only\&. Shell commands and commands described in
+\fBhosts_options\fR(5)
+are not supported\&.
+.RE
+.PP
+\fICapabilityBoundingSet=\fR
+.RS 4
+Controls which capabilities to include in the capability bounding set for the executed process\&. See
+\fBcapabilities\fR(7)
+for details\&. Takes a whitespace\-separated list of capability names as read by
+\fBcap_from_name\fR(3), e\&.g\&.
+\fBCAP_SYS_ADMIN\fR,
+\fBCAP_DAC_OVERRIDE\fR,
+\fBCAP_SYS_PTRACE\fR\&. Capabilities listed will be included in the bounding set, all others are removed\&. If the list of capabilities is prefixed with
+"~", all but the listed capabilities will be included, the effect of the assignment inverted\&. Note that this option also affects the respective capabilities in the effective, permitted and inheritable capability sets, on top of what
+\fICapabilities=\fR
+does\&. If this option is not used, the capability bounding set is not modified on process execution, hence no limits on the capabilities of the process are enforced\&. This option may appear more than once in which case the bounding sets are merged\&. If the empty string is assigned to this option, the bounding set is reset to the empty capability set, and all prior settings have no effect\&. If set to
+"~"
+(without any further argument), the bounding set is reset to the full set of available capabilities, also undoing any previous settings\&.
+.RE
+.PP
+\fISecureBits=\fR
+.RS 4
+Controls the secure bits set for the executed process\&. See
+\fBcapabilities\fR(7)
+for details\&. Takes a list of strings:
+\fBkeep\-caps\fR,
+\fBkeep\-caps\-locked\fR,
+\fBno\-setuid\-fixup\fR,
+\fBno\-setuid\-fixup\-locked\fR,
+\fBnoroot\fR
+and/or
+\fBnoroot\-locked\fR\&. This option may appear more than once in which case the secure bits are ORed\&. If the empty string is assigned to this option, the bits are reset to 0\&.
+.RE
+.PP
+\fICapabilities=\fR
+.RS 4
+Controls the
+\fBcapabilities\fR(7)
+set for the executed process\&. Take a capability string describing the effective, permitted and inherited capability sets as documented in
+\fBcap_from_text\fR(3)\&. Note that these capability sets are usually influenced by the capabilities attached to the executed file\&. Due to that
+\fICapabilityBoundingSet=\fR
+is probably the much more useful setting\&.
+.RE
+.PP
+\fIReadWriteDirectories=\fR, \fIReadOnlyDirectories=\fR, \fIInaccessibleDirectories=\fR
+.RS 4
+Sets up a new file system namespace for executed processes\&. These options may be used to limit access a process might have to the main file system hierarchy\&. Each setting takes a space\-separated list of absolute directory paths\&. Directories listed in
+\fIReadWriteDirectories=\fR
+are accessible from within the namespace with the same access rights as from outside\&. Directories listed in
+\fIReadOnlyDirectories=\fR
+are accessible for reading only, writing will be refused even if the usual file access controls would permit this\&. Directories listed in
+\fIInaccessibleDirectories=\fR
+will be made inaccessible for processes inside the namespace\&. Note that restricting access with these options does not extend to submounts of a directory\&. You must list submounts separately in these settings to ensure the same limited access\&. These options may be specified more than once in which case all directories listed will have limited access from within the namespace\&. If the empty string is assigned to this option, the specific list is reset, and all prior assignments have no effect\&.
+.sp
+Paths in
+\fIReadOnlyDirectories=\fR
+and
+\fIInaccessibleDirectories=\fR
+may be prefixed with
+"\-", in which case they will be ignored when they do not exist\&.
+.RE
+.PP
+\fIPrivateTmp=\fR
+.RS 4
+Takes a boolean argument\&. If true, sets up a new file system namespace for the executed processes and mounts private
+/tmp
+and
+/var/tmp
+directories inside it, that are not shared by processes outside of the namespace\&. This is useful to secure access to temporary files of the process, but makes sharing between processes via
+/tmp
+or
+/var/tmp
+impossible\&. All temporary data created by service will be removed after service is stopped\&. Defaults to false\&.
+.RE
+.PP
+\fIPrivateNetwork=\fR
+.RS 4
+Takes a boolean argument\&. If true, sets up a new network namespace for the executed processes and configures only the loopback network device
+"lo"
+inside it\&. No other network devices will be available to the executed process\&. This is useful to securely turn off network access by the executed process\&. Defaults to false\&.
+.RE
+.PP
+\fIMountFlags=\fR
+.RS 4
+Takes a mount propagation flag:
+\fBshared\fR,
+\fBslave\fR
+or
+\fBprivate\fR, which control whether the file system namespace set up for this unit\*(Aqs processes will receive or propagate new mounts\&. See
+\fBmount\fR(2)
+for details\&. Default to
+\fBshared\fR\&.
+.RE
+.PP
+\fIUtmpIdentifier=\fR
+.RS 4
+Takes a four character identifier string for an utmp/wtmp entry for this service\&. This should only be set for services such as
+\fBgetty\fR
+implementations where utmp/wtmp entries must be created and cleared before and after execution\&. If the configured string is longer than four characters, it is truncated and the terminal four characters are used\&. This setting interprets %I style string replacements\&. This setting is unset by default, i\&.e\&. no utmp/wtmp entries are created or cleaned up for this service\&.
+.RE
+.PP
+\fIIgnoreSIGPIPE=\fR
+.RS 4
+Takes a boolean argument\&. If true, causes
+\fBSIGPIPE\fR
+to be ignored in the executed process\&. Defaults to true because
+\fBSIGPIPE\fR
+generally is useful only in shell pipelines\&.
+.RE
+.PP
+\fINoNewPrivileges=\fR
+.RS 4
+Takes a boolean argument\&. If true, ensures that the service process and all its children can never gain new privileges\&. This option is more powerful than the respective secure bits flags (see above), as it also prohibits UID changes of any kind\&. This is the simplest, most effective way to ensure that a process and its children can never elevate privileges again\&.
+.RE
+.PP
+\fISystemCallFilter=\fR
+.RS 4
+Takes a space\-separated list of system call names\&. If this setting is used, all system calls executed by the unit process except for the listed ones will result in immediate process termination with the
+\fBSIGSYS\fR
+signal (whitelisting)\&. If the first character of the list is
+"~", the effect is inverted: only the listed system calls will result in immediate process termination (blacklisting)\&. If this option is used,
+\fINoNewPrivileges=yes\fR
+is implied\&. This feature makes use of the Secure Computing Mode 2 interfaces of the kernel (\*(Aqseccomp filtering\*(Aq) and is useful for enforcing a minimal sandboxing environment\&. Note that the
+\fBexecve\fR,
+\fBrt_sigreturn\fR,
+\fBsigreturn\fR,
+\fBexit_group\fR,
+\fBexit\fR
+system calls are implicitly whitelisted and do not need to be listed explicitly\&. This option may be specified more than once in which case the filter masks are merged\&. If the empty string is assigned, the filter is reset, all prior assignments will have no effect\&.
+.RE
+.SH "ENVIRONMENT VARIABLES IN SPAWNED PROCESSES"
+.PP
+Processes started by the system are executed in a clean environment in which select variables listed below are set\&. System processes started by systemd do not inherit variables from PID 1, but processes started by user systemd instances inherit all environment variables from the user systemd instance\&.
+.PP
+\fI$PATH\fR
+.RS 4
+Colon\-separated list of directiories to use when launching executables\&. Systemd uses a fixed value of
+/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&.
+.RE
+.PP
+\fI$LANG\fR
+.RS 4
+Locale\&. Can be set in
+\fBlocale.conf\fR(5)
+or on the kernel command line (see
+\fBsystemd\fR(1)
+and
+\fBkernel-command-line\fR(7))\&.
+.RE
+.PP
+\fI$USER\fR, \fI$HOME\fR
+.RS 4
+User name and home directory\&. Set for the units which have
+\fIUser=\fR
+set, which includes user
+\fBsystemd\fR
+instances\&. See
+\fBpasswd\fR(5)\&.
+.RE
+.PP
+\fI$XDG_RUNTIME_DIR\fR
+.RS 4
+The directory for volatile state\&. Set for the user
+\fBsystemd\fR
+instance, and also in user sessions\&. See
+\fBpam_systemd\fR(8)\&.
+.RE
+.PP
+\fI$XDG_SESSION_ID\fR, \fI$XDG_SEAT\fR, \fI$XDG_VTNR\fR
+.RS 4
+The identifier of the session, and the seat name, and virtual terminal of the session\&. Set by
+\fBpam_systemd\fR(8)
+for login sessions\&.
+\fI$XDG_SEAT\fR
+and
+\fI$XDG_VTNR\fR
+will be only set when attached to a seat and a tty\&.
+.RE
+.PP
+\fI$MANAGERPID\fR
+.RS 4
+The PID of the user
+\fBsystemd\fR
+instance, set for processes spawned by it\&.
+.RE
+.PP
+\fI$LISTEN_FDS\fR, \fI$LISTEN_PID\fR
+.RS 4
+Information about file descriptors passed to a service for socket activation\&. See
+\fBsd_listen_fds\fR(3)\&.
+.RE
+.PP
+Additional variables may be configured by the following means: for processes spawned in specific units, use the
+\fIEnvironment=\fR
+and
+\fIEnvironmentFile=\fR
+options above; to specify variables globally, use
+\fIDefaultEnvironment=\fR
+(see
+\fBsystemd-system.conf\fR(5)) or the kernel option
+\fIsystemd\&.setenv=\fR
+(see
+\fBsystemd\fR(1))\&. Additional variables may also be set through PAM, c\&.f\&.\ \&\fBpam_env\fR(8)\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBjournalctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.directives\fR(7),
+\fBexec\fR(3)
+.SH "NOTES"
+.IP " 1." 4
+proc.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/filesystems/proc.txt
+.RE
diff --git a/man/systemd.exec.html b/man/systemd.exec.html
index d7fb2cbfd5..41aa03238c 100644
--- a/man/systemd.exec.html
+++ b/man/systemd.exec.html
@@ -19,11 +19,11 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.exec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.exec — Execution environment configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.exec"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.exec — Execution environment configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
<code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code>,
<code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code>,
- <code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></p></div><div class="refsect1"><a name="idm259787182016"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Unit configuration files for services, sockets,
- mount points and swap devices share a subset of
+ <code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></p></div><div class="refsect1"><a name="idm274706676192"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Unit configuration files for services, sockets,
+ mount points, and swap devices share a subset of
configuration options which define the execution
environment of spawned processes.</p><p>This man page lists the configuration options
shared by these four unit types. See
@@ -32,17 +32,17 @@
files, and
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
<a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>,
- <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>
+ <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>,
and
<a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>
for more information on the specific unit
configuration files. The execution specific
configuration options are configured in the [Service],
[Socket], [Mount], or [Swap] sections, depending on the unit
- type.</p></div><div class="refsect1"><a name="idm259787175536"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="WorkingDirectory="><span class="term"><code class="varname">WorkingDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#WorkingDirectory=">¶</a></dt><dd><p>Takes an absolute
+ type.</p></div><div class="refsect1"><a name="idm274706543616"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="WorkingDirectory="><span class="term"><code class="varname">WorkingDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#WorkingDirectory=">¶</a></dt><dd><p>Takes an absolute
directory path. Sets the working
directory for executed processes. If
- not set defaults to the root directory
+ not set, defaults to the root directory
when systemd is running as a system
instance and the respective user's
home directory if run as
@@ -51,7 +51,7 @@
directory for executed processes, with
the
<a href="chroot.html"><span class="citerefentry"><span class="refentrytitle">chroot</span>(2)</span></a>
- system call. If this is used it must
+ system call. If this is used, it must
be ensured that the process and all
its auxiliary files are available in
the <code class="function">chroot()</code>
@@ -62,7 +62,7 @@
set, the default group of the user is
chosen.</p></dd><dt id="SupplementaryGroups="><span class="term"><code class="varname">SupplementaryGroups=</code></span><a class="headerlink" title="Permalink to this term" href="#SupplementaryGroups=">¶</a></dt><dd><p>Sets the supplementary
Unix groups the processes are executed
- as. This takes a space separated list
+ as. This takes a space-separated list
of group names or IDs. This option may
be specified more than once in which
case all listed groups are set as
@@ -87,7 +87,7 @@
between -1000 (to disable OOM killing
for this process) and 1000 (to make
killing of this process under memory
- pressure very likely). See <a class="ulink" href="http://www.kernel.org/doc/Documentation/filesystems/proc.txt" target="_top">proc.txt</a>
+ pressure very likely). See <a class="ulink" href="https://www.kernel.org/doc/Documentation/filesystems/proc.txt" target="_top">proc.txt</a>
for details.</p></dd><dt id="IOSchedulingClass="><span class="term"><code class="varname">IOSchedulingClass=</code></span><a class="headerlink" title="Permalink to this term" href="#IOSchedulingClass=">¶</a></dt><dd><p>Sets the IO scheduling
class for executed processes. Takes an
integer between 0 and 3 or one of the
@@ -124,7 +124,7 @@
See <a href="sched_setscheduler.html"><span class="citerefentry"><span class="refentrytitle">sched_setscheduler</span>(2)</span></a>
for details.
</p></dd><dt id="CPUSchedulingResetOnFork="><span class="term"><code class="varname">CPUSchedulingResetOnFork=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUSchedulingResetOnFork=">¶</a></dt><dd><p>Takes a boolean
- argument. If true elevated CPU
+ argument. If true, elevated CPU
scheduling priorities and policies
will be reset when the executed
processes fork, and can hence not leak
@@ -137,7 +137,7 @@
be specified more than once in which
case the specificed CPU affinity masks
are merged. If the empty string is
- assigned the mask is reset, all
+ assigned, the mask is reset, all
assignments prior to this will have no
effect. See
<a href="sched_setaffinity.html"><span class="citerefentry"><span class="refentrytitle">sched_setaffinity</span>(2)</span></a>
@@ -153,21 +153,22 @@
option may be specified more than once
in which case all listed variables
will be set. If the same variable is
- set twice the later setting will
+ set twice, the later setting will
override the earlier setting. If the
empty string is assigned to this
- option the list of environment
+ option, the list of environment
variables is reset, all prior
assignments have no effect.
Variable expansion is not performed
- inside the strings, and $ has no special
- meaning.
+ inside the strings, however, specifier
+ expansion is possible. The $ character has
+ no special meaning.
If you need to assign a value containing spaces
to a variable, use double quotes (")
for the assignment.</p><p>Example:
</p><pre class="programlisting">Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</pre><p>
- gives three variables <code class="literal">VAR1</code>,
- <code class="literal">VAR2</code>, <code class="literal">VAR3</code>.
+ gives three variables "<code class="literal">VAR1</code>",
+ "<code class="literal">VAR2</code>", "<code class="literal">VAR3</code>".
</p><p>
See
<a href="environ.html"><span class="citerefentry"><span class="refentrytitle">environ</span>(7)</span></a>
@@ -175,7 +176,7 @@
<code class="varname">Environment=</code> but
reads the environment variables from a
text file. The text file should
- contain new-line separated variable
+ contain new-line-separated variable
assignments. Empty lines and lines
starting with ; or # will be ignored,
which may be used for commenting. A line
@@ -185,24 +186,25 @@
and trailing whitespace from the values
of assignments, unless you use
double quotes (").</p><p>The argument passed should be an
- absolute file name or wildcard
+ absolute filename or wildcard
expression, optionally prefixed with
- "-", which indicates that if the file
- does not exist it won't be read and no
- error or warning message is logged.
- This option may be specified more than
- once in which case all specified files
- are read. If the empty string is
- assigned to this option the list of
- file to read is reset, all prior
- assignments have no effect.</p><p>The files listed with this
+ "<code class="literal">-</code>", which indicates
+ that if the file does not exist, it
+ will not be read and no error or warning
+ message is logged. This option may be
+ specified more than once in which case
+ all specified files are read. If the
+ empty string is assigned to this
+ option, the list of file to read is
+ reset, all prior assignments have no
+ effect.</p><p>The files listed with this
directive will be read shortly before
the process is executed. Settings from
these files override settings made
with
<code class="varname">Environment=</code>. If
the same variable is set twice from
- these files the files will be read in
+ these files, the files will be read in
the order they are specified and the
later setting will override the
earlier setting.</p></dd><dt id="StandardInput="><span class="term"><code class="varname">StandardInput=</code></span><a class="headerlink" title="Permalink to this term" href="#StandardInput=">¶</a></dt><dd><p>Controls where file
@@ -213,19 +215,19 @@
<code class="option">tty-force</code>,
<code class="option">tty-fail</code> or
<code class="option">socket</code>. If
- <code class="option">null</code> is selected
+ <code class="option">null</code> is selected,
standard input will be connected to
<code class="filename">/dev/null</code>,
i.e. all read attempts by the process
will result in immediate EOF. If
- <code class="option">tty</code> is selected
+ <code class="option">tty</code> is selected,
standard input is connected to a TTY
(as configured by
<code class="varname">TTYPath=</code>, see
below) and the executed process
becomes the controlling process of the
terminal. If the terminal is already
- being controlled by another process the
+ being controlled by another process, the
executed process waits until the current
controlling process releases the
terminal.
@@ -247,7 +249,7 @@
file (see
<a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>
for details) specifies a single socket
- only. If this option is set standard
+ only. If this option is set, standard
input will be connected to the socket
the service was activated from, which
is primarily useful for compatibility
@@ -268,19 +270,19 @@
<code class="option">kmsg+console</code>,
<code class="option">journal+console</code> or
<code class="option">socket</code>. If set to
- <code class="option">inherit</code> the file
+ <code class="option">inherit</code>, the file
descriptor of standard input is
duplicated for standard output. If set
- to <code class="option">null</code> standard
+ to <code class="option">null</code>, standard
output will be connected to
<code class="filename">/dev/null</code>,
i.e. everything written to it will be
- lost. If set to <code class="option">tty</code>
+ lost. If set to <code class="option">tty</code>,
standard output will be connected to a
tty (as configured via
<code class="varname">TTYPath=</code>, see
below). If the TTY is used for output
- only the executed process will not
+ only, the executed process will not
become the controlling process of the
terminal, and will not fail or wait
for other processes to release the
@@ -338,23 +340,23 @@
device specified with
<code class="varname">TTYPath=</code> before and
after execution. Defaults to
- <code class="literal">no</code>.</p></dd><dt id="TTYVHangup="><span class="term"><code class="varname">TTYVHangup=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVHangup=">¶</a></dt><dd><p>Disconnect all clients
+ "<code class="literal">no</code>".</p></dd><dt id="TTYVHangup="><span class="term"><code class="varname">TTYVHangup=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVHangup=">¶</a></dt><dd><p>Disconnect all clients
which have opened the terminal device
specified with
<code class="varname">TTYPath=</code>
before and after execution. Defaults
to
- <code class="literal">no</code>.</p></dd><dt id="TTYVTDisallocate="><span class="term"><code class="varname">TTYVTDisallocate=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVTDisallocate=">¶</a></dt><dd><p>If the terminal
+ "<code class="literal">no</code>".</p></dd><dt id="TTYVTDisallocate="><span class="term"><code class="varname">TTYVTDisallocate=</code></span><a class="headerlink" title="Permalink to this term" href="#TTYVTDisallocate=">¶</a></dt><dd><p>If the terminal
device specified with
<code class="varname">TTYPath=</code> is a
- virtual console terminal try to
+ virtual console terminal, try to
deallocate the TTY before and after
execution. This ensures that the
screen and scrollback buffer is
cleared. Defaults to
- <code class="literal">no</code>.</p></dd><dt id="SyslogIdentifier="><span class="term"><code class="varname">SyslogIdentifier=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogIdentifier=">¶</a></dt><dd><p>Sets the process name
+ "<code class="literal">no</code>".</p></dd><dt id="SyslogIdentifier="><span class="term"><code class="varname">SyslogIdentifier=</code></span><a class="headerlink" title="Permalink to this term" href="#SyslogIdentifier=">¶</a></dt><dd><p>Sets the process name
to prefix log lines sent to syslog or
- the kernel log buffer with. If not set
+ the kernel log buffer with. If not set,
defaults to the process name of the
executed process. This option is only
useful when
@@ -455,17 +457,17 @@
<code class="varname">infinity</code> to
configure no limit on a specific
resource.</p></dd><dt id="PAMName="><span class="term"><code class="varname">PAMName=</code></span><a class="headerlink" title="Permalink to this term" href="#PAMName=">¶</a></dt><dd><p>Sets the PAM service
- name to set up a session as. If set
+ name to set up a session as. If set,
the executed process will be
registered as a PAM session under the
specified service name. This is only
useful in conjunction with the
<code class="varname">User=</code> setting. If
- not set no PAM session will be opened
+ not set, no PAM session will be opened
for the executed processes. See
<a href="pam.html"><span class="citerefentry"><span class="refentrytitle">pam</span>(8)</span></a>
for details.</p></dd><dt id="TCPWrapName="><span class="term"><code class="varname">TCPWrapName=</code></span><a class="headerlink" title="Permalink to this term" href="#TCPWrapName=">¶</a></dt><dd><p>If this is a
- socket-activated service this sets the
+ socket-activated service, this sets the
tcpwrap service name to check the
permission for the current connection
with. This is only useful in
@@ -475,7 +477,7 @@
socket types (e.g. datagram/UDP) and
on processes unrelated to socket-based
activation. If the tcpwrap
- verification fails daemon start-up
+ verification fails, daemon start-up
will fail and the connection is
terminated. See
<a href="tcpd.html"><span class="citerefentry"><span class="refentrytitle">tcpd</span>(8)</span></a>
@@ -489,17 +491,16 @@
capability bounding set for the
executed process. See
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>
- for details. Takes a whitespace
- separated list of capability names as
- read by
+ for details. Takes a whitespace-separated
+ list of capability names as read by
<a href="cap_from_name.html"><span class="citerefentry"><span class="refentrytitle">cap_from_name</span>(3)</span></a>,
- e.g. <code class="literal">CAP_SYS_ADMIN
- CAP_DAC_OVERRIDE
- CAP_SYS_PTRACE</code>.
+ e.g. <code class="constant">CAP_SYS_ADMIN</code>,
+ <code class="constant">CAP_DAC_OVERRIDE</code>,
+ <code class="constant">CAP_SYS_PTRACE</code>.
Capabilities listed will be included
in the bounding set, all others are
removed. If the list of capabilities
- is prefixed with <code class="literal">~</code>
+ is prefixed with "<code class="literal">~</code>",
all but the listed capabilities will
be included, the effect of the
assignment inverted. Note that this
@@ -508,7 +509,7 @@
permitted and inheritable capability
sets, on top of what
<code class="varname">Capabilities=</code>
- does. If this option is not used the
+ does. If this option is not used, the
capability bounding set is not
modified on process execution, hence
no limits on the capabilities of the
@@ -516,11 +517,11 @@
appear more than once in which case
the bounding sets are merged. If the
empty string is assigned to this
- option the bounding set is reset to
+ option, the bounding set is reset to
the empty capability set, and all
prior settings have no effect. If set
- to <code class="literal">~</code> (without any
- further argument) the bounding set is
+ to "<code class="literal">~</code>" (without any
+ further argument), the bounding set is
reset to the full set of available
capabilities, also undoing any
previous settings.</p></dd><dt id="SecureBits="><span class="term"><code class="varname">SecureBits=</code></span><a class="headerlink" title="Permalink to this term" href="#SecureBits=">¶</a></dt><dd><p>Controls the secure
@@ -536,7 +537,7 @@
option may appear more than once in
which case the secure bits are
ORed. If the empty string is assigned
- to this option the bits are reset to
+ to this option, the bits are reset to
0.</p></dd><dt id="Capabilities="><span class="term"><code class="varname">Capabilities=</code></span><a class="headerlink" title="Permalink to this term" href="#Capabilities=">¶</a></dt><dd><p>Controls the
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>
set for the executed process. Take a
@@ -550,214 +551,11 @@
that
<code class="varname">CapabilityBoundingSet=</code>
is probably the much more useful
- setting.</p></dd><dt id="ControlGroup="><span class="term"><code class="varname">ControlGroup=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroup=">¶</a></dt><dd><p>Controls the control
- groups the executed processes shall be
- made members of. Takes a
- space-separated list of cgroup
- identifiers. A cgroup identifier is
- formatted like
- <code class="filename">cpu:/foo/bar</code>,
- where "cpu" indicates the kernel
- control group controller used, and
- <code class="filename">/foo/bar</code> is the
- control group path. The controller
- name and ":" may be omitted in which
- case the named systemd control group
- hierarchy is implied. Alternatively,
- the path and ":" may be omitted, in
- which case the default control group
- path for this unit is implied.</p><p>This option may be used to place
- executed processes in arbitrary groups
- in arbitrary hierarchies -- which may
- then be externally configured with
- additional execution limits. By
- default systemd will place all
- executed processes in separate
- per-unit control groups (named after
- the unit) in the systemd named
- hierarchy. This option is primarily
- intended to place executed processes
- in specific paths in specific kernel
- controller hierarchies. It is not
- recommended to manipulate the service
- control group path in the private
- systemd named hierarchy
- (i.e. <code class="literal">name=systemd</code>),
- and doing this might result in
- undefined behaviour. For details about
- control groups see <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>.</p><p>This option may appear more than
- once, in which case the list of
- control group assignments is
- merged. If the same hierarchy gets two
- different paths assigned only the
- later setting will take effect. If the
- empty string is assigned to this
- option the list of control group
- assignments is reset, all previous
- assignments will have no
- effect.</p><p>Note that the list of control
- group assignments of a unit is
- extended implicitly based on the
- settings of
- <code class="varname">DefaultControllers=</code>
- of
- <a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>,
- but a unit's
- <code class="varname">ControlGroup=</code>
- setting for a specific controller
- takes precedence.</p></dd><dt id="ControlGroupModify="><span class="term"><code class="varname">ControlGroupModify=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroupModify=">¶</a></dt><dd><p>Takes a boolean
- argument. If true, the control groups
- created for this unit will be owned by
- the user specified with
- <code class="varname">User=</code> (and the
- appropriate group), and he/she can create
- subgroups as well as add processes to
- the group.</p></dd><dt id="ControlGroupPersistent="><span class="term"><code class="varname">ControlGroupPersistent=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroupPersistent=">¶</a></dt><dd><p>Takes a boolean
- argument. If true, the control groups
- created for this unit will be marked
- to be persistent, i.e. systemd will
- not remove them when stopping the
- unit. The default is false, meaning
- that the control groups will be
- removed when the unit is stopped. For
- details about the semantics of this
- logic see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups" target="_top">PaxControlGroups</a>.</p></dd><dt id="ControlGroupAttribute="><span class="term"><code class="varname">ControlGroupAttribute=</code></span><a class="headerlink" title="Permalink to this term" href="#ControlGroupAttribute=">¶</a></dt><dd><p>Set a specific control
- group attribute for executed
- processes, and (if needed) add the
- executed processes to a cgroup in the
- hierarchy of the controller the
- attribute belongs to. Takes two
- space-separated arguments: the
- attribute name (syntax is
- <code class="literal">cpu.shares</code> where
- <code class="literal">cpu</code> refers to a
- specific controller and
- <code class="literal">shares</code> to the
- attribute name), and the attribute
- value. Example:
- <code class="literal">ControlGroupAttribute=cpu.shares
- 512</code>. If this option is used
- for an attribute that belongs to a
- kernel controller hierarchy the unit
- is not already configured to be added
- to (for example via the
- <code class="literal">ControlGroup=</code>
- option) then the unit will be added to
- the controller and the default unit
- cgroup path is implied. Thus, using
- <code class="varname">ControlGroupAttribute=</code>
- is in most cases sufficient to make
- use of control group enforcements,
- explicit
- <code class="varname">ControlGroup=</code> are
- only necessary in case the implied
- default control group path for a
- service is not desirable. For details
- about control group attributes see
- <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>. This
- option may appear more than once, in
- order to set multiple control group
- attributes. If this option is used
- multiple times for the same cgroup
- attribute only the later setting takes
- effect. If the empty string is
- assigned to this option the list of
- attributes is reset, all previous
- cgroup attribute settings have no
- effect, including those done with
- <code class="varname">CPUShares=</code>,
- <code class="varname">MemoryLimit=</code>,
- <code class="varname">MemorySoftLimit</code>,
- <code class="varname">DeviceAllow=</code>,
- <code class="varname">DeviceDeny=</code>,
- <code class="varname">BlockIOWeight=</code>,
- <code class="varname">BlockIOReadBandwidth=</code>,
- <code class="varname">BlockIOWriteBandwidth=</code>.
- </p></dd><dt id="CPUShares="><span class="term"><code class="varname">CPUShares=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUShares=">¶</a></dt><dd><p>Assign the specified
- overall CPU time shares to the
- processes executed. Takes an integer
- value. This controls the
- <code class="literal">cpu.shares</code> control
- group attribute, which defaults to
- 1024. For details about this control
- group attribute see <a class="ulink" href="http://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt" target="_top">sched-design-CFS.txt</a>.</p></dd><dt id="MemoryLimit="><span class="term"><code class="varname">MemoryLimit=</code>, </span><span class="term"><code class="varname">MemorySoftLimit=</code></span><a class="headerlink" title="Permalink to this term" href="#MemoryLimit=">¶</a></dt><dd><p>Limit the overall memory usage
- of the executed processes to a certain
- size. Takes a memory size in bytes. If
- the value is suffixed with K, M, G or
- T the specified memory size is parsed
- as Kilobytes, Megabytes, Gigabytes,
- or Terabytes (to the base
- 1024), respectively. This controls the
- <code class="literal">memory.limit_in_bytes</code>
- and
- <code class="literal">memory.soft_limit_in_bytes</code>
- control group attributes. For details
- about these control group attributes
- see <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/memory.txt" target="_top">memory.txt</a>.</p></dd><dt id="DeviceAllow="><span class="term"><code class="varname">DeviceAllow=</code>, </span><span class="term"><code class="varname">DeviceDeny=</code></span><a class="headerlink" title="Permalink to this term" href="#DeviceAllow=">¶</a></dt><dd><p>Control access to
- specific device nodes by the executed processes. Takes two
- space separated strings: a device node
- path (such as
- <code class="filename">/dev/null</code>)
- followed by a combination of r, w, m
- to control reading, writing, or
- creating of the specific device node
- by the unit, respectively. This controls the
- <code class="literal">devices.allow</code>
- and
- <code class="literal">devices.deny</code>
- control group attributes. For details
- about these control group attributes
- see <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/devices.txt" target="_top">devices.txt</a>.</p></dd><dt id="BlockIOWeight="><span class="term"><code class="varname">BlockIOWeight=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOWeight=">¶</a></dt><dd><p>Set the default or
- per-device overall block IO weight
- value for the executed
- processes. Takes either a single
- weight value (between 10 and 1000) to
- set the default block IO weight, or a
- space separated pair of a file path
- and a weight value to specify the
- device specific weight value (Example:
- "/dev/sda 500"). The file path may be
- specified as path to a block device
- node or as any other file in which
- case the backing block device of the
- file system of the file is
- determined. This controls the
- <code class="literal">blkio.weight</code> and
- <code class="literal">blkio.weight_device</code>
- control group attributes, which
- default to 1000. Use this option
- multiple times to set weights for
- multiple devices. For details about
- these control group attributes see
- <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt" target="_top">blkio-controller.txt</a>.</p></dd><dt id="BlockIOReadBandwidth="><span class="term"><code class="varname">BlockIOReadBandwidth=</code>, </span><span class="term"><code class="varname">BlockIOWriteBandwidth=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOReadBandwidth=">¶</a></dt><dd><p>Set the per-device
- overall block IO bandwidth limit for
- the executed processes. Takes a space
- separated pair of a file path and a
- bandwidth value (in bytes per second)
- to specify the device specific
- bandwidth. The file path may be
- specified as path to a block device
- node or as any other file in which
- case the backing block device of the
- file system of the file is determined.
- If the bandwidth is suffixed with K, M,
- G, or T the specified bandwidth is
- parsed as Kilobytes, Megabytes,
- Gigabytes, or Terabytes, respectively (Example:
- "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0
- 5M"). This controls the
- <code class="literal">blkio.read_bps_device</code>
- and
- <code class="literal">blkio.write_bps_device</code>
- control group attributes. Use this
- option multiple times to set bandwidth
- limits for multiple devices. For
- details about these control group
- attributes see <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt" target="_top">blkio-controller.txt</a>.</p></dd><dt id="ReadWriteDirectories="><span class="term"><code class="varname">ReadWriteDirectories=</code>, </span><span class="term"><code class="varname">ReadOnlyDirectories=</code>, </span><span class="term"><code class="varname">InaccessibleDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#ReadWriteDirectories=">¶</a></dt><dd><p>Sets up a new
- file-system name space for executed
+ setting.</p></dd><dt id="ReadWriteDirectories="><span class="term"><code class="varname">ReadWriteDirectories=</code>, </span><span class="term"><code class="varname">ReadOnlyDirectories=</code>, </span><span class="term"><code class="varname">InaccessibleDirectories=</code></span><a class="headerlink" title="Permalink to this term" href="#ReadWriteDirectories=">¶</a></dt><dd><p>Sets up a new
+ file system namespace for executed
processes. These options may be used
to limit access a process might have
- to the main file-system
+ to the main file system
hierarchy. Each setting takes a
space-separated list of absolute
directory paths. Directories listed in
@@ -783,10 +581,17 @@
directories listed will have limited
access from within the namespace. If
the empty string is assigned to this
- option the specific list is reset, and
+ option, the specific list is reset, and
all prior assignments have no
- effect.</p></dd><dt id="PrivateTmp="><span class="term"><code class="varname">PrivateTmp=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateTmp=">¶</a></dt><dd><p>Takes a boolean
- argument. If true sets up a new file
+ effect.</p><p>Paths in
+ <code class="varname">ReadOnlyDirectories=</code>
+ and
+ <code class="varname">InaccessibleDirectories=</code>
+ may be prefixed with
+ "<code class="literal">-</code>", in which case
+ they will be ignored when they do not
+ exist.</p></dd><dt id="PrivateTmp="><span class="term"><code class="varname">PrivateTmp=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateTmp=">¶</a></dt><dd><p>Takes a boolean
+ argument. If true, sets up a new file
system namespace for the executed
processes and mounts private
<code class="filename">/tmp</code> and
@@ -803,11 +608,11 @@
by service will be removed after service
is stopped. Defaults to
false.</p></dd><dt id="PrivateNetwork="><span class="term"><code class="varname">PrivateNetwork=</code></span><a class="headerlink" title="Permalink to this term" href="#PrivateNetwork=">¶</a></dt><dd><p>Takes a boolean
- argument. If true sets up a new
+ argument. If true, sets up a new
network namespace for the executed
processes and configures only the
loopback network device
- <code class="literal">lo</code> inside it. No
+ "<code class="literal">lo</code>" inside it. No
other network devices will be
available to the executed process.
This is useful to securely turn off
@@ -833,19 +638,19 @@
entries must be created and cleared
before and after execution. If the
configured string is longer than four
- characters it is truncated and the
+ characters, it is truncated and the
terminal four characters are
used. This setting interprets %I style
string replacements. This setting is
unset by default, i.e. no utmp/wtmp
entries are created or cleaned up for
this service.</p></dd><dt id="IgnoreSIGPIPE="><span class="term"><code class="varname">IgnoreSIGPIPE=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreSIGPIPE=">¶</a></dt><dd><p>Takes a boolean
- argument. If true causes SIGPIPE to be
+ argument. If true, causes <code class="constant">SIGPIPE</code> to be
ignored in the executed
- process. Defaults to true, since
- SIGPIPE generally is useful only in
+ process. Defaults to true because
+ <code class="constant">SIGPIPE</code> generally is useful only in
shell pipelines.</p></dd><dt id="NoNewPrivileges="><span class="term"><code class="varname">NoNewPrivileges=</code></span><a class="headerlink" title="Permalink to this term" href="#NoNewPrivileges=">¶</a></dt><dd><p>Takes a boolean
- argument. If true ensures that the
+ argument. If true, ensures that the
service process and all its children
can never gain new privileges. This
option is more powerful than the respective
@@ -854,19 +659,20 @@
kind. This is the simplest, most
effective way to ensure that a process
and its children can never elevate
- privileges again.</p></dd><dt id="SystemCallFilter="><span class="term"><code class="varname">SystemCallFilter=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemCallFilter=">¶</a></dt><dd><p>Takes a space
- separated list of system call
- names. If this setting is used all
+ privileges again.</p></dd><dt id="SystemCallFilter="><span class="term"><code class="varname">SystemCallFilter=</code></span><a class="headerlink" title="Permalink to this term" href="#SystemCallFilter=">¶</a></dt><dd><p>Takes a space-separated
+ list of system call
+ names. If this setting is used, all
system calls executed by the unit
process except for the listed ones
will result in immediate process
- termination with the SIGSYS signal
+ termination with the
+ <code class="constant">SIGSYS</code> signal
(whitelisting). If the first character
- of the list is <code class="literal">~</code>
+ of the list is "<code class="literal">~</code>",
the effect is inverted: only the
listed system calls will result in
immediate process termination
- (blacklisting). If this option is used
+ (blacklisting). If this option is used,
<code class="varname">NoNewPrivileges=yes</code>
is implied. This feature makes use of
the Secure Computing Mode 2 interfaces
@@ -878,14 +684,70 @@
<code class="function">sigreturn</code>,
<code class="function">exit_group</code>,
<code class="function">exit</code> system calls
- are implicitly whitelisted and don't
+ are implicitly whitelisted and do not
need to be listed explicitly. This
option may be specified more than once
in which case the filter masks are
merged. If the empty string is
- assigned the filter is reset, all
+ assigned, the filter is reset, all
prior assignments will have no
- effect.</p></dd></dl></div></div><div class="refsect1"><a name="idm259785902736"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ effect.</p></dd></dl></div></div><div class="refsect1"><a name="idm274701565696"></a><h2 id="Environment variables in spawned processes">Environment variables in spawned processes<a class="headerlink" title="Permalink to this headline" href="#Environment%20variables%20in%20spawned%20processes">¶</a></h2><p>Processes started by the system are executed in
+ a clean environment in which select variables
+ listed below are set. System processes started by systemd
+ do not inherit variables from PID 1, but processes
+ started by user systemd instances inherit all
+ environment variables from the user systemd instance.
+ </p><div class="variablelist"><dl class="variablelist"><dt id="$PATH"><span class="term"><code class="varname">$PATH</code></span><a class="headerlink" title="Permalink to this term" href="#%24PATH">¶</a></dt><dd><p>Colon-separated list
+ of directiories to use when launching
+ executables. Systemd uses a fixed
+ value of
+ <code class="filename">/usr/local/sbin</code>:<code class="filename">/usr/local/bin</code>:<code class="filename">/usr/sbin</code>:<code class="filename">/usr/bin</code>:<code class="filename">/sbin</code>:<code class="filename">/bin</code>.
+ </p></dd><dt id="$LANG"><span class="term"><code class="varname">$LANG</code></span><a class="headerlink" title="Permalink to this term" href="#%24LANG">¶</a></dt><dd><p>Locale. Can be set in
+ <a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>
+ or on the kernel command line (see
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
+ and
+ <a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>).
+ </p></dd><dt id="$USER"><span class="term"><code class="varname">$USER</code>, </span><span class="term"><code class="varname">$HOME</code></span><a class="headerlink" title="Permalink to this term" href="#%24USER">¶</a></dt><dd><p>User name and home
+ directory. Set for the units which
+ have <code class="varname">User=</code> set,
+ which includes user
+ <span class="command"><strong>systemd</strong></span> instances.
+ See
+ <a href="passwd.html"><span class="citerefentry"><span class="refentrytitle">passwd</span>(5)</span></a>.
+ </p></dd><dt id="$XDG_RUNTIME_DIR"><span class="term"><code class="varname">$XDG_RUNTIME_DIR</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_RUNTIME_DIR">¶</a></dt><dd><p>The directory for volatile
+ state. Set for the user <span class="command"><strong>systemd</strong></span>
+ instance, and also in user sessions.
+ See
+ <a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a>.
+ </p></dd><dt id="$XDG_SESSION_ID"><span class="term"><code class="varname">$XDG_SESSION_ID</code>, </span><span class="term"><code class="varname">$XDG_SEAT</code>, </span><span class="term"><code class="varname">$XDG_VTNR</code></span><a class="headerlink" title="Permalink to this term" href="#%24XDG_SESSION_ID">¶</a></dt><dd><p>The identifier of the
+ session, and the seat name, and
+ virtual terminal of the session. Set
+ by
+ <a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a>
+ for login sessions.
+ <code class="varname">$XDG_SEAT</code> and
+ <code class="varname">$XDG_VTNR</code> will be
+ only set when attached to a seat and a
+ tty.</p></dd><dt id="$MANAGERPID"><span class="term"><code class="varname">$MANAGERPID</code></span><a class="headerlink" title="Permalink to this term" href="#%24MANAGERPID">¶</a></dt><dd><p>The PID of the user
+ <span class="command"><strong>systemd</strong></span> instance,
+ set for processes spawned by it.
+ </p></dd><dt id="$LISTEN_FDS"><span class="term"><code class="varname">$LISTEN_FDS</code>, </span><span class="term"><code class="varname">$LISTEN_PID</code></span><a class="headerlink" title="Permalink to this term" href="#%24LISTEN_FDS">¶</a></dt><dd><p>Information about file
+ descriptors passed to a service for
+ socket activation. See
+ <a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a>.
+ </p></dd></dl></div><p>Additional variables may be configured by the
+ following means: for processes spawned in specific
+ units, use the <code class="varname">Environment=</code> and
+ <code class="varname">EnvironmentFile=</code> options above; to
+ specify variables globally, use
+ <code class="varname">DefaultEnvironment=</code> (see
+ <a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>)
+ or the kernel option
+ <code class="varname">systemd.setenv=</code> (see
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>). Additional
+ variables may also be set through PAM,
+ c.f. <a href="pam_env.html"><span class="citerefentry"><span class="refentrytitle">pam_env</span>(8)</span></a>.</p></div><div class="refsect1"><a name="idm274701532960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(8)</span></a>,
@@ -895,5 +757,7 @@
<a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>,
<a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
- <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>,
+ <a href="exec.html"><span class="citerefentry"><span class="refentrytitle">exec</span>(3)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index b3e0287d72..f50161f30c 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -1,4 +1,3 @@
-<?xml version='1.0'?> <!--*-nxml-*-->
<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
@@ -58,7 +57,7 @@
<title>Description</title>
<para>Unit configuration files for services, sockets,
- mount points and swap devices share a subset of
+ mount points, and swap devices share a subset of
configuration options which define the execution
environment of spawned processes.</para>
@@ -69,7 +68,7 @@
files, and
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
and
<citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for more information on the specific unit
@@ -90,7 +89,7 @@
<listitem><para>Takes an absolute
directory path. Sets the working
directory for executed processes. If
- not set defaults to the root directory
+ not set, defaults to the root directory
when systemd is running as a system
instance and the respective user's
home directory if run as
@@ -105,7 +104,7 @@
directory for executed processes, with
the
<citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
- system call. If this is used it must
+ system call. If this is used, it must
be ensured that the process and all
its auxiliary files are available in
the <function>chroot()</function>
@@ -129,7 +128,7 @@
<listitem><para>Sets the supplementary
Unix groups the processes are executed
- as. This takes a space separated list
+ as. This takes a space-separated list
of group names or IDs. This option may
be specified more than once in which
case all listed groups are set as
@@ -167,7 +166,7 @@
for this process) and 1000 (to make
killing of this process under memory
pressure very likely). See <ulink
- url="http://www.kernel.org/doc/Documentation/filesystems/proc.txt">proc.txt</ulink>
+ url="https://www.kernel.org/doc/Documentation/filesystems/proc.txt">proc.txt</ulink>
for details.</para></listitem>
</varlistentry>
@@ -234,7 +233,7 @@
<term><varname>CPUSchedulingResetOnFork=</varname></term>
<listitem><para>Takes a boolean
- argument. If true elevated CPU
+ argument. If true, elevated CPU
scheduling priorities and policies
will be reset when the executed
processes fork, and can hence not leak
@@ -253,7 +252,7 @@
be specified more than once in which
case the specificed CPU affinity masks
are merged. If the empty string is
- assigned the mask is reset, all
+ assigned, the mask is reset, all
assignments prior to this will have no
effect. See
<citerefentry><refentrytitle>sched_setaffinity</refentrytitle><manvolnum>2</manvolnum></citerefentry>
@@ -281,15 +280,16 @@
option may be specified more than once
in which case all listed variables
will be set. If the same variable is
- set twice the later setting will
+ set twice, the later setting will
override the earlier setting. If the
empty string is assigned to this
- option the list of environment
+ option, the list of environment
variables is reset, all prior
assignments have no effect.
Variable expansion is not performed
- inside the strings, and $ has no special
- meaning.
+ inside the strings, however, specifier
+ expansion is possible. The $ character has
+ no special meaning.
If you need to assign a value containing spaces
to a variable, use double quotes (")
for the assignment.</para>
@@ -311,7 +311,7 @@
<varname>Environment=</varname> but
reads the environment variables from a
text file. The text file should
- contain new-line separated variable
+ contain new-line-separated variable
assignments. Empty lines and lines
starting with ; or # will be ignored,
which may be used for commenting. A line
@@ -323,17 +323,18 @@
double quotes (").</para>
<para>The argument passed should be an
- absolute file name or wildcard
+ absolute filename or wildcard
expression, optionally prefixed with
- "-", which indicates that if the file
- does not exist it won't be read and no
- error or warning message is logged.
- This option may be specified more than
- once in which case all specified files
- are read. If the empty string is
- assigned to this option the list of
- file to read is reset, all prior
- assignments have no effect.</para>
+ <literal>-</literal>, which indicates
+ that if the file does not exist, it
+ will not be read and no error or warning
+ message is logged. This option may be
+ specified more than once in which case
+ all specified files are read. If the
+ empty string is assigned to this
+ option, the list of file to read is
+ reset, all prior assignments have no
+ effect.</para>
<para>The files listed with this
directive will be read shortly before
@@ -342,7 +343,7 @@
with
<varname>Environment=</varname>. If
the same variable is set twice from
- these files the files will be read in
+ these files, the files will be read in
the order they are specified and the
later setting will override the
earlier setting.</para></listitem>
@@ -358,19 +359,19 @@
<option>tty-force</option>,
<option>tty-fail</option> or
<option>socket</option>. If
- <option>null</option> is selected
+ <option>null</option> is selected,
standard input will be connected to
<filename>/dev/null</filename>,
i.e. all read attempts by the process
will result in immediate EOF. If
- <option>tty</option> is selected
+ <option>tty</option> is selected,
standard input is connected to a TTY
(as configured by
<varname>TTYPath=</varname>, see
below) and the executed process
becomes the controlling process of the
terminal. If the terminal is already
- being controlled by another process the
+ being controlled by another process, the
executed process waits until the current
controlling process releases the
terminal.
@@ -392,7 +393,7 @@
file (see
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details) specifies a single socket
- only. If this option is set standard
+ only. If this option is set, standard
input will be connected to the socket
the service was activated from, which
is primarily useful for compatibility
@@ -417,19 +418,19 @@
<option>kmsg+console</option>,
<option>journal+console</option> or
<option>socket</option>. If set to
- <option>inherit</option> the file
+ <option>inherit</option>, the file
descriptor of standard input is
duplicated for standard output. If set
- to <option>null</option> standard
+ to <option>null</option>, standard
output will be connected to
<filename>/dev/null</filename>,
i.e. everything written to it will be
- lost. If set to <option>tty</option>
+ lost. If set to <option>tty</option>,
standard output will be connected to a
tty (as configured via
<varname>TTYPath=</varname>, see
below). If the TTY is used for output
- only the executed process will not
+ only, the executed process will not
become the controlling process of the
terminal, and will not fail or wait
for other processes to release the
@@ -516,7 +517,7 @@
<listitem><para>If the terminal
device specified with
<varname>TTYPath=</varname> is a
- virtual console terminal try to
+ virtual console terminal, try to
deallocate the TTY before and after
execution. This ensures that the
screen and scrollback buffer is
@@ -527,7 +528,7 @@
<term><varname>SyslogIdentifier=</varname></term>
<listitem><para>Sets the process name
to prefix log lines sent to syslog or
- the kernel log buffer with. If not set
+ the kernel log buffer with. If not set,
defaults to the process name of the
executed process. This option is only
useful when
@@ -671,13 +672,13 @@
<varlistentry>
<term><varname>PAMName=</varname></term>
<listitem><para>Sets the PAM service
- name to set up a session as. If set
+ name to set up a session as. If set,
the executed process will be
registered as a PAM session under the
specified service name. This is only
useful in conjunction with the
<varname>User=</varname> setting. If
- not set no PAM session will be opened
+ not set, no PAM session will be opened
for the executed processes. See
<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
for details.</para></listitem>
@@ -686,7 +687,7 @@
<varlistentry>
<term><varname>TCPWrapName=</varname></term>
<listitem><para>If this is a
- socket-activated service this sets the
+ socket-activated service, this sets the
tcpwrap service name to check the
permission for the current connection
with. This is only useful in
@@ -696,7 +697,7 @@
socket types (e.g. datagram/UDP) and
on processes unrelated to socket-based
activation. If the tcpwrap
- verification fails daemon start-up
+ verification fails, daemon start-up
will fail and the connection is
terminated. See
<citerefentry><refentrytitle>tcpd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
@@ -716,17 +717,16 @@
capability bounding set for the
executed process. See
<citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- for details. Takes a whitespace
- separated list of capability names as
- read by
+ for details. Takes a whitespace-separated
+ list of capability names as read by
<citerefentry><refentrytitle>cap_from_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- e.g. <literal>CAP_SYS_ADMIN
- CAP_DAC_OVERRIDE
- CAP_SYS_PTRACE</literal>.
+ e.g. <constant>CAP_SYS_ADMIN</constant>,
+ <constant>CAP_DAC_OVERRIDE</constant>,
+ <constant>CAP_SYS_PTRACE</constant>.
Capabilities listed will be included
in the bounding set, all others are
removed. If the list of capabilities
- is prefixed with <literal>~</literal>
+ is prefixed with <literal>~</literal>,
all but the listed capabilities will
be included, the effect of the
assignment inverted. Note that this
@@ -735,7 +735,7 @@
permitted and inheritable capability
sets, on top of what
<varname>Capabilities=</varname>
- does. If this option is not used the
+ does. If this option is not used, the
capability bounding set is not
modified on process execution, hence
no limits on the capabilities of the
@@ -743,11 +743,11 @@
appear more than once in which case
the bounding sets are merged. If the
empty string is assigned to this
- option the bounding set is reset to
+ option, the bounding set is reset to
the empty capability set, and all
prior settings have no effect. If set
to <literal>~</literal> (without any
- further argument) the bounding set is
+ further argument), the bounding set is
reset to the full set of available
capabilities, also undoing any
previous settings.</para></listitem>
@@ -768,7 +768,7 @@
option may appear more than once in
which case the secure bits are
ORed. If the empty string is assigned
- to this option the bits are reset to
+ to this option, the bits are reset to
0.</para></listitem>
</varlistentry>
@@ -791,287 +791,15 @@
</varlistentry>
<varlistentry>
- <term><varname>ControlGroup=</varname></term>
-
- <listitem><para>Controls the control
- groups the executed processes shall be
- made members of. Takes a
- space-separated list of cgroup
- identifiers. A cgroup identifier is
- formatted like
- <filename noindex='true'>cpu:/foo/bar</filename>,
- where "cpu" indicates the kernel
- control group controller used, and
- <filename noindex='true'>/foo/bar</filename> is the
- control group path. The controller
- name and ":" may be omitted in which
- case the named systemd control group
- hierarchy is implied. Alternatively,
- the path and ":" may be omitted, in
- which case the default control group
- path for this unit is implied.</para>
-
- <para>This option may be used to place
- executed processes in arbitrary groups
- in arbitrary hierarchies -- which may
- then be externally configured with
- additional execution limits. By
- default systemd will place all
- executed processes in separate
- per-unit control groups (named after
- the unit) in the systemd named
- hierarchy. This option is primarily
- intended to place executed processes
- in specific paths in specific kernel
- controller hierarchies. It is not
- recommended to manipulate the service
- control group path in the private
- systemd named hierarchy
- (i.e. <literal>name=systemd</literal>),
- and doing this might result in
- undefined behaviour. For details about
- control groups see <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>.</para>
-
- <para>This option may appear more than
- once, in which case the list of
- control group assignments is
- merged. If the same hierarchy gets two
- different paths assigned only the
- later setting will take effect. If the
- empty string is assigned to this
- option the list of control group
- assignments is reset, all previous
- assignments will have no
- effect.</para>
-
- <para>Note that the list of control
- group assignments of a unit is
- extended implicitly based on the
- settings of
- <varname>DefaultControllers=</varname>
- of
- <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- but a unit's
- <varname>ControlGroup=</varname>
- setting for a specific controller
- takes precedence.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>ControlGroupModify=</varname></term>
- <listitem><para>Takes a boolean
- argument. If true, the control groups
- created for this unit will be owned by
- the user specified with
- <varname>User=</varname> (and the
- appropriate group), and he/she can create
- subgroups as well as add processes to
- the group.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>ControlGroupPersistent=</varname></term>
- <listitem><para>Takes a boolean
- argument. If true, the control groups
- created for this unit will be marked
- to be persistent, i.e. systemd will
- not remove them when stopping the
- unit. The default is false, meaning
- that the control groups will be
- removed when the unit is stopped. For
- details about the semantics of this
- logic see <ulink
- url="http://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups">PaxControlGroups</ulink>.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>ControlGroupAttribute=</varname></term>
-
- <listitem><para>Set a specific control
- group attribute for executed
- processes, and (if needed) add the
- executed processes to a cgroup in the
- hierarchy of the controller the
- attribute belongs to. Takes two
- space-separated arguments: the
- attribute name (syntax is
- <literal>cpu.shares</literal> where
- <literal>cpu</literal> refers to a
- specific controller and
- <literal>shares</literal> to the
- attribute name), and the attribute
- value. Example:
- <literal>ControlGroupAttribute=cpu.shares
- 512</literal>. If this option is used
- for an attribute that belongs to a
- kernel controller hierarchy the unit
- is not already configured to be added
- to (for example via the
- <literal>ControlGroup=</literal>
- option) then the unit will be added to
- the controller and the default unit
- cgroup path is implied. Thus, using
- <varname>ControlGroupAttribute=</varname>
- is in most cases sufficient to make
- use of control group enforcements,
- explicit
- <varname>ControlGroup=</varname> are
- only necessary in case the implied
- default control group path for a
- service is not desirable. For details
- about control group attributes see
- <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>. This
- option may appear more than once, in
- order to set multiple control group
- attributes. If this option is used
- multiple times for the same cgroup
- attribute only the later setting takes
- effect. If the empty string is
- assigned to this option the list of
- attributes is reset, all previous
- cgroup attribute settings have no
- effect, including those done with
- <varname>CPUShares=</varname>,
- <varname>MemoryLimit=</varname>,
- <varname>MemorySoftLimit</varname>,
- <varname>DeviceAllow=</varname>,
- <varname>DeviceDeny=</varname>,
- <varname>BlockIOWeight=</varname>,
- <varname>BlockIOReadBandwidth=</varname>,
- <varname>BlockIOWriteBandwidth=</varname>.
- </para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>CPUShares=</varname></term>
-
- <listitem><para>Assign the specified
- overall CPU time shares to the
- processes executed. Takes an integer
- value. This controls the
- <literal>cpu.shares</literal> control
- group attribute, which defaults to
- 1024. For details about this control
- group attribute see <ulink
- url="http://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt">sched-design-CFS.txt</ulink>.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>MemoryLimit=</varname></term>
- <term><varname>MemorySoftLimit=</varname></term>
-
- <listitem><para>Limit the overall memory usage
- of the executed processes to a certain
- size. Takes a memory size in bytes. If
- the value is suffixed with K, M, G or
- T the specified memory size is parsed
- as Kilobytes, Megabytes, Gigabytes,
- or Terabytes (to the base
- 1024), respectively. This controls the
- <literal>memory.limit_in_bytes</literal>
- and
- <literal>memory.soft_limit_in_bytes</literal>
- control group attributes. For details
- about these control group attributes
- see <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/memory.txt">memory.txt</ulink>.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>DeviceAllow=</varname></term>
- <term><varname>DeviceDeny=</varname></term>
-
- <listitem><para>Control access to
- specific device nodes by the executed processes. Takes two
- space separated strings: a device node
- path (such as
- <filename>/dev/null</filename>)
- followed by a combination of r, w, m
- to control reading, writing, or
- creating of the specific device node
- by the unit, respectively. This controls the
- <literal>devices.allow</literal>
- and
- <literal>devices.deny</literal>
- control group attributes. For details
- about these control group attributes
- see <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/devices.txt">devices.txt</ulink>.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>BlockIOWeight=</varname></term>
-
- <listitem><para>Set the default or
- per-device overall block IO weight
- value for the executed
- processes. Takes either a single
- weight value (between 10 and 1000) to
- set the default block IO weight, or a
- space separated pair of a file path
- and a weight value to specify the
- device specific weight value (Example:
- "/dev/sda 500"). The file path may be
- specified as path to a block device
- node or as any other file in which
- case the backing block device of the
- file system of the file is
- determined. This controls the
- <literal>blkio.weight</literal> and
- <literal>blkio.weight_device</literal>
- control group attributes, which
- default to 1000. Use this option
- multiple times to set weights for
- multiple devices. For details about
- these control group attributes see
- <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt">blkio-controller.txt</ulink>.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><varname>BlockIOReadBandwidth=</varname></term>
- <term><varname>BlockIOWriteBandwidth=</varname></term>
-
- <listitem><para>Set the per-device
- overall block IO bandwidth limit for
- the executed processes. Takes a space
- separated pair of a file path and a
- bandwidth value (in bytes per second)
- to specify the device specific
- bandwidth. The file path may be
- specified as path to a block device
- node or as any other file in which
- case the backing block device of the
- file system of the file is determined.
- If the bandwidth is suffixed with K, M,
- G, or T the specified bandwidth is
- parsed as Kilobytes, Megabytes,
- Gigabytes, or Terabytes, respectively (Example:
- "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0
- 5M"). This controls the
- <literal>blkio.read_bps_device</literal>
- and
- <literal>blkio.write_bps_device</literal>
- control group attributes. Use this
- option multiple times to set bandwidth
- limits for multiple devices. For
- details about these control group
- attributes see <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt">blkio-controller.txt</ulink>.</para></listitem>
- </varlistentry>
-
- <varlistentry>
<term><varname>ReadWriteDirectories=</varname></term>
<term><varname>ReadOnlyDirectories=</varname></term>
<term><varname>InaccessibleDirectories=</varname></term>
<listitem><para>Sets up a new
- file-system name space for executed
+ file system namespace for executed
processes. These options may be used
to limit access a process might have
- to the main file-system
+ to the main file system
hierarchy. Each setting takes a
space-separated list of absolute
directory paths. Directories listed in
@@ -1097,16 +825,24 @@
directories listed will have limited
access from within the namespace. If
the empty string is assigned to this
- option the specific list is reset, and
+ option, the specific list is reset, and
all prior assignments have no
- effect.</para></listitem>
+ effect.</para>
+ <para>Paths in
+ <varname>ReadOnlyDirectories=</varname>
+ and
+ <varname>InaccessibleDirectories=</varname>
+ may be prefixed with
+ <literal>-</literal>, in which case
+ they will be ignored when they do not
+ exist.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>PrivateTmp=</varname></term>
<listitem><para>Takes a boolean
- argument. If true sets up a new file
+ argument. If true, sets up a new file
system namespace for the executed
processes and mounts private
<filename>/tmp</filename> and
@@ -1129,7 +865,7 @@
<term><varname>PrivateNetwork=</varname></term>
<listitem><para>Takes a boolean
- argument. If true sets up a new
+ argument. If true, sets up a new
network namespace for the executed
processes and configures only the
loopback network device
@@ -1171,7 +907,7 @@
entries must be created and cleared
before and after execution. If the
configured string is longer than four
- characters it is truncated and the
+ characters, it is truncated and the
terminal four characters are
used. This setting interprets %I style
string replacements. This setting is
@@ -1184,10 +920,10 @@
<term><varname>IgnoreSIGPIPE=</varname></term>
<listitem><para>Takes a boolean
- argument. If true causes SIGPIPE to be
+ argument. If true, causes <constant>SIGPIPE</constant> to be
ignored in the executed
- process. Defaults to true, since
- SIGPIPE generally is useful only in
+ process. Defaults to true because
+ <constant>SIGPIPE</constant> generally is useful only in
shell pipelines.</para></listitem>
</varlistentry>
@@ -1195,7 +931,7 @@
<term><varname>NoNewPrivileges=</varname></term>
<listitem><para>Takes a boolean
- argument. If true ensures that the
+ argument. If true, ensures that the
service process and all its children
can never gain new privileges. This
option is more powerful than the respective
@@ -1210,19 +946,20 @@
<varlistentry>
<term><varname>SystemCallFilter=</varname></term>
- <listitem><para>Takes a space
- separated list of system call
- names. If this setting is used all
+ <listitem><para>Takes a space-separated
+ list of system call
+ names. If this setting is used, all
system calls executed by the unit
process except for the listed ones
will result in immediate process
- termination with the SIGSYS signal
+ termination with the
+ <constant>SIGSYS</constant> signal
(whitelisting). If the first character
- of the list is <literal>~</literal>
+ of the list is <literal>~</literal>,
the effect is inverted: only the
listed system calls will result in
immediate process termination
- (blacklisting). If this option is used
+ (blacklisting). If this option is used,
<varname>NoNewPrivileges=yes</varname>
is implied. This feature makes use of
the Secure Computing Mode 2 interfaces
@@ -1234,12 +971,12 @@
<function>sigreturn</function>,
<function>exit_group</function>,
<function>exit</function> system calls
- are implicitly whitelisted and don't
+ are implicitly whitelisted and do not
need to be listed explicitly. This
option may be specified more than once
in which case the filter masks are
merged. If the empty string is
- assigned the filter is reset, all
+ assigned, the filter is reset, all
prior assignments will have no
effect.</para></listitem>
</varlistentry>
@@ -1248,6 +985,118 @@
</refsect1>
<refsect1>
+ <title>Environment variables in spawned processes</title>
+
+ <para>Processes started by the system are executed in
+ a clean environment in which select variables
+ listed below are set. System processes started by systemd
+ do not inherit variables from PID 1, but processes
+ started by user systemd instances inherit all
+ environment variables from the user systemd instance.
+ </para>
+
+ <variablelist class='environment-variables'>
+ <varlistentry>
+ <term><varname>$PATH</varname></term>
+
+ <listitem><para>Colon-separated list
+ of directiories to use when launching
+ executables. Systemd uses a fixed
+ value of
+ <filename>/usr/local/sbin</filename>:<filename>/usr/local/bin</filename>:<filename>/usr/sbin</filename>:<filename>/usr/bin</filename>:<filename>/sbin</filename>:<filename>/bin</filename>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>$LANG</varname></term>
+
+ <listitem><para>Locale. Can be set in
+ <citerefentry><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ or on the kernel command line (see
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ and
+ <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>).
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>$USER</varname></term>
+ <term><varname>$HOME</varname></term>
+
+ <listitem><para>User name and home
+ directory. Set for the units which
+ have <varname>User=</varname> set,
+ which includes user
+ <command>systemd</command> instances.
+ See
+ <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>$XDG_RUNTIME_DIR</varname></term>
+
+ <listitem><para>The directory for volatile
+ state. Set for the user <command>systemd</command>
+ instance, and also in user sessions.
+ See
+ <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>$XDG_SESSION_ID</varname></term>
+ <term><varname>$XDG_SEAT</varname></term>
+ <term><varname>$XDG_VTNR</varname></term>
+
+ <listitem><para>The identifier of the
+ session, and the seat name, and
+ virtual terminal of the session. Set
+ by
+ <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ for login sessions.
+ <varname>$XDG_SEAT</varname> and
+ <varname>$XDG_VTNR</varname> will be
+ only set when attached to a seat and a
+ tty.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>$MANAGERPID</varname></term>
+
+ <listitem><para>The PID of the user
+ <command>systemd</command> instance,
+ set for processes spawned by it.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>$LISTEN_FDS</varname></term>
+ <term><varname>$LISTEN_PID</varname></term>
+
+ <listitem><para>Information about file
+ descriptors passed to a service for
+ socket activation. See
+ <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Additional variables may be configured by the
+ following means: for processes spawned in specific
+ units, use the <varname>Environment=</varname> and
+ <varname>EnvironmentFile=</varname> options above; to
+ specify variables globally, use
+ <varname>DefaultEnvironment=</varname> (see
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
+ or the kernel option
+ <varname>systemd.setenv=</varname> (see
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>). Additional
+ variables may also be set through PAM,
+ c.f. <citerefentry><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
@@ -1259,7 +1108,9 @@
<citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>exec</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd.html b/man/systemd.html
index ee8081c776..1c2486f3e3 100644
--- a/man/systemd.html
+++ b/man/systemd.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd, init — systemd system and service manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">init [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm259794898000"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>systemd is a system and service manager for
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd, init — systemd system and service manager</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">systemd [OPTIONS...]</code> </p></div><div class="cmdsynopsis"><p><code class="command">init [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm274698355472"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>systemd is a system and service manager for
Linux operating systems. When run as first process on
boot (as PID 1), it acts as init system that brings
up and maintains userspace services.</p><p>For compatibility with SysV, if systemd is called
@@ -34,7 +34,7 @@
<code class="filename">system.conf</code>, otherwise
<code class="filename">user.conf</code>. See
<a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>
- for more information.</p></div><div class="refsect1"><a name="idm259794889520"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ for more information.</p></div><div class="refsect1"><a name="idm274698220992"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a systemd version
identifier and exits.</p></dd><dt id="--test"><span class="term"><code class="option">--test</code></span><a class="headerlink" title="Permalink to this term" href="#--test">¶</a></dt><dd><p>Determine startup
sequence, dump it and exit. This is an
@@ -53,7 +53,7 @@
specified. If omitted, the
introspection data for all interfaces
is dumped.</p></dd><dt id="--unit="><span class="term"><code class="option">--unit=</code></span><a class="headerlink" title="Permalink to this term" href="#--unit=">¶</a></dt><dd><p>Set default unit to
- activate on startup. If not specified
+ activate on startup. If not specified,
defaults to
<code class="filename">default.target</code>.</p></dd><dt id="--system"><span class="term"><code class="option">--system</code>, </span><span class="term"><code class="option">--user</code></span><a class="headerlink" title="Permalink to this term" href="#--system">¶</a></dt><dd><p>For <code class="option">--system</code>,
tell systemd to run a
@@ -109,7 +109,7 @@
<code class="option">info</code>,
<code class="option">debug</code>.</p></dd><dt id="--log-color="><span class="term"><code class="option">--log-color=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-color=">¶</a></dt><dd><p>Highlight important
log messages. Argument is a boolean
- value. If the argument is omitted it
+ value. If the argument is omitted, it
defaults to
<code class="option">true</code>.</p></dd><dt id="--log-location="><span class="term"><code class="option">--log-location=</code></span><a class="headerlink" title="Permalink to this term" href="#--log-location=">¶</a></dt><dd><p>Include code location
in log messages. This is mostly
@@ -141,30 +141,32 @@
and
<code class="option">--default-standard-error=</code>
to
- <code class="option">inherit</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793821904"></a><h2 id="Concepts">Concepts<a class="headerlink" title="Permalink to this headline" href="#Concepts">¶</a></h2><p>systemd provides a dependency system between
- various entities called "units". Units encapsulate
- various objects that are relevant for system boot-up
- and maintenance. The majority of units are configured
- in unit configuration files, whose syntax and basic
- set of options is described in
+ <code class="option">inherit</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693401328"></a><h2 id="Concepts">Concepts<a class="headerlink" title="Permalink to this headline" href="#Concepts">¶</a></h2><p>systemd provides a dependency system between
+ various entities called "units" of 12 different
+ types. Units encapsulate various objects that are
+ relevant for system boot-up and maintenance. The
+ majority of units are configured in unit configuration
+ files, whose syntax and basic set of options is
+ described in
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
however some are created automatically from other
- configuration or dynamically from system state. Units
- may be 'active' (meaning started, bound, plugged in,
- ... depending on the unit type, see below), or
- 'inactive' (meaning stopped, unbound, unplugged, ...),
- as well as in the process of being activated or
- deactivated, i.e. between the two states (these states
- are called 'activating', 'deactivating'). A special
- 'failed' state is available as well which is very
- similar to 'inactive' and is entered when the service
- failed in some way (process returned error code on
- exit, or crashed, or an operation timed out). If this
- state is entered the cause will be logged, for later
+ configuration, dynamically from system state or
+ programmatically at runtime. Units may be "active"
+ (meaning started, bound, plugged in, ..., depending on
+ the unit type, see below), or "inactive" (meaning
+ stopped, unbound, unplugged, ...), as well as in the
+ process of being activated or deactivated,
+ i.e. between the two states (these states are called
+ "activating", "deactivating"). A special "failed"
+ state is available as well, which is very similar to
+ "inactive" and is entered when the service failed in
+ some way (process returned error code on exit, or
+ crashed, or an operation timed out). If this state is
+ entered, the cause will be logged, for later
reference. Note that the various unit types may have a
number of additional substates, which are mapped to
the five generalized unit states described
- here.</p><p>The following unit types are available:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Service units, which control
+ here.</p><p>The following unit types are available:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Service units, which start and control
daemons and the processes they consist of. For
details see
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>.</p></li><li class="listitem"><p>Socket units, which
@@ -201,7 +203,15 @@
system. They are described in <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>.</p></li><li class="listitem"><p>Path units may be used
to activate other services when file system
objects change or are modified. See
- <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>.</p></li></ol></div><p>Units are named as their configuration
+ <a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>.</p></li><li class="listitem"><p>Slice units may be used to
+ group units which manage system processes
+ (such as service and scope units) in a
+ hierarchical tree for resource management
+ purposes. See
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>.</p></li><li class="listitem"><p>Scope units are similar to
+ service units, but manage foreign processes
+ instead of starting them as well. See
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>.</p></li></ol></div><p>Units are named as their configuration
files. Some units have special semantics. A detailed
list is available in
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>.</p><p>systemd knows various kinds of dependencies,
@@ -239,14 +249,14 @@
<code class="filename">multi-user.target</code> (for limited
console-only boots for use in embedded or server
environments, or similar; a subset of
- graphical.target). However it is at the discretion of
+ graphical.target). However, it is at the discretion of
the administrator to configure it as an alias to any
other target unit. See
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>
for details about these target units.</p><p>Processes systemd spawns are placed in
individual Linux control groups named after the unit
which they belong to in the private systemd
- hierarchy. (see <a class="ulink" href="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>
+ hierarchy. (see <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>
for more information about control groups, or short
"cgroups"). systemd uses this to effectively keep
track of processes. Control group information is
@@ -288,7 +298,7 @@
sense, fixing it if possible, and only failing if it
really cannot work.</p><p>Systemd contains native implementations of
various tasks that need to be executed as part of the
- boot process. For example, it sets the host name or
+ boot process. For example, it sets the hostname or
configures the loopback network device. It also sets
up and mounts various API file systems, such as
<code class="filename">/sys</code> or
@@ -304,7 +314,7 @@
or initrd environment should implement the
<a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface" target="_top">Container
Interface</a> or <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/InitrdInterface" target="_top">initrd
- Interface</a> specifications, respectively.</p></div><div class="refsect1"><a name="idm259793773696"></a><h2 id="Directories">Directories<a class="headerlink" title="Permalink to this headline" href="#Directories">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="System unit directories"><span class="term">System unit directories</span><a class="headerlink" title="Permalink to this term" href="#System%20unit%20directories">¶</a></dt><dd><p>The systemd system
+ Interface</a> specifications, respectively.</p></div><div class="refsect1"><a name="idm274693349824"></a><h2 id="Directories">Directories<a class="headerlink" title="Permalink to this headline" href="#Directories">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="System unit directories"><span class="term">System unit directories</span><a class="headerlink" title="Permalink to this term" href="#System%20unit%20directories">¶</a></dt><dd><p>The systemd system
manager reads unit configuration from
various directories. Packages that
want to install unit files shall place
@@ -368,7 +378,7 @@
unit with a native unit configuration
file cannot be started by activating it
in the SysV runlevel link
- farm.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793751904"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGTERM"><span class="term">SIGTERM</span><a class="headerlink" title="Permalink to this term" href="#SIGTERM">¶</a></dt><dd><p>Upon receiving this
+ farm.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693328032"></a><h2 id="Signals">Signals<a class="headerlink" title="Permalink to this headline" href="#Signals">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="SIGTERM"><span class="term"><code class="constant">SIGTERM</code></span><a class="headerlink" title="Permalink to this term" href="#SIGTERM">¶</a></dt><dd><p>Upon receiving this
signal the systemd system manager
serializes its state, reexecutes
itself and deserializes the saved
@@ -380,7 +390,7 @@
when this signal is received. This is
mostly equivalent to
<span class="command"><strong>systemctl --user start
- exit.target</strong></span>.</p></dd><dt id="SIGINT"><span class="term">SIGINT</span><a class="headerlink" title="Permalink to this term" href="#SIGINT">¶</a></dt><dd><p>Upon receiving this
+ exit.target</strong></span>.</p></dd><dt id="SIGINT"><span class="term"><code class="constant">SIGINT</code></span><a class="headerlink" title="Permalink to this term" href="#SIGINT">¶</a></dt><dd><p>Upon receiving this
signal the systemd system manager will
start the
<code class="filename">ctrl-alt-del.target</code> unit. This
@@ -388,7 +398,7 @@
<span class="command"><strong>systemctl start
ctl-alt-del.target</strong></span>.</p><p>systemd user managers
treat this signal the same way as
- SIGTERM.</p></dd><dt id="SIGWINCH"><span class="term">SIGWINCH</span><a class="headerlink" title="Permalink to this term" href="#SIGWINCH">¶</a></dt><dd><p>When this signal is
+ <code class="constant">SIGTERM</code>.</p></dd><dt id="SIGWINCH"><span class="term"><code class="constant">SIGWINCH</code></span><a class="headerlink" title="Permalink to this term" href="#SIGWINCH">¶</a></dt><dd><p>When this signal is
received the systemd system manager
will start the
<code class="filename">kbrequest.target</code>
@@ -396,97 +406,97 @@
<span class="command"><strong>systemctl start
kbrequest.target</strong></span>.</p><p>This signal is ignored by
systemd user
- managers.</p></dd><dt id="SIGPWR"><span class="term">SIGPWR</span><a class="headerlink" title="Permalink to this term" href="#SIGPWR">¶</a></dt><dd><p>When this signal is
+ managers.</p></dd><dt id="SIGPWR"><span class="term"><code class="constant">SIGPWR</code></span><a class="headerlink" title="Permalink to this term" href="#SIGPWR">¶</a></dt><dd><p>When this signal is
received the systemd manager
will start the
<code class="filename">sigpwr.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- sigpwr.target</strong></span>.</p></dd><dt id="SIGUSR1"><span class="term">SIGUSR1</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>When this signal is
+ sigpwr.target</strong></span>.</p></dd><dt id="SIGUSR1"><span class="term"><code class="constant">SIGUSR1</code></span><a class="headerlink" title="Permalink to this term" href="#SIGUSR1">¶</a></dt><dd><p>When this signal is
received the systemd manager will try
to reconnect to the D-Bus
- bus.</p></dd><dt id="SIGUSR2"><span class="term">SIGUSR2</span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>When this signal is
+ bus.</p></dd><dt id="SIGUSR2"><span class="term"><code class="constant">SIGUSR2</code></span><a class="headerlink" title="Permalink to this term" href="#SIGUSR2">¶</a></dt><dd><p>When this signal is
received the systemd manager will log
its complete state in human readable
form. The data logged is the same as
printed by <span class="command"><strong>systemctl
- dump</strong></span>.</p></dd><dt id="SIGHUP"><span class="term">SIGHUP</span><a class="headerlink" title="Permalink to this term" href="#SIGHUP">¶</a></dt><dd><p>Reloads the complete
+ dump</strong></span>.</p></dd><dt id="SIGHUP"><span class="term"><code class="constant">SIGHUP</code></span><a class="headerlink" title="Permalink to this term" href="#SIGHUP">¶</a></dt><dd><p>Reloads the complete
daemon configuration. This is mostly
equivalent to <span class="command"><strong>systemctl
- daemon-reload</strong></span>.</p></dd><dt id="SIGRTMIN+0"><span class="term">SIGRTMIN+0</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+0">¶</a></dt><dd><p>Enters default mode, starts the
+ daemon-reload</strong></span>.</p></dd><dt id="SIGRTMIN+0"><span class="term"><code class="constant">SIGRTMIN+0</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+0">¶</a></dt><dd><p>Enters default mode, starts the
<code class="filename">default.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- default.target</strong></span>.</p></dd><dt id="SIGRTMIN+1"><span class="term">SIGRTMIN+1</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+1">¶</a></dt><dd><p>Enters rescue mode,
+ default.target</strong></span>.</p></dd><dt id="SIGRTMIN+1"><span class="term"><code class="constant">SIGRTMIN+1</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+1">¶</a></dt><dd><p>Enters rescue mode,
starts the
<code class="filename">rescue.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl isolate
- rescue.target</strong></span>.</p></dd><dt id="SIGRTMIN+2"><span class="term">SIGRTMIN+2</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+2">¶</a></dt><dd><p>Enters emergency mode,
+ rescue.target</strong></span>.</p></dd><dt id="SIGRTMIN+2"><span class="term"><code class="constant">SIGRTMIN+2</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+2">¶</a></dt><dd><p>Enters emergency mode,
starts the
<code class="filename">emergency.service</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl isolate
- emergency.service</strong></span>.</p></dd><dt id="SIGRTMIN+3"><span class="term">SIGRTMIN+3</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+3">¶</a></dt><dd><p>Halts the machine,
+ emergency.service</strong></span>.</p></dd><dt id="SIGRTMIN+3"><span class="term"><code class="constant">SIGRTMIN+3</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+3">¶</a></dt><dd><p>Halts the machine,
starts the
<code class="filename">halt.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- halt.target</strong></span>.</p></dd><dt id="SIGRTMIN+4"><span class="term">SIGRTMIN+4</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+4">¶</a></dt><dd><p>Powers off the machine,
+ halt.target</strong></span>.</p></dd><dt id="SIGRTMIN+4"><span class="term"><code class="constant">SIGRTMIN+4</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+4">¶</a></dt><dd><p>Powers off the machine,
starts the
<code class="filename">poweroff.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- poweroff.target</strong></span>.</p></dd><dt id="SIGRTMIN+5"><span class="term">SIGRTMIN+5</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+5">¶</a></dt><dd><p>Reboots the machine,
+ poweroff.target</strong></span>.</p></dd><dt id="SIGRTMIN+5"><span class="term"><code class="constant">SIGRTMIN+5</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+5">¶</a></dt><dd><p>Reboots the machine,
starts the
<code class="filename">reboot.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- reboot.target</strong></span>.</p></dd><dt id="SIGRTMIN+6"><span class="term">SIGRTMIN+6</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+6">¶</a></dt><dd><p>Reboots the machine via kexec,
+ reboot.target</strong></span>.</p></dd><dt id="SIGRTMIN+6"><span class="term"><code class="constant">SIGRTMIN+6</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+6">¶</a></dt><dd><p>Reboots the machine via kexec,
starts the
<code class="filename">kexec.target</code>
unit. This is mostly equivalent to
<span class="command"><strong>systemctl start
- kexec.target</strong></span>.</p></dd><dt id="SIGRTMIN+13"><span class="term">SIGRTMIN+13</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+13">¶</a></dt><dd><p>Immediately halts the machine.</p></dd><dt id="SIGRTMIN+14"><span class="term">SIGRTMIN+14</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+14">¶</a></dt><dd><p>Immediately powers off the machine.</p></dd><dt id="SIGRTMIN+15"><span class="term">SIGRTMIN+15</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+15">¶</a></dt><dd><p>Immediately reboots the machine.</p></dd><dt id="SIGRTMIN+16"><span class="term">SIGRTMIN+16</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+16">¶</a></dt><dd><p>Immediately reboots the machine with kexec.</p></dd><dt id="SIGRTMIN+20"><span class="term">SIGRTMIN+20</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+20">¶</a></dt><dd><p>Enables display of
+ kexec.target</strong></span>.</p></dd><dt id="SIGRTMIN+13"><span class="term"><code class="constant">SIGRTMIN+13</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+13">¶</a></dt><dd><p>Immediately halts the machine.</p></dd><dt id="SIGRTMIN+14"><span class="term"><code class="constant">SIGRTMIN+14</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+14">¶</a></dt><dd><p>Immediately powers off the machine.</p></dd><dt id="SIGRTMIN+15"><span class="term"><code class="constant">SIGRTMIN+15</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+15">¶</a></dt><dd><p>Immediately reboots the machine.</p></dd><dt id="SIGRTMIN+16"><span class="term"><code class="constant">SIGRTMIN+16</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+16">¶</a></dt><dd><p>Immediately reboots the machine with kexec.</p></dd><dt id="SIGRTMIN+20"><span class="term"><code class="constant">SIGRTMIN+20</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+20">¶</a></dt><dd><p>Enables display of
status messages on the console, as
controlled via
<code class="varname">systemd.show_status=1</code>
on the kernel command
- line.</p></dd><dt id="SIGRTMIN+21"><span class="term">SIGRTMIN+21</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+21">¶</a></dt><dd><p>Disables display of
+ line.</p></dd><dt id="SIGRTMIN+21"><span class="term"><code class="constant">SIGRTMIN+21</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+21">¶</a></dt><dd><p>Disables display of
status messages on the console, as
controlled via
<code class="varname">systemd.show_status=0</code>
on the kernel command
- line.</p></dd><dt id="SIGRTMIN+22"><span class="term">SIGRTMIN+22, </span><span class="term">SIGRTMIN+23</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+22">¶</a></dt><dd><p>Sets the log level to
- <code class="literal">debug</code>
- (or <code class="literal">info</code> on
- <code class="literal">SIGRTMIN+23</code>), as
+ line.</p></dd><dt id="SIGRTMIN+22"><span class="term"><code class="constant">SIGRTMIN+22</code>, </span><span class="term"><code class="constant">SIGRTMIN+23</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+22">¶</a></dt><dd><p>Sets the log level to
+ "<code class="literal">debug</code>"
+ (or "<code class="literal">info</code>" on
+ <code class="constant">SIGRTMIN+23</code>), as
controlled via
<code class="varname">systemd.log_level=debug</code>
(or <code class="varname">systemd.log_level=info</code>
- on <code class="literal">SIGRTMIN+23</code>) on
+ on <code class="constant">SIGRTMIN+23</code>) on
the kernel command
- line.</p></dd><dt id="SIGRTMIN+24"><span class="term">SIGRTMIN+24</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+24">¶</a></dt><dd><p>Immediately exits the
+ line.</p></dd><dt id="SIGRTMIN+24"><span class="term"><code class="constant">SIGRTMIN+24</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+24">¶</a></dt><dd><p>Immediately exits the
manager (only available for --user
- instances).</p></dd><dt id="SIGRTMIN+26"><span class="term">SIGRTMIN+26, </span><span class="term">SIGRTMIN+27, </span><span class="term">SIGRTMIN+28, </span><span class="term">SIGRTMIN+29</span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+26">¶</a></dt><dd><p>Sets the log level to
- <code class="literal">journal-or-kmsg</code>
- (or <code class="literal">console</code> on
- <code class="literal">SIGRTMIN+27</code>,
- <code class="literal">kmsg</code> on
- <code class="literal">SIGRTMIN+28</code>,
- or <code class="literal">syslog-or-kmsg</code>
- on <code class="literal">SIGRTMIN+29</code>), as
+ instances).</p></dd><dt id="SIGRTMIN+26"><span class="term"><code class="constant">SIGRTMIN+26</code>, </span><span class="term"><code class="constant">SIGRTMIN+27</code>, </span><span class="term"><code class="constant">SIGRTMIN+28</code>, </span><span class="term"><code class="constant">SIGRTMIN+29</code></span><a class="headerlink" title="Permalink to this term" href="#SIGRTMIN+26">¶</a></dt><dd><p>Sets the log level to
+ "<code class="literal">journal-or-kmsg</code>"
+ (or "<code class="literal">console</code>" on
+ <code class="constant">SIGRTMIN+27</code>,
+ "<code class="literal">kmsg</code>" on
+ <code class="constant">SIGRTMIN+28</code>,
+ or "<code class="literal">syslog-or-kmsg</code>"
+ on <code class="constant">SIGRTMIN+29</code>), as
controlled via
<code class="varname">systemd.log_target=journal-or-kmsg</code>
(or <code class="varname">systemd.log_target=console</code>
- on <code class="literal">SIGRTMIN+27</code>,
+ on <code class="constant">SIGRTMIN+27</code>,
<code class="varname">systemd.log_target=kmsg</code>
- on <code class="literal">SIGRTMIN+28</code>,
+ on <code class="constant">SIGRTMIN+28</code>,
or
<code class="varname">systemd.log_target=syslog-or-kmsg</code>
- on <code class="literal">SIGRTMIN+29</code>) on
+ on <code class="constant">SIGRTMIN+29</code>) on
the kernel command
- line.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793685152"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_LOG_LEVEL"><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LEVEL">¶</a></dt><dd><p>systemd reads the
+ line.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693259360"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_LOG_LEVEL"><span class="term"><code class="varname">$SYSTEMD_LOG_LEVEL</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_LEVEL">¶</a></dt><dd><p>systemd reads the
log level from this environment
variable. This can be overridden with
<code class="option">--log-level=</code>.</p></dd><dt id="$SYSTEMD_LOG_TARGET"><span class="term"><code class="varname">$SYSTEMD_LOG_TARGET</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_LOG_TARGET">¶</a></dt><dd><p>systemd reads the
@@ -518,9 +528,9 @@
start-up completion notification. See
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>
for more information.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259793661728"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>When run as system instance systemd parses a
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274693235936"></a><h2 id="Kernel Command Line">Kernel Command Line<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Command%20Line">¶</a></h2><p>When run as system instance systemd parses a
number of kernel command line
- arguments<a href="#ftn.idm259793660704" class="footnote" name="idm259793660704"><sup class="footnote">[1]</sup></a>:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code>, </span><span class="term"><code class="varname">rd.systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p>Overrides the unit to
+ arguments<a href="#ftn.idm274693234912" class="footnote" name="idm274693234912"><sup class="footnote">[1]</sup></a>:</p><div class="variablelist"><dl class="variablelist"><dt id="systemd.unit="><span class="term"><code class="varname">systemd.unit=</code>, </span><span class="term"><code class="varname">rd.systemd.unit=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.unit=">¶</a></dt><dd><p>Overrides the unit to
activate on boot. Defaults to
<code class="filename">default.target</code>. This
may be used to temporarily boot into a
@@ -530,18 +540,18 @@
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>
for details about these units. The
option prefixed with
- <code class="literal">rd.</code> is honored
+ "<code class="literal">rd.</code>" is honored
only in the initial RAM disk (initrd),
- while the one that isn't prefixed only
+ while the one that is not prefixed only
in the main system.</p></dd><dt id="systemd.dump_core="><span class="term"><code class="varname">systemd.dump_core=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.dump_core=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
systemd dumps core when it
- crashes. Otherwise no core dump is
+ crashes. Otherwise, no core dump is
created. Defaults to
<code class="option">true</code>.</p></dd><dt id="systemd.crash_shell="><span class="term"><code class="varname">systemd.crash_shell=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.crash_shell=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
systemd spawns a shell when it
- crashes. Otherwise no shell is
+ crashes. Otherwise, no shell is
spawned. Defaults to
<code class="option">false</code>, for security
reasons, as the shell is not protected
@@ -550,12 +560,12 @@
argument. If positive systemd
activates the specified virtual
terminal when it crashes. Defaults to
- <code class="literal">-1</code>.</p></dd><dt id="systemd.confirm_spawn="><span class="term"><code class="varname">systemd.confirm_spawn=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.confirm_spawn=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ <code class="constant">-1</code>.</p></dd><dt id="systemd.confirm_spawn="><span class="term"><code class="varname">systemd.confirm_spawn=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.confirm_spawn=">¶</a></dt><dd><p>Takes a boolean
+ argument. If <code class="option">true</code>,
asks for confirmation when spawning
processes. Defaults to
<code class="option">false</code>.</p></dd><dt id="systemd.show_status="><span class="term"><code class="varname">systemd.show_status=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.show_status=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
shows terse service status updates on
the console during bootup. Defaults to
<code class="option">true</code>, unless
@@ -572,24 +582,26 @@
and <code class="option">--default-standard-error=</code>
command line arguments described
above, respectively.</p></dd><dt id="systemd.setenv="><span class="term"><code class="varname">systemd.setenv=</code></span><a class="headerlink" title="Permalink to this term" href="#systemd.setenv=">¶</a></dt><dd><p>Takes a string
- argument in the form
- VARIABLE=VALUE. May be used to set
- environment variables for the init
- process and all its children at boot
- time. May be used more than once to
- set multiple variables. If the equal
- sign and variable are missing it unsets
- an environment variable which might be
- passed in from the initial ram
- disk.</p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p>If passed turns off
+ argument in the form VARIABLE=VALUE.
+ May be used to set default environment
+ variables to add to forked child processes.
+ May be used more than once to set multiple
+ variables.</p></dd><dt id="quiet"><span class="term"><code class="varname">quiet</code></span><a class="headerlink" title="Permalink to this term" href="#quiet">¶</a></dt><dd><p>Turn off
status output at boot, much like
<code class="varname">systemd.show_status=false</code>
would. Note that this option is also
read by the kernel itself and disables
- kernel log output to the
- kernel. Passing this option hence
- turns off the usual output from both
- the system manager and the
+ kernel log output. Passing this option
+ hence turns off the usual output from
+ both the system manager and the kernel.
+ </p></dd><dt id="debug"><span class="term"><code class="varname">debug</code></span><a class="headerlink" title="Permalink to this term" href="#debug">¶</a></dt><dd><p>Turn on debugging
+ output. This is equivalent to
+ <code class="varname">systemd.log_level=debug</code>.
+ Note that this option is also read by
+ the kernel itself and enables kernel
+ debug output. Passing this option
+ hence turns on the debug output from
+ both the system manager and the
kernel.</p></dd><dt id="emergency"><span class="term"><code class="varname">emergency</code></span><a class="headerlink" title="Permalink to this term" href="#emergency">¶</a></dt><dd><p>Boot into emergency
mode. This is equivalent to
<code class="varname">systemd.unit=emergency.target</code>
@@ -618,20 +630,20 @@
</p></dd></dl></div><p>For other kernel command line parameters
understood by components of the core OS, please refer
to
- <a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm259793596048"></a><h2 id="Sockets and FIFOs">Sockets and FIFOs<a class="headerlink" title="Permalink to this headline" href="#Sockets%20and%20FIFOs">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/run/systemd/notify"><span class="term"><code class="filename">/run/systemd/notify</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/notify">¶</a></dt><dd><p>Daemon status
+ <a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>.</p></div><div class="refsect1"><a name="idm274693177056"></a><h2 id="Sockets and FIFOs">Sockets and FIFOs<a class="headerlink" title="Permalink to this headline" href="#Sockets%20and%20FIFOs">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="/run/systemd/notify"><span class="term"><code class="filename">/run/systemd/notify</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/notify">¶</a></dt><dd><p>Daemon status
notification socket. This is an
- AF_UNIX datagram socket and is used to
+ <code class="constant">AF_UNIX</code> datagram socket and is used to
implement the daemon notification
logic as implemented by
<a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a>.</p></dd><dt id="/run/systemd/shutdownd"><span class="term"><code class="filename">/run/systemd/shutdownd</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/shutdownd">¶</a></dt><dd><p>Used internally by the
<a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a>
tool to implement delayed
- shutdowns. This is an AF_UNIX datagram
+ shutdowns. This is an <code class="constant">AF_UNIX</code> datagram
socket.</p></dd><dt id="/run/systemd/private"><span class="term"><code class="filename">/run/systemd/private</code></span><a class="headerlink" title="Permalink to this term" href="#/run/systemd/private">¶</a></dt><dd><p>Used internally as
communication channel between
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>
and the systemd process. This is an
- AF_UNIX stream socket. This interface
+ <code class="constant">AF_UNIX</code> stream socket. This interface
is private to systemd and should not
be used in external
projects.</p></dd><dt id="/dev/initctl"><span class="term"><code class="filename">/dev/initctl</code></span><a class="headerlink" title="Permalink to this term" href="#/dev/initctl">¶</a></dt><dd><p>Limited compatibility
@@ -641,7 +653,8 @@
unit. This is a named pipe in the file
system. This interface is obsolete and
should not be used in new
- applications.</p></dd></dl></div></div><div class="refsect1"><a name="idm259793583968"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ applications.</p></dd></dl></div></div><div class="refsect1"><a name="idm274693163872"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ The <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/" target="_top">systemd Homepage</a>,
<a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a>,
<a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
@@ -655,7 +668,7 @@
<a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a>,
<a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a>,
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
- </p></div><div class="footnotes"><br><hr style="width:100; text-align:left;margin-left: 0"><div id="ftn.idm259793660704" class="footnote"><p><a href="#idm259793660704" class="para"><sup class="para">[1] </sup></a>If run inside a Linux
+ </p></div><div class="footnotes"><br><hr style="width:100; text-align:left;margin-left: 0"><div id="ftn.idm274693234912" class="footnote"><p><a href="#idm274693234912" class="para"><sup class="para">[1] </sup></a>If run inside a Linux
container these arguments may be passed as command
line arguments to systemd itself, next to any of the
command line options listed in the Options section
diff --git a/man/systemd.index.7 b/man/systemd.index.7
new file mode 100644
index 0000000000..92f602bb1b
--- /dev/null
+++ b/man/systemd.index.7
@@ -0,0 +1,940 @@
+'\" t
+.TH "SYSTEMD\&.INDEX" "7" "" "systemd 208" "systemd.index"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.index \- List all manpages from the systemd project
+.SH "B"
+.PP
+\fBbinfmt.d\fR(5)
+\-\- Configure additional binary formats for executables at boot
+.br
+\fBbootchart.conf\fR(5)
+\-\- Boot performance analysis graphing tool configuration file
+.br
+\fBbootup\fR(7)
+\-\- System bootup process
+.br
+
+.SH "C"
+.PP
+\fBcrypttab\fR(5)
+\-\- Configuration for encrypted block devices
+.br
+
+.SH "D"
+.PP
+\fBdaemon\fR(7)
+\-\- Writing and packaging system daemons
+.br
+
+.SH "H"
+.PP
+\fBhalt\fR(8)
+\-\- Halt, power\-off or reboot the machine
+.br
+\fBhostname\fR(5)
+\-\- Local hostname configuration file
+.br
+\fBhostnamectl\fR(1)
+\-\- Control the system hostname
+.br
+
+.SH "I"
+.PP
+\fBinit\fR(1)
+\-\- systemd system and service manager
+.br
+
+.SH "J"
+.PP
+\fBjournalctl\fR(1)
+\-\- Query the systemd journal
+.br
+\fBjournald.conf\fR(5)
+\-\- Journal service configuration file
+.br
+
+.SH "K"
+.PP
+\fBkernel-command-line\fR(7)
+\-\- Kernel command line parameters
+.br
+\fBkernel-install\fR(8)
+\-\- Add and remove kernel and initramfs images to and from /boot
+.br
+
+.SH "L"
+.PP
+\fBlocale.conf\fR(5)
+\-\- Configuration file for locale settings
+.br
+\fBlocalectl\fR(1)
+\-\- Control the system locale and keyboard layout settings
+.br
+\fBlocaltime\fR(5)
+\-\- Local timezone configuration file
+.br
+\fBloginctl\fR(1)
+\-\- Control the systemd login manager
+.br
+\fBlogind.conf\fR(5)
+\-\- Login manager configuration file
+.br
+
+.SH "M"
+.PP
+\fBmachine-id\fR(5)
+\-\- Local machine ID configuration file
+.br
+\fBmachine-info\fR(5)
+\-\- Local machine information file
+.br
+\fBmachinectl\fR(1)
+\-\- Control the systemd machine manager
+.br
+\fBmodules-load.d\fR(5)
+\-\- Configure kernel modules to load at boot
+.br
+
+.SH "N"
+.PP
+\fBnss-myhostname\fR(8)
+\-\- Provide hostname resolution for the locally configured system hostname\&.
+.br
+
+.SH "O"
+.PP
+\fBos-release\fR(5)
+\-\- Operating system identification
+.br
+
+.SH "P"
+.PP
+\fBpam_systemd\fR(8)
+\-\- Register user sessions in the systemd login manager
+.br
+\fBpoweroff\fR(8)
+\-\- Halt, power\-off or reboot the machine
+.br
+
+.SH "R"
+.PP
+\fBreboot\fR(8)
+\-\- Halt, power\-off or reboot the machine
+.br
+\fBrunlevel\fR(8)
+\-\- Print previous and current SysV runlevel
+.br
+
+.SH "S"
+.PP
+\fBsd-daemon\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBsd-id128\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBsd-journal\fR(3)
+\-\- APIs for submitting and querying log entries to and from the journal
+.br
+\fBsd-login\fR(3)
+\-\- APIs for tracking logins
+.br
+\fBsd-readahead\fR(3)
+\-\- Reference implementation of APIs for controlling boot\-time read\-ahead
+.br
+\fBSD_ALERT\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBsd_booted\fR(3)
+\-\- Test whether the system is running the systemd init system
+.br
+\fBSD_CRIT\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBSD_DEBUG\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBSD_EMERG\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBSD_ERR\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBsd_get_machine_names\fR(3)
+\-\- Determine available seats, sessions, logged in users and virtual machines/containers
+.br
+\fBsd_get_seats\fR(3)
+\-\- Determine available seats, sessions, logged in users and virtual machines/containers
+.br
+\fBsd_get_sessions\fR(3)
+\-\- Determine available seats, sessions, logged in users and virtual machines/containers
+.br
+\fBsd_get_uids\fR(3)
+\-\- Determine available seats, sessions, logged in users and virtual machines/containers
+.br
+\fBSD_ID128_CONST_STR\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBsd_id128_equal\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBSD_ID128_FORMAT_STR\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBSD_ID128_FORMAT_VAL\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBsd_id128_from_string\fR(3)
+\-\- Format or parse 128\-bit IDs as strings
+.br
+\fBsd_id128_get_boot\fR(3)
+\-\- Retrieve 128\-bit IDs
+.br
+\fBsd_id128_get_machine\fR(3)
+\-\- Retrieve 128\-bit IDs
+.br
+\fBSD_ID128_MAKE\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBsd_id128_randomize\fR(3)
+\-\- Generate 128\-bit IDs
+.br
+\fBsd_id128_t\fR(3)
+\-\- APIs for processing 128\-bit IDs
+.br
+\fBsd_id128_to_string\fR(3)
+\-\- Format or parse 128\-bit IDs as strings
+.br
+\fBSD_INFO\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBsd_is_fifo\fR(3)
+\-\- Check the type of a file descriptor
+.br
+\fBsd_is_mq\fR(3)
+\-\- Check the type of a file descriptor
+.br
+\fBsd_is_socket\fR(3)
+\-\- Check the type of a file descriptor
+.br
+\fBsd_is_socket_inet\fR(3)
+\-\- Check the type of a file descriptor
+.br
+\fBsd_is_socket_unix\fR(3)
+\-\- Check the type of a file descriptor
+.br
+\fBsd_journal\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_add_conjunction\fR(3)
+\-\- Add or remove entry matches
+.br
+\fBsd_journal_add_disjunction\fR(3)
+\-\- Add or remove entry matches
+.br
+\fBsd_journal_add_match\fR(3)
+\-\- Add or remove entry matches
+.br
+\fBSD_JOURNAL_APPEND\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_close\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBSD_JOURNAL_CURRENT_USER\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_enumerate_data\fR(3)
+\-\- Read data fields from the current journal entry
+.br
+\fBsd_journal_enumerate_unique\fR(3)
+\-\- Read unique data fields from the journal
+.br
+\fBsd_journal_flush_matches\fR(3)
+\-\- Add or remove entry matches
+.br
+\fBSD_JOURNAL_FOREACH\fR(3)
+\-\- Advance or set back the read pointer in the journal
+.br
+\fBSD_JOURNAL_FOREACH_BACKWARDS\fR(3)
+\-\- Advance or set back the read pointer in the journal
+.br
+\fBSD_JOURNAL_FOREACH_DATA\fR(3)
+\-\- Read data fields from the current journal entry
+.br
+\fBSD_JOURNAL_FOREACH_UNIQUE\fR(3)
+\-\- Read unique data fields from the journal
+.br
+\fBsd_journal_get_catalog\fR(3)
+\-\- Retrieve message catalog entry
+.br
+\fBsd_journal_get_catalog_for_message_id\fR(3)
+\-\- Retrieve message catalog entry
+.br
+\fBsd_journal_get_cursor\fR(3)
+\-\- Get cursor string for or test cursor string against the current journal entry
+.br
+\fBsd_journal_get_cutoff_monotonic_usec\fR(3)
+\-\- Read cut\-off timestamps from the current journal entry
+.br
+\fBsd_journal_get_cutoff_realtime_usec\fR(3)
+\-\- Read cut\-off timestamps from the current journal entry
+.br
+\fBsd_journal_get_data\fR(3)
+\-\- Read data fields from the current journal entry
+.br
+\fBsd_journal_get_data_threshold\fR(3)
+\-\- Read data fields from the current journal entry
+.br
+\fBsd_journal_get_events\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_get_fd\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_get_monotonic_usec\fR(3)
+\-\- Read timestamps from the current journal entry
+.br
+\fBsd_journal_get_realtime_usec\fR(3)
+\-\- Read timestamps from the current journal entry
+.br
+\fBsd_journal_get_timeout\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_get_usage\fR(3)
+\-\- Journal disk usage
+.br
+\fBSD_JOURNAL_INVALIDATE\fR(3)
+\-\- Journal change notification interface
+.br
+\fBSD_JOURNAL_LOCAL_ONLY\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_next\fR(3)
+\-\- Advance or set back the read pointer in the journal
+.br
+\fBsd_journal_next_skip\fR(3)
+\-\- Advance or set back the read pointer in the journal
+.br
+\fBSD_JOURNAL_NOP\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_open\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_open_directory\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_open_files\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_perror\fR(3)
+\-\- Submit log entries to the journal
+.br
+\fBsd_journal_previous\fR(3)
+\-\- Advance or set back the read pointer in the journal
+.br
+\fBsd_journal_previous_skip\fR(3)
+\-\- Advance or set back the read pointer in the journal
+.br
+\fBsd_journal_print\fR(3)
+\-\- Submit log entries to the journal
+.br
+\fBsd_journal_printv\fR(3)
+\-\- Submit log entries to the journal
+.br
+\fBsd_journal_process\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_query_unique\fR(3)
+\-\- Read unique data fields from the journal
+.br
+\fBsd_journal_reliable_fd\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_journal_restart_data\fR(3)
+\-\- Read data fields from the current journal entry
+.br
+\fBsd_journal_restart_unique\fR(3)
+\-\- Read unique data fields from the journal
+.br
+\fBSD_JOURNAL_RUNTIME_ONLY\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_seek_cursor\fR(3)
+\-\- Seek to a position in the journal
+.br
+\fBsd_journal_seek_head\fR(3)
+\-\- Seek to a position in the journal
+.br
+\fBsd_journal_seek_monotonic_usec\fR(3)
+\-\- Seek to a position in the journal
+.br
+\fBsd_journal_seek_realtime_usec\fR(3)
+\-\- Seek to a position in the journal
+.br
+\fBsd_journal_seek_tail\fR(3)
+\-\- Seek to a position in the journal
+.br
+\fBsd_journal_send\fR(3)
+\-\- Submit log entries to the journal
+.br
+\fBsd_journal_sendv\fR(3)
+\-\- Submit log entries to the journal
+.br
+\fBsd_journal_set_data_threshold\fR(3)
+\-\- Read data fields from the current journal entry
+.br
+\fBsd_journal_stream_fd\fR(3)
+\-\- Create log stream file descriptor to the journal
+.br
+\fBSD_JOURNAL_SUPPRESS_LOCATION\fR(3)
+\-\- Submit log entries to the journal
+.br
+\fBSD_JOURNAL_SYSTEM\fR(3)
+\-\- Open the system journal for reading
+.br
+\fBsd_journal_test_cursor\fR(3)
+\-\- Get cursor string for or test cursor string against the current journal entry
+.br
+\fBsd_journal_wait\fR(3)
+\-\- Journal change notification interface
+.br
+\fBsd_listen_fds\fR(3)
+\-\- Check for file descriptors passed by the system manager
+.br
+\fBSD_LISTEN_FDS_START\fR(3)
+\-\- Check for file descriptors passed by the system manager
+.br
+\fBsd_login_monitor\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBsd_login_monitor_flush\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBsd_login_monitor_get_events\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBsd_login_monitor_get_fd\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBsd_login_monitor_get_timeout\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBsd_login_monitor_new\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBsd_login_monitor_unref\fR(3)
+\-\- Monitor login sessions, seats, users and virtual machines/containers
+.br
+\fBSD_NOTICE\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBsd_notify\fR(3)
+\-\- Notify service manager about start\-up completion and other daemon status changes
+.br
+\fBsd_notifyf\fR(3)
+\-\- Notify service manager about start\-up completion and other daemon status changes
+.br
+\fBsd_pid_get_machine_name\fR(3)
+\-\- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.br
+\fBsd_pid_get_owner_uid\fR(3)
+\-\- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.br
+\fBsd_pid_get_session\fR(3)
+\-\- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.br
+\fBsd_pid_get_slice\fR(3)
+\-\- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.br
+\fBsd_pid_get_unit\fR(3)
+\-\- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.br
+\fBsd_pid_get_user_unit\fR(3)
+\-\- Determine session, service, owner of a session, container/VM or slice of a specific PID
+.br
+\fBsd_readahead\fR(3)
+\-\- Control ongoing disk boot\-time read\-ahead operations
+.br
+\fBsd_seat_can_multi_session\fR(3)
+\-\- Determine state of a specific seat
+.br
+\fBsd_seat_get_active\fR(3)
+\-\- Determine state of a specific seat
+.br
+\fBsd_seat_get_sessions\fR(3)
+\-\- Determine state of a specific seat
+.br
+\fBsd_session_get_class\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_display\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_seat\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_service\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_state\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_tty\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_type\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_uid\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_get_vt\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_session_is_active\fR(3)
+\-\- Determine state of a specific session
+.br
+\fBsd_uid_get_seats\fR(3)
+\-\- Determine login state of a specific Unix user ID
+.br
+\fBsd_uid_get_sessions\fR(3)
+\-\- Determine login state of a specific Unix user ID
+.br
+\fBsd_uid_get_state\fR(3)
+\-\- Determine login state of a specific Unix user ID
+.br
+\fBsd_uid_is_on_seat\fR(3)
+\-\- Determine login state of a specific Unix user ID
+.br
+\fBSD_WARNING\fR(3)
+\-\- Reference implementation of APIs for new\-style daemons
+.br
+\fBshutdown\fR(8)
+\-\- Halt, power\-off or reboot the machine
+.br
+\fBsysctl.d\fR(5)
+\-\- Configure kernel parameters at boot
+.br
+\fBsystemctl\fR(1)
+\-\- Control the systemd system and service manager
+.br
+\fBsystemd\fR(1)
+\-\- systemd system and service manager
+.br
+\fBsystemd-activate\fR(8)
+\-\- Test socket activation of daemons
+.br
+\fBsystemd-analyze\fR(1)
+\-\- Analyze system boot\-up performance
+.br
+\fBsystemd-ask-password\fR(1)
+\-\- Query the user for a system password
+.br
+\fBsystemd-ask-password-console.path\fR(8)
+\-\- Query the user for system passwords on the console and via wall
+.br
+\fBsystemd-ask-password-console.service\fR(8)
+\-\- Query the user for system passwords on the console and via wall
+.br
+\fBsystemd-ask-password-wall.path\fR(8)
+\-\- Query the user for system passwords on the console and via wall
+.br
+\fBsystemd-ask-password-wall.service\fR(8)
+\-\- Query the user for system passwords on the console and via wall
+.br
+\fBsystemd-backlight\fR(8)
+\-\- Load and save the display backlight brightness at boot and shutdown
+.br
+\fBsystemd-backlight@.service\fR(8)
+\-\- Load and save the display backlight brightness at boot and shutdown
+.br
+\fBsystemd-binfmt\fR(8)
+\-\- Configure additional binary formats for executables at boot
+.br
+\fBsystemd-binfmt.service\fR(8)
+\-\- Configure additional binary formats for executables at boot
+.br
+\fBsystemd-bootchart\fR(1)
+\-\- Boot performance graphing tool
+.br
+\fBsystemd-cat\fR(1)
+\-\- Connect a pipeline or program\*(Aqs output with the journal
+.br
+\fBsystemd-cgls\fR(1)
+\-\- Recursively show control group contents
+.br
+\fBsystemd-cgtop\fR(1)
+\-\- Show top control groups by their resource usage
+.br
+\fBsystemd-coredumpctl\fR(1)
+\-\- Retrieve coredumps from the journal
+.br
+\fBsystemd-cryptsetup\fR(8)
+\-\- Full disk decryption logic
+.br
+\fBsystemd-cryptsetup-generator\fR(8)
+\-\- Unit generator for
+.br
+\fBsystemd-cryptsetup@.service\fR(8)
+\-\- Full disk decryption logic
+.br
+\fBsystemd-delta\fR(1)
+\-\- Find overridden configuration files
+.br
+\fBsystemd-detect-virt\fR(1)
+\-\- Detect execution in a virtualized environment
+.br
+\fBsystemd-efi-boot-generator\fR(8)
+\-\- Generator for automatically mounting the EFI System Partition used by the current boot to
+.br
+\fBsystemd-fsck\fR(8)
+\-\- File system checker logic
+.br
+\fBsystemd-fsck-root.service\fR(8)
+\-\- File system checker logic
+.br
+\fBsystemd-fsck@.service\fR(8)
+\-\- File system checker logic
+.br
+\fBsystemd-fstab-generator\fR(8)
+\-\- Unit generator for /etc/fstab
+.br
+\fBsystemd-getty-generator\fR(8)
+\-\- Generator for enabling getty instances on the console
+.br
+\fBsystemd-gpt-auto-generator\fR(8)
+\-\- Generator for automatically discovering and mounting
+.br
+\fBsystemd-halt.service\fR(8)
+\-\- System shutdown logic
+.br
+\fBsystemd-hibernate.service\fR(8)
+\-\- System sleep state logic
+.br
+\fBsystemd-hostnamed\fR(8)
+\-\- Host name bus mechanism
+.br
+\fBsystemd-hostnamed.service\fR(8)
+\-\- Host name bus mechanism
+.br
+\fBsystemd-hybrid-sleep.service\fR(8)
+\-\- System sleep state logic
+.br
+\fBsystemd-inhibit\fR(1)
+\-\- Execute a program with an inhibition lock taken
+.br
+\fBsystemd-initctl\fR(8)
+\-\- /dev/initctl compatibility
+.br
+\fBsystemd-initctl.service\fR(8)
+\-\- /dev/initctl compatibility
+.br
+\fBsystemd-initctl.socket\fR(8)
+\-\- /dev/initctl compatibility
+.br
+\fBsystemd-journal-gatewayd\fR(8)
+\-\- HTTP server for journal events
+.br
+\fBsystemd-journal-gatewayd.service\fR(8)
+\-\- HTTP server for journal events
+.br
+\fBsystemd-journal-gatewayd.socket\fR(8)
+\-\- HTTP server for journal events
+.br
+\fBsystemd-journald\fR(8)
+\-\- Journal service
+.br
+\fBsystemd-journald.service\fR(8)
+\-\- Journal service
+.br
+\fBsystemd-journald.socket\fR(8)
+\-\- Journal service
+.br
+\fBsystemd-kexec.service\fR(8)
+\-\- System shutdown logic
+.br
+\fBsystemd-localed\fR(8)
+\-\- Locale bus mechanism
+.br
+\fBsystemd-localed.service\fR(8)
+\-\- Locale bus mechanism
+.br
+\fBsystemd-logind\fR(8)
+\-\- Login manager
+.br
+\fBsystemd-logind.service\fR(8)
+\-\- Login manager
+.br
+\fBsystemd-machine-id-setup\fR(1)
+\-\- Initialize the machine ID in /etc/machine\-id
+.br
+\fBsystemd-machined\fR(8)
+\-\- Virtual machine and container registration manager
+.br
+\fBsystemd-machined.service\fR(8)
+\-\- Virtual machine and container registration manager
+.br
+\fBsystemd-modules-load\fR(8)
+\-\- Configure kernel modules to load at boot
+.br
+\fBsystemd-modules-load.service\fR(8)
+\-\- Configure kernel modules to load at boot
+.br
+\fBsystemd-notify\fR(1)
+\-\- Notify service manager about start\-up completion and other daemon status changes
+.br
+\fBsystemd-nspawn\fR(1)
+\-\- Spawn a namespace container for debugging, testing and building
+.br
+\fBsystemd-poweroff.service\fR(8)
+\-\- System shutdown logic
+.br
+\fBsystemd-quotacheck\fR(8)
+\-\- File system quota checker logic
+.br
+\fBsystemd-quotacheck.service\fR(8)
+\-\- File system quota checker logic
+.br
+\fBsystemd-random-seed\fR(8)
+\-\- Load and save the system random seed at boot and shutdown
+.br
+\fBsystemd-random-seed.service\fR(8)
+\-\- Load and save the system random seed at boot and shutdown
+.br
+\fBsystemd-readahead\fR(8)
+\-\- Disk read ahead logic
+.br
+\fBsystemd-readahead-collect.service\fR(8)
+\-\- Disk read ahead logic
+.br
+\fBsystemd-readahead-done.service\fR(8)
+\-\- Disk read ahead logic
+.br
+\fBsystemd-readahead-done.timer\fR(8)
+\-\- Disk read ahead logic
+.br
+\fBsystemd-readahead-replay.service\fR(8)
+\-\- Disk read ahead logic
+.br
+\fBsystemd-reboot.service\fR(8)
+\-\- System shutdown logic
+.br
+\fBsystemd-remount-fs\fR(8)
+\-\- Remount root and kernel file systems
+.br
+\fBsystemd-remount-fs.service\fR(8)
+\-\- Remount root and kernel file systems
+.br
+\fBsystemd-run\fR(1)
+\-\- Run programs in transient scope or service units
+.br
+\fBsystemd-shutdown\fR(8)
+\-\- System shutdown logic
+.br
+\fBsystemd-shutdownd\fR(8)
+\-\- Scheduled shutdown service
+.br
+\fBsystemd-shutdownd.service\fR(8)
+\-\- Scheduled shutdown service
+.br
+\fBsystemd-shutdownd.socket\fR(8)
+\-\- Scheduled shutdown service
+.br
+\fBsystemd-sleep\fR(8)
+\-\- System sleep state logic
+.br
+\fBsystemd-sleep.conf\fR(5)
+\-\- Suspend and hibernation configuration file
+.br
+\fBsystemd-suspend.service\fR(8)
+\-\- System sleep state logic
+.br
+\fBsystemd-sysctl\fR(8)
+\-\- Configure kernel parameters at boot
+.br
+\fBsystemd-sysctl.service\fR(8)
+\-\- Configure kernel parameters at boot
+.br
+\fBsystemd-system-update-generator\fR(8)
+\-\- Generator for redirecting boot to offline update mode
+.br
+\fBsystemd-system.conf\fR(5)
+\-\- System and session service manager configuration file
+.br
+\fBsystemd-timedated\fR(8)
+\-\- Time and date bus mechanism
+.br
+\fBsystemd-timedated.service\fR(8)
+\-\- Time and date bus mechanism
+.br
+\fBsystemd-tmpfiles\fR(8)
+\-\- Creates, deletes and cleans up volatile and temporary files and directories
+.br
+\fBsystemd-tmpfiles-clean.service\fR(8)
+\-\- Creates, deletes and cleans up volatile and temporary files and directories
+.br
+\fBsystemd-tmpfiles-clean.timer\fR(8)
+\-\- Creates, deletes and cleans up volatile and temporary files and directories
+.br
+\fBsystemd-tmpfiles-setup-dev.service\fR(8)
+\-\- Creates, deletes and cleans up volatile and temporary files and directories
+.br
+\fBsystemd-tmpfiles-setup.service\fR(8)
+\-\- Creates, deletes and cleans up volatile and temporary files and directories
+.br
+\fBsystemd-tty-ask-password-agent\fR(1)
+\-\- List or process pending systemd password requests
+.br
+\fBsystemd-udevd\fR(8)
+\-\- Device event managing daemon
+.br
+\fBsystemd-udevd-control.socket\fR(8)
+\-\- Device event managing daemon
+.br
+\fBsystemd-udevd-kernel.socket\fR(8)
+\-\- Device event managing daemon
+.br
+\fBsystemd-udevd.service\fR(8)
+\-\- Device event managing daemon
+.br
+\fBsystemd-update-utmp\fR(8)
+\-\- Write audit and utmp updates at bootup, runlevel changes and shutdown
+.br
+\fBsystemd-update-utmp-runlevel.service\fR(8)
+\-\- Write audit and utmp updates at bootup, runlevel changes and shutdown
+.br
+\fBsystemd-update-utmp.service\fR(8)
+\-\- Write audit and utmp updates at bootup, runlevel changes and shutdown
+.br
+\fBsystemd-user-sessions\fR(8)
+\-\- Permit user logins after boot, prohibit user logins at shutdown
+.br
+\fBsystemd-user-sessions.service\fR(8)
+\-\- Permit user logins after boot, prohibit user logins at shutdown
+.br
+\fBsystemd-user.conf\fR(5)
+\-\- System and session service manager configuration file
+.br
+\fBsystemd-vconsole-setup\fR(8)
+\-\- Configure the virtual console at boot
+.br
+\fBsystemd-vconsole-setup.service\fR(8)
+\-\- Configure the virtual console at boot
+.br
+\fBsystemd.automount\fR(5)
+\-\- Automount unit configuration
+.br
+\fBsystemd.device\fR(5)
+\-\- Device unit configuration
+.br
+\fBsystemd.directives\fR(7)
+\-\- Index of configuration directives
+.br
+\fBsystemd.exec\fR(5)
+\-\- Execution environment configuration
+.br
+\fBsystemd.journal-fields\fR(7)
+\-\- Special journal fields
+.br
+\fBsystemd.kill\fR(5)
+\-\- Kill environment configuration
+.br
+\fBsystemd.mount\fR(5)
+\-\- Mount unit configuration
+.br
+\fBsystemd.path\fR(5)
+\-\- Path unit configuration
+.br
+\fBsystemd.preset\fR(5)
+\-\- Service enablement presets
+.br
+\fBsystemd.resource-control\fR(5)
+\-\- Resource control unit settings
+.br
+\fBsystemd.scope\fR(5)
+\-\- Scope unit configuration
+.br
+\fBsystemd.service\fR(5)
+\-\- Service unit configuration
+.br
+\fBsystemd.slice\fR(5)
+\-\- Slice unit configuration
+.br
+\fBsystemd.snapshot\fR(5)
+\-\- Snapshot unit configuration
+.br
+\fBsystemd.socket\fR(5)
+\-\- Socket unit configuration
+.br
+\fBsystemd.special\fR(7)
+\-\- Special systemd units
+.br
+\fBsystemd.swap\fR(5)
+\-\- Swap unit configuration
+.br
+\fBsystemd.target\fR(5)
+\-\- Target unit configuration
+.br
+\fBsystemd.time\fR(7)
+\-\- Time and date specifications
+.br
+\fBsystemd.timer\fR(5)
+\-\- Timer unit configuration
+.br
+\fBsystemd.unit\fR(5)
+\-\- Unit configuration
+.br
+
+.SH "T"
+.PP
+\fBtelinit\fR(8)
+\-\- Change SysV runlevel
+.br
+\fBtimedatectl\fR(1)
+\-\- Control the system time and date
+.br
+\fBtmpfiles.d\fR(5)
+\-\- Configuration for creation, deletion and cleaning of volatile and temporary files
+.br
+
+.SH "U"
+.PP
+\fBudev\fR(7)
+\-\- Dynamic device management
+.br
+\fBudevadm\fR(8)
+\-\- udev management tool
+.br
+
+.SH "V"
+.PP
+\fBvconsole.conf\fR(5)
+\-\- Configuration file for the virtual console
+.br
+
+.SH "SEE ALSO"
+.PP
+\fBsystemd.directives\fR(7)
+.PP
+This index contains 287 entries, referring to 140 individual manual pages\&.
diff --git a/man/systemd.index.html b/man/systemd.index.html
index 62e5f7764c..29597f4949 100644
--- a/man/systemd.index.html
+++ b/man/systemd.index.html
@@ -19,6 +19,6 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.index"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.index — List all manpages from the systemd project</p></div><div class="refsect1"><a name="idm259777493920"></a><h2 id="B">B<a class="headerlink" title="Permalink to this headline" href="#B">¶</a></h2><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a> -- Configure additional binary formats for executables at boot<br><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a> -- Boot performance analysis graphing tool configuration file<br><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a> -- System bootup process<br></p></div><div class="refsect1"><a name="idm259777490720"></a><h2 id="C">C<a class="headerlink" title="Permalink to this headline" href="#C">¶</a></h2><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a> -- Configuration for encrypted block devices<br></p></div><div class="refsect1"><a name="idm259777489312"></a><h2 id="D">D<a class="headerlink" title="Permalink to this headline" href="#D">¶</a></h2><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a> -- Writing and packaging system daemons<br></p></div><div class="refsect1"><a name="idm259777487904"></a><h2 id="H">H<a class="headerlink" title="Permalink to this headline" href="#H">¶</a></h2><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a> -- Local host name configuration file<br><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a> -- Control the system hostname<br></p></div><div class="refsect1"><a name="idm259777484704"></a><h2 id="I">I<a class="headerlink" title="Permalink to this headline" href="#I">¶</a></h2><p><a href="init.html"><span class="citerefentry"><span class="refentrytitle">init</span>(1)</span></a> -- systemd system and service manager<br></p></div><div class="refsect1"><a name="idm259777483296"></a><h2 id="J">J<a class="headerlink" title="Permalink to this headline" href="#J">¶</a></h2><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a> -- Query the systemd journal<br><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a> -- Journal service configuration file<br></p></div><div class="refsect1"><a name="idm259777480992"></a><h2 id="K">K<a class="headerlink" title="Permalink to this headline" href="#K">¶</a></h2><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a> -- Kernel command line parameters<br><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a> -- Add and remove kernel and initramfs images to and from /boot<br></p></div><div class="refsect1"><a name="idm259777478688"></a><h2 id="L">L<a class="headerlink" title="Permalink to this headline" href="#L">¶</a></h2><p><a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a> -- Configuration file for locale settings<br><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a> -- Control the system locale and keyboard layout settings<br><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a> -- Local time zone configuration file<br><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a> -- Control the systemd login manager<br><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a> -- Login manager configuration file<br></p></div><div class="refsect1"><a name="idm259777453200"></a><h2 id="M">M<a class="headerlink" title="Permalink to this headline" href="#M">¶</a></h2><p><a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> -- Local machine ID configuration file<br><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a> -- Local machine information file<br><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a> -- Configure kernel modules to load at boot<br></p></div><div class="refsect1"><a name="idm259777450000"></a><h2 id="N">N<a class="headerlink" title="Permalink to this headline" href="#N">¶</a></h2><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a> -- Provide host name resolution for the locally configured system hostname.<br></p></div><div class="refsect1"><a name="idm259777448592"></a><h2 id="O">O<a class="headerlink" title="Permalink to this headline" href="#O">¶</a></h2><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a> -- Operating system identification<br></p></div><div class="refsect1"><a name="idm259777447184"></a><h2 id="P">P<a class="headerlink" title="Permalink to this headline" href="#P">¶</a></h2><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a> -- Register user sessions in the systemd login manager<br><a href="poweroff.html"><span class="citerefentry"><span class="refentrytitle">poweroff</span>(8)</span></a> -- Halt, power-off or reboot the machine<br></p></div><div class="refsect1"><a name="idm259777444880"></a><h2 id="R">R<a class="headerlink" title="Permalink to this headline" href="#R">¶</a></h2><p><a href="reboot.html"><span class="citerefentry"><span class="refentrytitle">reboot</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a> -- Print previous and current SysV runlevel<br></p></div><div class="refsect1"><a name="idm259777442576"></a><h2 id="S">S<a class="headerlink" title="Permalink to this headline" href="#S">¶</a></h2><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a> -- APIs for submitting and querying log entries to and from the journal<br><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a> -- APIs for tracking logins<br><a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a> -- Reference implementation of APIs for controlling boot-time read-ahead<br><a href="SD_ALERT.html"><span class="citerefentry"><span class="refentrytitle">SD_ALERT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a> -- Test whether the system is running the systemd init system<br><a href="SD_CRIT.html"><span class="citerefentry"><span class="refentrytitle">SD_CRIT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_DEBUG.html"><span class="citerefentry"><span class="refentrytitle">SD_DEBUG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_EMERG.html"><span class="citerefentry"><span class="refentrytitle">SD_EMERG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_ERR.html"><span class="citerefentry"><span class="refentrytitle">SD_ERR</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_get_machine_names.html"><span class="citerefentry"><span class="refentrytitle">sd_get_machine_names</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_get_sessions</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_uids.html"><span class="citerefentry"><span class="refentrytitle">sd_get_uids</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="SD_ID128_CONST_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_CONST_STR</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_equal.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_equal</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="SD_ID128_FORMAT_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_STR</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="SD_ID128_FORMAT_VAL.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_VAL</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_from_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_from_string</span>(3)</span></a> -- Format or parse 128 bit IDs as strings<br><a href="sd_id128_get_boot.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_boot</span>(3)</span></a> -- Retrieve 128 bit IDs<br><a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a> -- Retrieve 128 bit IDs<br><a href="SD_ID128_MAKE.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_MAKE</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> -- Generate 128 bit IDs<br><a href="sd_id128_t.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_t</span>(3)</span></a> -- APIs for processing 128 bit IDs<br><a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a> -- Format or parse 128 bit IDs as strings<br><a href="SD_INFO.html"><span class="citerefentry"><span class="refentrytitle">SD_INFO</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_mq.html"><span class="citerefentry"><span class="refentrytitle">sd_is_mq</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_inet.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_inet</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_unix.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_unix</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_journal.html"><span class="citerefentry"><span class="refentrytitle">sd_journal</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_add_conjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_conjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_disjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_disjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_match.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_match</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_APPEND.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_APPEND</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_close.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_close</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_enumerate_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_enumerate_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_flush_matches.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_flush_matches</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_FOREACH.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_BACKWARDS.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_BACKWARDS</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_DATA.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_DATA</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="SD_JOURNAL_FOREACH_UNIQUE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_UNIQUE</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_get_catalog.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_catalog_for_message_id.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog_for_message_id</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_get_cutoff_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_monotonic_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_events</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_monotonic_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_timeout</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_usage.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_usage</span>(3)</span></a> -- Journal disk usage<br><a href="SD_JOURNAL_INVALIDATE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_INVALIDATE</span>(3)</span></a> -- Journal change notification interface<br><a href="SD_JOURNAL_LOCAL_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_LOCAL_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_next_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_NOP.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_NOP</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_open_directory.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open_directory</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_perror.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_perror</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_previous_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_printv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_printv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_process.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_process</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_query_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_query_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_reliable_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_reliable_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_restart_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_restart_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="SD_JOURNAL_RUNTIME_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_RUNTIME_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_monotonic_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_realtime_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_tail.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_tail</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_send.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_send</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_sendv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_sendv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_set_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_set_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a> -- Create log stream file descriptor to the journal<br><a href="SD_JOURNAL_SUPPRESS_LOCATION.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SUPPRESS_LOCATION</span>(3)</span></a> -- Submit log entries to the journal<br><a href="SD_JOURNAL_SYSTEM_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SYSTEM_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_wait.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_wait</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="SD_LISTEN_FDS_START.html"><span class="citerefentry"><span class="refentrytitle">SD_LISTEN_FDS_START</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="sd_login_monitor.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_flush.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_flush</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_events</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_fd</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_timeout</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_unref.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_unref</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="SD_NOTICE.html"><span class="citerefentry"><span class="refentrytitle">SD_NOTICE</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_notifyf.html"><span class="citerefentry"><span class="refentrytitle">sd_notifyf</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_pid_get_machine_name.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_machine_name</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_unit</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_pid_get_user_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_user_unit</span>(3)</span></a> -- Determine session, service, owner of a session or container/VM of a specific PID<br><a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a> -- Control ongoing disk boot-time read-ahead operations<br><a href="sd_seat_can_multi_session.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_can_multi_session</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_active.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_active</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_sessions</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_session_get_class.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_class</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_display.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_display</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_service.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_service</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_state</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_tty.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_tty</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_type.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_type</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_uid</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_uid_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_seats</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_sessions</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_is_on_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_is_on_seat</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="SD_WARNING.html"><span class="citerefentry"><span class="refentrytitle">SD_WARNING</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a> -- Configure kernel parameters at boot<br><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a> -- Control the systemd system and service manager<br><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a> -- systemd system and service manager<br><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a> -- Test socket activation of daemons<br><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a> -- Analyze system boot-up performance<br><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a> -- Query the user for a system password<br><a href="systemd-ask-password-console.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-binfmt.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a> -- Boot performance graphing tool<br><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a> -- Connect a pipeline or program's output with the journal<br><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a> -- Recursively show control group contents<br><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a> -- Show top control groups by their resource usage<br><a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a> -- Retrieve coredumps from the journal<br><a href="systemd-cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a> -- Unit generator for<br><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a> -- Find overridden configuration files<br><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a> -- Detect execution in a virtualized environment<br><a href="systemd-fsck.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck-root.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck-root.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a> -- Unit generator for /etc/fstab<br><a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a> -- Generator for enabling getty instances on the console<br><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-hibernate.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hibernate.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-hostnamed.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed</span>(8)</span></a> -- Hostname bus mechanism<br><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a> -- Hostname bus mechanism<br><a href="systemd-hybrid-sleep.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hybrid-sleep.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a> -- Execute a program with an inhibition lock taken<br><a href="systemd-initctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.socket</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-journal-gatewayd.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.socket</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journald.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.socket</span>(8)</span></a> -- Journal service<br><a href="systemd-kexec.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-kexec.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-localed.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-logind.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind</span>(8)</span></a> -- Login manager<br><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a> -- Login manager<br><a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a> -- Initialize the machine ID in /etc/machine-id<br><a href="systemd-modules-load.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a> -- Spawn a namespace container for debugging, testing and building<br><a href="systemd-poweroff.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-poweroff.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-quotacheck.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-random-seed.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-random-seed-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-load.service</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-random-seed-save.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed-save.service</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-readahead.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-collect.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-collect.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.timer</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-reboot.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-reboot.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-remount-fs.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-shutdown.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdown</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-shutdownd.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.socket</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-sleep.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a> -- Suspend and hibernation configuration file<br><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sysctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a> -- Generator for redirecting boot to offline update mode<br><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-timedated.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.timer</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup-dev.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup-dev.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a> -- List or process pending systemd password requests<br><a href="systemd-udevd.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-control.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-control.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-kernel.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-kernel.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-update-utmp.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp</span>(8)</span></a> -- Write audit and utmp updates at runlevel changes and shutdown<br><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a> -- Write audit and utmp updates at runlevel changes and shutdown<br><a href="systemd-update-utmp-shutdown.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-shutdown.service</span>(8)</span></a> -- Write audit and utmp updates at runlevel changes and shutdown<br><a href="systemd-user-sessions.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-user.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-vconsole-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a> -- Automount unit configuration<br><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a> -- Device unit configuration<br><a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a> -- Index of configuration directives<br><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a> -- Execution environment configuration<br><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a> -- Special journal fields<br><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a> -- Kill environment configuration<br><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a> -- Mount unit configuration<br><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a> -- Path unit configuration<br><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a> -- Service enablement presets<br><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a> -- Service unit configuration<br><a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a> -- Snapshot unit configuration<br><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a> -- Socket unit configuration<br><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a> -- Special systemd units<br><a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a> -- Swap unit configuration<br><a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a> -- Target unit configuration<br><a href="systemd.time.html"><span class="citerefentry"><span class="refentrytitle">systemd.time</span>(7)</span></a> -- Time and date specifications<br><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a> -- Timer unit configuration<br><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> -- Unit configuration<br></p></div><div class="refsect1"><a name="idm259777214096"></a><h2 id="T">T<a class="headerlink" title="Permalink to this headline" href="#T">¶</a></h2><p><a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a> -- Change SysV runlevel<br><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a> -- Control the system time and date<br><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> -- Configuration for creation, deletion and cleaning of volatile and temporary files<br></p></div><div class="refsect1"><a name="idm259777210704"></a><h2 id="U">U<a class="headerlink" title="Permalink to this headline" href="#U">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a> -- Linux dynamic device management<br><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a> -- udev management tool<br></p></div><div class="refsect1"><a name="idm259777208304"></a><h2 id="V">V<a class="headerlink" title="Permalink to this headline" href="#V">¶</a></h2><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a> -- Configuration file for the virtual console<br></p></div><div class="refsect1"><a name="idm259777206832"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.index"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.index — List all manpages from the systemd project</p></div><div class="refsect1"><a name="idm274688048512"></a><h2 id="B">B<a class="headerlink" title="Permalink to this headline" href="#B">¶</a></h2><p><a href="binfmt.d.html"><span class="citerefentry"><span class="refentrytitle">binfmt.d</span>(5)</span></a> -- Configure additional binary formats for executables at boot<br><a href="bootchart.conf.html"><span class="citerefentry"><span class="refentrytitle">bootchart.conf</span>(5)</span></a> -- Boot performance analysis graphing tool configuration file<br><a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a> -- System bootup process<br></p></div><div class="refsect1"><a name="idm274688045312"></a><h2 id="C">C<a class="headerlink" title="Permalink to this headline" href="#C">¶</a></h2><p><a href="crypttab.html"><span class="citerefentry"><span class="refentrytitle">crypttab</span>(5)</span></a> -- Configuration for encrypted block devices<br></p></div><div class="refsect1"><a name="idm274688043904"></a><h2 id="D">D<a class="headerlink" title="Permalink to this headline" href="#D">¶</a></h2><p><a href="daemon.html"><span class="citerefentry"><span class="refentrytitle">daemon</span>(7)</span></a> -- Writing and packaging system daemons<br></p></div><div class="refsect1"><a name="idm274688042496"></a><h2 id="H">H<a class="headerlink" title="Permalink to this headline" href="#H">¶</a></h2><p><a href="halt.html"><span class="citerefentry"><span class="refentrytitle">halt</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="hostname.html"><span class="citerefentry"><span class="refentrytitle">hostname</span>(5)</span></a> -- Local hostname configuration file<br><a href="hostnamectl.html"><span class="citerefentry"><span class="refentrytitle">hostnamectl</span>(1)</span></a> -- Control the system hostname<br></p></div><div class="refsect1"><a name="idm274688039296"></a><h2 id="I">I<a class="headerlink" title="Permalink to this headline" href="#I">¶</a></h2><p><a href="init.html"><span class="citerefentry"><span class="refentrytitle">init</span>(1)</span></a> -- systemd system and service manager<br></p></div><div class="refsect1"><a name="idm274688037888"></a><h2 id="J">J<a class="headerlink" title="Permalink to this headline" href="#J">¶</a></h2><p><a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a> -- Query the systemd journal<br><a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a> -- Journal service configuration file<br></p></div><div class="refsect1"><a name="idm274688035584"></a><h2 id="K">K<a class="headerlink" title="Permalink to this headline" href="#K">¶</a></h2><p><a href="kernel-command-line.html"><span class="citerefentry"><span class="refentrytitle">kernel-command-line</span>(7)</span></a> -- Kernel command line parameters<br><a href="kernel-install.html"><span class="citerefentry"><span class="refentrytitle">kernel-install</span>(8)</span></a> -- Add and remove kernel and initramfs images to and from /boot<br></p></div><div class="refsect1"><a name="idm274688033280"></a><h2 id="L">L<a class="headerlink" title="Permalink to this headline" href="#L">¶</a></h2><p><a href="locale.conf.html"><span class="citerefentry"><span class="refentrytitle">locale.conf</span>(5)</span></a> -- Configuration file for locale settings<br><a href="localectl.html"><span class="citerefentry"><span class="refentrytitle">localectl</span>(1)</span></a> -- Control the system locale and keyboard layout settings<br><a href="localtime.html"><span class="citerefentry"><span class="refentrytitle">localtime</span>(5)</span></a> -- Local timezone configuration file<br><a href="loginctl.html"><span class="citerefentry"><span class="refentrytitle">loginctl</span>(1)</span></a> -- Control the systemd login manager<br><a href="logind.conf.html"><span class="citerefentry"><span class="refentrytitle">logind.conf</span>(5)</span></a> -- Login manager configuration file<br></p></div><div class="refsect1"><a name="idm274688007664"></a><h2 id="M">M<a class="headerlink" title="Permalink to this headline" href="#M">¶</a></h2><p><a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> -- Local machine ID configuration file<br><a href="machine-info.html"><span class="citerefentry"><span class="refentrytitle">machine-info</span>(5)</span></a> -- Local machine information file<br><a href="machinectl.html"><span class="citerefentry"><span class="refentrytitle">machinectl</span>(1)</span></a> -- Control the systemd machine manager<br><a href="modules-load.d.html"><span class="citerefentry"><span class="refentrytitle">modules-load.d</span>(5)</span></a> -- Configure kernel modules to load at boot<br></p></div><div class="refsect1"><a name="idm274688003568"></a><h2 id="N">N<a class="headerlink" title="Permalink to this headline" href="#N">¶</a></h2><p><a href="nss-myhostname.html"><span class="citerefentry"><span class="refentrytitle">nss-myhostname</span>(8)</span></a> -- Provide hostname resolution for the locally configured system hostname.<br></p></div><div class="refsect1"><a name="idm274688002160"></a><h2 id="O">O<a class="headerlink" title="Permalink to this headline" href="#O">¶</a></h2><p><a href="os-release.html"><span class="citerefentry"><span class="refentrytitle">os-release</span>(5)</span></a> -- Operating system identification<br></p></div><div class="refsect1"><a name="idm274688000752"></a><h2 id="P">P<a class="headerlink" title="Permalink to this headline" href="#P">¶</a></h2><p><a href="pam_systemd.html"><span class="citerefentry"><span class="refentrytitle">pam_systemd</span>(8)</span></a> -- Register user sessions in the systemd login manager<br><a href="poweroff.html"><span class="citerefentry"><span class="refentrytitle">poweroff</span>(8)</span></a> -- Halt, power-off or reboot the machine<br></p></div><div class="refsect1"><a name="idm274687998448"></a><h2 id="R">R<a class="headerlink" title="Permalink to this headline" href="#R">¶</a></h2><p><a href="reboot.html"><span class="citerefentry"><span class="refentrytitle">reboot</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="runlevel.html"><span class="citerefentry"><span class="refentrytitle">runlevel</span>(8)</span></a> -- Print previous and current SysV runlevel<br></p></div><div class="refsect1"><a name="idm274687996144"></a><h2 id="S">S<a class="headerlink" title="Permalink to this headline" href="#S">¶</a></h2><p><a href="sd-daemon.html"><span class="citerefentry"><span class="refentrytitle">sd-daemon</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd-id128.html"><span class="citerefentry"><span class="refentrytitle">sd-id128</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd-journal.html"><span class="citerefentry"><span class="refentrytitle">sd-journal</span>(3)</span></a> -- APIs for submitting and querying log entries to and from the journal<br><a href="sd-login.html"><span class="citerefentry"><span class="refentrytitle">sd-login</span>(3)</span></a> -- APIs for tracking logins<br><a href="sd-readahead.html"><span class="citerefentry"><span class="refentrytitle">sd-readahead</span>(3)</span></a> -- Reference implementation of APIs for controlling boot-time read-ahead<br><a href="SD_ALERT.html"><span class="citerefentry"><span class="refentrytitle">SD_ALERT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_booted.html"><span class="citerefentry"><span class="refentrytitle">sd_booted</span>(3)</span></a> -- Test whether the system is running the systemd init system<br><a href="SD_CRIT.html"><span class="citerefentry"><span class="refentrytitle">SD_CRIT</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_DEBUG.html"><span class="citerefentry"><span class="refentrytitle">SD_DEBUG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_EMERG.html"><span class="citerefentry"><span class="refentrytitle">SD_EMERG</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="SD_ERR.html"><span class="citerefentry"><span class="refentrytitle">SD_ERR</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_get_machine_names.html"><span class="citerefentry"><span class="refentrytitle">sd_get_machine_names</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_get_seats</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_get_sessions</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="sd_get_uids.html"><span class="citerefentry"><span class="refentrytitle">sd_get_uids</span>(3)</span></a> -- Determine available seats, sessions, logged in users and virtual machines/containers<br><a href="SD_ID128_CONST_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_CONST_STR</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_equal.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_equal</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="SD_ID128_FORMAT_STR.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_STR</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="SD_ID128_FORMAT_VAL.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_FORMAT_VAL</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_from_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_from_string</span>(3)</span></a> -- Format or parse 128-bit IDs as strings<br><a href="sd_id128_get_boot.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_boot</span>(3)</span></a> -- Retrieve 128-bit IDs<br><a href="sd_id128_get_machine.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_get_machine</span>(3)</span></a> -- Retrieve 128-bit IDs<br><a href="SD_ID128_MAKE.html"><span class="citerefentry"><span class="refentrytitle">SD_ID128_MAKE</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_randomize.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_randomize</span>(3)</span></a> -- Generate 128-bit IDs<br><a href="sd_id128_t.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_t</span>(3)</span></a> -- APIs for processing 128-bit IDs<br><a href="sd_id128_to_string.html"><span class="citerefentry"><span class="refentrytitle">sd_id128_to_string</span>(3)</span></a> -- Format or parse 128-bit IDs as strings<br><a href="SD_INFO.html"><span class="citerefentry"><span class="refentrytitle">SD_INFO</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_is_fifo.html"><span class="citerefentry"><span class="refentrytitle">sd_is_fifo</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_mq.html"><span class="citerefentry"><span class="refentrytitle">sd_is_mq</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_inet.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_inet</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_is_socket_unix.html"><span class="citerefentry"><span class="refentrytitle">sd_is_socket_unix</span>(3)</span></a> -- Check the type of a file descriptor<br><a href="sd_journal.html"><span class="citerefentry"><span class="refentrytitle">sd_journal</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_add_conjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_conjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_disjunction.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_disjunction</span>(3)</span></a> -- Add or remove entry matches<br><a href="sd_journal_add_match.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_add_match</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_APPEND.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_APPEND</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_close.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_close</span>(3)</span></a> -- Open the system journal for reading<br><a href="SD_JOURNAL_CURRENT_USER.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_CURRENT_USER</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_enumerate_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_enumerate_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_enumerate_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_flush_matches.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_flush_matches</span>(3)</span></a> -- Add or remove entry matches<br><a href="SD_JOURNAL_FOREACH.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_BACKWARDS.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_BACKWARDS</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_FOREACH_DATA.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_DATA</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="SD_JOURNAL_FOREACH_UNIQUE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_FOREACH_UNIQUE</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_get_catalog.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_catalog_for_message_id.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_catalog_for_message_id</span>(3)</span></a> -- Retrieve message catalog entry<br><a href="sd_journal_get_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_get_cutoff_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_monotonic_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_cutoff_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_cutoff_realtime_usec</span>(3)</span></a> -- Read cut-off timestamps from the current journal entry<br><a href="sd_journal_get_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_events</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_monotonic_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_realtime_usec</span>(3)</span></a> -- Read timestamps from the current journal entry<br><a href="sd_journal_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_timeout</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_get_usage.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_get_usage</span>(3)</span></a> -- Journal disk usage<br><a href="SD_JOURNAL_INVALIDATE.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_INVALIDATE</span>(3)</span></a> -- Journal change notification interface<br><a href="SD_JOURNAL_LOCAL_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_LOCAL_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_next.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_next_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_next_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="SD_JOURNAL_NOP.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_NOP</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_open.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_open_directory.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open_directory</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_open_files.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_open_files</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_perror.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_perror</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_previous.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_previous_skip.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_previous_skip</span>(3)</span></a> -- Advance or set back the read pointer in the journal<br><a href="sd_journal_print.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_print</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_printv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_printv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_process.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_process</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_query_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_query_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="sd_journal_reliable_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_reliable_fd</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_journal_restart_data.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_data</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_restart_unique.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_restart_unique</span>(3)</span></a> -- Read unique data fields from the journal<br><a href="SD_JOURNAL_RUNTIME_ONLY.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_RUNTIME_ONLY</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_seek_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_cursor</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_head.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_head</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_monotonic_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_monotonic_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_realtime_usec.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_realtime_usec</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_seek_tail.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_seek_tail</span>(3)</span></a> -- Seek to a position in the journal<br><a href="sd_journal_send.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_send</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_sendv.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_sendv</span>(3)</span></a> -- Submit log entries to the journal<br><a href="sd_journal_set_data_threshold.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_set_data_threshold</span>(3)</span></a> -- Read data fields from the current journal entry<br><a href="sd_journal_stream_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_stream_fd</span>(3)</span></a> -- Create log stream file descriptor to the journal<br><a href="SD_JOURNAL_SUPPRESS_LOCATION.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SUPPRESS_LOCATION</span>(3)</span></a> -- Submit log entries to the journal<br><a href="SD_JOURNAL_SYSTEM.html"><span class="citerefentry"><span class="refentrytitle">SD_JOURNAL_SYSTEM</span>(3)</span></a> -- Open the system journal for reading<br><a href="sd_journal_test_cursor.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_test_cursor</span>(3)</span></a> -- Get cursor string for or test cursor string against the current journal entry<br><a href="sd_journal_wait.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_wait</span>(3)</span></a> -- Journal change notification interface<br><a href="sd_listen_fds.html"><span class="citerefentry"><span class="refentrytitle">sd_listen_fds</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="SD_LISTEN_FDS_START.html"><span class="citerefentry"><span class="refentrytitle">SD_LISTEN_FDS_START</span>(3)</span></a> -- Check for file descriptors passed by the system manager<br><a href="sd_login_monitor.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_flush.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_flush</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_events.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_events</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_fd.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_fd</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_get_timeout.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_get_timeout</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_new.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_new</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="sd_login_monitor_unref.html"><span class="citerefentry"><span class="refentrytitle">sd_login_monitor_unref</span>(3)</span></a> -- Monitor login sessions, seats, users and virtual machines/containers<br><a href="SD_NOTICE.html"><span class="citerefentry"><span class="refentrytitle">SD_NOTICE</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="sd_notify.html"><span class="citerefentry"><span class="refentrytitle">sd_notify</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_notifyf.html"><span class="citerefentry"><span class="refentrytitle">sd_notifyf</span>(3)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="sd_pid_get_machine_name.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_machine_name</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_owner_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_owner_uid</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_session.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_session</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_slice.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_slice</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_unit</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_pid_get_user_unit.html"><span class="citerefentry"><span class="refentrytitle">sd_pid_get_user_unit</span>(3)</span></a> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<br><a href="sd_readahead.html"><span class="citerefentry"><span class="refentrytitle">sd_readahead</span>(3)</span></a> -- Control ongoing disk boot-time read-ahead operations<br><a href="sd_seat_can_multi_session.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_can_multi_session</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_active.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_active</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_seat_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_seat_get_sessions</span>(3)</span></a> -- Determine state of a specific seat<br><a href="sd_session_get_class.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_class</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_display.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_display</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_seat</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_service.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_service</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_state</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_tty.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_tty</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_type.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_type</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_uid.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_uid</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_get_vt.html"><span class="citerefentry"><span class="refentrytitle">sd_session_get_vt</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_session_is_active.html"><span class="citerefentry"><span class="refentrytitle">sd_session_is_active</span>(3)</span></a> -- Determine state of a specific session<br><a href="sd_uid_get_seats.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_seats</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_sessions.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_sessions</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_get_state.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_get_state</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="sd_uid_is_on_seat.html"><span class="citerefentry"><span class="refentrytitle">sd_uid_is_on_seat</span>(3)</span></a> -- Determine login state of a specific Unix user ID<br><a href="SD_WARNING.html"><span class="citerefentry"><span class="refentrytitle">SD_WARNING</span>(3)</span></a> -- Reference implementation of APIs for new-style daemons<br><a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(8)</span></a> -- Halt, power-off or reboot the machine<br><a href="sysctl.d.html"><span class="citerefentry"><span class="refentrytitle">sysctl.d</span>(5)</span></a> -- Configure kernel parameters at boot<br><a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a> -- Control the systemd system and service manager<br><a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a> -- systemd system and service manager<br><a href="systemd-activate.html"><span class="citerefentry"><span class="refentrytitle">systemd-activate</span>(8)</span></a> -- Test socket activation of daemons<br><a href="systemd-analyze.html"><span class="citerefentry"><span class="refentrytitle">systemd-analyze</span>(1)</span></a> -- Analyze system boot-up performance<br><a href="systemd-ask-password.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password</span>(1)</span></a> -- Query the user for a system password<br><a href="systemd-ask-password-console.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-console.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-console.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.path.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.path</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-ask-password-wall.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-ask-password-wall.service</span>(8)</span></a> -- Query the user for system passwords on the console and via wall<br><a href="systemd-backlight.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight</span>(8)</span></a> -- Load and save the display backlight brightness at boot and shutdown<br><a href="systemd-backlight@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-backlight@.service</span>(8)</span></a> -- Load and save the display backlight brightness at boot and shutdown<br><a href="systemd-binfmt.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-binfmt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-binfmt.service</span>(8)</span></a> -- Configure additional binary formats for executables at boot<br><a href="systemd-bootchart.html"><span class="citerefentry"><span class="refentrytitle">systemd-bootchart</span>(1)</span></a> -- Boot performance graphing tool<br><a href="systemd-cat.html"><span class="citerefentry"><span class="refentrytitle">systemd-cat</span>(1)</span></a> -- Connect a pipeline or program's output with the journal<br><a href="systemd-cgls.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgls</span>(1)</span></a> -- Recursively show control group contents<br><a href="systemd-cgtop.html"><span class="citerefentry"><span class="refentrytitle">systemd-cgtop</span>(1)</span></a> -- Show top control groups by their resource usage<br><a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a> -- Retrieve coredumps from the journal<br><a href="systemd-cryptsetup.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-cryptsetup-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup-generator</span>(8)</span></a> -- Unit generator for<br><a href="systemd-cryptsetup@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-cryptsetup@.service</span>(8)</span></a> -- Full disk decryption logic<br><a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a> -- Find overridden configuration files<br><a href="systemd-detect-virt.html"><span class="citerefentry"><span class="refentrytitle">systemd-detect-virt</span>(1)</span></a> -- Detect execution in a virtualized environment<br><a href="systemd-efi-boot-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-efi-boot-generator</span>(8)</span></a> -- Generator for automatically mounting the EFI System Partition used by the current boot to<br><a href="systemd-fsck.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck-root.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck-root.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fsck@.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-fsck@.service</span>(8)</span></a> -- File system checker logic<br><a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a> -- Unit generator for /etc/fstab<br><a href="systemd-getty-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-getty-generator</span>(8)</span></a> -- Generator for enabling getty instances on the console<br><a href="systemd-gpt-auto-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-gpt-auto-generator</span>(8)</span></a> -- Generator for automatically discovering and mounting<br><a href="systemd-halt.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-halt.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-hibernate.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hibernate.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-hostnamed.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed</span>(8)</span></a> -- Host name bus mechanism<br><a href="systemd-hostnamed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hostnamed.service</span>(8)</span></a> -- Host name bus mechanism<br><a href="systemd-hybrid-sleep.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-hybrid-sleep.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-inhibit.html"><span class="citerefentry"><span class="refentrytitle">systemd-inhibit</span>(1)</span></a> -- Execute a program with an inhibition lock taken<br><a href="systemd-initctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.service</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-initctl.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-initctl.socket</span>(8)</span></a> -- /dev/initctl compatibility<br><a href="systemd-journal-gatewayd.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.service</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journal-gatewayd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journal-gatewayd.socket</span>(8)</span></a> -- HTTP server for journal events<br><a href="systemd-journald.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.service</span>(8)</span></a> -- Journal service<br><a href="systemd-journald.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-journald.socket</span>(8)</span></a> -- Journal service<br><a href="systemd-kexec.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-kexec.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-localed.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-localed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-localed.service</span>(8)</span></a> -- Locale bus mechanism<br><a href="systemd-logind.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind</span>(8)</span></a> -- Login manager<br><a href="systemd-logind.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind.service</span>(8)</span></a> -- Login manager<br><a href="systemd-machine-id-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-machine-id-setup</span>(1)</span></a> -- Initialize the machine ID in /etc/machine-id<br><a href="systemd-machined.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined</span>(8)</span></a> -- Virtual machine and container registration manager<br><a href="systemd-machined.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a> -- Virtual machine and container registration manager<br><a href="systemd-modules-load.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-modules-load.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-modules-load.service</span>(8)</span></a> -- Configure kernel modules to load at boot<br><a href="systemd-notify.html"><span class="citerefentry"><span class="refentrytitle">systemd-notify</span>(1)</span></a> -- Notify service manager about start-up completion and other daemon status changes<br><a href="systemd-nspawn.html"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a> -- Spawn a namespace container for debugging, testing and building<br><a href="systemd-poweroff.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-poweroff.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-quotacheck.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-quotacheck.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-quotacheck.service</span>(8)</span></a> -- File system quota checker logic<br><a href="systemd-random-seed.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-random-seed.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-random-seed.service</span>(8)</span></a> -- Load and save the system random seed at boot and shutdown<br><a href="systemd-readahead.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-collect.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-collect.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-done.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-done.timer</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-readahead-replay.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-readahead-replay.service</span>(8)</span></a> -- Disk read ahead logic<br><a href="systemd-reboot.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-reboot.service</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-remount-fs.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-remount-fs.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-remount-fs.service</span>(8)</span></a> -- Remount root and kernel file systems<br><a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a> -- Run programs in transient scope or service units<br><a href="systemd-shutdown.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdown</span>(8)</span></a> -- System shutdown logic<br><a href="systemd-shutdownd.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.service</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-shutdownd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-shutdownd.socket</span>(8)</span></a> -- Scheduled shutdown service<br><a href="systemd-sleep.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sleep.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-sleep.conf</span>(5)</span></a> -- Suspend and hibernation configuration file<br><a href="systemd-suspend.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-suspend.service</span>(8)</span></a> -- System sleep state logic<br><a href="systemd-sysctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-sysctl.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-sysctl.service</span>(8)</span></a> -- Configure kernel parameters at boot<br><a href="systemd-system-update-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-system-update-generator</span>(8)</span></a> -- Generator for redirecting boot to offline update mode<br><a href="systemd-system.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-system.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-timedated.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-timedated.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-timedated.service</span>(8)</span></a> -- Time and date bus mechanism<br><a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-clean.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-clean.timer</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup-dev.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup-dev.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tmpfiles-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles-setup.service</span>(8)</span></a> -- Creates, deletes and cleans up volatile and temporary files and directories<br><a href="systemd-tty-ask-password-agent.html"><span class="citerefentry"><span class="refentrytitle">systemd-tty-ask-password-agent</span>(1)</span></a> -- List or process pending systemd password requests<br><a href="systemd-udevd.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-control.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-control.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd-kernel.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd-kernel.socket</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a> -- Device event managing daemon<br><a href="systemd-update-utmp.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp</span>(8)</span></a> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<br><a href="systemd-update-utmp-runlevel.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp-runlevel.service</span>(8)</span></a> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<br><a href="systemd-update-utmp.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-update-utmp.service</span>(8)</span></a> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<br><a href="systemd-user-sessions.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user-sessions.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-user-sessions.service</span>(8)</span></a> -- Permit user logins after boot, prohibit user logins at shutdown<br><a href="systemd-user.conf.html"><span class="citerefentry"><span class="refentrytitle">systemd-user.conf</span>(5)</span></a> -- System and session service manager configuration file<br><a href="systemd-vconsole-setup.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a> -- Configure the virtual console at boot<br><a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a> -- Automount unit configuration<br><a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a> -- Device unit configuration<br><a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a> -- Index of configuration directives<br><a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a> -- Execution environment configuration<br><a href="systemd.journal-fields.html"><span class="citerefentry"><span class="refentrytitle">systemd.journal-fields</span>(7)</span></a> -- Special journal fields<br><a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a> -- Kill environment configuration<br><a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a> -- Mount unit configuration<br><a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a> -- Path unit configuration<br><a href="systemd.preset.html"><span class="citerefentry"><span class="refentrytitle">systemd.preset</span>(5)</span></a> -- Service enablement presets<br><a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a> -- Resource control unit settings<br><a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a> -- Scope unit configuration<br><a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a> -- Service unit configuration<br><a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a> -- Slice unit configuration<br><a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a> -- Snapshot unit configuration<br><a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a> -- Socket unit configuration<br><a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a> -- Special systemd units<br><a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a> -- Swap unit configuration<br><a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a> -- Target unit configuration<br><a href="systemd.time.html"><span class="citerefentry"><span class="refentrytitle">systemd.time</span>(7)</span></a> -- Time and date specifications<br><a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a> -- Timer unit configuration<br><a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a> -- Unit configuration<br></p></div><div class="refsect1"><a name="idm274687754912"></a><h2 id="T">T<a class="headerlink" title="Permalink to this headline" href="#T">¶</a></h2><p><a href="telinit.html"><span class="citerefentry"><span class="refentrytitle">telinit</span>(8)</span></a> -- Change SysV runlevel<br><a href="timedatectl.html"><span class="citerefentry"><span class="refentrytitle">timedatectl</span>(1)</span></a> -- Control the system time and date<br><a href="tmpfiles.d.html"><span class="citerefentry"><span class="refentrytitle">tmpfiles.d</span>(5)</span></a> -- Configuration for creation, deletion and cleaning of volatile and temporary files<br></p></div><div class="refsect1"><a name="idm274687751520"></a><h2 id="U">U<a class="headerlink" title="Permalink to this headline" href="#U">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a> -- Dynamic device management<br><a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a> -- udev management tool<br></p></div><div class="refsect1"><a name="idm274687749120"></a><h2 id="V">V<a class="headerlink" title="Permalink to this headline" href="#V">¶</a></h2><p><a href="vconsole.conf.html"><span class="citerefentry"><span class="refentrytitle">vconsole.conf</span>(5)</span></a> -- Configuration file for the virtual console<br></p></div><div class="refsect1"><a name="idm274687747648"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
- </p><p><a name="counts"></a>This index contains 273 entries, referring to 131 individual manual pages.</p></div></div></body></html>
+ </p><p><a name="counts"></a>This index contains 287 entries, referring to 140 individual manual pages.</p></div></div></body></html>
diff --git a/man/systemd.index.xml b/man/systemd.index.xml
index fb1599edd8..9bb4f90845 100644
--- a/man/systemd.index.xml
+++ b/man/systemd.index.xml
@@ -1,4 +1,4 @@
-<refentry id="systemd.index" conditional="HAVE_PYTHON">
+<refentry conditional="HAVE_PYTHON" id="systemd.index">
<refentryinfo>
<title>systemd.index</title>
@@ -23,11 +23,11 @@
<refname>systemd.index</refname>
<refpurpose>List all manpages from the systemd project</refpurpose>
</refnamediv>
-<refsect1><title>B</title><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configure additional binary formats for executables at boot<sbr/><citerefentry><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Boot performance analysis graphing tool configuration file<sbr/><citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- System bootup process<sbr/></para></refsect1><refsect1><title>C</title><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration for encrypted block devices<sbr/></para></refsect1><refsect1><title>D</title><para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Writing and packaging system daemons<sbr/></para></refsect1><refsect1><title>H</title><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr/><citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local host name configuration file<sbr/><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the system hostname<sbr/></para></refsect1><refsect1><title>I</title><para><citerefentry><refentrytitle>init</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- systemd system and service manager<sbr/></para></refsect1><refsect1><title>J</title><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Query the systemd journal<sbr/><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Journal service configuration file<sbr/></para></refsect1><refsect1><title>K</title><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Kernel command line parameters<sbr/><citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Add and remove kernel and initramfs images to and from /boot<sbr/></para></refsect1><refsect1><title>L</title><para><citerefentry><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration file for locale settings<sbr/><citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the system locale and keyboard layout settings<sbr/><citerefentry><refentrytitle>localtime</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local time zone configuration file<sbr/><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the systemd login manager<sbr/><citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Login manager configuration file<sbr/></para></refsect1><refsect1><title>M</title><para><citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local machine ID configuration file<sbr/><citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local machine information file<sbr/><citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configure kernel modules to load at boot<sbr/></para></refsect1><refsect1><title>N</title><para><citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Provide host name resolution for the locally configured system hostname.<sbr/></para></refsect1><refsect1><title>O</title><para><citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Operating system identification<sbr/></para></refsect1><refsect1><title>P</title><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Register user sessions in the systemd login manager<sbr/><citerefentry><refentrytitle>poweroff</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr/></para></refsect1><refsect1><title>R</title><para><citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr/><citerefentry><refentrytitle>runlevel</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Print previous and current SysV runlevel<sbr/></para></refsect1><refsect1><title>S</title><para><citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for submitting and querying log entries to and from the journal<sbr/><citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for tracking logins<sbr/><citerefentry><refentrytitle>sd-readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for controlling boot-time read-ahead<sbr/><citerefentry><refentrytitle>SD_ALERT</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Test whether the system is running the systemd init system<sbr/><citerefentry><refentrytitle>SD_CRIT</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>SD_DEBUG</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>SD_EMERG</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>SD_ERR</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>sd_get_machine_names</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_get_sessions</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_get_uids</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr/><citerefentry><refentrytitle>SD_ID128_CONST_STR</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>sd_id128_equal</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>SD_ID128_FORMAT_STR</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>SD_ID128_FORMAT_VAL</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>sd_id128_from_string</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Format or parse 128 bit IDs as strings<sbr/><citerefentry><refentrytitle>sd_id128_get_boot</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve 128 bit IDs<sbr/><citerefentry><refentrytitle>sd_id128_get_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve 128 bit IDs<sbr/><citerefentry><refentrytitle>SD_ID128_MAKE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>sd_id128_randomize</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Generate 128 bit IDs<sbr/><citerefentry><refentrytitle>sd_id128_t</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128 bit IDs<sbr/><citerefentry><refentrytitle>sd_id128_to_string</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Format or parse 128 bit IDs as strings<sbr/><citerefentry><refentrytitle>SD_INFO</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr/><citerefentry><refentrytitle>sd_is_mq</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr/><citerefentry><refentrytitle>sd_is_socket</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr/><citerefentry><refentrytitle>sd_is_socket_inet</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr/><citerefentry><refentrytitle>sd_is_socket_unix</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr/><citerefentry><refentrytitle>sd_journal</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_add_conjunction</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr/><citerefentry><refentrytitle>sd_journal_add_disjunction</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr/><citerefentry><refentrytitle>sd_journal_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr/><citerefentry><refentrytitle>SD_JOURNAL_APPEND</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_close</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_enumerate_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_enumerate_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr/><citerefentry><refentrytitle>sd_journal_flush_matches</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr/><citerefentry><refentrytitle>SD_JOURNAL_FOREACH</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr/><citerefentry><refentrytitle>SD_JOURNAL_FOREACH_BACKWARDS</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr/><citerefentry><refentrytitle>SD_JOURNAL_FOREACH_DATA</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr/><citerefentry><refentrytitle>SD_JOURNAL_FOREACH_UNIQUE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr/><citerefentry><refentrytitle>sd_journal_get_catalog</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve message catalog entry<sbr/><citerefentry><refentrytitle>sd_journal_get_catalog_for_message_id</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve message catalog entry<sbr/><citerefentry><refentrytitle>sd_journal_get_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Get cursor string for or test cursor string against the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_cutoff_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read cut-off timestamps from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read cut-off timestamps from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_data_threshold</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_events</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read timestamps from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read timestamps from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_get_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_get_usage</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal disk usage<sbr/><citerefentry><refentrytitle>SD_JOURNAL_INVALIDATE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>SD_JOURNAL_LOCAL_ONLY</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr/><citerefentry><refentrytitle>sd_journal_next_skip</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr/><citerefentry><refentrytitle>SD_JOURNAL_NOP</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_open_directory</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_perror</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr/><citerefentry><refentrytitle>sd_journal_previous</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr/><citerefentry><refentrytitle>sd_journal_previous_skip</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr/><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr/><citerefentry><refentrytitle>sd_journal_printv</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr/><citerefentry><refentrytitle>sd_journal_process</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_query_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr/><citerefentry><refentrytitle>sd_journal_reliable_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_journal_restart_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_restart_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr/><citerefentry><refentrytitle>SD_JOURNAL_RUNTIME_ONLY</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_seek_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr/><citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr/><citerefentry><refentrytitle>sd_journal_seek_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr/><citerefentry><refentrytitle>sd_journal_seek_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr/><citerefentry><refentrytitle>sd_journal_seek_tail</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr/><citerefentry><refentrytitle>sd_journal_send</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr/><citerefentry><refentrytitle>sd_journal_sendv</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr/><citerefentry><refentrytitle>sd_journal_set_data_threshold</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Create log stream file descriptor to the journal<sbr/><citerefentry><refentrytitle>SD_JOURNAL_SUPPRESS_LOCATION</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr/><citerefentry><refentrytitle>SD_JOURNAL_SYSTEM_ONLY</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr/><citerefentry><refentrytitle>sd_journal_test_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Get cursor string for or test cursor string against the current journal entry<sbr/><citerefentry><refentrytitle>sd_journal_wait</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr/><citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check for file descriptors passed by the system manager<sbr/><citerefentry><refentrytitle>SD_LISTEN_FDS_START</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check for file descriptors passed by the system manager<sbr/><citerefentry><refentrytitle>sd_login_monitor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_login_monitor_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_login_monitor_get_events</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_login_monitor_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_login_monitor_get_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>sd_login_monitor_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr/><citerefentry><refentrytitle>SD_NOTICE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Notify service manager about start-up completion and other daemon status changes<sbr/><citerefentry><refentrytitle>sd_notifyf</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Notify service manager about start-up completion and other daemon status changes<sbr/><citerefentry><refentrytitle>sd_pid_get_machine_name</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session or container/VM of a specific PID<sbr/><citerefentry><refentrytitle>sd_pid_get_owner_uid</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session or container/VM of a specific PID<sbr/><citerefentry><refentrytitle>sd_pid_get_session</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session or container/VM of a specific PID<sbr/><citerefentry><refentrytitle>sd_pid_get_unit</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session or container/VM of a specific PID<sbr/><citerefentry><refentrytitle>sd_pid_get_user_unit</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session or container/VM of a specific PID<sbr/><citerefentry><refentrytitle>sd_readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Control ongoing disk boot-time read-ahead operations<sbr/><citerefentry><refentrytitle>sd_seat_can_multi_session</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific seat<sbr/><citerefentry><refentrytitle>sd_seat_get_active</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific seat<sbr/><citerefentry><refentrytitle>sd_seat_get_sessions</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific seat<sbr/><citerefentry><refentrytitle>sd_session_get_class</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_display</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_seat</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_service</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_state</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_tty</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_type</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_get_uid</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_session_is_active</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr/><citerefentry><refentrytitle>sd_uid_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr/><citerefentry><refentrytitle>sd_uid_get_sessions</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr/><citerefentry><refentrytitle>sd_uid_get_state</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr/><citerefentry><refentrytitle>sd_uid_is_on_seat</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr/><citerefentry><refentrytitle>SD_WARNING</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr/><citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr/><citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configure kernel parameters at boot<sbr/><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the systemd system and service manager<sbr/><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- systemd system and service manager<sbr/><citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Test socket activation of daemons<sbr/><citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Analyze system boot-up performance<sbr/><citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Query the user for a system password<sbr/><citerefentry><refentrytitle>systemd-ask-password-console.path</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr/><citerefentry><refentrytitle>systemd-ask-password-console.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr/><citerefentry><refentrytitle>systemd-ask-password-wall.path</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr/><citerefentry><refentrytitle>systemd-ask-password-wall.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr/><citerefentry><refentrytitle>systemd-binfmt</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure additional binary formats for executables at boot<sbr/><citerefentry><refentrytitle>systemd-binfmt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure additional binary formats for executables at boot<sbr/><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Boot performance graphing tool<sbr/><citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Connect a pipeline or program's output with the journal<sbr/><citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Recursively show control group contents<sbr/><citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Show top control groups by their resource usage<sbr/><citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Retrieve coredumps from the journal<sbr/><citerefentry><refentrytitle>systemd-cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Full disk decryption logic<sbr/><citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Unit generator for<sbr/><citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Full disk decryption logic<sbr/><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Find overridden configuration files<sbr/><citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Detect execution in a virtualized environment<sbr/><citerefentry><refentrytitle>systemd-fsck</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system checker logic<sbr/><citerefentry><refentrytitle>systemd-fsck-root.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system checker logic<sbr/><citerefentry><refentrytitle>systemd-fsck@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system checker logic<sbr/><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Unit generator for /etc/fstab<sbr/><citerefentry><refentrytitle>systemd-getty-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Generator for enabling getty instances on the console<sbr/><citerefentry><refentrytitle>systemd-halt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr/><citerefentry><refentrytitle>systemd-hibernate.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr/><citerefentry><refentrytitle>systemd-hostnamed</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Hostname bus mechanism<sbr/><citerefentry><refentrytitle>systemd-hostnamed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Hostname bus mechanism<sbr/><citerefentry><refentrytitle>systemd-hybrid-sleep.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr/><citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Execute a program with an inhibition lock taken<sbr/><citerefentry><refentrytitle>systemd-initctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- /dev/initctl compatibility<sbr/><citerefentry><refentrytitle>systemd-initctl.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- /dev/initctl compatibility<sbr/><citerefentry><refentrytitle>systemd-initctl.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- /dev/initctl compatibility<sbr/><citerefentry><refentrytitle>systemd-journal-gatewayd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- HTTP server for journal events<sbr/><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- HTTP server for journal events<sbr/><citerefentry><refentrytitle>systemd-journal-gatewayd.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- HTTP server for journal events<sbr/><citerefentry><refentrytitle>systemd-journald</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Journal service<sbr/><citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Journal service<sbr/><citerefentry><refentrytitle>systemd-journald.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Journal service<sbr/><citerefentry><refentrytitle>systemd-kexec.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr/><citerefentry><refentrytitle>systemd-localed</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Locale bus mechanism<sbr/><citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Locale bus mechanism<sbr/><citerefentry><refentrytitle>systemd-logind</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Login manager<sbr/><citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Login manager<sbr/><citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Initialize the machine ID in /etc/machine-id<sbr/><citerefentry><refentrytitle>systemd-modules-load</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel modules to load at boot<sbr/><citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel modules to load at boot<sbr/><citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Notify service manager about start-up completion and other daemon status changes<sbr/><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Spawn a namespace container for debugging, testing and building<sbr/><citerefentry><refentrytitle>systemd-poweroff.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr/><citerefentry><refentrytitle>systemd-quotacheck</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system quota checker logic<sbr/><citerefentry><refentrytitle>systemd-quotacheck.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system quota checker logic<sbr/><citerefentry><refentrytitle>systemd-random-seed</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the system random seed at boot and shutdown<sbr/><citerefentry><refentrytitle>systemd-random-seed-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the system random seed at boot and shutdown<sbr/><citerefentry><refentrytitle>systemd-random-seed-save.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the system random seed at boot and shutdown<sbr/><citerefentry><refentrytitle>systemd-readahead</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr/><citerefentry><refentrytitle>systemd-readahead-collect.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr/><citerefentry><refentrytitle>systemd-readahead-done.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr/><citerefentry><refentrytitle>systemd-readahead-done.timer</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr/><citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr/><citerefentry><refentrytitle>systemd-reboot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr/><citerefentry><refentrytitle>systemd-remount-fs</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Remount root and kernel file systems<sbr/><citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Remount root and kernel file systems<sbr/><citerefentry><refentrytitle>systemd-shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr/><citerefentry><refentrytitle>systemd-shutdownd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Scheduled shutdown service<sbr/><citerefentry><refentrytitle>systemd-shutdownd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Scheduled shutdown service<sbr/><citerefentry><refentrytitle>systemd-shutdownd.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Scheduled shutdown service<sbr/><citerefentry><refentrytitle>systemd-sleep</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr/><citerefentry><refentrytitle>systemd-sleep.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Suspend and hibernation configuration file<sbr/><citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr/><citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel parameters at boot<sbr/><citerefentry><refentrytitle>systemd-sysctl.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel parameters at boot<sbr/><citerefentry><refentrytitle>systemd-system-update-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Generator for redirecting boot to offline update mode<sbr/><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- System and session service manager configuration file<sbr/><citerefentry><refentrytitle>systemd-timedated</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Time and date bus mechanism<sbr/><citerefentry><refentrytitle>systemd-timedated.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Time and date bus mechanism<sbr/><citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr/><citerefentry><refentrytitle>systemd-tmpfiles-clean.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr/><citerefentry><refentrytitle>systemd-tmpfiles-clean.timer</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr/><citerefentry><refentrytitle>systemd-tmpfiles-setup-dev.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr/><citerefentry><refentrytitle>systemd-tmpfiles-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr/><citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- List or process pending systemd password requests<sbr/><citerefentry><refentrytitle>systemd-udevd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr/><citerefentry><refentrytitle>systemd-udevd-control.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr/><citerefentry><refentrytitle>systemd-udevd-kernel.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr/><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr/><citerefentry><refentrytitle>systemd-update-utmp</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Write audit and utmp updates at runlevel changes and shutdown<sbr/><citerefentry><refentrytitle>systemd-update-utmp-runlevel.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Write audit and utmp updates at runlevel changes and shutdown<sbr/><citerefentry><refentrytitle>systemd-update-utmp-shutdown.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Write audit and utmp updates at runlevel changes and shutdown<sbr/><citerefentry><refentrytitle>systemd-user-sessions</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Permit user logins after boot, prohibit user logins at shutdown<sbr/><citerefentry><refentrytitle>systemd-user-sessions.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Permit user logins after boot, prohibit user logins at shutdown<sbr/><citerefentry><refentrytitle>systemd-user.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- System and session service manager configuration file<sbr/><citerefentry><refentrytitle>systemd-vconsole-setup</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure the virtual console at boot<sbr/><citerefentry><refentrytitle>systemd-vconsole-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure the virtual console at boot<sbr/><citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Automount unit configuration<sbr/><citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Device unit configuration<sbr/><citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Index of configuration directives<sbr/><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Execution environment configuration<sbr/><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Special journal fields<sbr/><citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Kill environment configuration<sbr/><citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Mount unit configuration<sbr/><citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Path unit configuration<sbr/><citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Service enablement presets<sbr/><citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Service unit configuration<sbr/><citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Snapshot unit configuration<sbr/><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Socket unit configuration<sbr/><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Special systemd units<sbr/><citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Swap unit configuration<sbr/><citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Target unit configuration<sbr/><citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Time and date specifications<sbr/><citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Timer unit configuration<sbr/><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Unit configuration<sbr/></para></refsect1><refsect1><title>T</title><para><citerefentry><refentrytitle>telinit</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Change SysV runlevel<sbr/><citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the system time and date<sbr/><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration for creation, deletion and cleaning of volatile and temporary files<sbr/></para></refsect1><refsect1><title>U</title><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Linux dynamic device management<sbr/><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- udev management tool<sbr/></para></refsect1><refsect1><title>V</title><para><citerefentry><refentrytitle>vconsole.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration file for the virtual console<sbr/></para></refsect1><refsect1>
+<refsect1><title>B</title><para><citerefentry><refentrytitle>binfmt.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configure additional binary formats for executables at boot<sbr /><citerefentry><refentrytitle>bootchart.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Boot performance analysis graphing tool configuration file<sbr /><citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- System bootup process<sbr /></para></refsect1><refsect1><title>C</title><para><citerefentry><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration for encrypted block devices<sbr /></para></refsect1><refsect1><title>D</title><para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Writing and packaging system daemons<sbr /></para></refsect1><refsect1><title>H</title><para><citerefentry><refentrytitle>halt</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr /><citerefentry><refentrytitle>hostname</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local hostname configuration file<sbr /><citerefentry><refentrytitle>hostnamectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the system hostname<sbr /></para></refsect1><refsect1><title>I</title><para><citerefentry><refentrytitle>init</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- systemd system and service manager<sbr /></para></refsect1><refsect1><title>J</title><para><citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Query the systemd journal<sbr /><citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Journal service configuration file<sbr /></para></refsect1><refsect1><title>K</title><para><citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Kernel command line parameters<sbr /><citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Add and remove kernel and initramfs images to and from /boot<sbr /></para></refsect1><refsect1><title>L</title><para><citerefentry><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration file for locale settings<sbr /><citerefentry><refentrytitle>localectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the system locale and keyboard layout settings<sbr /><citerefentry><refentrytitle>localtime</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local timezone configuration file<sbr /><citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the systemd login manager<sbr /><citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Login manager configuration file<sbr /></para></refsect1><refsect1><title>M</title><para><citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local machine ID configuration file<sbr /><citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Local machine information file<sbr /><citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the systemd machine manager<sbr /><citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configure kernel modules to load at boot<sbr /></para></refsect1><refsect1><title>N</title><para><citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Provide hostname resolution for the locally configured system hostname.<sbr /></para></refsect1><refsect1><title>O</title><para><citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Operating system identification<sbr /></para></refsect1><refsect1><title>P</title><para><citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Register user sessions in the systemd login manager<sbr /><citerefentry><refentrytitle>poweroff</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr /></para></refsect1><refsect1><title>R</title><para><citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr /><citerefentry><refentrytitle>runlevel</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Print previous and current SysV runlevel<sbr /></para></refsect1><refsect1><title>S</title><para><citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for submitting and querying log entries to and from the journal<sbr /><citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for tracking logins<sbr /><citerefentry><refentrytitle>sd-readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for controlling boot-time read-ahead<sbr /><citerefentry><refentrytitle>SD_ALERT</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>sd_booted</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Test whether the system is running the systemd init system<sbr /><citerefentry><refentrytitle>SD_CRIT</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>SD_DEBUG</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>SD_EMERG</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>SD_ERR</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>sd_get_machine_names</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_get_sessions</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_get_uids</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine available seats, sessions, logged in users and virtual machines/containers<sbr /><citerefentry><refentrytitle>SD_ID128_CONST_STR</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>sd_id128_equal</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>SD_ID128_FORMAT_STR</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>SD_ID128_FORMAT_VAL</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>sd_id128_from_string</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Format or parse 128-bit IDs as strings<sbr /><citerefentry><refentrytitle>sd_id128_get_boot</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve 128-bit IDs<sbr /><citerefentry><refentrytitle>sd_id128_get_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve 128-bit IDs<sbr /><citerefentry><refentrytitle>SD_ID128_MAKE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>sd_id128_randomize</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Generate 128-bit IDs<sbr /><citerefentry><refentrytitle>sd_id128_t</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- APIs for processing 128-bit IDs<sbr /><citerefentry><refentrytitle>sd_id128_to_string</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Format or parse 128-bit IDs as strings<sbr /><citerefentry><refentrytitle>SD_INFO</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>sd_is_fifo</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr /><citerefentry><refentrytitle>sd_is_mq</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr /><citerefentry><refentrytitle>sd_is_socket</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr /><citerefentry><refentrytitle>sd_is_socket_inet</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr /><citerefentry><refentrytitle>sd_is_socket_unix</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check the type of a file descriptor<sbr /><citerefentry><refentrytitle>sd_journal</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_add_conjunction</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr /><citerefentry><refentrytitle>sd_journal_add_disjunction</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr /><citerefentry><refentrytitle>sd_journal_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr /><citerefentry><refentrytitle>SD_JOURNAL_APPEND</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_close</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>SD_JOURNAL_CURRENT_USER</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_enumerate_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_enumerate_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr /><citerefentry><refentrytitle>sd_journal_flush_matches</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Add or remove entry matches<sbr /><citerefentry><refentrytitle>SD_JOURNAL_FOREACH</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr /><citerefentry><refentrytitle>SD_JOURNAL_FOREACH_BACKWARDS</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr /><citerefentry><refentrytitle>SD_JOURNAL_FOREACH_DATA</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr /><citerefentry><refentrytitle>SD_JOURNAL_FOREACH_UNIQUE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr /><citerefentry><refentrytitle>sd_journal_get_catalog</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve message catalog entry<sbr /><citerefentry><refentrytitle>sd_journal_get_catalog_for_message_id</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Retrieve message catalog entry<sbr /><citerefentry><refentrytitle>sd_journal_get_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Get cursor string for or test cursor string against the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_cutoff_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read cut-off timestamps from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read cut-off timestamps from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_data_threshold</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_events</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read timestamps from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read timestamps from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_get_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_get_usage</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal disk usage<sbr /><citerefentry><refentrytitle>SD_JOURNAL_INVALIDATE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>SD_JOURNAL_LOCAL_ONLY</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr /><citerefentry><refentrytitle>sd_journal_next_skip</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr /><citerefentry><refentrytitle>SD_JOURNAL_NOP</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_open_directory</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_open_files</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_perror</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr /><citerefentry><refentrytitle>sd_journal_previous</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr /><citerefentry><refentrytitle>sd_journal_previous_skip</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Advance or set back the read pointer in the journal<sbr /><citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr /><citerefentry><refentrytitle>sd_journal_printv</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr /><citerefentry><refentrytitle>sd_journal_process</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_query_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr /><citerefentry><refentrytitle>sd_journal_reliable_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_journal_restart_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_restart_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read unique data fields from the journal<sbr /><citerefentry><refentrytitle>SD_JOURNAL_RUNTIME_ONLY</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_seek_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr /><citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr /><citerefentry><refentrytitle>sd_journal_seek_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr /><citerefentry><refentrytitle>sd_journal_seek_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr /><citerefentry><refentrytitle>sd_journal_seek_tail</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Seek to a position in the journal<sbr /><citerefentry><refentrytitle>sd_journal_send</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr /><citerefentry><refentrytitle>sd_journal_sendv</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr /><citerefentry><refentrytitle>sd_journal_set_data_threshold</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Read data fields from the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Create log stream file descriptor to the journal<sbr /><citerefentry><refentrytitle>SD_JOURNAL_SUPPRESS_LOCATION</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Submit log entries to the journal<sbr /><citerefentry><refentrytitle>SD_JOURNAL_SYSTEM</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Open the system journal for reading<sbr /><citerefentry><refentrytitle>sd_journal_test_cursor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Get cursor string for or test cursor string against the current journal entry<sbr /><citerefentry><refentrytitle>sd_journal_wait</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Journal change notification interface<sbr /><citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check for file descriptors passed by the system manager<sbr /><citerefentry><refentrytitle>SD_LISTEN_FDS_START</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Check for file descriptors passed by the system manager<sbr /><citerefentry><refentrytitle>sd_login_monitor</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_login_monitor_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_login_monitor_get_events</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_login_monitor_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_login_monitor_get_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_login_monitor_new</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>sd_login_monitor_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Monitor login sessions, seats, users and virtual machines/containers<sbr /><citerefentry><refentrytitle>SD_NOTICE</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Notify service manager about start-up completion and other daemon status changes<sbr /><citerefentry><refentrytitle>sd_notifyf</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Notify service manager about start-up completion and other daemon status changes<sbr /><citerefentry><refentrytitle>sd_pid_get_machine_name</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<sbr /><citerefentry><refentrytitle>sd_pid_get_owner_uid</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<sbr /><citerefentry><refentrytitle>sd_pid_get_session</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<sbr /><citerefentry><refentrytitle>sd_pid_get_slice</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<sbr /><citerefentry><refentrytitle>sd_pid_get_unit</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<sbr /><citerefentry><refentrytitle>sd_pid_get_user_unit</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine session, service, owner of a session, container/VM or slice of a specific PID<sbr /><citerefentry><refentrytitle>sd_readahead</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Control ongoing disk boot-time read-ahead operations<sbr /><citerefentry><refentrytitle>sd_seat_can_multi_session</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific seat<sbr /><citerefentry><refentrytitle>sd_seat_get_active</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific seat<sbr /><citerefentry><refentrytitle>sd_seat_get_sessions</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific seat<sbr /><citerefentry><refentrytitle>sd_session_get_class</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_display</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_seat</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_service</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_state</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_tty</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_type</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_uid</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_get_vt</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_session_is_active</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine state of a specific session<sbr /><citerefentry><refentrytitle>sd_uid_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr /><citerefentry><refentrytitle>sd_uid_get_sessions</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr /><citerefentry><refentrytitle>sd_uid_get_state</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr /><citerefentry><refentrytitle>sd_uid_is_on_seat</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Determine login state of a specific Unix user ID<sbr /><citerefentry><refentrytitle>SD_WARNING</refentrytitle><manvolnum>3</manvolnum></citerefentry> -- Reference implementation of APIs for new-style daemons<sbr /><citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Halt, power-off or reboot the machine<sbr /><citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configure kernel parameters at boot<sbr /><citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the systemd system and service manager<sbr /><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- systemd system and service manager<sbr /><citerefentry><refentrytitle>systemd-activate</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Test socket activation of daemons<sbr /><citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Analyze system boot-up performance<sbr /><citerefentry><refentrytitle>systemd-ask-password</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Query the user for a system password<sbr /><citerefentry><refentrytitle>systemd-ask-password-console.path</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr /><citerefentry><refentrytitle>systemd-ask-password-console.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr /><citerefentry><refentrytitle>systemd-ask-password-wall.path</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr /><citerefentry><refentrytitle>systemd-ask-password-wall.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Query the user for system passwords on the console and via wall<sbr /><citerefentry><refentrytitle>systemd-backlight</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the display backlight brightness at boot and shutdown<sbr /><citerefentry><refentrytitle>systemd-backlight@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the display backlight brightness at boot and shutdown<sbr /><citerefentry><refentrytitle>systemd-binfmt</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure additional binary formats for executables at boot<sbr /><citerefentry><refentrytitle>systemd-binfmt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure additional binary formats for executables at boot<sbr /><citerefentry><refentrytitle>systemd-bootchart</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Boot performance graphing tool<sbr /><citerefentry><refentrytitle>systemd-cat</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Connect a pipeline or program's output with the journal<sbr /><citerefentry><refentrytitle>systemd-cgls</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Recursively show control group contents<sbr /><citerefentry><refentrytitle>systemd-cgtop</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Show top control groups by their resource usage<sbr /><citerefentry><refentrytitle>systemd-coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Retrieve coredumps from the journal<sbr /><citerefentry><refentrytitle>systemd-cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Full disk decryption logic<sbr /><citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Unit generator for<sbr /><citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Full disk decryption logic<sbr /><citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Find overridden configuration files<sbr /><citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Detect execution in a virtualized environment<sbr /><citerefentry><refentrytitle>systemd-efi-boot-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Generator for automatically mounting the EFI System Partition used by the current boot to<sbr /><citerefentry><refentrytitle>systemd-fsck</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system checker logic<sbr /><citerefentry><refentrytitle>systemd-fsck-root.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system checker logic<sbr /><citerefentry><refentrytitle>systemd-fsck@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system checker logic<sbr /><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Unit generator for /etc/fstab<sbr /><citerefentry><refentrytitle>systemd-getty-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Generator for enabling getty instances on the console<sbr /><citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Generator for automatically discovering and mounting<sbr /><citerefentry><refentrytitle>systemd-halt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr /><citerefentry><refentrytitle>systemd-hibernate.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr /><citerefentry><refentrytitle>systemd-hostnamed</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Host name bus mechanism<sbr /><citerefentry><refentrytitle>systemd-hostnamed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Host name bus mechanism<sbr /><citerefentry><refentrytitle>systemd-hybrid-sleep.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr /><citerefentry><refentrytitle>systemd-inhibit</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Execute a program with an inhibition lock taken<sbr /><citerefentry><refentrytitle>systemd-initctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- /dev/initctl compatibility<sbr /><citerefentry><refentrytitle>systemd-initctl.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- /dev/initctl compatibility<sbr /><citerefentry><refentrytitle>systemd-initctl.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- /dev/initctl compatibility<sbr /><citerefentry><refentrytitle>systemd-journal-gatewayd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- HTTP server for journal events<sbr /><citerefentry><refentrytitle>systemd-journal-gatewayd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- HTTP server for journal events<sbr /><citerefentry><refentrytitle>systemd-journal-gatewayd.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- HTTP server for journal events<sbr /><citerefentry><refentrytitle>systemd-journald</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Journal service<sbr /><citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Journal service<sbr /><citerefentry><refentrytitle>systemd-journald.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Journal service<sbr /><citerefentry><refentrytitle>systemd-kexec.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr /><citerefentry><refentrytitle>systemd-localed</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Locale bus mechanism<sbr /><citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Locale bus mechanism<sbr /><citerefentry><refentrytitle>systemd-logind</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Login manager<sbr /><citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Login manager<sbr /><citerefentry><refentrytitle>systemd-machine-id-setup</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Initialize the machine ID in /etc/machine-id<sbr /><citerefentry><refentrytitle>systemd-machined</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Virtual machine and container registration manager<sbr /><citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Virtual machine and container registration manager<sbr /><citerefentry><refentrytitle>systemd-modules-load</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel modules to load at boot<sbr /><citerefentry><refentrytitle>systemd-modules-load.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel modules to load at boot<sbr /><citerefentry><refentrytitle>systemd-notify</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Notify service manager about start-up completion and other daemon status changes<sbr /><citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Spawn a namespace container for debugging, testing and building<sbr /><citerefentry><refentrytitle>systemd-poweroff.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr /><citerefentry><refentrytitle>systemd-quotacheck</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system quota checker logic<sbr /><citerefentry><refentrytitle>systemd-quotacheck.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- File system quota checker logic<sbr /><citerefentry><refentrytitle>systemd-random-seed</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the system random seed at boot and shutdown<sbr /><citerefentry><refentrytitle>systemd-random-seed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Load and save the system random seed at boot and shutdown<sbr /><citerefentry><refentrytitle>systemd-readahead</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr /><citerefentry><refentrytitle>systemd-readahead-collect.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr /><citerefentry><refentrytitle>systemd-readahead-done.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr /><citerefentry><refentrytitle>systemd-readahead-done.timer</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr /><citerefentry><refentrytitle>systemd-readahead-replay.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Disk read ahead logic<sbr /><citerefentry><refentrytitle>systemd-reboot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr /><citerefentry><refentrytitle>systemd-remount-fs</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Remount root and kernel file systems<sbr /><citerefentry><refentrytitle>systemd-remount-fs.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Remount root and kernel file systems<sbr /><citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Run programs in transient scope or service units<sbr /><citerefentry><refentrytitle>systemd-shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System shutdown logic<sbr /><citerefentry><refentrytitle>systemd-shutdownd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Scheduled shutdown service<sbr /><citerefentry><refentrytitle>systemd-shutdownd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Scheduled shutdown service<sbr /><citerefentry><refentrytitle>systemd-shutdownd.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Scheduled shutdown service<sbr /><citerefentry><refentrytitle>systemd-sleep</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr /><citerefentry><refentrytitle>systemd-sleep.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Suspend and hibernation configuration file<sbr /><citerefentry><refentrytitle>systemd-suspend.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- System sleep state logic<sbr /><citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel parameters at boot<sbr /><citerefentry><refentrytitle>systemd-sysctl.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure kernel parameters at boot<sbr /><citerefentry><refentrytitle>systemd-system-update-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Generator for redirecting boot to offline update mode<sbr /><citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- System and session service manager configuration file<sbr /><citerefentry><refentrytitle>systemd-timedated</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Time and date bus mechanism<sbr /><citerefentry><refentrytitle>systemd-timedated.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Time and date bus mechanism<sbr /><citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr /><citerefentry><refentrytitle>systemd-tmpfiles-clean.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr /><citerefentry><refentrytitle>systemd-tmpfiles-clean.timer</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr /><citerefentry><refentrytitle>systemd-tmpfiles-setup-dev.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr /><citerefentry><refentrytitle>systemd-tmpfiles-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Creates, deletes and cleans up volatile and temporary files and directories<sbr /><citerefentry><refentrytitle>systemd-tty-ask-password-agent</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- List or process pending systemd password requests<sbr /><citerefentry><refentrytitle>systemd-udevd</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr /><citerefentry><refentrytitle>systemd-udevd-control.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr /><citerefentry><refentrytitle>systemd-udevd-kernel.socket</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr /><citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Device event managing daemon<sbr /><citerefentry><refentrytitle>systemd-update-utmp</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<sbr /><citerefentry><refentrytitle>systemd-update-utmp-runlevel.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<sbr /><citerefentry><refentrytitle>systemd-update-utmp.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Write audit and utmp updates at bootup, runlevel changes and shutdown<sbr /><citerefentry><refentrytitle>systemd-user-sessions</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Permit user logins after boot, prohibit user logins at shutdown<sbr /><citerefentry><refentrytitle>systemd-user-sessions.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Permit user logins after boot, prohibit user logins at shutdown<sbr /><citerefentry><refentrytitle>systemd-user.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- System and session service manager configuration file<sbr /><citerefentry><refentrytitle>systemd-vconsole-setup</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure the virtual console at boot<sbr /><citerefentry><refentrytitle>systemd-vconsole-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Configure the virtual console at boot<sbr /><citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Automount unit configuration<sbr /><citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Device unit configuration<sbr /><citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Index of configuration directives<sbr /><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Execution environment configuration<sbr /><citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Special journal fields<sbr /><citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Kill environment configuration<sbr /><citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Mount unit configuration<sbr /><citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Path unit configuration<sbr /><citerefentry><refentrytitle>systemd.preset</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Service enablement presets<sbr /><citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Resource control unit settings<sbr /><citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Scope unit configuration<sbr /><citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Service unit configuration<sbr /><citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Slice unit configuration<sbr /><citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Snapshot unit configuration<sbr /><citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Socket unit configuration<sbr /><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Special systemd units<sbr /><citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Swap unit configuration<sbr /><citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Target unit configuration<sbr /><citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Time and date specifications<sbr /><citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Timer unit configuration<sbr /><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Unit configuration<sbr /></para></refsect1><refsect1><title>T</title><para><citerefentry><refentrytitle>telinit</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- Change SysV runlevel<sbr /><citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> -- Control the system time and date<sbr /><citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration for creation, deletion and cleaning of volatile and temporary files<sbr /></para></refsect1><refsect1><title>U</title><para><citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry> -- Dynamic device management<sbr /><citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry> -- udev management tool<sbr /></para></refsect1><refsect1><title>V</title><para><citerefentry><refentrytitle>vconsole.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> -- Configuration file for the virtual console<sbr /></para></refsect1><refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
</para>
- <para id="counts">This index contains 273 entries, referring to 131 individual manual pages.</para>
- </refsect1></refentry>
+ <para id="counts">This index contains 287 entries, referring to 140 individual manual pages.</para>
+ </refsect1></refentry> \ No newline at end of file
diff --git a/man/systemd.journal-fields.7 b/man/systemd.journal-fields.7
new file mode 100644
index 0000000000..453fefc774
--- /dev/null
+++ b/man/systemd.journal-fields.7
@@ -0,0 +1,276 @@
+'\" t
+.TH "SYSTEMD\&.JOURNAL\-FIELDS" "7" "" "systemd 208" "systemd.journal-fields"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.journal-fields \- Special journal fields
+.SH "DESCRIPTION"
+.PP
+Entries in the journal resemble an environment block in their syntax, however with fields that can include binary data\&. Primarily, fields are formatted UTF\-8 text strings, and binary formatting is used only where formatting as UTF\-8 text strings makes little sense\&. New fields may freely be defined by applications, but a few fields have special meaning\&. All fields with special meanings are optional\&. In some cases fields may appear more than once per entry\&.
+.SH "USER JOURNAL FIELDS"
+.PP
+User fields are fields that are directly passed from clients and stored in the journal\&.
+.PP
+\fIMESSAGE=\fR
+.RS 4
+The human\-readable message string for this entry\&. This is supposed to be the primary text shown to the user\&. It is usually not translated (but might be in some cases), and is not supposed to be parsed for meta data\&.
+.RE
+.PP
+\fIMESSAGE_ID=\fR
+.RS 4
+A 128\-bit message identifier ID for recognizing certain message types, if this is desirable\&. This should contain a 128\-bit ID formatted as a lower\-case hexadecimal string, without any separating dashes or suchlike\&. This is recommended to be a UUID\-compatible ID, but this is not enforced, and formatted differently\&. Developers can generate a new ID for this purpose with
+\fBjournalctl \fR\fB\fB\-\-new\-id\fR\fR\&.
+.RE
+.PP
+\fIPRIORITY=\fR
+.RS 4
+A priority value between 0 ("emerg") and 7 ("debug") formatted as a decimal string\&. This field is compatible with syslog\*(Aqs priority concept\&.
+.RE
+.PP
+\fICODE_FILE=\fR, \fICODE_LINE=\fR, \fICODE_FUNC=\fR
+.RS 4
+The code location generating this message, if known\&. Contains the source filename, the line number and the function name\&.
+.RE
+.PP
+\fIERRNO=\fR
+.RS 4
+The low\-level Unix error number causing this entry, if any\&. Contains the numeric value of
+\fBerrno\fR(3)
+formatted as a decimal string\&.
+.RE
+.PP
+\fISYSLOG_FACILITY=\fR, \fISYSLOG_IDENTIFIER=\fR, \fISYSLOG_PID=\fR
+.RS 4
+Syslog compatibility fields containing the facility (formatted as decimal string), the identifier string (i\&.e\&. "tag"), and the client PID\&.
+.RE
+.SH "TRUSTED JOURNAL FIELDS"
+.PP
+Fields prefixed with an underscore are trusted fields, i\&.e\&. fields that are implicitly added by the journal and cannot be altered by client code\&.
+.PP
+\fI_PID=\fR, \fI_UID=\fR, \fI_GID=\fR
+.RS 4
+The process, user and group ID of the process the journal entry originates from formatted as a decimal string\&.
+.RE
+.PP
+\fI_COMM=\fR, \fI_EXE=\fR, \fI_CMDLINE=\fR
+.RS 4
+The name, the executable path and the command line of the process the journal entry originates from\&.
+.RE
+.PP
+\fI_CAP_EFFECTIVE=\fR
+.RS 4
+The effective
+\fBcapabilities\fR(7)
+of the process the journal entry originates from\&.
+.RE
+.PP
+\fI_AUDIT_SESSION=\fR, \fI_AUDIT_LOGINUID=\fR
+.RS 4
+The session and login UID of the process the journal entry originates from, as maintained by the kernel audit subsystem\&.
+.RE
+.PP
+\fI_SYSTEMD_CGROUP=\fR, \fI_SYSTEMD_SESSION=\fR, \fI_SYSTEMD_UNIT=\fR, \fI_SYSTEMD_USER_UNIT=\fR, \fI_SYSTEMD_OWNER_UID=\fR, \fI_SYSTEMD_SLICE=\fR
+.RS 4
+The control group path in the systemd hierarchy, the systemd session ID (if any), the systemd unit name (if any), the systemd user session unit name (if any), the owner UID of the systemd session (if any) and the systemd slice unit of the process the journal entry originates from\&.
+.RE
+.PP
+\fI_SELINUX_CONTEXT=\fR
+.RS 4
+The SELinux security context of the process the journal entry originates from\&.
+.RE
+.PP
+\fI_SOURCE_REALTIME_TIMESTAMP=\fR
+.RS 4
+The earliest trusted timestamp of the message, if any is known that is different from the reception time of the journal\&. This is the time in microseconds since the epoch UTC, formatted as a decimal string\&.
+.RE
+.PP
+\fI_BOOT_ID=\fR
+.RS 4
+The kernel boot ID for the boot the message was generated in, formatted as a 128\-bit hexadecimal string\&.
+.RE
+.PP
+\fI_MACHINE_ID=\fR
+.RS 4
+The machine ID of the originating host, as available in
+\fBmachine-id\fR(5)\&.
+.RE
+.PP
+\fI_HOSTNAME=\fR
+.RS 4
+The name of the originating host\&.
+.RE
+.PP
+\fI_TRANSPORT=\fR
+.RS 4
+How the entry was received by the journal service\&. Valid transports are:
+.PP
+\fBdriver\fR
+.RS 4
+for internally generated messages
+.RE
+.PP
+\fBsyslog\fR
+.RS 4
+for those received via the local syslog socket with the syslog protocol
+.RE
+.PP
+\fBjournal\fR
+.RS 4
+for those received via the native journal protocol
+.RE
+.PP
+\fBstdout\fR
+.RS 4
+for those read from a service\*(Aqs standard output or error output
+.RE
+.PP
+\fBkernel\fR
+.RS 4
+for those read from the kernel
+.RE
+.RE
+.SH "KERNEL JOURNAL FIELDS"
+.PP
+Kernel fields are fields that are used by messages originating in the kernel and stored in the journal\&.
+.PP
+\fI_KERNEL_DEVICE=\fR
+.RS 4
+The kernel device name\&. If the entry is associated to a block device, the major and minor of the device node, separated by
+":"
+and prefixed by
+"b"\&. Similar for character devices, but prefixed by
+"c"\&. For network devices the interface index, prefixed by
+"n"\&. For all other devices
+"+"
+followed by the subsystem name, followed by
+":", followed by the kernel device name\&.
+.RE
+.PP
+\fI_KERNEL_SUBSYSTEM=\fR
+.RS 4
+The kernel subsystem name\&.
+.RE
+.PP
+\fI_UDEV_SYSNAME=\fR
+.RS 4
+The kernel device name as it shows up in the device tree below
+/sys\&.
+.RE
+.PP
+\fI_UDEV_DEVNODE=\fR
+.RS 4
+The device node path of this device in
+/dev\&.
+.RE
+.PP
+\fI_UDEV_DEVLINK=\fR
+.RS 4
+Additional symlink names pointing to the device node in
+/dev\&. This field is frequently set more than once per entry\&.
+.RE
+.SH "FIELDS TO LOG ON BEHALF OF A DIFFERENT PROGRAM"
+.PP
+Fields in this section are used by programs to specify that they are logging on behalf of another program or unit\&.
+.PP
+Fields used by the
+\fBsystemd\-coredump\fR
+coredump kernel helper:
+.PP
+\fICOREDUMP_UNIT=\fR, \fICOREDUMP_USER_UNIT=\fR
+.RS 4
+Used to annotate messages containing coredumps from system and session units\&. See
+\fBsystemd-coredumpctl\fR(1)\&.
+.RE
+.PP
+Priviledged programs (currently UID 0) may attach
+\fIOBJECT_PID=\fR
+to a message\&. This will instruct
+\fBsystemd\-journald\fR
+to attach additional fields on behalf of the caller:
+.PP
+\fIOBJECT_PID=\fR\fI\fIPID\fR\fR
+.RS 4
+PID of the program that this message pertains to\&.
+.RE
+.PP
+\fIOBJECT_UID=\fR, \fIOBJECT_GID=\fR, \fIOBJECT_COMM=\fR, \fIOBJECT_EXE=\fR, \fIOBJECT_CMDLINE=\fR, \fIOBJECT_AUDIT_SESSION=\fR, \fIOBJECT_AUDIT_LOGINUID=\fR, \fIOBJECT_SYSTEMD_CGROUP=\fR, \fIOBJECT_SYSTEMD_SESSION=\fR, \fIOBJECT_SYSTEMD_OWNER_UID=\fR, \fIOBJECT_SYSTEMD_UNIT=\fR, \fIOBJECT_SYSTEMD_USER_UNIT=\fR
+.RS 4
+These are additional fields added automatically by
+\fBsystemd\-journald\fR\&. Their meaning is the same as
+\fI_UID=\fR,
+\fI_GID=\fR,
+\fI_COMM=\fR,
+\fI_EXE=\fR,
+\fI_CMDLINE=\fR,
+\fI_AUDIT_SESSION=\fR,
+\fI_AUDIT_LOGINUID=\fR,
+\fI_SYSTEMD_CGROUP=\fR,
+\fI_SYSTEMD_SESSION=\fR,
+\fI_SYSTEMD_UNIT=\fR,
+\fI_SYSTEMD_USER_UNIT=\fR, and
+\fI_SYSTEMD_OWNER_UID=\fR
+as described above, except that the process identified by
+\fIPID\fR
+is described, instead of the process which logged the message\&.
+.RE
+.SH "ADDRESS FIELDS"
+.PP
+During serialization into external formats, such as the
+\m[blue]\fBJournal Export Format\fR\m[]\&\s-2\u[1]\d\s+2
+or the
+\m[blue]\fBJournal JSON Format\fR\m[]\&\s-2\u[2]\d\s+2, the addresses of journal entries are serialized into fields prefixed with double underscores\&. Note that these are not proper fields when stored in the journal but for addressing meta data of entries\&. They cannot be written as part of structured log entries via calls such as
+\fBsd_journal_send\fR(3)\&. They may also not be used as matches for
+\fBsd_journal_add_match\fR(3)
+.PP
+\fI__CURSOR=\fR
+.RS 4
+The cursor for the entry\&. A cursor is an opaque text string that uniquely describes the position of an entry in the journal and is portable across machines, platforms and journal files\&.
+.RE
+.PP
+\fI__REALTIME_TIMESTAMP=\fR
+.RS 4
+The wallclock time (\fBCLOCK_REALTIME\fR) at the point in time the entry was received by the journal, in microseconds since the epoch UTC, formatted as a decimal string\&. This has different properties from
+"_SOURCE_REALTIME_TIMESTAMP=", as it is usually a bit later but more likely to be monotonic\&.
+.RE
+.PP
+\fI__MONOTONIC_TIMESTAMP=\fR
+.RS 4
+The monotonic time (\fBCLOCK_MONOTONIC\fR) at the point in time the entry was received by the journal in microseconds, formatted as a decimal string\&. To be useful as an address for the entry, this should be combined with with the boot ID in
+"_BOOT_ID="\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBjournalctl\fR(1),
+\fBjournald.conf\fR(5),
+\fBsd-journal\fR(3),
+\fBsystemd-coredumpctl\fR(1),
+\fBsystemd.directives\fR(7)
+.SH "NOTES"
+.IP " 1." 4
+Journal Export Format
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/export
+.RE
+.IP " 2." 4
+Journal JSON Format
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/json
+.RE
diff --git a/man/systemd.journal-fields.html b/man/systemd.journal-fields.html
index c23743eba6..3cd0773453 100644
--- a/man/systemd.journal-fields.html
+++ b/man/systemd.journal-fields.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.journal-fields"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.journal-fields — Special journal fields</p></div><div class="refsect1"><a name="idm259795912208"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Entries in the journal resemble an environment
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.journal-fields"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.journal-fields — Special journal fields</p></div><div class="refsect1"><a name="idm274704689856"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Entries in the journal resemble an environment
block in their syntax, however with fields that can
include binary data. Primarily, fields are formatted
UTF-8 text strings, and binary formatting is used only
@@ -28,8 +28,8 @@
applications, but a few fields have special
meaning. All fields with special meanings are
optional. In some cases fields may appear more than
- once per entry.</p></div><div class="refsect1"><a name="idm259792076272"></a><h2 id="User Journal Fields">User Journal Fields<a class="headerlink" title="Permalink to this headline" href="#User%20Journal%20Fields">¶</a></h2><p>User fields are fields that are directly passed
- from clients and stored in the journal.</p><div class="variablelist"><dl class="variablelist"><dt id="MESSAGE="><span class="term"><code class="varname">MESSAGE=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE=">¶</a></dt><dd><p>The human readable
+ once per entry.</p></div><div class="refsect1"><a name="idm274704688080"></a><h2 id="User Journal Fields">User Journal Fields<a class="headerlink" title="Permalink to this headline" href="#User%20Journal%20Fields">¶</a></h2><p>User fields are fields that are directly passed
+ from clients and stored in the journal.</p><div class="variablelist"><dl class="variablelist"><dt id="MESSAGE="><span class="term"><code class="varname">MESSAGE=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE=">¶</a></dt><dd><p>The human-readable
message string for this
entry. This is supposed to be
the primary text shown to the
@@ -37,65 +37,69 @@
translated (but might be in
some cases), and is not
supposed to be parsed for meta
- data.</p></dd><dt id="MESSAGE_ID="><span class="term"><code class="varname">MESSAGE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE_ID=">¶</a></dt><dd><p>A 128bit message
+ data.</p></dd><dt id="MESSAGE_ID="><span class="term"><code class="varname">MESSAGE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#MESSAGE_ID=">¶</a></dt><dd><p>A 128-bit message
identifier ID for recognizing
certain message types, if this
is desirable. This should
- contain a 128bit id formatted
- as lower-case hexadecimal
+ contain a 128-bit ID formatted
+ as a lower-case hexadecimal
string, without any separating
dashes or suchlike. This is
- recommended to be a UUID
- compatible ID, but this is not
+ recommended to be a
+ UUID-compatible ID, but this is not
enforced, and formatted
differently. Developers can
generate a new ID for this
- purpose with
- <span class="command"><strong>journalctl
- --new-id</strong></span>.</p></dd><dt id="PRIORITY="><span class="term"><code class="varname">PRIORITY=</code></span><a class="headerlink" title="Permalink to this term" href="#PRIORITY=">¶</a></dt><dd><p>A priority value between
- 0 (<code class="literal">emerg</code>)
+ purpose with <span class="command"><strong>journalctl
+ <code class="option">--new-id</code></strong></span>.
+ </p></dd><dt id="PRIORITY="><span class="term"><code class="varname">PRIORITY=</code></span><a class="headerlink" title="Permalink to this term" href="#PRIORITY=">¶</a></dt><dd><p>A priority value between
+ 0 ("<code class="literal">emerg</code>")
and 7
- (<code class="literal">debug</code>)
- formatted as decimal
+ ("<code class="literal">debug</code>")
+ formatted as a decimal
string. This field is
compatible with syslog's
priority concept.</p></dd><dt id="CODE_FILE="><span class="term"><code class="varname">CODE_FILE=</code>, </span><span class="term"><code class="varname">CODE_LINE=</code>, </span><span class="term"><code class="varname">CODE_FUNC=</code></span><a class="headerlink" title="Permalink to this term" href="#CODE_FILE=">¶</a></dt><dd><p>The code location
generating this message, if
known. Contains the source
- file name, the line number and
+ filename, the line number and
the function name.</p></dd><dt id="ERRNO="><span class="term"><code class="varname">ERRNO=</code></span><a class="headerlink" title="Permalink to this term" href="#ERRNO=">¶</a></dt><dd><p>The low-level Unix error
number causing this entry, if
any. Contains the numeric
value of
<a href="errno.html"><span class="citerefentry"><span class="refentrytitle">errno</span>(3)</span></a>
- formatted as decimal
+ formatted as a decimal
string.</p></dd><dt id="SYSLOG_FACILITY="><span class="term"><code class="varname">SYSLOG_FACILITY=</code>, </span><span class="term"><code class="varname">SYSLOG_IDENTIFIER=</code>, </span><span class="term"><code class="varname">SYSLOG_PID=</code></span><a class="headerlink" title="Permalink to this term" href="#SYSLOG_FACILITY=">¶</a></dt><dd><p>Syslog compatibility
fields containing the facility
(formatted as decimal string),
the identifier string
(i.e. "tag"), and the client
- PID.</p></dd></dl></div></div><div class="refsect1"><a name="idm259795972272"></a><h2 id="Trusted Journal Fields">Trusted Journal Fields<a class="headerlink" title="Permalink to this headline" href="#Trusted%20Journal%20Fields">¶</a></h2><p>Fields prefixed with an underscore are trusted
+ PID.</p></dd></dl></div></div><div class="refsect1"><a name="idm274704708944"></a><h2 id="Trusted Journal Fields">Trusted Journal Fields<a class="headerlink" title="Permalink to this headline" href="#Trusted%20Journal%20Fields">¶</a></h2><p>Fields prefixed with an underscore are trusted
fields, i.e. fields that are implicitly added by the
journal and cannot be altered by client code.</p><div class="variablelist"><dl class="variablelist"><dt id="_PID="><span class="term"><code class="varname">_PID=</code>, </span><span class="term"><code class="varname">_UID=</code>, </span><span class="term"><code class="varname">_GID=</code></span><a class="headerlink" title="Permalink to this term" href="#_PID=">¶</a></dt><dd><p>The process, user and
group ID of the process the
journal entry originates from
- formatted as decimal
+ formatted as a decimal
string.</p></dd><dt id="_COMM="><span class="term"><code class="varname">_COMM=</code>, </span><span class="term"><code class="varname">_EXE=</code>, </span><span class="term"><code class="varname">_CMDLINE=</code></span><a class="headerlink" title="Permalink to this term" href="#_COMM=">¶</a></dt><dd><p>The name, the executable
path and the command line of
the process the journal entry
+ originates from.</p></dd><dt id="_CAP_EFFECTIVE="><span class="term"><code class="varname">_CAP_EFFECTIVE=</code></span><a class="headerlink" title="Permalink to this term" href="#_CAP_EFFECTIVE=">¶</a></dt><dd><p>The effective <a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a> of
+ the process the journal entry
originates from.</p></dd><dt id="_AUDIT_SESSION="><span class="term"><code class="varname">_AUDIT_SESSION=</code>, </span><span class="term"><code class="varname">_AUDIT_LOGINUID=</code></span><a class="headerlink" title="Permalink to this term" href="#_AUDIT_SESSION=">¶</a></dt><dd><p>The session and login
UID of the process the journal
entry originates from, as
maintained by the kernel audit
- subsystem.</p></dd><dt id="_SYSTEMD_CGROUP="><span class="term"><code class="varname">_SYSTEMD_CGROUP=</code>, </span><span class="term"><code class="varname">_SYSTEMD_SESSION=</code>, </span><span class="term"><code class="varname">_SYSTEMD_UNIT=</code>, </span><span class="term"><code class="varname">_SYSTEMD_USER_UNIT=</code>, </span><span class="term"><code class="varname">_SYSTEMD_OWNER_UID=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_CGROUP=">¶</a></dt><dd><p>The control group path in
- the systemd hierarchy, the
+ subsystem.</p></dd><dt id="_SYSTEMD_CGROUP="><span class="term"><code class="varname">_SYSTEMD_CGROUP=</code>, </span><span class="term"><code class="varname">_SYSTEMD_SESSION=</code>, </span><span class="term"><code class="varname">_SYSTEMD_UNIT=</code>, </span><span class="term"><code class="varname">_SYSTEMD_USER_UNIT=</code>, </span><span class="term"><code class="varname">_SYSTEMD_OWNER_UID=</code>, </span><span class="term"><code class="varname">_SYSTEMD_SLICE=</code></span><a class="headerlink" title="Permalink to this term" href="#_SYSTEMD_CGROUP=">¶</a></dt><dd><p>The control group path
+ in the systemd hierarchy, the
systemd session ID (if any),
- the systemd unit name (if any),
- the systemd user session unit name (if any)
- and the owner UID of the
- systemd session (if any) of
- the process the journal entry
- originates from.</p></dd><dt id="_SELINUX_CONTEXT="><span class="term"><code class="varname">_SELINUX_CONTEXT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SELINUX_CONTEXT=">¶</a></dt><dd><p>The SELinux security
+ the systemd unit name (if
+ any), the systemd user session
+ unit name (if any), the owner
+ UID of the systemd session (if
+ any) and the systemd slice
+ unit of the process the
+ journal entry originates
+ from.</p></dd><dt id="_SELINUX_CONTEXT="><span class="term"><code class="varname">_SELINUX_CONTEXT=</code></span><a class="headerlink" title="Permalink to this term" href="#_SELINUX_CONTEXT=">¶</a></dt><dd><p>The SELinux security
context of the process the
journal entry originates
from.</p></dd><dt id="_SOURCE_REALTIME_TIMESTAMP="><span class="term"><code class="varname">_SOURCE_REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#_SOURCE_REALTIME_TIMESTAMP=">¶</a></dt><dd><p>The earliest trusted
@@ -103,49 +107,75 @@
any is known that is different
from the reception time of the
journal. This is the time in
- usec since the epoch UTC
- formatted as decimal
+ microseconds since the epoch UTC,
+ formatted as a decimal
string.</p></dd><dt id="_BOOT_ID="><span class="term"><code class="varname">_BOOT_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#_BOOT_ID=">¶</a></dt><dd><p>The kernel boot ID for
the boot the message was
generated in, formatted as
- 128bit hexadecimal
+ a 128-bit hexadecimal
string.</p></dd><dt id="_MACHINE_ID="><span class="term"><code class="varname">_MACHINE_ID=</code></span><a class="headerlink" title="Permalink to this term" href="#_MACHINE_ID=">¶</a></dt><dd><p>The machine ID of the
originating host, as available
in
<a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a>.</p></dd><dt id="_HOSTNAME="><span class="term"><code class="varname">_HOSTNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#_HOSTNAME=">¶</a></dt><dd><p>The name of the
originating host.</p></dd><dt id="_TRANSPORT="><span class="term"><code class="varname">_TRANSPORT=</code></span><a class="headerlink" title="Permalink to this term" href="#_TRANSPORT=">¶</a></dt><dd><p>How the entry was
received by the journal
- service. One of
- <code class="literal">driver</code>,
- <code class="literal">syslog</code>,
- <code class="literal">journal</code>,
- <code class="literal">stdout</code>,
- <code class="literal">kernel</code> for
- internally generated messages,
- for those received via the
- local syslog socket with the
- syslog protocol, for those
- received via the native
- journal protocol, for the
- those read from a services'
- standard output or error
- output, or for those read
- from the kernel, respectively.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259790998784"></a><h2 id="Kernel Journal Fields">Kernel Journal Fields<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Journal%20Fields">¶</a></h2><p>Kernel fields are fields that are used by
+ service. Valid transports are:
+ </p><div class="variablelist"><dl class="variablelist"><dt id="
+ driver
+ "><span class="term">
+ <code class="option">driver</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20driver%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>for
+ internally
+ generated
+ messages
+ </p></dd><dt id="
+ syslog
+ "><span class="term">
+ <code class="option">syslog</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20syslog%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>for those
+ received via the
+ local syslog
+ socket with the
+ syslog protocol
+ </p></dd><dt id="
+ journal
+ "><span class="term">
+ <code class="option">journal</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20journal%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>for those
+ received via the
+ native journal
+ protocol
+ </p></dd><dt id="
+ stdout
+ "><span class="term">
+ <code class="option">stdout</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stdout%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>for those
+ read from a
+ service's
+ standard output
+ or error output
+ </p></dd><dt id="
+ kernel
+ "><span class="term">
+ <code class="option">kernel</code>
+ </span><a class="headerlink" title="Permalink to this term" href="#%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kernel%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20">¶</a></dt><dd><p>for those
+ read from the
+ kernel
+ </p></dd></dl></div></dd></dl></div></div><div class="refsect1"><a name="idm274699771328"></a><h2 id="Kernel Journal Fields">Kernel Journal Fields<a class="headerlink" title="Permalink to this headline" href="#Kernel%20Journal%20Fields">¶</a></h2><p>Kernel fields are fields that are used by
messages originating in the kernel and stored in the
journal.</p><div class="variablelist"><dl class="variablelist"><dt id="_KERNEL_DEVICE="><span class="term"><code class="varname">_KERNEL_DEVICE=</code></span><a class="headerlink" title="Permalink to this term" href="#_KERNEL_DEVICE=">¶</a></dt><dd><p>The kernel device
name. If the entry is
associated to a block device,
the major and minor of the
- device node, separated by ':'
- and prefixed by 'b'. Similar
+ device node, separated by "<code class="literal">:</code>"
+ and prefixed by "<code class="literal">b</code>". Similar
for character devices, but
- prefixed by 'c'. For network
+ prefixed by "<code class="literal">c</code>". For network
devices the interface index,
- prefixed by 'n'. For all other
- devices '+' followed by the
+ prefixed by "<code class="literal">n</code>". For all other
+ devices "<code class="literal">+</code>" followed by the
subsystem name, followed by
- ':', followed by the kernel
+ "<code class="literal">:</code>", followed by the kernel
device name.</p></dd><dt id="_KERNEL_SUBSYSTEM="><span class="term"><code class="varname">_KERNEL_SUBSYSTEM=</code></span><a class="headerlink" title="Permalink to this term" href="#_KERNEL_SUBSYSTEM=">¶</a></dt><dd><p>The kernel subsystem name.</p></dd><dt id="_UDEV_SYSNAME="><span class="term"><code class="varname">_UDEV_SYSNAME=</code></span><a class="headerlink" title="Permalink to this term" href="#_UDEV_SYSNAME=">¶</a></dt><dd><p>The kernel device name
as it shows up in the device
tree below
@@ -155,20 +185,47 @@
pointing to the device node in
<code class="filename">/dev</code>. This
field is frequently set more
- than once per entry.</p></dd></dl></div></div><div class="refsect1"><a name="idm259790985120"></a><h2 id="Special Journal Fields">Special Journal Fields<a class="headerlink" title="Permalink to this headline" href="#Special%20Journal%20Fields">¶</a></h2><p>Fields used by the <span class="command"><strong>systemd-coredump</strong></span>
- coredump kernel helper.
+ than once per entry.</p></dd></dl></div></div><div class="refsect1"><a name="idm274699753840"></a><h2 id="Fields to log on behalf of a different program">Fields to log on behalf of a different program<a class="headerlink" title="Permalink to this headline" href="#Fields%20to%20log%20on%20behalf%20of%20a%20different%20program">¶</a></h2><p>Fields in this section are used by programs
+ to specify that they are logging on behalf of another
+ program or unit.
+ </p><p>Fields used by the <span class="command"><strong>systemd-coredump</strong></span>
+ coredump kernel helper:
</p><div class="variablelist"><dl class="variablelist"><dt id="COREDUMP_UNIT="><span class="term"><code class="varname">COREDUMP_UNIT=</code>, </span><span class="term"><code class="varname">COREDUMP_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#COREDUMP_UNIT=">¶</a></dt><dd><p>Used to annotate
messages containing coredumps from
system and session units.
See
<a href="systemd-coredumpctl.html"><span class="citerefentry"><span class="refentrytitle">systemd-coredumpctl</span>(1)</span></a>.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259790979520"></a><h2 id="Address Fields">Address Fields<a class="headerlink" title="Permalink to this headline" href="#Address%20Fields">¶</a></h2><p>During serialization into external formats, such
+ </p></dd></dl></div><p>Priviledged programs (currently UID 0) may
+ attach <code class="varname">OBJECT_PID=</code> to a
+ message. This will instruct
+ <span class="command"><strong>systemd-journald</strong></span> to attach
+ additional fields on behalf of the caller:</p><div class="variablelist"><dl class="variablelist"><dt id="OBJECT_PID=PID"><span class="term"><code class="varname">OBJECT_PID=<em class="replaceable"><code>PID</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_PID=PID">¶</a></dt><dd><p>PID of the program that this
+ message pertains to.
+ </p></dd><dt id="OBJECT_UID="><span class="term"><code class="varname">OBJECT_UID=</code>, </span><span class="term"><code class="varname">OBJECT_GID=</code>, </span><span class="term"><code class="varname">OBJECT_COMM=</code>, </span><span class="term"><code class="varname">OBJECT_EXE=</code>, </span><span class="term"><code class="varname">OBJECT_CMDLINE=</code>, </span><span class="term"><code class="varname">OBJECT_AUDIT_SESSION=</code>, </span><span class="term"><code class="varname">OBJECT_AUDIT_LOGINUID=</code>, </span><span class="term"><code class="varname">OBJECT_SYSTEMD_CGROUP=</code>, </span><span class="term"><code class="varname">OBJECT_SYSTEMD_SESSION=</code>, </span><span class="term"><code class="varname">OBJECT_SYSTEMD_OWNER_UID=</code>, </span><span class="term"><code class="varname">OBJECT_SYSTEMD_UNIT=</code>, </span><span class="term"><code class="varname">OBJECT_SYSTEMD_USER_UNIT=</code></span><a class="headerlink" title="Permalink to this term" href="#OBJECT_UID=">¶</a></dt><dd><p>These are additional fields added automatically
+ by <span class="command"><strong>systemd-journald</strong></span>.
+ Their meaning is the same as
+ <code class="varname">_UID=</code>,
+ <code class="varname">_GID=</code>,
+ <code class="varname">_COMM=</code>,
+ <code class="varname">_EXE=</code>,
+ <code class="varname">_CMDLINE=</code>,
+ <code class="varname">_AUDIT_SESSION=</code>,
+ <code class="varname">_AUDIT_LOGINUID=</code>,
+ <code class="varname">_SYSTEMD_CGROUP=</code>,
+ <code class="varname">_SYSTEMD_SESSION=</code>,
+ <code class="varname">_SYSTEMD_UNIT=</code>,
+ <code class="varname">_SYSTEMD_USER_UNIT=</code>, and
+ <code class="varname">_SYSTEMD_OWNER_UID=</code>
+ as described above, except that the
+ process identified by <em class="replaceable"><code>PID</code></em>
+ is described, instead of the process
+ which logged the message.</p></dd></dl></div></div><div class="refsect1"><a name="idm274699729808"></a><h2 id="Address Fields">Address Fields<a class="headerlink" title="Permalink to this headline" href="#Address%20Fields">¶</a></h2><p>During serialization into external formats, such
as the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/export" target="_top">Journal
Export Format</a> or the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/json" target="_top">Journal
JSON Format</a>, the addresses of journal entries
are serialized into fields prefixed with double
- underscores. Note that these aren't proper fields when
- stored in the journal, but addressing meta data of
+ underscores. Note that these are not proper fields when
+ stored in the journal but for addressing meta data of
entries. They cannot be written as part of structured
log entries via calls such as
<a href="sd_journal_send.html"><span class="citerefentry"><span class="refentrytitle">sd_journal_send</span>(3)</span></a>. They
@@ -179,27 +236,28 @@
describes the position of an
entry in the journal and is
portable across machines,
- platforms and journal
- files.</p></dd><dt id="__REALTIME_TIMESTAMP="><span class="term"><code class="varname">__REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__REALTIME_TIMESTAMP=">¶</a></dt><dd><p>The wallclock time
- (CLOCK_REALTIME) at the point
- in time the entry was received
- by the journal, in usec since
- the epoch UTC formatted as
- decimal string. This has
- different properties from
- <code class="literal">_SOURCE_REALTIME_TIMESTAMP=</code>
+ platforms and journal files.
+ </p></dd><dt id="__REALTIME_TIMESTAMP="><span class="term"><code class="varname">__REALTIME_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__REALTIME_TIMESTAMP=">¶</a></dt><dd><p>The wallclock time
+ (<code class="constant">CLOCK_REALTIME</code>)
+ at the point in time the entry
+ was received by the journal,
+ in microseconds since the epoch
+ UTC, formatted as a decimal
+ string. This has different
+ properties from
+ "<code class="literal">_SOURCE_REALTIME_TIMESTAMP=</code>",
as it is usually a bit later
- but more likely to be
- monotonic.</p></dd><dt id="__MONOTONIC_TIMESTAMP="><span class="term"><code class="varname">__MONOTONIC_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__MONOTONIC_TIMESTAMP=">¶</a></dt><dd><p>The monotonic time
- (CLOCK_MONOTONIC) at the point
- in time the entry was received
- by the journal in usec
- formatted as decimal
+ but more likely to be monotonic.
+ </p></dd><dt id="__MONOTONIC_TIMESTAMP="><span class="term"><code class="varname">__MONOTONIC_TIMESTAMP=</code></span><a class="headerlink" title="Permalink to this term" href="#__MONOTONIC_TIMESTAMP=">¶</a></dt><dd><p>The monotonic time
+ (<code class="constant">CLOCK_MONOTONIC</code>)
+ at the point in time the entry
+ was received by the journal in
+ microseconds, formatted as a decimal
string. To be useful as an
- address for the entry this
- should be combined with with
- boot ID in
- <code class="literal">_BOOT_ID=</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259790966144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ address for the entry, this
+ should be combined with with the
+ boot ID in "<code class="literal">_BOOT_ID=</code>".
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274699715504"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="journald.conf.html"><span class="citerefentry"><span class="refentrytitle">journald.conf</span>(5)</span></a>,
diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml
index a0f1bfda13..8a15598e63 100644
--- a/man/systemd.journal-fields.xml
+++ b/man/systemd.journal-fields.xml
@@ -72,7 +72,7 @@
<varlistentry>
<term><varname>MESSAGE=</varname></term>
<listitem>
- <para>The human readable
+ <para>The human-readable
message string for this
entry. This is supposed to be
the primary text shown to the
@@ -87,22 +87,22 @@
<varlistentry>
<term><varname>MESSAGE_ID=</varname></term>
<listitem>
- <para>A 128bit message
+ <para>A 128-bit message
identifier ID for recognizing
certain message types, if this
is desirable. This should
- contain a 128bit id formatted
- as lower-case hexadecimal
+ contain a 128-bit ID formatted
+ as a lower-case hexadecimal
string, without any separating
dashes or suchlike. This is
- recommended to be a UUID
- compatible ID, but this is not
+ recommended to be a
+ UUID-compatible ID, but this is not
enforced, and formatted
differently. Developers can
generate a new ID for this
- purpose with
- <command>journalctl
- --new-id</command>.</para>
+ purpose with <command>journalctl
+ <option>--new-id</option></command>.
+ </para>
</listitem>
</varlistentry>
@@ -113,7 +113,7 @@
0 (<literal>emerg</literal>)
and 7
(<literal>debug</literal>)
- formatted as decimal
+ formatted as a decimal
string. This field is
compatible with syslog's
priority concept.</para>
@@ -128,7 +128,7 @@
<para>The code location
generating this message, if
known. Contains the source
- file name, the line number and
+ filename, the line number and
the function name.</para>
</listitem>
</varlistentry>
@@ -141,7 +141,7 @@
any. Contains the numeric
value of
<citerefentry><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>
- formatted as decimal
+ formatted as a decimal
string.</para>
</listitem>
</varlistentry>
@@ -179,7 +179,7 @@
<para>The process, user and
group ID of the process the
journal entry originates from
- formatted as decimal
+ formatted as a decimal
string.</para>
</listitem>
</varlistentry>
@@ -197,6 +197,15 @@
</varlistentry>
<varlistentry>
+ <term><varname>_CAP_EFFECTIVE=</varname></term>
+ <listitem>
+ <para>The effective <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry> of
+ the process the journal entry
+ originates from.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>_AUDIT_SESSION=</varname></term>
<term><varname>_AUDIT_LOGINUID=</varname></term>
<listitem>
@@ -214,17 +223,20 @@
<term><varname>_SYSTEMD_UNIT=</varname></term>
<term><varname>_SYSTEMD_USER_UNIT=</varname></term>
<term><varname>_SYSTEMD_OWNER_UID=</varname></term>
+ <term><varname>_SYSTEMD_SLICE=</varname></term>
<listitem>
- <para>The control group path in
- the systemd hierarchy, the
+ <para>The control group path
+ in the systemd hierarchy, the
systemd session ID (if any),
- the systemd unit name (if any),
- the systemd user session unit name (if any)
- and the owner UID of the
- systemd session (if any) of
- the process the journal entry
- originates from.</para>
+ the systemd unit name (if
+ any), the systemd user session
+ unit name (if any), the owner
+ UID of the systemd session (if
+ any) and the systemd slice
+ unit of the process the
+ journal entry originates
+ from.</para>
</listitem>
</varlistentry>
@@ -246,8 +258,8 @@
any is known that is different
from the reception time of the
journal. This is the time in
- usec since the epoch UTC
- formatted as decimal
+ microseconds since the epoch UTC,
+ formatted as a decimal
string.</para>
</listitem>
</varlistentry>
@@ -258,7 +270,7 @@
<para>The kernel boot ID for
the boot the message was
generated in, formatted as
- 128bit hexadecimal
+ a 128-bit hexadecimal
string.</para>
</listitem>
</varlistentry>
@@ -286,23 +298,75 @@
<listitem>
<para>How the entry was
received by the journal
- service. One of
- <literal>driver</literal>,
- <literal>syslog</literal>,
- <literal>journal</literal>,
- <literal>stdout</literal>,
- <literal>kernel</literal> for
- internally generated messages,
- for those received via the
- local syslog socket with the
- syslog protocol, for those
- received via the native
- journal protocol, for the
- those read from a services'
- standard output or error
- output, or for those read
- from the kernel, respectively.
+ service. Valid transports are:
</para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>driver</option>
+ </term>
+ <listitem>
+ <para>for
+ internally
+ generated
+ messages
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>syslog</option>
+ </term>
+ <listitem>
+ <para>for those
+ received via the
+ local syslog
+ socket with the
+ syslog protocol
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>journal</option>
+ </term>
+ <listitem>
+ <para>for those
+ received via the
+ native journal
+ protocol
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>stdout</option>
+ </term>
+ <listitem>
+ <para>for those
+ read from a
+ service's
+ standard output
+ or error output
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>kernel</option>
+ </term>
+ <listitem>
+ <para>for those
+ read from the
+ kernel
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
</listitem>
</varlistentry>
</variablelist>
@@ -323,15 +387,15 @@
name. If the entry is
associated to a block device,
the major and minor of the
- device node, separated by ':'
- and prefixed by 'b'. Similar
+ device node, separated by <literal>:</literal>
+ and prefixed by <literal>b</literal>. Similar
for character devices, but
- prefixed by 'c'. For network
+ prefixed by <literal>c</literal>. For network
devices the interface index,
- prefixed by 'n'. For all other
- devices '+' followed by the
+ prefixed by <literal>n</literal>. For all other
+ devices <literal>+</literal> followed by the
subsystem name, followed by
- ':', followed by the kernel
+ <literal>:</literal>, followed by the kernel
device name.</para>
</listitem>
</varlistentry>
@@ -372,10 +436,15 @@
</refsect1>
<refsect1>
- <title>Special Journal Fields</title>
+ <title>Fields to log on behalf of a different program</title>
+
+ <para>Fields in this section are used by programs
+ to specify that they are logging on behalf of another
+ program or unit.
+ </para>
<para>Fields used by the <command>systemd-coredump</command>
- coredump kernel helper.
+ coredump kernel helper:
</para>
<variablelist class='journal-directives'>
@@ -392,6 +461,61 @@
</listitem>
</varlistentry>
</variablelist>
+
+ <para>Priviledged programs (currently UID 0) may
+ attach <varname>OBJECT_PID=</varname> to a
+ message. This will instruct
+ <command>systemd-journald</command> to attach
+ additional fields on behalf of the caller:</para>
+
+ <variablelist class='journal-directives'>
+ <varlistentry>
+ <term><varname>OBJECT_PID=<replaceable>PID</replaceable></varname></term>
+ <listitem>
+ <para>PID of the program that this
+ message pertains to.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>OBJECT_UID=</varname></term>
+ <term><varname>OBJECT_GID=</varname></term>
+ <term><varname>OBJECT_COMM=</varname></term>
+ <term><varname>OBJECT_EXE=</varname></term>
+ <term><varname>OBJECT_CMDLINE=</varname></term>
+ <term><varname>OBJECT_AUDIT_SESSION=</varname></term>
+ <term><varname>OBJECT_AUDIT_LOGINUID=</varname></term>
+ <term><varname>OBJECT_SYSTEMD_CGROUP=</varname></term>
+ <term><varname>OBJECT_SYSTEMD_SESSION=</varname></term>
+ <term><varname>OBJECT_SYSTEMD_OWNER_UID=</varname></term>
+ <term><varname>OBJECT_SYSTEMD_UNIT=</varname></term>
+ <term><varname>OBJECT_SYSTEMD_USER_UNIT=</varname></term>
+ <listitem>
+ <para>These are additional fields added automatically
+ by <command>systemd-journald</command>.
+ Their meaning is the same as
+ <varname>_UID=</varname>,
+ <varname>_GID=</varname>,
+ <varname>_COMM=</varname>,
+ <varname>_EXE=</varname>,
+ <varname>_CMDLINE=</varname>,
+ <varname>_AUDIT_SESSION=</varname>,
+ <varname>_AUDIT_LOGINUID=</varname>,
+ <varname>_SYSTEMD_CGROUP=</varname>,
+ <varname>_SYSTEMD_SESSION=</varname>,
+ <varname>_SYSTEMD_UNIT=</varname>,
+ <varname>_SYSTEMD_USER_UNIT=</varname>, and
+ <varname>_SYSTEMD_OWNER_UID=</varname>
+ as described above, except that the
+ process identified by <replaceable>PID</replaceable>
+ is described, instead of the process
+ which logged the message.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+
</refsect1>
<refsect1>
@@ -404,8 +528,8 @@
url="http://www.freedesktop.org/wiki/Software/systemd/json">Journal
JSON Format</ulink>, the addresses of journal entries
are serialized into fields prefixed with double
- underscores. Note that these aren't proper fields when
- stored in the journal, but addressing meta data of
+ underscores. Note that these are not proper fields when
+ stored in the journal but for addressing meta data of
entries. They cannot be written as part of structured
log entries via calls such as
<citerefentry><refentrytitle>sd_journal_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>. They
@@ -422,8 +546,8 @@
describes the position of an
entry in the journal and is
portable across machines,
- platforms and journal
- files.</para>
+ platforms and journal files.
+ </para>
</listitem>
</varlistentry>
@@ -431,16 +555,17 @@
<term><varname>__REALTIME_TIMESTAMP=</varname></term>
<listitem>
<para>The wallclock time
- (CLOCK_REALTIME) at the point
- in time the entry was received
- by the journal, in usec since
- the epoch UTC formatted as
- decimal string. This has
- different properties from
- <literal>_SOURCE_REALTIME_TIMESTAMP=</literal>
+ (<constant>CLOCK_REALTIME</constant>)
+ at the point in time the entry
+ was received by the journal,
+ in microseconds since the epoch
+ UTC, formatted as a decimal
+ string. This has different
+ properties from
+ <literal>_SOURCE_REALTIME_TIMESTAMP=</literal>,
as it is usually a bit later
- but more likely to be
- monotonic.</para>
+ but more likely to be monotonic.
+ </para>
</listitem>
</varlistentry>
@@ -448,15 +573,15 @@
<term><varname>__MONOTONIC_TIMESTAMP=</varname></term>
<listitem>
<para>The monotonic time
- (CLOCK_MONOTONIC) at the point
- in time the entry was received
- by the journal in usec
- formatted as decimal
+ (<constant>CLOCK_MONOTONIC</constant>)
+ at the point in time the entry
+ was received by the journal in
+ microseconds, formatted as a decimal
string. To be useful as an
- address for the entry this
- should be combined with with
- boot ID in
- <literal>_BOOT_ID=</literal>.</para>
+ address for the entry, this
+ should be combined with with the
+ boot ID in <literal>_BOOT_ID=</literal>.
+ </para>
</listitem>
</varlistentry>
</variablelist>
diff --git a/man/systemd.kill.5 b/man/systemd.kill.5
new file mode 100644
index 0000000000..567d1cc061
--- /dev/null
+++ b/man/systemd.kill.5
@@ -0,0 +1,107 @@
+'\" t
+.TH "SYSTEMD\&.KILL" "5" "" "systemd 208" "systemd.kill"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.kill \- Kill environment configuration
+.SH "SYNOPSIS"
+.PP
+\fIservice\fR\&.service,
+\fIsocket\fR\&.socket,
+\fImount\fR\&.mount,
+\fIswap\fR\&.swap
+.SH "DESCRIPTION"
+.PP
+Unit configuration files for services, sockets, mount points and swap devices share a subset of configuration options which define the process killing parameters of spawned processes\&.
+.PP
+This man page lists the configuration options shared by these four unit types\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files, and
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5)
+and
+\fBsystemd.mount\fR(5)
+for more information on the specific unit configuration files\&. The execution specific configuration options are configured in the [Service], [Socket], [Mount], or [Swap] section, depending on the unit type\&.
+.SH "OPTIONS"
+.PP
+\fIKillMode=\fR
+.RS 4
+Specifies how processes of this service shall be killed\&. One of
+\fBcontrol\-group\fR,
+\fBprocess\fR,
+\fBnone\fR\&.
+.sp
+If set to
+\fBcontrol\-group\fR, all remaining processes in the control group of this unit will be terminated on unit stop (for services: after the stop command is executed, as configured with
+\fIExecStop=\fR)\&. If set to
+\fBprocess\fR, only the main process itself is killed\&. If set to
+\fBnone\fR, no process is killed\&. In this case only the stop command will be executed on unit stop, but no process be killed otherwise\&. Processes remaining alive after stop are left in their control group and the control group continues to exist after stop unless it is empty\&. Defaults to
+\fBcontrol\-group\fR\&.
+.sp
+Processes will first be terminated via
+\fBSIGTERM\fR
+(unless the signal to send is changed via
+\fIKillSignal=\fR)\&. Optionally, this is immediately followed by a
+\fBSIGHUP\fR
+(if enabled with
+\fISendSIGHUP=\fR)\&. If then, after a delay (configured via the
+\fITimeoutStopSec=\fR
+option), processes still remain, the termination request is repeated with the
+\fBSIGKILL\fR
+signal (unless this is disabled via the
+\fISendSIGKILL=\fR
+option)\&. See
+\fBkill\fR(2)
+for more information\&.
+.RE
+.PP
+\fIKillSignal=\fR
+.RS 4
+Specifies which signal to use when killing a service\&. Defaults to
+\fBSIGTERM\fR\&.
+.RE
+.PP
+\fISendSIGHUP=\fR
+.RS 4
+Specifies whether to send
+\fBSIGHUP\fR
+to remaining processes immediately after sending the signal configured with
+\fIKillSignal=\fR\&. This is useful to indicate to shells and shell\-like programs that their connection has been severed\&. Takes a boolean value\&. Defaults to "no"\&.
+.RE
+.PP
+\fISendSIGKILL=\fR
+.RS 4
+Specifies whether to send
+\fBSIGKILL\fR
+to remaining processes after a timeout, if the normal shutdown procedure left processes of the service around\&. Takes a boolean value\&. Defaults to "yes"\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBjournalctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.exec\fR(5),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.kill.html b/man/systemd.kill.html
index 5601d4353d..62e920d582 100644
--- a/man/systemd.kill.html
+++ b/man/systemd.kill.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.kill"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.kill — Kill environment configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.kill"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.kill — Kill environment configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
<code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code>,
<code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code>,
- <code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></p></div><div class="refsect1"><a name="idm259785088960"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Unit configuration files for services, sockets,
+ <code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></p></div><div class="refsect1"><a name="idm274703190640"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Unit configuration files for services, sockets,
mount points and swap devices share a subset of
configuration options which define the process killing
parameters of spawned processes.</p><p>This man page lists the configuration options
@@ -39,22 +39,22 @@
configuration files. The execution specific
configuration options are configured in the [Service],
[Socket], [Mount], or [Swap] section, depending on the unit
- type.</p></div><div class="refsect1"><a name="idm259785082480"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="KillMode="><span class="term"><code class="varname">KillMode=</code></span><a class="headerlink" title="Permalink to this term" href="#KillMode=">¶</a></dt><dd><p>Specifies how
+ type.</p></div><div class="refsect1"><a name="idm274703062000"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="KillMode="><span class="term"><code class="varname">KillMode=</code></span><a class="headerlink" title="Permalink to this term" href="#KillMode=">¶</a></dt><dd><p>Specifies how
processes of this service shall be
killed. One of
<code class="option">control-group</code>,
<code class="option">process</code>,
<code class="option">none</code>.</p><p>If set to
- <code class="option">control-group</code> all
+ <code class="option">control-group</code>, all
remaining processes in the control
group of this unit will be terminated
on unit stop (for services: after the
stop command is executed, as
configured with
<code class="varname">ExecStop=</code>). If set
- to <code class="option">process</code> only the
+ to <code class="option">process</code>, only the
main process itself is killed. If set
- to <code class="option">none</code> no process is
+ to <code class="option">none</code>, no process is
killed. In this case only the stop
command will be executed on unit
stop, but no process be killed
@@ -64,29 +64,43 @@
to exist after stop unless it is
empty. Defaults to
<code class="option">control-group</code>.</p><p>Processes will first be
- terminated via SIGTERM (unless the
- signal to send is changed via
- <code class="varname">KillSignal=</code>). If
- then after a delay (configured via the
- <code class="varname">TimeoutSec=</code> option)
+ terminated via
+ <code class="constant">SIGTERM</code> (unless
+ the signal to send is changed via
+ <code class="varname">KillSignal=</code>). Optionally,
+ this is immediately followed by a
+ <code class="constant">SIGHUP</code> (if
+ enabled with
+ <code class="varname">SendSIGHUP=</code>). If
+ then, after a delay (configured via the
+ <code class="varname">TimeoutStopSec=</code> option),
processes still remain, the
termination request is repeated with
- the SIGKILL signal (unless this is
- disabled via the
- <code class="varname">SendSIGKILL=</code>
+ the <code class="constant">SIGKILL</code>
+ signal (unless this is disabled via
+ the <code class="varname">SendSIGKILL=</code>
option). See
<a href="kill.html"><span class="citerefentry"><span class="refentrytitle">kill</span>(2)</span></a>
for more
information.</p></dd><dt id="KillSignal="><span class="term"><code class="varname">KillSignal=</code></span><a class="headerlink" title="Permalink to this term" href="#KillSignal=">¶</a></dt><dd><p>Specifies which signal
to use when killing a
- service. Defaults to SIGTERM.
+ service. Defaults to <code class="constant">SIGTERM</code>.
+ </p></dd><dt id="SendSIGHUP="><span class="term"><code class="varname">SendSIGHUP=</code></span><a class="headerlink" title="Permalink to this term" href="#SendSIGHUP=">¶</a></dt><dd><p>Specifies whether to
+ send <code class="constant">SIGHUP</code> to
+ remaining processes immediately after
+ sending the signal configured with
+ <code class="varname">KillSignal=</code>. This
+ is useful to indicate to shells and
+ shell-like programs that their
+ connection has been severed. Takes a
+ boolean value. Defaults to "no".
</p></dd><dt id="SendSIGKILL="><span class="term"><code class="varname">SendSIGKILL=</code></span><a class="headerlink" title="Permalink to this term" href="#SendSIGKILL=">¶</a></dt><dd><p>Specifies whether to
- send SIGKILL to remaining processes
+ send <code class="constant">SIGKILL</code> to remaining processes
after a timeout, if the normal
shutdown procedure left processes of
the service around. Takes a boolean
value. Defaults to "yes".
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259789019024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274703240528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(8)</span></a>,
diff --git a/man/systemd.kill.xml b/man/systemd.kill.xml
index b41ce460b5..1b10fba9d5 100644
--- a/man/systemd.kill.xml
+++ b/man/systemd.kill.xml
@@ -94,16 +94,16 @@
<option>none</option>.</para>
<para>If set to
- <option>control-group</option> all
+ <option>control-group</option>, all
remaining processes in the control
group of this unit will be terminated
on unit stop (for services: after the
stop command is executed, as
configured with
<varname>ExecStop=</varname>). If set
- to <option>process</option> only the
+ to <option>process</option>, only the
main process itself is killed. If set
- to <option>none</option> no process is
+ to <option>none</option>, no process is
killed. In this case only the stop
command will be executed on unit
stop, but no process be killed
@@ -115,16 +115,21 @@
<option>control-group</option>.</para>
<para>Processes will first be
- terminated via SIGTERM (unless the
- signal to send is changed via
- <varname>KillSignal=</varname>). If
- then after a delay (configured via the
- <varname>TimeoutSec=</varname> option)
+ terminated via
+ <constant>SIGTERM</constant> (unless
+ the signal to send is changed via
+ <varname>KillSignal=</varname>). Optionally,
+ this is immediately followed by a
+ <constant>SIGHUP</constant> (if
+ enabled with
+ <varname>SendSIGHUP=</varname>). If
+ then, after a delay (configured via the
+ <varname>TimeoutStopSec=</varname> option),
processes still remain, the
termination request is repeated with
- the SIGKILL signal (unless this is
- disabled via the
- <varname>SendSIGKILL=</varname>
+ the <constant>SIGKILL</constant>
+ signal (unless this is disabled via
+ the <varname>SendSIGKILL=</varname>
option). See
<citerefentry><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry>
for more
@@ -135,20 +140,35 @@
<term><varname>KillSignal=</varname></term>
<listitem><para>Specifies which signal
to use when killing a
- service. Defaults to SIGTERM.
+ service. Defaults to <constant>SIGTERM</constant>.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>SendSIGHUP=</varname></term>
+ <listitem><para>Specifies whether to
+ send <constant>SIGHUP</constant> to
+ remaining processes immediately after
+ sending the signal configured with
+ <varname>KillSignal=</varname>. This
+ is useful to indicate to shells and
+ shell-like programs that their
+ connection has been severed. Takes a
+ boolean value. Defaults to "no".
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>SendSIGKILL=</varname></term>
<listitem><para>Specifies whether to
- send SIGKILL to remaining processes
+ send <constant>SIGKILL</constant> to remaining processes
after a timeout, if the normal
shutdown procedure left processes of
the service around. Takes a boolean
value. Defaults to "yes".
</para></listitem>
</varlistentry>
+
</variablelist>
</refsect1>
diff --git a/man/systemd.mount.5 b/man/systemd.mount.5
new file mode 100644
index 0000000000..fbc502a0ab
--- /dev/null
+++ b/man/systemd.mount.5
@@ -0,0 +1,195 @@
+'\" t
+.TH "SYSTEMD\&.MOUNT" "5" "" "systemd 208" "systemd.mount"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.mount \- Mount unit configuration
+.SH "SYNOPSIS"
+.PP
+\fImount\fR\&.mount
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.mount"
+encodes information about a file system mount point controlled and supervised by systemd\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The mount specific configuration options are configured in the [Mount] section\&.
+.PP
+Additional options are listed in
+\fBsystemd.exec\fR(5), which define the execution environment the
+\fBmount\fR(8)
+binary is executed in, and in
+\fBsystemd.kill\fR(5), which define the way the processes are terminated, and in
+\fBsystemd.resource-control\fR(5), which configure resource control settings for the processes of the service\&. Note that the User= and Group= options are not particularly useful for mount units specifying a
+"Type="
+option or using configuration not specified in
+/etc/fstab;
+\fBmount\fR(8)
+will refuse options that are not listed in
+/etc/fstab
+if it is not run as UID 0\&.
+.PP
+Mount units must be named after the mount point directories they control\&. Example: the mount point
+/home/lennart
+must be configured in a unit file
+home\-lennart\&.mount\&. For details about the escaping logic used to convert a file system path to a unit name see
+\fBsystemd.unit\fR(5)\&.
+.PP
+Optionally, a mount unit may be accompanied by an automount unit, to allow on\-demand or parallelized mounting\&. See
+\fBsystemd.automount\fR(5)\&.
+.PP
+If a mount point is beneath another mount point in the file system hierarchy, a dependency between both units is created automatically\&.
+.PP
+Mount points created at runtime (independently of unit files or
+/etc/fstab) will be monitored by systemd and appear like any other mount unit in systemd\&. See
+/proc/self/mountinfo
+description in
+\fBproc\fR(5)\&.
+.PP
+Some file systems have special semantics as API file systems for kernel\-to\-userspace and userspace\-to\-userpace interfaces\&. Some of them may not be changed via mount units, and cannot be disabled\&. For a longer discussion see
+\m[blue]\fBAPI File Systems\fR\m[]\&\s-2\u[1]\d\s+2\&.
+.SH "/ETC/FSTAB"
+.PP
+Mount units may either be configured via unit files, or via
+/etc/fstab
+(see
+\fBfstab\fR(5)
+for details)\&. Mounts listed in
+/etc/fstab
+will be converted into native units dynamically at boot and when the configuration of the system manager is reloaded\&. See
+\fBsystemd-fstab-generator\fR(8)
+for details about the conversion\&.
+.PP
+When reading
+/etc/fstab
+a few special mount options are understood by systemd which influence how dependencies are created for mount points from
+/etc/fstab\&. systemd will create a dependency of type
+\fBWants\fR
+from either
+local\-fs\&.target
+or
+remote\-fs\&.target, depending whether the file system is local or remote\&. If
+\fBx\-systemd\&.automount\fR
+is set, an automount unit will be created for the file system\&. See
+\fBsystemd.automount\fR(5)
+for details\&. If
+\fBx\-systemd\&.device\-timeout=\fR
+is specified, it may be used to configure how long systemd should wait for a device to show up before giving up on an entry from
+/etc/fstab\&. Specify a time in seconds or explicitly specify a unit as
+"s",
+"min",
+"h",
+"ms"\&.
+.PP
+If a mount point is configured in both
+/etc/fstab
+and a unit file that is stored below
+/usr, the former will take precedence\&. If the unit file is stored below
+/etc, it will take precedence\&. This means: native unit files take precedence over traditional configuration files, but this is superseded by the rule that configuration in
+/etc
+will always take precedence over configuration in
+/usr\&.
+.SH "OPTIONS"
+.PP
+Mount files must include a [Mount] section, which carries information about the file system mount points it supervises\&. A number of options that may be used in this section are shared with other unit types\&. These options are documented in
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)\&. The options specific to the [Mount] section of mount units are the following:
+.PP
+\fIWhat=\fR
+.RS 4
+Takes an absolute path of a device node, file or other resource to mount\&. See
+\fBmount\fR(8)
+for details\&. If this refers to a device node, a dependency on the respective device unit is automatically created\&. (See
+\fBsystemd.device\fR(5)
+for more information\&.) This option is mandatory\&.
+.RE
+.PP
+\fIWhere=\fR
+.RS 4
+Takes an absolute path of a directory of the mount point\&. If the mount point does not exist at the time of mounting, it is created\&. This string must be reflected in the unit filename\&. (See above\&.) This option is mandatory\&.
+.RE
+.PP
+\fIType=\fR
+.RS 4
+Takes a string for the file system type\&. See
+\fBmount\fR(8)
+for details\&. This setting is optional\&.
+.RE
+.PP
+\fIOptions=\fR
+.RS 4
+Mount options to use when mounting\&. This takes a comma\-separated list of options\&. This setting is optional\&.
+.RE
+.PP
+\fIDirectoryMode=\fR
+.RS 4
+Directories of mount points (and any parent directories) are automatically created if needed\&. This option specifies the file system access mode used when creating these directories\&. Takes an access mode in octal notation\&. Defaults to 0755\&.
+.RE
+.PP
+\fITimeoutSec=\fR
+.RS 4
+Configures the time to wait for the mount command to finish\&. If a command does not exit within the configured time, the mount will be considered failed and be shut down again\&. All commands still running will be terminated forcibly via
+\fBSIGTERM\fR, and after another delay of this time with
+\fBSIGKILL\fR\&. (See
+\fBKillMode=\fR
+in
+\fBsystemd.kill\fR(5)\&.) Takes a unit\-less value in seconds, or a time span value such as "5min 20s"\&. Pass 0 to disable the timeout logic\&. Defaults to 90s\&.
+.RE
+.PP
+Check
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)
+for more settings\&.
+.SH "COMPATIBILITY OPTIONS"
+.PP
+The following option is also available in the
+"[Mount]"
+section, but exists purely for compatibility reasons and should not be used in newly written mount files\&.
+.PP
+\fIFsckPassNo=\fR
+.RS 4
+The pass number for the file system checking service for this mount\&. See
+\fBsystemd.service\fR(5)
+for more information on this setting\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.device\fR(5),
+\fBproc\fR(5),
+\fBmount\fR(8),
+\fBsystemd-fstab-generator\fR(8),
+\fBsystemd.directives\fR(7)
+.SH "NOTES"
+.IP " 1." 4
+API File Systems
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+.RE
diff --git a/man/systemd.mount.html b/man/systemd.mount.html
index 579485f72d..d8a2bdeb06 100644
--- a/man/systemd.mount.html
+++ b/man/systemd.mount.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.mount"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.mount — Mount unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code></p></div><div class="refsect1"><a name="idm259770088336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.mount</code> encodes information about
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.mount"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.mount — Mount unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code></p></div><div class="refsect1"><a name="idm274692535648"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.mount</code>" encodes information about
a file system mount point controlled and supervised by
systemd.</p><p>This man page lists the configuration options
specific to this unit type. See
@@ -34,14 +34,18 @@
which define the execution environment the
<a href="mount.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a>
binary is executed in, and in
- <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
- which define the way the processes are
- terminated. Note that the User= and Group= options are
- not particularly useful for mount units specifying a
- <code class="literal">Type=</code> option or using configuration
- not specified in <code class="filename">/etc/fstab</code>;
+ <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
+ which define the way the processes are terminated, and
+ in
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ which configure resource control settings for the
+ processes of the service. Note that the User= and
+ Group= options are not particularly useful for mount
+ units specifying a "<code class="literal">Type=</code>" option or
+ using configuration not specified in
+ <code class="filename">/etc/fstab</code>;
<a href="mount.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a>
- will refuse options that aren't listed in
+ will refuse options that are not listed in
<code class="filename">/etc/fstab</code> if it is not run as
UID 0.</p><p>Mount units must be named after the mount point
directories they control. Example: the mount point
@@ -66,7 +70,7 @@
userspace-to-userpace interfaces. Some of them may not
be changed via mount units, and cannot be disabled.
For a longer discussion see <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems" target="_top">API
- File Systems</a>.</p></div><div class="refsect1"><a name="idm259774020688"></a><h2 id="/etc/fstab"><code class="filename">/etc/fstab</code><a class="headerlink" title="Permalink to this headline" href="#/etc/fstab">¶</a></h2><p>Mount units may either be configured via unit
+ File Systems</a>.</p></div><div class="refsect1"><a name="idm274692592320"></a><h2 id="/etc/fstab"><code class="filename">/etc/fstab</code><a class="headerlink" title="Permalink to this headline" href="#/etc/fstab">¶</a></h2><p>Mount units may either be configured via unit
files, or via <code class="filename">/etc/fstab</code> (see
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
for details). Mounts listed in
@@ -89,23 +93,23 @@
<a href="systemd.automount.html"><span class="citerefentry"><span class="refentrytitle">systemd.automount</span>(5)</span></a>
for details. If
<code class="option">x-systemd.device-timeout=</code> is
- specified it may be used to configure how long systemd
+ specified, it may be used to configure how long systemd
should wait for a device to show up before giving up
on an entry from
<code class="filename">/etc/fstab</code>. Specify a time in
seconds or explicitly specify a unit as
- <code class="literal">s</code>, <code class="literal">min</code>,
- <code class="literal">h</code>, <code class="literal">ms</code>.</p><p>If a mount point is configured in both
+ "<code class="literal">s</code>", "<code class="literal">min</code>",
+ "<code class="literal">h</code>", "<code class="literal">ms</code>".</p><p>If a mount point is configured in both
<code class="filename">/etc/fstab</code> and a unit file that
- is stored below <code class="filename">/usr</code> the former
+ is stored below <code class="filename">/usr</code>, the former
will take precedence. If the unit file is stored below
- <code class="filename">/etc</code> it will take
+ <code class="filename">/etc</code>, it will take
precedence. This means: native unit files take
precedence over traditional configuration files, but
this is superseded by the rule that configuration in
<code class="filename">/etc</code> will always take precedence
over configuration in
- <code class="filename">/usr</code>.</p></div><div class="refsect1"><a name="idm259773995008"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Mount files must include a [Mount] section,
+ <code class="filename">/usr</code>.</p></div><div class="refsect1"><a name="idm274692566288"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Mount files must include a [Mount] section,
which carries information about the file system mount points it
supervises. A number of options that may be used in
this section are shared with other unit types. These
@@ -129,14 +133,14 @@
the mount point does not exist at the
time of mounting, it is created. This
string must be reflected in the unit
- file name. (See above.) This option is
+ filename. (See above.) This option is
mandatory.</p></dd><dt id="Type="><span class="term"><code class="varname">Type=</code></span><a class="headerlink" title="Permalink to this term" href="#Type=">¶</a></dt><dd><p>Takes a string for the
- filesystem type. See
+ file system type. See
<a href="mount.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a>
for details. This setting is
optional.</p></dd><dt id="Options="><span class="term"><code class="varname">Options=</code></span><a class="headerlink" title="Permalink to this term" href="#Options=">¶</a></dt><dd><p>Mount options to use
- when mounting. This takes a comma
- separated list of options. This
+ when mounting. This takes a
+ comma-separated list of options. This
setting is optional.</p></dd><dt id="DirectoryMode="><span class="term"><code class="varname">DirectoryMode=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryMode=">¶</a></dt><dd><p>Directories of mount
points (and any parent directories)
are automatically created if
@@ -147,12 +151,12 @@
0755.</p></dd><dt id="TimeoutSec="><span class="term"><code class="varname">TimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutSec=">¶</a></dt><dd><p>Configures the time to
wait for the mount command to
finish. If a command does not exit
- within the configured time the mount
+ within the configured time, the mount
will be considered failed and be shut
down again. All commands still running
will be terminated forcibly via
- SIGTERM, and after another delay of
- this time with SIGKILL. (See
+ <code class="constant">SIGTERM</code>, and after another delay of
+ this time with <code class="constant">SIGKILL</code>. (See
<code class="option">KillMode=</code> in
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>.)
Takes a unit-less value in seconds, or
@@ -163,20 +167,21 @@
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
and
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
- for more settings.</p></div><div class="refsect1"><a name="idm259769011792"></a><h2 id="Compatibility Options">Compatibility Options<a class="headerlink" title="Permalink to this headline" href="#Compatibility%20Options">¶</a></h2><p>The following option is also available in the
- <code class="literal">[Mount]</code> section, but exists purely
+ for more settings.</p></div><div class="refsect1"><a name="idm274687630032"></a><h2 id="Compatibility Options">Compatibility Options<a class="headerlink" title="Permalink to this headline" href="#Compatibility%20Options">¶</a></h2><p>The following option is also available in the
+ "<code class="literal">[Mount]</code>" section, but exists purely
for compatibility reasons and should not be used in
newly written mount files.</p><div class="variablelist"><dl class="variablelist"><dt id="FsckPassNo="><span class="term"><code class="varname">FsckPassNo=</code></span><a class="headerlink" title="Permalink to this term" href="#FsckPassNo=">¶</a></dt><dd><p>The pass number for
the file system checking service for
this mount. See
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>
for more information on this setting.
- </p></dd></dl></div></div><div class="refsect1"><a name="idm259769006752"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274687624992"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>,
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
<a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>,
<a href="proc.html"><span class="citerefentry"><span class="refentrytitle">proc</span>(5)</span></a>,
diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
index 21177a2623..48af1caace 100644
--- a/man/systemd.mount.xml
+++ b/man/systemd.mount.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.mount</filename> encodes information about
+ <literal>.mount</literal> encodes information about
a file system mount point controlled and supervised by
systemd.</para>
@@ -73,14 +73,18 @@
which define the execution environment the
<citerefentry><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>
binary is executed in, and in
- <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- which define the way the processes are
- terminated. Note that the User= and Group= options are
- not particularly useful for mount units specifying a
- <literal>Type=</literal> option or using configuration
- not specified in <filename>/etc/fstab</filename>;
+ <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which define the way the processes are terminated, and
+ in
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which configure resource control settings for the
+ processes of the service. Note that the User= and
+ Group= options are not particularly useful for mount
+ units specifying a <literal>Type=</literal> option or
+ using configuration not specified in
+ <filename>/etc/fstab</filename>;
<citerefentry><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- will refuse options that aren't listed in
+ will refuse options that are not listed in
<filename>/etc/fstab</filename> if it is not run as
UID 0.</para>
@@ -147,7 +151,7 @@
<citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. If
<option>x-systemd.device-timeout=</option> is
- specified it may be used to configure how long systemd
+ specified, it may be used to configure how long systemd
should wait for a device to show up before giving up
on an entry from
<filename>/etc/fstab</filename>. Specify a time in
@@ -157,9 +161,9 @@
<para>If a mount point is configured in both
<filename>/etc/fstab</filename> and a unit file that
- is stored below <filename>/usr</filename> the former
+ is stored below <filename>/usr</filename>, the former
will take precedence. If the unit file is stored below
- <filename>/etc</filename> it will take
+ <filename>/etc</filename>, it will take
precedence. This means: native unit files take
precedence over traditional configuration files, but
this is superseded by the rule that configuration in
@@ -206,14 +210,14 @@
the mount point does not exist at the
time of mounting, it is created. This
string must be reflected in the unit
- file name. (See above.) This option is
+ filename. (See above.) This option is
mandatory.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>Type=</varname></term>
<listitem><para>Takes a string for the
- filesystem type. See
+ file system type. See
<citerefentry><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>
for details. This setting is
optional.</para></listitem>
@@ -223,8 +227,8 @@
<term><varname>Options=</varname></term>
<listitem><para>Mount options to use
- when mounting. This takes a comma
- separated list of options. This
+ when mounting. This takes a
+ comma-separated list of options. This
setting is optional.</para></listitem>
</varlistentry>
@@ -245,12 +249,12 @@
<listitem><para>Configures the time to
wait for the mount command to
finish. If a command does not exit
- within the configured time the mount
+ within the configured time, the mount
will be considered failed and be shut
down again. All commands still running
will be terminated forcibly via
- SIGTERM, and after another delay of
- this time with SIGKILL. (See
+ <constant>SIGTERM</constant>, and after another delay of
+ this time with <constant>SIGKILL</constant>. (See
<option>KillMode=</option> in
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.)
Takes a unit-less value in seconds, or
@@ -298,6 +302,7 @@
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.path.5 b/man/systemd.path.5
new file mode 100644
index 0000000000..fe92869fc6
--- /dev/null
+++ b/man/systemd.path.5
@@ -0,0 +1,122 @@
+'\" t
+.TH "SYSTEMD\&.PATH" "5" "" "systemd 208" "systemd.path"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.path \- Path unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIpath\fR\&.path
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.path"
+encodes information about a path monitored by systemd, for path\-based activation\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The path specific configuration options are configured in the [Path] section\&.
+.PP
+For each path file, a matching unit file must exist, describing the unit to activate when the path changes\&. By default, a service by the same name as the path (except for the suffix) is activated\&. Example: a path file
+foo\&.path
+activates a matching service
+foo\&.service\&. The unit to activate may be controlled by
+\fIUnit=\fR
+(see below)\&.
+.PP
+Internally, path units use the
+\fBinotify\fR(7)
+API to monitor file systems\&. Due to that, it suffers by the same limitations as inotify, and for example cannot be used to monitor files or directories changed by other machines on remote NFS file systems\&.
+.PP
+If a path unit is beneath another mount point in the file system hierarchy, a dependency between both units is created automatically\&.
+.PP
+Unless
+\fIDefaultDependencies=false\fR
+is used, path units will implicitly have dependencies of type
+\fIConflicts=\fR
+and
+\fIBefore=\fR
+on
+shutdown\&.target\&. These ensure that path units are terminated cleanly prior to system shutdown\&. Only path units involved with early boot or late system shutdown should disable this option\&.
+.SH "OPTIONS"
+.PP
+Path files must include a [Path] section, which carries information about the path(s) it monitors\&. The options specific to the [Path] section of path units are the following:
+.PP
+\fIPathExists=\fR, \fIPathExistsGlob=\fR, \fIPathChanged=\fR, \fIPathModified=\fR, \fIDirectoryNotEmpty=\fR
+.RS 4
+Defines paths to monitor for certain changes:
+\fIPathExists=\fR
+may be used to watch the mere existence of a file or directory\&. If the file specified exists, the configured unit is activated\&.
+\fIPathExistsGlob=\fR
+works similar, but checks for the existence of at least one file matching the globbing pattern specified\&.
+\fIPathChanged=\fR
+may be used to watch a file or directory and activate the configured unit whenever it changes\&. It is not activated on every write to the watched file but it is activated if the file which was open for writing gets closed\&.
+\fIPathModified=\fR
+is similar, but additionally it is activated also on simple writes to the watched file\&.
+\fIDirectoryNotEmpty=\fR
+may be used to watch a directory and activate the configured unit whenever it contains at least one file\&.
+.sp
+The arguments of these directives must be absolute file system paths\&.
+.sp
+Multiple directives may be combined, of the same and of different types, to watch multiple paths\&. If the empty string is assigned to any of these options, the list of paths to watch is reset, and any prior assignments of these options will not have any effect\&.
+.sp
+If a path already exists (in case of
+\fIPathExists=\fR
+and
+\fIPathExistsGlob=\fR) or a directory already is not empty (in case of
+\fIDirectoryNotEmpty=\fR) at the time the path unit is activated, then the configured unit is immediately activated as well\&. Something similar does not apply to
+\fIPathChanged=\fR
+and
+\fIPathModified=\fR\&.
+.sp
+If the path itself or any of the containing directories are not accessible,
+\fBsystemd\fR
+will watch for permission changes and notice that conditions are satisfied when permissions allow that\&.
+.RE
+.PP
+\fIUnit=\fR
+.RS 4
+The unit to activate when any of the configured paths changes\&. The argument is a unit name, whose suffix is not
+"\&.path"\&. If not specified, this value defaults to a service that has the same name as the path unit, except for the suffix\&. (See above\&.) It is recommended that the unit name that is activated and the unit name of the path unit are named identical, except for the suffix\&.
+.RE
+.PP
+\fIMakeDirectory=\fR
+.RS 4
+Takes a boolean argument\&. If true, the directories to watch are created before watching\&. This option is ignored for
+\fIPathExists=\fR
+settings\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIDirectoryMode=\fR
+.RS 4
+If
+\fIMakeDirectory=\fR
+is enabled, use the mode specified here to create the directories in question\&. Takes an access mode in octal notation\&. Defaults to
+\fB0755\fR\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBinotify\fR(7),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.path.html b/man/systemd.path.html
index ff9b8105e2..2487b7db11 100644
--- a/man/systemd.path.html
+++ b/man/systemd.path.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.path"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.path — Path unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>path</code></em>.path</code></p></div><div class="refsect1"><a name="idm259771296656"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.path</code> encodes information about
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.path"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.path — Path unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>path</code></em>.path</code></p></div><div class="refsect1"><a name="idm274698401152"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.path</code>" encodes information about
a path monitored by systemd, for
path-based activation.</p><p>This man page lists the configuration options
specific to this unit type. See
@@ -51,7 +51,7 @@
that path units are terminated cleanly prior to system
shutdown. Only path units involved with early boot or
late system shutdown should disable this option.
- </p></div><div class="refsect1"><a name="idm259771285680"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Path files must include a [Path] section,
+ </p></div><div class="refsect1"><a name="idm274698268256"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Path files must include a [Path] section,
which carries information about the path(s) it
monitors. The options specific to the [Path] section
of path units are the following:</p><div class="variablelist"><dl class="variablelist"><dt id="PathExists="><span class="term"><code class="varname">PathExists=</code>, </span><span class="term"><code class="varname">PathExistsGlob=</code>, </span><span class="term"><code class="varname">PathChanged=</code>, </span><span class="term"><code class="varname">PathModified=</code>, </span><span class="term"><code class="varname">DirectoryNotEmpty=</code></span><a class="headerlink" title="Permalink to this term" href="#PathExists=">¶</a></dt><dd><p>Defines paths to
@@ -59,7 +59,7 @@
<code class="varname">PathExists=</code> may be
used to watch the mere existence of a
file or directory. If the file
- specified exists the configured unit
+ specified exists, the configured unit
is
activated. <code class="varname">PathExistsGlob=</code>
works similar, but checks for the
@@ -86,7 +86,7 @@
combined, of the same and of different
types, to watch multiple paths. If the
empty string is assigned to any of
- these options the list of paths to
+ these options, the list of paths to
watch is reset, and any prior
assignments of these options will not
have any effect.</p><p>If a path already exists
@@ -111,7 +111,7 @@
when any of the configured paths
changes. The argument is a unit name,
whose suffix is not
- <code class="filename">.path</code>. If not
+ "<code class="literal">.path</code>". If not
specified, this value defaults to a
service that has the same name as the
path unit, except for the suffix. (See
@@ -120,18 +120,18 @@
unit name of the path unit are named
identical, except for the
suffix.</p></dd><dt id="MakeDirectory="><span class="term"><code class="varname">MakeDirectory=</code></span><a class="headerlink" title="Permalink to this term" href="#MakeDirectory=">¶</a></dt><dd><p>Takes a boolean
- argument. If true the directories to
+ argument. If true, the directories to
watch are created before
watching. This option is ignored for
<code class="varname">PathExists=</code>
settings. Defaults to
<code class="option">false</code>.</p></dd><dt id="DirectoryMode="><span class="term"><code class="varname">DirectoryMode=</code></span><a class="headerlink" title="Permalink to this term" href="#DirectoryMode=">¶</a></dt><dd><p>If
<code class="varname">MakeDirectory=</code> is
- enabled use the mode specified here to
+ enabled, use the mode specified here to
create the directories in
question. Takes an access mode in
octal notation. Defaults to
- <code class="option">0755</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259775291632"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <code class="option">0755</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274698521232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd.path.xml b/man/systemd.path.xml
index 1975142d2c..8d86fca5d6 100644
--- a/man/systemd.path.xml
+++ b/man/systemd.path.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.path</filename> encodes information about
+ <literal>.path</literal> encodes information about
a path monitored by systemd, for
path-based activation.</para>
@@ -120,7 +120,7 @@
<varname>PathExists=</varname> may be
used to watch the mere existence of a
file or directory. If the file
- specified exists the configured unit
+ specified exists, the configured unit
is
activated. <varname>PathExistsGlob=</varname>
works similar, but checks for the
@@ -151,7 +151,7 @@
combined, of the same and of different
types, to watch multiple paths. If the
empty string is assigned to any of
- these options the list of paths to
+ these options, the list of paths to
watch is reset, and any prior
assignments of these options will not
have any effect.</para>
@@ -185,7 +185,7 @@
when any of the configured paths
changes. The argument is a unit name,
whose suffix is not
- <filename>.path</filename>. If not
+ <literal>.path</literal>. If not
specified, this value defaults to a
service that has the same name as the
path unit, except for the suffix. (See
@@ -199,7 +199,7 @@
<term><varname>MakeDirectory=</varname></term>
<listitem><para>Takes a boolean
- argument. If true the directories to
+ argument. If true, the directories to
watch are created before
watching. This option is ignored for
<varname>PathExists=</varname>
@@ -211,7 +211,7 @@
<listitem><para>If
<varname>MakeDirectory=</varname> is
- enabled use the mode specified here to
+ enabled, use the mode specified here to
create the directories in
question. Takes an access mode in
octal notation. Defaults to
diff --git a/man/systemd.preset.5 b/man/systemd.preset.5
new file mode 100644
index 0000000000..681c468fb1
--- /dev/null
+++ b/man/systemd.preset.5
@@ -0,0 +1,154 @@
+'\" t
+.TH "SYSTEMD\&.PRESET" "5" "" "systemd 208" "systemd.preset"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.preset \- Service enablement presets
+.SH "SYNOPSIS"
+.PP
+/etc/systemd/system\-preset/*\&.preset
+.PP
+/run/systemd/system\-preset/*\&.preset
+.PP
+/usr/lib/systemd/system\-preset/*\&.preset
+.PP
+/etc/systemd/user\-preset/*\&.preset
+.PP
+/run/systemd/user\-preset/*\&.preset
+.PP
+/usr/lib/systemd/user\-preset/*\&.preset
+.SH "DESCRIPTION"
+.PP
+Preset files may be used to encode policy which units shall be enabled by default and which ones shall be disabled\&. They are read by
+\fBsystemctl preset\fR
+(for more information see
+\fBsystemctl\fR(1)) which uses this information to enable or disable a unit according to preset policy\&.
+\fBsystemctl preset\fR
+is used by the post install scriptlets of RPM packages (or other OS package formats), to enable/disable specific units by default on package installation, enforcing distribution, spin or administrator preset policy\&. This allows choosing a certain set of units to be enabled/disabled even before installing the actual package\&.
+.PP
+For more information on the preset logic please have a look at the
+\m[blue]\fBPresets\fR\m[]\&\s-2\u[1]\d\s+2
+document\&.
+.PP
+It is not recommended to ship preset files within the respective software packages implementing the units, but rather centralize them in a distribution or spin default policy, which can be amended by administrator policy\&.
+.PP
+If no preset files exist,
+\fBsystemctl preset\fR
+will enable all units that are installed by default\&. If this is not desired and all units shall rather be disabled, it is necessary to ship a preset file with a single, catchall "disable *" line\&. (See example 1, below\&.)
+.SH "PRESET FILE FORMAT"
+.PP
+The preset files contain a list of directives consisting of either the word
+"enable"
+or
+"disable"
+followed by a space and a unit name (possibly with shell style wildcards), separated by newlines\&. Empty lines and lines whose first non\-whitespace character is # or ; are ignored\&.
+.PP
+Two different directives are understood:
+"enable"
+may be used to enable units by default,
+"disable"
+to disable units by default\&.
+.PP
+If multiple lines apply to a unit name, the first matching one takes precedence over all others\&.
+.PP
+Each preset file shall be named in the style of
+<priority>\-<program>\&.conf\&. Files in
+/etc/
+override files with the same name in
+/usr/lib/
+and
+/run/\&. Files in
+/run/
+override files with the same name in
+/usr/lib/\&. Packages should install their preset files in
+/usr/lib/\&. Files in
+/etc/
+are reserved for the local administrator, who may use this logic to override the preset files installed by vendor packages\&. All preset files are sorted by their filename in lexicographic order, regardless in which of the directories they reside\&. If multiple files specify the same unit name, the entry in the file with the lexicographically earliest name will be applied\&. It is recommended to prefix all filenames with a two\-digit number and a dash, to simplify the ordering of the files\&.
+.PP
+If the administrator wants to disable a preset file supplied by the vendor, the recommended way is to place a symlink to
+/dev/null
+in
+/etc/systemd/system\-preset/
+bearing the same filename\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&Default off example /usr/lib/systemd/system\-preset/99\-default\&.preset:\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+disable *
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This disables all units\&. Due to the filename prefix
+"99\-", it will be read last and hence can easily be overridden by spin or administrator preset policy or suchlike\&.
+.PP
+\fBExample\ \&2.\ \&A GNOME spin example /usr/lib/systemd/system\-preset/50\-gnome\&.preset:\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+enable gdm\&.service
+enable colord\&.service
+enable accounts\-daemon\&.service
+enable avahi\-daemon\&.*
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This enables the three mentioned units, plus all
+avahi\-daemon
+regardless of which unit type\&. A file like this could be useful for inclusion in a GNOME spin of a distribution\&. It will ensure that the units necessary for GNOME are properly enabled as they are installed\&. It leaves all other units untouched, and subject to other (later) preset files, for example like the one from the first example above\&.
+.PP
+\fBExample\ \&3.\ \&Administrator policy /etc/systemd/system\-preset/00\-lennart\&.preset:\fR
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+enable httpd\&.service
+enable sshd\&.service
+enable postfix\&.service
+disable *
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+This enables three specific services and disables all others\&. This is useful for administrators to specifically select the units to enable, and disable all others\&. Due to the filename prefix
+"00\-"
+it will be read early and hence overrides all other preset policy files\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBsystemd-delta\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+Presets
+.RS 4
+\%http://freedesktop.org/wiki/Software/systemd/Preset
+.RE
diff --git a/man/systemd.preset.html b/man/systemd.preset.html
index a0d42294f8..06b43ca126 100644
--- a/man/systemd.preset.html
+++ b/man/systemd.preset.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.preset"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.preset — Service enablement presets</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/system-preset/*.preset</code></p><p><code class="filename">/run/systemd/system-preset/*.preset</code></p><p><code class="filename">/usr/lib/systemd/system-preset/*.preset</code></p><p><code class="filename">/etc/systemd/user-preset/*.preset</code></p><p><code class="filename">/run/systemd/user-preset/*.preset</code></p><p><code class="filename">/usr/lib/systemd/user-preset/*.preset</code></p></div><div class="refsect1"><a name="idm259772194480"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Preset files may be used to encode policy which
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.preset"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.preset — Service enablement presets</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/systemd/system-preset/*.preset</code></p><p><code class="filename">/run/systemd/system-preset/*.preset</code></p><p><code class="filename">/usr/lib/systemd/system-preset/*.preset</code></p><p><code class="filename">/etc/systemd/user-preset/*.preset</code></p><p><code class="filename">/run/systemd/user-preset/*.preset</code></p><p><code class="filename">/usr/lib/systemd/user-preset/*.preset</code></p></div><div class="refsect1"><a name="idm274698508048"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Preset files may be used to encode policy which
units shall be enabled by default and which ones
shall be disabled. They are read by <span class="command"><strong>systemctl
preset</strong></span> (for more information see
@@ -41,20 +41,20 @@
amended by administrator policy.</p><p>If no preset files exist, <span class="command"><strong>systemctl
preset</strong></span> will enable all units that are
installed by default. If this is not desired and all
- units shall rather be disabled it is necessary to ship
+ units shall rather be disabled, it is necessary to ship
a preset file with a single, catchall
"<code class="filename">disable *</code>" line. (See example 1,
- below.)</p></div><div class="refsect1"><a name="idm259772186448"></a><h2 id="Preset File Format">Preset File Format<a class="headerlink" title="Permalink to this headline" href="#Preset%20File%20Format">¶</a></h2><p>The preset files contain a list of
+ below.)</p></div><div class="refsect1"><a name="idm274698377824"></a><h2 id="Preset File Format">Preset File Format<a class="headerlink" title="Permalink to this headline" href="#Preset%20File%20Format">¶</a></h2><p>The preset files contain a list of
directives consisting of either the word
- <code class="literal">enable</code> or
- <code class="literal">disable</code> followed by a space and a
+ "<code class="literal">enable</code>" or
+ "<code class="literal">disable</code>" followed by a space and a
unit name (possibly with shell style wildcards),
separated by newlines. Empty lines and lines whose
first non-whitespace character is # or ; are
ignored.</p><p>Two different directives are understood:
- <code class="literal">enable</code> may be used to enable units
- by default, <code class="literal">disable</code> to disable
- units by default.</p><p>If multiple lines apply to a unit name the
+ "<code class="literal">enable</code>" may be used to enable units
+ by default, "<code class="literal">disable</code>" to disable
+ units by default.</p><p>If multiple lines apply to a unit name, the
first matching one takes precedence over all
others.</p><p>Each preset file shall be named in the style of
<code class="filename">&lt;priority&gt;-&lt;program&gt;.conf</code>.
@@ -68,21 +68,20 @@
<code class="filename">/etc/</code> are reserved for the local
administrator, who may use this logic to override the
preset files installed by vendor packages. All preset
- files are sorted by their filename in alphabetical
+ files are sorted by their filename in lexicographic
order, regardless in which of the directories they
- reside, to guarantee that a specific preset file takes
- precedence over another file with an alphabetically
- earlier name, if both files contain lines that apply
- to the same unit names. It is recommended to prefix
- all file names with two-digit number, to simplify
- ordering.</p><p>If the administrator wants to disable a preset
- file supplied by the vendor the recommended way is to
+ reside. If multiple files specify the same unit name,
+ the entry in the file with the lexicographically earliest
+ name will be applied. It is recommended to prefix all
+ filenames with a two-digit number and a dash, to simplify
+ the ordering of the files.</p><p>If the administrator wants to disable a preset
+ file supplied by the vendor, the recommended way is to
place a symlink to <code class="filename">/dev/null</code> in
<code class="filename">/etc/systemd/system-preset/</code>
- bearing the same file name.</p></div><div class="refsect1"><a name="idm259776123360"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259776122688"></a><p class="title"><b>Example 1. Default off example <code class="filename">/usr/lib/systemd/system-preset/99-default.preset</code>:</b></p><div class="example-contents"><pre class="programlisting">disable *</pre></div></div><br class="example-break"><p>This disables all units. Due to the file name
- prefix <code class="literal">99-</code> it will be read last and
+ bearing the same filename.</p></div><div class="refsect1"><a name="idm274698562432"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274698561760"></a><p class="title"><b>Example 1. Default off example <code class="filename">/usr/lib/systemd/system-preset/99-default.preset</code>:</b></p><div class="example-contents"><pre class="programlisting">disable *</pre></div></div><br class="example-break"><p>This disables all units. Due to the filename
+ prefix "<code class="literal">99-</code>", it will be read last and
hence can easily be overridden by spin or
- administrator preset policy or suchlike.</p><div class="example"><a name="idm259776119296"></a><p class="title"><b>Example 2. A GNOME spin example <code class="filename">/usr/lib/systemd/system-preset/50-gnome.preset</code>:</b></p><div class="example-contents"><pre class="programlisting">enable gdm.service
+ administrator preset policy or suchlike.</p><div class="example"><a name="idm274698558320"></a><p class="title"><b>Example 2. A GNOME spin example <code class="filename">/usr/lib/systemd/system-preset/50-gnome.preset</code>:</b></p><div class="example-contents"><pre class="programlisting">enable gdm.service
enable colord.service
enable accounts-daemon.service
enable avahi-daemon.*</pre></div></div><br class="example-break"><p>This enables the three mentioned units, plus all
@@ -93,15 +92,15 @@ enable avahi-daemon.*</pre></div></div><br class="example-break"><p>This enables
enabled as they are installed. It leaves all other
units untouched, and subject to other (later) preset
files, for example like the one from the first example
- above.</p><div class="example"><a name="idm259776108496"></a><p class="title"><b>Example 3. Administrator policy <code class="filename">/etc/systemd/system-preset/00-lennart.preset</code>:</b></p><div class="example-contents"><pre class="programlisting">enable httpd.service
+ above.</p><div class="example"><a name="idm274698547296"></a><p class="title"><b>Example 3. Administrator policy <code class="filename">/etc/systemd/system-preset/00-lennart.preset</code>:</b></p><div class="example-contents"><pre class="programlisting">enable httpd.service
enable sshd.service
enable postfix.service
disable *</pre></div></div><br class="example-break"><p>This enables three specific services and
disables all others. This is useful for administrators
to specifically select the units to enable, and
- disable all others. Due to the file name prefix
- <code class="literal">00-</code> it will be read early and hence
- overrides all other preset policy files.</p></div><div class="refsect1"><a name="idm259776104784"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ disable all others. Due to the filename prefix
+ "<code class="literal">00-</code>" it will be read early and hence
+ overrides all other preset policy files.</p></div><div class="refsect1"><a name="idm274698543584"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>
diff --git a/man/systemd.preset.xml b/man/systemd.preset.xml
index a692053876..16db8cd85b 100644
--- a/man/systemd.preset.xml
+++ b/man/systemd.preset.xml
@@ -86,7 +86,7 @@
<para>If no preset files exist, <command>systemctl
preset</command> will enable all units that are
installed by default. If this is not desired and all
- units shall rather be disabled it is necessary to ship
+ units shall rather be disabled, it is necessary to ship
a preset file with a single, catchall
"<filename>disable *</filename>" line. (See example 1,
below.)</para>
@@ -109,7 +109,7 @@
by default, <literal>disable</literal> to disable
units by default.</para>
- <para>If multiple lines apply to a unit name the
+ <para>If multiple lines apply to a unit name, the
first matching one takes precedence over all
others.</para>
@@ -125,20 +125,19 @@
<filename>/etc/</filename> are reserved for the local
administrator, who may use this logic to override the
preset files installed by vendor packages. All preset
- files are sorted by their filename in alphabetical
+ files are sorted by their filename in lexicographic
order, regardless in which of the directories they
- reside, to guarantee that a specific preset file takes
- precedence over another file with an alphabetically
- earlier name, if both files contain lines that apply
- to the same unit names. It is recommended to prefix
- all file names with two-digit number, to simplify
- ordering.</para>
+ reside. If multiple files specify the same unit name,
+ the entry in the file with the lexicographically earliest
+ name will be applied. It is recommended to prefix all
+ filenames with a two-digit number and a dash, to simplify
+ the ordering of the files.</para>
<para>If the administrator wants to disable a preset
- file supplied by the vendor the recommended way is to
+ file supplied by the vendor, the recommended way is to
place a symlink to <filename>/dev/null</filename> in
<filename>/etc/systemd/system-preset/</filename>
- bearing the same file name.</para>
+ bearing the same filename.</para>
</refsect1>
<refsect1>
@@ -150,8 +149,8 @@
<programlisting>disable *</programlisting>
</example>
- <para>This disables all units. Due to the file name
- prefix <literal>99-</literal> it will be read last and
+ <para>This disables all units. Due to the filename
+ prefix <literal>99-</literal>, it will be read last and
hence can easily be overridden by spin or
administrator preset policy or suchlike.</para>
@@ -187,7 +186,7 @@ disable *</programlisting>
<para>This enables three specific services and
disables all others. This is useful for administrators
to specifically select the units to enable, and
- disable all others. Due to the file name prefix
+ disable all others. Due to the filename prefix
<literal>00-</literal> it will be read early and hence
overrides all other preset policy files.</para>
</refsect1>
diff --git a/man/systemd.resource-control.5 b/man/systemd.resource-control.5
new file mode 100644
index 0000000000..4e64448a6f
--- /dev/null
+++ b/man/systemd.resource-control.5
@@ -0,0 +1,233 @@
+'\" t
+.TH "SYSTEMD\&.RESOURCE\-CONTROL" "5" "" "systemd 208" "systemd.resource-control"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.resource-control \- Resource control unit settings
+.SH "SYNOPSIS"
+.PP
+\fIslice\fR\&.slice,
+\fIscope\fR\&.scope,
+\fIservice\fR\&.service,
+\fIsocket\fR\&.socket,
+\fImount\fR\&.mount,
+\fIswap\fR\&.swap
+.SH "DESCRIPTION"
+.PP
+Unit configuration files for services, slices, scopes, sockets, mount points, and swap devices share a subset of configuration options for resource control of spawned processes\&. Internally, this relies on the the Control Groups kernel concept for organizing processes in a hierarchial tree of named groups for the purpose of resource management\&.
+.PP
+This man page lists the configuration options shared by those six unit types\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files, and
+\fBsystemd.slice\fR(5),
+\fBsystemd.scope\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.mount\fR(5), and
+\fBsystemd.swap\fR(5)
+for more information on the specific unit configuration files\&. The resource control configuration options are configured in the [Slice], [Scope], [Service], [Socket], [Mount], or [Swap] sections, depending on the unit type\&.
+.PP
+See the
+\m[blue]\fBNew Control Group Interfaces\fR\m[]\&\s-2\u[1]\d\s+2
+for an introduction how to make use of resource control APIs from programs\&.
+.SH "OPTIONS"
+.PP
+Units of the types listed above can have settings for resource control configuration:
+.PP
+\fICPUAccounting=\fR
+.RS 4
+Turn on CPU usage accounting for this unit\&. Takes a boolean argument\&. Note that turning on CPU accounting for one unit might also implicitly turn it on for all units contained in the same slice and for all its parent slices and the units contained therein\&.
+.RE
+.PP
+\fICPUShares=\fR\fI\fIweight\fR\fR
+.RS 4
+Assign the specified overall CPU time share weight to the processes executed\&. Takes an integer value\&. This controls the
+"cpu\&.shares"
+control group attribute, which defaults to 1024\&. For details about this control group attribute, see
+\m[blue]\fBsched\-design\-CFS\&.txt\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.sp
+Implies
+"CPUAccounting=true"\&.
+.RE
+.PP
+\fIMemoryAccounting=\fR
+.RS 4
+Turn on process and kernel memory accounting for this unit\&. Takes a boolean argument\&. Note that turning on memory accounting for one unit might also implicitly turn it on for all units contained in the same slice and for all its parent slices and the units contained therein\&.
+.RE
+.PP
+\fIMemoryLimit=\fR\fI\fIbytes\fR\fR
+.RS 4
+Specify the limit on maximum memory usage of the executed processes\&. The limit specifies how much process and kernel memory can be used by tasks in this unit\&. Takes a memory size in bytes\&. If the value is suffixed with K, M, G or T, the specified memory size is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively\&. This controls the
+"memory\&.limit_in_bytes"
+control group attribute\&. For details about this control group attribute, see
+\m[blue]\fBmemory\&.txt\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.sp
+Implies
+"MemoryAccounting=true"\&.
+.RE
+.PP
+\fIBlockIOAccounting=\fR
+.RS 4
+Turn on Block IO accounting for this unit\&. Takes a boolean argument\&. Note that turning on block IO accounting for one unit might also implicitly turn it on for all units contained in the same slice and all for its parent slices and the units contained therein\&.
+.RE
+.PP
+\fIBlockIOWeight=\fR\fI\fIweight\fR\fR
+.RS 4
+Set the default overall block IO weight for the executed processes\&. Takes a single weight value (between 10 and 1000) to set the default block IO weight\&. This controls the
+"blkio\&.weight"
+control group attribute, which defaults to 1000\&. For details about this control group attribute, see
+\m[blue]\fBblkio\-controller\&.txt\fR\m[]\&\s-2\u[4]\d\s+2\&.
+.sp
+Implies
+"BlockIOAccounting=true"\&.
+.RE
+.PP
+\fIBlockIODeviceWeight=\fR\fI\fIdevice\fR\fR\fI \fR\fI\fIweight\fR\fR
+.RS 4
+Set the per\-device overall block IO weight for the executed processes\&. Takes a space\-separated pair of a file path and a weight value to specify the device specific weight value, between 10 and 1000\&. (Example: "/dev/sda 500")\&. The file path may be specified as path to a block device node or as any other file in which case the backing block device of the file system of the file is determined\&. This controls the
+"blkio\&.weight_device"
+control group attribute, which defaults to 1000\&. Use this option multiple times to set weights for multiple devices\&. For details about this control group attribute, see
+\m[blue]\fBblkio\-controller\&.txt\fR\m[]\&\s-2\u[4]\d\s+2\&.
+.sp
+Implies
+"BlockIOAccounting=true"\&.
+.RE
+.PP
+\fIBlockIOReadBandwidth=\fR\fI\fIdevice\fR\fR\fI \fR\fI\fIbytes\fR\fR, \fIBlockIOWriteBandwidth=\fR\fI\fIdevice\fR\fR\fI \fR\fI\fIbytes\fR\fR
+.RS 4
+Set the per\-device overall block IO bandwidth limit for the executed processes\&. Takes a space\-separated pair of a file path and a bandwidth value (in bytes per second) to specify the device specific bandwidth\&. The file path may be a path to a block device node, or as any other file in which case the backing block device of the file system of the file is used\&. If the bandwidth is suffixed with K, M, G, or T, the specified bandwidth is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes, respectively (Example: "/dev/disk/by\-path/pci\-0000:00:1f\&.2\-scsi\-0:0:0:0 5M")\&. This controls the
+"blkio\&.read_bps_device"
+and
+"blkio\&.write_bps_device"
+control group attributes\&. Use this option multiple times to set bandwidth limits for multiple devices\&. For details about these control group attributes, see
+\m[blue]\fBblkio\-controller\&.txt\fR\m[]\&\s-2\u[4]\d\s+2\&.
+.sp
+Implies
+"BlockIOAccounting=true"\&.
+.RE
+.PP
+\fIDeviceAllow=\fR
+.RS 4
+Control access to specific device nodes by the executed processes\&. Takes two space\-separated strings: a device node path (such as
+/dev/null) followed by a combination of
+\fBr\fR,
+\fBw\fR,
+\fBm\fR
+to control
+\fIr\fReading,
+\fIw\fRriting, or creation of the specific device node by the unit (\fIm\fRknod), respectively\&. This controls the
+"devices\&.allow"
+and
+"devices\&.deny"
+control group attributes\&. For details about these control group attributes, see
+\m[blue]\fBdevices\&.txt\fR\m[]\&\s-2\u[5]\d\s+2\&.
+.RE
+.PP
+\fIDevicePolicy=auto|closed|strict\fR
+.RS 4
+Control the policy for allowing device access:
+.PP
+\fBstrict\fR
+.RS 4
+means to only allow types of access that are explicitly specified\&.
+.RE
+.PP
+\fBclosed\fR
+.RS 4
+in addition, allows access to standard pseudo devices including
+/dev/null,
+/dev/zero,
+/dev/full,
+/dev/random, and
+/dev/urandom\&.
+.RE
+.PP
+\fBauto\fR
+.RS 4
+in addition, allows access to all devices if no explicit
+\fIDeviceAllow=\fR
+is present\&. This is the default\&.
+.RE
+.RE
+.PP
+\fISlice=\fR
+.RS 4
+The name of the slice unit to place the unit in\&. Defaults to
+system\&.slice
+for all non\-instantiated units of all unit types (except for slice units themselves see below)\&. Instance units are by default placed in a subslice of
+system\&.slice
+that is named after the template name\&.
+.sp
+This option may be used to arrange systemd units in a hierarchy of slices each of which might have resource settings applied\&.
+.sp
+For units of type slice, the only accepted value for this setting is the parent slice\&. Since the name of a slice unit implies the parent slice, it is hence redundant to ever set this parameter directly for slice units\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.slice\fR(5),
+\fBsystemd.scope\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd.directives\fR(7),
+\fBsystemd.special\fR(7), The documentation for control groups and specific controllers in the Linux kernel:
+\m[blue]\fBcgroups\&.txt\fR\m[]\&\s-2\u[6]\d\s+2,
+\m[blue]\fBcpuacct\&.txt\fR\m[]\&\s-2\u[7]\d\s+2,
+\m[blue]\fBmemory\&.txt\fR\m[]\&\s-2\u[3]\d\s+2,
+\m[blue]\fBblkio\-controller\&.txt\fR\m[]\&\s-2\u[4]\d\s+2\&.
+.SH "NOTES"
+.IP " 1." 4
+New Control Group Interfaces
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/
+.RE
+.IP " 2." 4
+sched-design-CFS.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt
+.RE
+.IP " 3." 4
+memory.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/cgroups/memory.txt
+.RE
+.IP " 4." 4
+blkio-controller.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt
+.RE
+.IP " 5." 4
+devices.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/cgroups/devices.txt
+.RE
+.IP " 6." 4
+cgroups.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
+.RE
+.IP " 7." 4
+cpuacct.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/cgroups/cpuacct.txt
+.RE
diff --git a/man/systemd.resource-control.html b/man/systemd.resource-control.html
new file mode 100644
index 0000000000..e7882bcca2
--- /dev/null
+++ b/man/systemd.resource-control.html
@@ -0,0 +1,167 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd.resource-control</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.resource-control"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.resource-control — Resource control unit settings</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p>
+ <code class="filename"><em class="replaceable"><code>slice</code></em>.slice</code>,
+ <code class="filename"><em class="replaceable"><code>scope</code></em>.scope</code>,
+ <code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
+ <code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code>,
+ <code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code>,
+ <code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code>
+ </p></div><div class="refsect1"><a name="idm274688709760"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Unit configuration files for services, slices, scopes,
+ sockets, mount points, and swap devices share a subset of
+ configuration options for resource control of spawned
+ processes. Internally, this relies on the the Control Groups
+ kernel concept for organizing processes in a hierarchial tree of
+ named groups for the purpose of resource management.</p><p>This man page lists the configuration options shared by
+ those six unit types. See
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
+ for the common options of all unit configuration files, and
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>,
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>,
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
+ <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>,
+ <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
+ and
+ <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>
+ for more information on the specific unit configuration files. The
+ resource control configuration options are configured in the
+ [Slice], [Scope], [Service], [Socket], [Mount], or [Swap]
+ sections, depending on the unit type.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/" target="_top">New
+ Control Group Interfaces</a> for an introduction how to make
+ use of resource control APIs from programs.</p></div><div class="refsect1"><a name="idm274688700592"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Units of the types listed above can have settings
+ for resource control configuration:</p><div class="variablelist"><dl class="variablelist"><dt id="CPUAccounting="><span class="term"><code class="varname">CPUAccounting=</code></span><a class="headerlink" title="Permalink to this term" href="#CPUAccounting=">¶</a></dt><dd><p>Turn on CPU usage accounting for this unit. Takes a
+ boolean argument. Note that turning on CPU accounting for
+ one unit might also implicitly turn it on for all units
+ contained in the same slice and for all its parent slices and
+ the units contained therein.</p></dd><dt id="CPUShares=weight"><span class="term"><code class="varname">CPUShares=<em class="replaceable"><code>weight</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#CPUShares=weight">¶</a></dt><dd><p>Assign the specified overall CPU time share weight to
+ the processes executed. Takes an integer value. This
+ controls the "<code class="literal">cpu.shares</code>" control group
+ attribute, which defaults to 1024. For details about this
+ control group attribute, see <a class="ulink" href="https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt" target="_top">sched-design-CFS.txt</a>.</p><p>Implies "<code class="literal">CPUAccounting=true</code>".</p></dd><dt id="MemoryAccounting="><span class="term"><code class="varname">MemoryAccounting=</code></span><a class="headerlink" title="Permalink to this term" href="#MemoryAccounting=">¶</a></dt><dd><p>Turn on process and kernel memory accounting for this
+ unit. Takes a boolean argument. Note that turning on memory
+ accounting for one unit might also implicitly turn it on for
+ all units contained in the same slice and for all its parent
+ slices and the units contained therein.</p></dd><dt id="MemoryLimit=bytes"><span class="term"><code class="varname">MemoryLimit=<em class="replaceable"><code>bytes</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#MemoryLimit=bytes">¶</a></dt><dd><p>Specify the limit on maximum memory usage of the
+ executed processes. The limit specifies how much process and
+ kernel memory can be used by tasks in this unit. Takes a
+ memory size in bytes. If the value is suffixed with K, M, G
+ or T, the specified memory size is parsed as Kilobytes,
+ Megabytes, Gigabytes, or Terabytes (with the base 1024),
+ respectively. This controls the
+ "<code class="literal">memory.limit_in_bytes</code>" control group
+ attribute. For details about this control group attribute,
+ see <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/memory.txt" target="_top">memory.txt</a>.</p><p>Implies "<code class="literal">MemoryAccounting=true</code>".</p></dd><dt id="BlockIOAccounting="><span class="term"><code class="varname">BlockIOAccounting=</code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOAccounting=">¶</a></dt><dd><p>Turn on Block IO accounting for this unit. Takes a
+ boolean argument. Note that turning on block IO accounting
+ for one unit might also implicitly turn it on for all units
+ contained in the same slice and all for its parent slices and
+ the units contained therein.</p></dd><dt id="BlockIOWeight=weight"><span class="term"><code class="varname">BlockIOWeight=<em class="replaceable"><code>weight</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOWeight=weight">¶</a></dt><dd><p>Set the default
+ overall block IO weight for the
+ executed processes. Takes a single
+ weight value (between 10 and 1000) to
+ set the default block IO weight. This
+ controls the
+ "<code class="literal">blkio.weight</code>"
+ control group attribute, which
+ defaults to 1000. For details about
+ this control group attribute, see
+ <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt" target="_top">blkio-controller.txt</a>.</p><p>Implies
+ "<code class="literal">BlockIOAccounting=true</code>".</p></dd><dt id="BlockIODeviceWeight=device weight"><span class="term"><code class="varname">BlockIODeviceWeight=<em class="replaceable"><code>device</code></em> <em class="replaceable"><code>weight</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#BlockIODeviceWeight=device%20weight">¶</a></dt><dd><p>Set the per-device overall block IO weight for the
+ executed processes. Takes a space-separated pair of a file
+ path and a weight value to specify the device specific
+ weight value, between 10 and 1000. (Example: "/dev/sda
+ 500"). The file path may be specified as path to a block
+ device node or as any other file in which case the backing
+ block device of the file system of the file is
+ determined. This controls the
+ "<code class="literal">blkio.weight_device</code>" control group
+ attribute, which defaults to 1000. Use this option multiple
+ times to set weights for multiple devices. For details about
+ this control group attribute, see <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt" target="_top">blkio-controller.txt</a>.</p><p>Implies
+ "<code class="literal">BlockIOAccounting=true</code>".</p></dd><dt id="BlockIOReadBandwidth=device bytes"><span class="term"><code class="varname">BlockIOReadBandwidth=<em class="replaceable"><code>device</code></em> <em class="replaceable"><code>bytes</code></em></code>, </span><span class="term"><code class="varname">BlockIOWriteBandwidth=<em class="replaceable"><code>device</code></em> <em class="replaceable"><code>bytes</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#BlockIOReadBandwidth=device%20bytes">¶</a></dt><dd><p>Set the per-device overall block IO bandwidth limit
+ for the executed processes. Takes a space-separated pair of
+ a file path and a bandwidth value (in bytes per second) to
+ specify the device specific bandwidth. The file path may be
+ a path to a block device node, or as any other file in which
+ case the backing block device of the file system of the file
+ is used. If the bandwidth is suffixed with K, M, G, or T,
+ the specified bandwidth is parsed as Kilobytes, Megabytes,
+ Gigabytes, or Terabytes, respectively (Example:
+ "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This
+ controls the "<code class="literal">blkio.read_bps_device</code>" and
+ "<code class="literal">blkio.write_bps_device</code>" control group
+ attributes. Use this option multiple times to set bandwidth
+ limits for multiple devices. For details about these control
+ group attributes, see
+ <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt" target="_top">blkio-controller.txt</a>.
+ </p><p>Implies
+ "<code class="literal">BlockIOAccounting=true</code>".</p></dd><dt id="DeviceAllow="><span class="term"><code class="varname">DeviceAllow=</code></span><a class="headerlink" title="Permalink to this term" href="#DeviceAllow=">¶</a></dt><dd><p>Control access to specific device nodes by the
+ executed processes. Takes two space-separated strings: a
+ device node path (such as <code class="filename">/dev/null</code>)
+ followed by a combination of <code class="constant">r</code>,
+ <code class="constant">w</code>, <code class="constant">m</code> to control
+ <span class="emphasis"><em>r</em></span>eading, <span class="emphasis"><em>w</em></span>riting,
+ or creation of the specific device node by the unit
+ (<span class="emphasis"><em>m</em></span>knod), respectively. This controls
+ the "<code class="literal">devices.allow</code>" and
+ "<code class="literal">devices.deny</code>" control group
+ attributes. For details about these control group attributes,
+ see <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/devices.txt" target="_top">devices.txt</a>.</p></dd><dt id="DevicePolicy=auto|closed|strict"><span class="term"><code class="varname">DevicePolicy=auto|closed|strict</code></span><a class="headerlink" title="Permalink to this term" href="#DevicePolicy=auto%7Cclosed%7Cstrict">¶</a></dt><dd><p>
+ Control the policy for allowing device access:
+ </p><div class="variablelist"><dl class="variablelist"><dt id="strict"><span class="term"><code class="option">strict</code></span><a class="headerlink" title="Permalink to this term" href="#strict">¶</a></dt><dd><p>means to only allow types of access that are
+ explicitly specified.</p></dd><dt id="closed"><span class="term"><code class="option">closed</code></span><a class="headerlink" title="Permalink to this term" href="#closed">¶</a></dt><dd><p>in addition, allows access to standard pseudo
+ devices including
+ <code class="filename">/dev/null</code>,
+ <code class="filename">/dev/zero</code>,
+ <code class="filename">/dev/full</code>,
+ <code class="filename">/dev/random</code>, and
+ <code class="filename">/dev/urandom</code>.
+ </p></dd><dt id="auto"><span class="term"><code class="option">auto</code></span><a class="headerlink" title="Permalink to this term" href="#auto">¶</a></dt><dd><p>
+ in addition, allows access to all devices if no
+ explicit <code class="varname">DeviceAllow=</code> is present.
+ This is the default.
+ </p></dd></dl></div></dd><dt id="Slice="><span class="term"><code class="varname">Slice=</code></span><a class="headerlink" title="Permalink to this term" href="#Slice=">¶</a></dt><dd><p>The name of the slice unit to place the unit
+ in. Defaults to <code class="filename">system.slice</code> for all
+ non-instantiated units of all unit types (except for slice
+ units themselves see below). Instance units are by default
+ placed in a subslice of <code class="filename">system.slice</code>
+ that is named after the template name.</p><p>This option may be used to arrange systemd units in a
+ hierarchy of slices each of which might have resource
+ settings applied.</p><p>For units of type slice, the only accepted value for
+ this setting is the parent slice. Since the name of a slice
+ unit implies the parent slice, it is hence redundant to ever
+ set this parameter directly for slice units.</p></dd></dl></div></div><div class="refsect1"><a name="idm274687623264"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>,
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>,
+ <a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>,
+ <a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
+ <a href="systemd.swap.html"><span class="citerefentry"><span class="refentrytitle">systemd.swap</span>(5)</span></a>,
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>,
+ <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
+ The documentation for control groups and specific controllers in the Linux kernel:
+ <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt" target="_top">cgroups.txt</a>,
+ <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/cpuacct.txt" target="_top">cpuacct.txt</a>,
+ <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/memory.txt" target="_top">memory.txt</a>,
+ <a class="ulink" href="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt" target="_top">blkio-controller.txt</a>.
+ </p></div></div></body></html>
diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml
new file mode 100644
index 0000000000..868890590d
--- /dev/null
+++ b/man/systemd.resource-control.xml
@@ -0,0 +1,353 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+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.
+
+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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="systemd.resource-control">
+ <refentryinfo>
+ <title>systemd.resource-control</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd.resource-control</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd.resource-control</refname>
+ <refpurpose>Resource control unit settings</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para>
+ <filename><replaceable>slice</replaceable>.slice</filename>,
+ <filename><replaceable>scope</replaceable>.scope</filename>,
+ <filename><replaceable>service</replaceable>.service</filename>,
+ <filename><replaceable>socket</replaceable>.socket</filename>,
+ <filename><replaceable>mount</replaceable>.mount</filename>,
+ <filename><replaceable>swap</replaceable>.swap</filename>
+ </para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>Unit configuration files for services, slices, scopes,
+ sockets, mount points, and swap devices share a subset of
+ configuration options for resource control of spawned
+ processes. Internally, this relies on the the Control Groups
+ kernel concept for organizing processes in a hierarchial tree of
+ named groups for the purpose of resource management.</para>
+
+ <para>This man page lists the configuration options shared by
+ those six unit types. See
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for the common options of all unit configuration files, and
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ and
+ <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for more information on the specific unit configuration files. The
+ resource control configuration options are configured in the
+ [Slice], [Scope], [Service], [Socket], [Mount], or [Swap]
+ sections, depending on the unit type.</para>
+
+ <para>See the <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New
+ Control Group Interfaces</ulink> for an introduction how to make
+ use of resource control APIs from programs.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+
+ <para>Units of the types listed above can have settings
+ for resource control configuration:</para>
+
+ <variablelist class='unit-directives'>
+
+ <varlistentry>
+ <term><varname>CPUAccounting=</varname></term>
+
+ <listitem>
+ <para>Turn on CPU usage accounting for this unit. Takes a
+ boolean argument. Note that turning on CPU accounting for
+ one unit might also implicitly turn it on for all units
+ contained in the same slice and for all its parent slices and
+ the units contained therein.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>CPUShares=<replaceable>weight</replaceable></varname></term>
+
+ <listitem>
+ <para>Assign the specified overall CPU time share weight to
+ the processes executed. Takes an integer value. This
+ controls the <literal>cpu.shares</literal> control group
+ attribute, which defaults to 1024. For details about this
+ control group attribute, see <ulink
+ url="https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt">sched-design-CFS.txt</ulink>.</para>
+
+ <para>Implies <literal>CPUAccounting=true</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>MemoryAccounting=</varname></term>
+
+ <listitem>
+ <para>Turn on process and kernel memory accounting for this
+ unit. Takes a boolean argument. Note that turning on memory
+ accounting for one unit might also implicitly turn it on for
+ all units contained in the same slice and for all its parent
+ slices and the units contained therein.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>MemoryLimit=<replaceable>bytes</replaceable></varname></term>
+
+ <listitem>
+ <para>Specify the limit on maximum memory usage of the
+ executed processes. The limit specifies how much process and
+ kernel memory can be used by tasks in this unit. Takes a
+ memory size in bytes. If the value is suffixed with K, M, G
+ or T, the specified memory size is parsed as Kilobytes,
+ Megabytes, Gigabytes, or Terabytes (with the base 1024),
+ respectively. This controls the
+ <literal>memory.limit_in_bytes</literal> control group
+ attribute. For details about this control group attribute,
+ see <ulink
+ url="https://www.kernel.org/doc/Documentation/cgroups/memory.txt">memory.txt</ulink>.</para>
+
+ <para>Implies <literal>MemoryAccounting=true</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>BlockIOAccounting=</varname></term>
+
+ <listitem>
+ <para>Turn on Block IO accounting for this unit. Takes a
+ boolean argument. Note that turning on block IO accounting
+ for one unit might also implicitly turn it on for all units
+ contained in the same slice and all for its parent slices and
+ the units contained therein.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>BlockIOWeight=<replaceable>weight</replaceable></varname></term>
+
+ <listitem><para>Set the default
+ overall block IO weight for the
+ executed processes. Takes a single
+ weight value (between 10 and 1000) to
+ set the default block IO weight. This
+ controls the
+ <literal>blkio.weight</literal>
+ control group attribute, which
+ defaults to 1000. For details about
+ this control group attribute, see
+ <ulink
+ url="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt">blkio-controller.txt</ulink>.</para>
+
+ <para>Implies
+ <literal>BlockIOAccounting=true</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>BlockIODeviceWeight=<replaceable>device</replaceable> <replaceable>weight</replaceable></varname></term>
+
+ <listitem>
+ <para>Set the per-device overall block IO weight for the
+ executed processes. Takes a space-separated pair of a file
+ path and a weight value to specify the device specific
+ weight value, between 10 and 1000. (Example: "/dev/sda
+ 500"). The file path may be specified as path to a block
+ device node or as any other file in which case the backing
+ block device of the file system of the file is
+ determined. This controls the
+ <literal>blkio.weight_device</literal> control group
+ attribute, which defaults to 1000. Use this option multiple
+ times to set weights for multiple devices. For details about
+ this control group attribute, see <ulink
+ url="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt">blkio-controller.txt</ulink>.</para>
+
+ <para>Implies
+ <literal>BlockIOAccounting=true</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>BlockIOReadBandwidth=<replaceable>device</replaceable> <replaceable>bytes</replaceable></varname></term>
+ <term><varname>BlockIOWriteBandwidth=<replaceable>device</replaceable> <replaceable>bytes</replaceable></varname></term>
+
+ <listitem>
+ <para>Set the per-device overall block IO bandwidth limit
+ for the executed processes. Takes a space-separated pair of
+ a file path and a bandwidth value (in bytes per second) to
+ specify the device specific bandwidth. The file path may be
+ a path to a block device node, or as any other file in which
+ case the backing block device of the file system of the file
+ is used. If the bandwidth is suffixed with K, M, G, or T,
+ the specified bandwidth is parsed as Kilobytes, Megabytes,
+ Gigabytes, or Terabytes, respectively (Example:
+ "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This
+ controls the <literal>blkio.read_bps_device</literal> and
+ <literal>blkio.write_bps_device</literal> control group
+ attributes. Use this option multiple times to set bandwidth
+ limits for multiple devices. For details about these control
+ group attributes, see
+ <ulink url="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt">blkio-controller.txt</ulink>.
+ </para>
+
+ <para>Implies
+ <literal>BlockIOAccounting=true</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>DeviceAllow=</varname></term>
+
+ <listitem>
+ <para>Control access to specific device nodes by the
+ executed processes. Takes two space-separated strings: a
+ device node path (such as <filename>/dev/null</filename>)
+ followed by a combination of <constant>r</constant>,
+ <constant>w</constant>, <constant>m</constant> to control
+ <emphasis>r</emphasis>eading, <emphasis>w</emphasis>riting,
+ or creation of the specific device node by the unit
+ (<emphasis>m</emphasis>knod), respectively. This controls
+ the <literal>devices.allow</literal> and
+ <literal>devices.deny</literal> control group
+ attributes. For details about these control group attributes,
+ see <ulink
+ url="https://www.kernel.org/doc/Documentation/cgroups/devices.txt">devices.txt</ulink>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>DevicePolicy=auto|closed|strict</varname></term>
+
+ <listitem>
+ <para>
+ Control the policy for allowing device access:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><option>strict</option></term>
+ <listitem>
+ <para>means to only allow types of access that are
+ explicitly specified.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>closed</option></term>
+ <listitem>
+ <para>in addition, allows access to standard pseudo
+ devices including
+ <filename>/dev/null</filename>,
+ <filename>/dev/zero</filename>,
+ <filename>/dev/full</filename>,
+ <filename>/dev/random</filename>, and
+ <filename>/dev/urandom</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>auto</option></term>
+ <listitem>
+ <para>
+ in addition, allows access to all devices if no
+ explicit <varname>DeviceAllow=</varname> is present.
+ This is the default.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>Slice=</varname></term>
+
+ <listitem>
+ <para>The name of the slice unit to place the unit
+ in. Defaults to <filename>system.slice</filename> for all
+ non-instantiated units of all unit types (except for slice
+ units themselves see below). Instance units are by default
+ placed in a subslice of <filename>system.slice</filename>
+ that is named after the template name.</para>
+
+ <para>This option may be used to arrange systemd units in a
+ hierarchy of slices each of which might have resource
+ settings applied.</para>
+
+ <para>For units of type slice, the only accepted value for
+ this setting is the parent slice. Since the name of a slice
+ unit implies the parent slice, it is hence redundant to ever
+ set this parameter directly for slice units.</para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ The documentation for control groups and specific controllers in the Linux kernel:
+ <ulink url="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>,
+ <ulink url="https://www.kernel.org/doc/Documentation/cgroups/cpuacct.txt">cpuacct.txt</ulink>,
+ <ulink url="https://www.kernel.org/doc/Documentation/cgroups/memory.txt">memory.txt</ulink>,
+ <ulink url="https://www.kernel.org/doc/Documentation/cgroups/blkio-controller.txt">blkio-controller.txt</ulink>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/systemd.scope.5 b/man/systemd.scope.5
new file mode 100644
index 0000000000..2c620f505e
--- /dev/null
+++ b/man/systemd.scope.5
@@ -0,0 +1,63 @@
+'\" t
+.TH "SYSTEMD\&.SCOPE" "5" "" "systemd 208" "systemd.scope"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.scope \- Scope unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIscope\fR\&.scope
+.SH "DESCRIPTION"
+.PP
+Scope units are not configured via unit configuration files, but are only created programmatically using the bus interfaces of systemd\&. They are named similar to filenames\&. A unit whose name ends in
+"\&.scope"
+refers to a scope unit\&. Scopes units manage a set of system processes\&. Unlike service units, scope units manage externally created processes, and do not fork off processes on its own\&.
+.PP
+The main purpose of scope units is grouping worker processes of a system service for organization and for managing resources\&.
+.PP
+\fBsystemd\-run \fR\fB\fB\-\-scope\fR\fR
+may be used to easily launch a command in a new scope unit from the command line\&.
+.PP
+See the
+\m[blue]\fBNew Control Group Interfaces\fR\m[]\&\s-2\u[1]\d\s+2
+for an introduction how to make use of scope units from programs\&.
+.PP
+Unless
+\fIDefaultDependencies=false\fR
+is used, scope units will implicitly have dependencies of type
+\fIConflicts=\fR
+and
+\fIBefore=\fR
+on
+shutdown\&.target\&. These ensure that scope units are removed prior to system shutdown\&. Only scope units involved with early boot or late system shutdown should disable this option\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-run\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.directives\fR(7)\&.
+.SH "NOTES"
+.IP " 1." 4
+New Control Group Interfaces
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/
+.RE
diff --git a/man/systemd.scope.html b/man/systemd.scope.html
new file mode 100644
index 0000000000..c581cb4a54
--- /dev/null
+++ b/man/systemd.scope.html
@@ -0,0 +1,48 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd.scope</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.scope"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.scope — Scope unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>scope</code></em>.scope</code></p></div><div class="refsect1"><a name="idm274673830416"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Scope units are not configured via unit configuration files,
+ but are only created programmatically using the bus interfaces of
+ systemd. They are named similar to filenames. A unit whose name
+ ends in "<code class="literal">.scope</code>" refers to a scope unit. Scopes
+ units manage a set of system processes. Unlike service units, scope
+ units manage externally created processes, and do not fork off
+ processes on its own.</p><p>The main purpose of scope units is grouping worker processes
+ of a system service for organization and for managing resources.</p><p><span class="command"><strong>systemd-run <code class="option">--scope</code></strong></span> may
+ be used to easily launch a command in a new scope unit from the
+ command line.</p><p>See the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/" target="_top">New
+ Control Group Interfaces</a> for an introduction how to make
+ use of scope units from programs.</p><p>Unless <code class="varname">DefaultDependencies=false</code>
+ is used, scope units will implicitly have dependencies of
+ type <code class="varname">Conflicts=</code> and
+ <code class="varname">Before=</code> on
+ <code class="filename">shutdown.target</code>. These ensure
+ that scope units are removed prior to system
+ shutdown. Only scope units involved with early boot or
+ late system shutdown should disable this option.
+ </p></div><div class="refsect1"><a name="idm274673822528"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="systemd-run.html"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a>,
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>.
+ </p></div></div></body></html>
diff --git a/man/systemd.scope.xml b/man/systemd.scope.xml
new file mode 100644
index 0000000000..392abbf151
--- /dev/null
+++ b/man/systemd.scope.xml
@@ -0,0 +1,100 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+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.
+
+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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="systemd.scope">
+ <refentryinfo>
+ <title>systemd.scope</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd.scope</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd.scope</refname>
+ <refpurpose>Scope unit configuration</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename><replaceable>scope</replaceable>.scope</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>Scope units are not configured via unit configuration files,
+ but are only created programmatically using the bus interfaces of
+ systemd. They are named similar to filenames. A unit whose name
+ ends in <literal>.scope</literal> refers to a scope unit. Scopes
+ units manage a set of system processes. Unlike service units, scope
+ units manage externally created processes, and do not fork off
+ processes on its own.</para>
+
+ <para>The main purpose of scope units is grouping worker processes
+ of a system service for organization and for managing resources.</para>
+
+ <para><command>systemd-run <option>--scope</option></command> may
+ be used to easily launch a command in a new scope unit from the
+ command line.</para>
+
+ <para>See the <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New
+ Control Group Interfaces</ulink> for an introduction how to make
+ use of scope units from programs.</para>
+
+ <para>Unless <varname>DefaultDependencies=false</varname>
+ is used, scope units will implicitly have dependencies of
+ type <varname>Conflicts=</varname> and
+ <varname>Before=</varname> on
+ <filename>shutdown.target</filename>. These ensure
+ that scope units are removed prior to system
+ shutdown. Only scope units involved with early boot or
+ late system shutdown should disable this option.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-run</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd.service.5 b/man/systemd.service.5
new file mode 100644
index 0000000000..e3cb882075
--- /dev/null
+++ b/man/systemd.service.5
@@ -0,0 +1,566 @@
+'\" t
+.TH "SYSTEMD\&.SERVICE" "5" "" "systemd 208" "systemd.service"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.service \- Service unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIservice\fR\&.service
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+\&.service
+encodes information about a process controlled and supervised by systemd\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic
+"[Unit]"
+and
+"[Install]"
+sections\&. The service specific configuration options are configured in the
+"[Service]"
+section\&.
+.PP
+Additional options are listed in
+\fBsystemd.exec\fR(5), which define the execution environment the commands are executed in, and in
+\fBsystemd.kill\fR(5), which define the way the processes of the service are terminated, and in
+\fBsystemd.resource-control\fR(5), which configure resource control settings for the processes of the service\&.
+.PP
+Unless
+\fIDefaultDependencies=\fR
+is set to
+\fBfalse\fR, service units will implicitly have dependencies of type
+\fIRequires=\fR
+and
+\fIAfter=\fR
+on
+basic\&.target
+as well as dependencies of type
+\fIConflicts=\fR
+and
+\fIBefore=\fR
+on
+shutdown\&.target\&. These ensure that normal service units pull in basic system initialization, and are terminated cleanly prior to system shutdown\&. Only services involved with early boot or late system shutdown should disable this option\&.
+.PP
+If a service is requested under a certain name but no unit configuration file is found, systemd looks for a SysV init script by the same name (with the
+\&.service
+suffix removed) and dynamically creates a service unit from that script\&. This is useful for compatibility with SysV\&. Note that this compatibility is quite comprehensive but not 100%\&. For details about the incompatibilities see the
+\m[blue]\fBIncompatibilities with SysV\fR\m[]\&\s-2\u[1]\d\s+2
+document\&.
+.SH "OPTIONS"
+.PP
+Service files must include a
+"[Service]"
+section, which carries information about the service and the process it supervises\&. A number of options that may be used in this section are shared with other unit types\&. These options are documented in
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)\&. The options specific to the
+"[Service]"
+section of service units are the following:
+.PP
+\fIType=\fR
+.RS 4
+Configures the process start\-up type for this service unit\&. One of
+\fBsimple\fR,
+\fBforking\fR,
+\fBoneshot\fR,
+\fBdbus\fR,
+\fBnotify\fR
+or
+\fBidle\fR\&.
+.sp
+If set to
+\fBsimple\fR
+(the default value if
+\fIBusName=\fR
+is not specified), it is expected that the process configured with
+\fIExecStart=\fR
+is the main process of the service\&. In this mode, if the process offers functionality to other processes on the system, its communication channels should be installed before the daemon is started up (e\&.g\&. sockets set up by systemd, via socket activation), as systemd will immediately proceed starting follow\-up units\&.
+.sp
+If set to
+\fBforking\fR, it is expected that the process configured with
+\fIExecStart=\fR
+will call
+\fBfork()\fR
+as part of its start\-up\&. The parent process is expected to exit when start\-up is complete and all communication channels are set up\&. The child continues to run as the main daemon process\&. This is the behavior of traditional UNIX daemons\&. If this setting is used, it is recommended to also use the
+\fIPIDFile=\fR
+option, so that systemd can identify the main process of the daemon\&. systemd will proceed starting follow\-up units as soon as the parent process exits\&.
+.sp
+Behavior of
+\fBoneshot\fR
+is similar to
+\fBsimple\fR, however it is expected that the process has to exit before systemd starts follow\-up units\&.
+\fIRemainAfterExit=\fR
+is particularly useful for this type of service\&.
+.sp
+Behavior of
+\fBdbus\fR
+is similar to
+\fBsimple\fR, however it is expected that the daemon acquires a name on the D\-Bus bus, as configured by
+\fIBusName=\fR\&. systemd will proceed starting follow\-up units after the D\-Bus bus name has been acquired\&. Service units with this option configured implicitly gain dependencies on the
+dbus\&.socket
+unit\&. This type is the default if
+\fIBusName=\fR
+is specified\&.
+.sp
+Behavior of
+\fBnotify\fR
+is similar to
+\fBsimple\fR, however it is expected that the daemon sends a notification message via
+\fBsd_notify\fR(3)
+or an equivalent call when it finished starting up\&. systemd will proceed starting follow\-up units after this notification message has been sent\&. If this option is used,
+\fINotifyAccess=\fR
+(see below) should be set to open access to the notification socket provided by systemd\&. If
+\fINotifyAccess=\fR
+is not set, it will be implicitly set to
+\fBmain\fR\&. Note that currently
+\fIType=\fR\fBnotify\fR
+will not work if used in combination with
+\fIPrivateNetwork=\fR\fByes\fR\&.
+.sp
+Behavior of
+\fBidle\fR
+is very similar to
+\fBsimple\fR, however actual execution of the service binary is delayed until all jobs are dispatched\&. This may be used to avoid interleaving of output of shell services with the status output on the console\&.
+.RE
+.PP
+\fIRemainAfterExit=\fR
+.RS 4
+Takes a boolean value that specifies whether the service shall be considered active even when all its processes exited\&. Defaults to
+\fBno\fR\&.
+.RE
+.PP
+\fIGuessMainPID=\fR
+.RS 4
+Takes a boolean value that specifies whether systemd should try to guess the main PID of a service if it cannot be determined reliably\&. This option is ignored unless
+\fBType=forking\fR
+is set and
+\fBPIDFile=\fR
+is unset because for the other types or with an explicitly configured PID file the main PID is always known\&. The guessing algorithm might come to incorrect conclusions if a daemon consists of more than one process\&. If the main PID cannot be determined, failure detection and automatic restarting of a service will not work reliably\&. Defaults to
+\fByes\fR\&.
+.RE
+.PP
+\fIPIDFile=\fR
+.RS 4
+Takes an absolute file name pointing to the PID file of this daemon\&. Use of this option is recommended for services where
+\fIType=\fR
+is set to
+\fBforking\fR\&. systemd will read the PID of the main process of the daemon after start\-up of the service\&. systemd will not write to the file configured here\&.
+.RE
+.PP
+\fIBusName=\fR
+.RS 4
+Takes a D\-Bus bus name, that this service is reachable as\&. This option is mandatory for services where
+\fIType=\fR
+is set to
+\fBdbus\fR, but its use is otherwise recommended as well if the process takes a name on the D\-Bus bus\&.
+.RE
+.PP
+\fIExecStart=\fR
+.RS 4
+Commands with their arguments that are executed when this service is started\&. The first argument must be an absolute path name\&.
+.sp
+When
+\fIType\fR
+is not
+\fBoneshot\fR, only one command may be given\&. When
+\fIType=oneshot\fR
+is used, more than one command may be specified\&. Multiple command lines may be concatenated in a single directive, by separating them with semicolons (these semicolons must be passed as separate words)\&. Alternatively, this directive may be specified more than once with the same effect\&. However, the latter syntax is not recommended for compatibility with parsers suitable for XDG
+\&.desktop
+files\&. Lone semicolons may be escaped as
+"\e;"\&. If the empty string is assigned to this option, the list of commands to start is reset, prior assignments of this option will have no effect\&.
+.sp
+If more than one command is specified, the commands are invoked one by one sequentially in the order they appear in the unit file\&. If one of the commands fails (and is not prefixed with
+"\-"), other lines are not executed and the unit is considered failed\&.
+.sp
+Unless
+\fIType=forking\fR
+is set, the process started via this command line will be considered the main process of the daemon\&.
+.sp
+The command line accepts
+"%"
+specifiers as described in
+\fBsystemd.unit\fR(5)\&. Note that the first argument of the command line (i\&.e\&. the program to execute) may not include specifiers\&.
+.sp
+Basic environment variable substitution is supported\&. Use
+"${FOO}"
+as part of a word, or as a word of its own on the command line, in which case it will be replaced by the value of the environment variable including all whitespace it contains, resulting in a single argument\&. Use
+"$FOO"
+as a separate word on the command line, in which case it will be replaced by the value of the environment variable split up at whitespace, resulting in zero or more arguments\&. To pass literal dollar sign use
+"$$"\&. Note that the first argument (i\&.e\&. the program to execute) may not be a variable, since it must be a literal and absolute path name\&.
+.sp
+Optionally, if the absolute file name is prefixed with
+"@", the second token will be passed as
+"argv[0]"
+to the executed process, followed by the further arguments specified\&. If the absolute filename is prefixed with
+"\-", an exit code of the command normally considered a failure (i\&.e\&. non\-zero exit status or abnormal exit due to signal) is ignored and considered success\&. If both
+"\-"
+and
+"@"
+are used, they can appear in either order\&.
+.sp
+Note that this setting does not directly support shell command lines\&. If shell command lines are to be used, they need to be passed explicitly to a shell implementation of some kind\&. Example:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ExecStart=/bin/sh \-c \*(Aqdmesg | tac\*(Aq
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+For services run by a user instance of systemd the special environment variable
+\fI$MANAGERPID\fR
+is set to the PID of the systemd instance\&.
+.RE
+.PP
+\fIExecStartPre=\fR, \fIExecStartPost=\fR
+.RS 4
+Additional commands that are executed before or after the command in
+\fIExecStart=\fR, respectively\&. Syntax is the same as for
+\fIExecStart=\fR, except that multiple command lines are allowed and the commands are executed one after the other, serially\&.
+.sp
+If any of those commands (not prefixed with
+"\-") fail, the rest are not executed and the unit is considered failed\&.
+.RE
+.PP
+\fIExecReload=\fR
+.RS 4
+Commands to execute to trigger a configuration reload in the service\&. This argument takes multiple command lines, following the same scheme as described for
+\fIExecStart=\fR
+above\&. Use of this setting is optional\&. Specifier and environment variable substitution is supported here following the same scheme as for
+\fIExecStart=\fR\&.
+.sp
+One additional special environment variables is set: if known
+\fI$MAINPID\fR
+is set to the main process of the daemon, and may be used for command lines like the following:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+/bin/kill \-HUP $MAINPID
+.fi
+.if n \{\
+.RE
+.\}
+.RE
+.PP
+\fIExecStop=\fR
+.RS 4
+Commands to execute to stop the service started via
+\fIExecStart=\fR\&. This argument takes multiple command lines, following the same scheme as described for
+\fIExecStart=\fR
+above\&. Use of this setting is optional\&. All processes remaining for a service after the commands configured in this option are run are terminated according to the
+\fIKillMode=\fR
+setting (see
+\fBsystemd.kill\fR(5))\&. If this option is not specified, the process is terminated right\-away when service stop is requested\&. Specifier and environment variable substitution is supported (including
+\fI$MAINPID\fR, see above)\&.
+.RE
+.PP
+\fIExecStopPost=\fR
+.RS 4
+Additional commands that are executed after the service was stopped\&. This includes cases where the commands configured in
+\fIExecStop=\fR
+were used, where the service does not have any
+\fIExecStop=\fR
+defined, or where the service exited unexpectedly\&. This argument takes multiple command lines, following the same scheme as described for
+\fIExecStart\fR\&. Use of these settings is optional\&. Specifier and environment variable substitution is supported\&.
+.RE
+.PP
+\fIRestartSec=\fR
+.RS 4
+Configures the time to sleep before restarting a service (as configured with
+\fIRestart=\fR)\&. Takes a unit\-less value in seconds, or a time span value such as "5min 20s"\&. Defaults to 100ms\&.
+.RE
+.PP
+\fITimeoutStartSec=\fR
+.RS 4
+Configures the time to wait for start\-up\&. If a daemon service does not signal start\-up completion within the configured time, the service will be considered failed and be shut down again\&. Takes a unit\-less value in seconds, or a time span value such as "5min 20s"\&. Pass 0 to disable the timeout logic\&. Defaults to 90s, except when
+\fIType=oneshot\fR
+is used in which case the timeout is disabled by default\&.
+.RE
+.PP
+\fITimeoutStopSec=\fR
+.RS 4
+Configures the time to wait for stop\&. If a service is asked to stop but does not terminate in the specified time, it will be terminated forcibly via
+\fBSIGTERM\fR, and after another delay of this time with
+\fBSIGKILL\fR
+(See
+\fIKillMode=\fR
+in
+\fBsystemd.kill\fR(5))\&. Takes a unit\-less value in seconds, or a time span value such as "5min 20s"\&. Pass 0 to disable the timeout logic\&. Defaults to 90s\&.
+.RE
+.PP
+\fITimeoutSec=\fR
+.RS 4
+A shorthand for configuring both
+\fITimeoutStartSec=\fR
+and
+\fITimeoutStopSec=\fR
+to the specified value\&.
+.RE
+.PP
+\fIWatchdogSec=\fR
+.RS 4
+Configures the watchdog timeout for a service\&. The watchdog is activated when the start\-up is completed\&. The service must call
+\fBsd_notify\fR(3)
+regularly with "WATCHDOG=1" (i\&.e\&. the "keep\-alive ping")\&. If the time between two such calls is larger than the configured time, then the service is placed in a failure state\&. By setting
+\fIRestart=\fR
+to
+\fBon\-failure\fR
+or
+\fBalways\fR, the service will be automatically restarted\&. The time configured here will be passed to the executed service process in the
+\fIWATCHDOG_USEC=\fR
+environment variable\&. This allows daemons to automatically enable the keep\-alive pinging logic if watchdog support is enabled for the service\&. If this option is used,
+\fINotifyAccess=\fR
+(see below) should be set to open access to the notification socket provided by systemd\&. If
+\fINotifyAccess=\fR
+is not set, it will be implicitly set to
+\fBmain\fR\&. Defaults to 0, which disables this feature\&.
+.RE
+.PP
+\fIRestart=\fR
+.RS 4
+Configures whether the service shall be restarted when the service process exits, is killed, or a timeout is reached\&. The service process may be the main service process, but also one of the processes specified with
+\fIExecStartPre=\fR,
+\fIExecStartPost=\fR,
+\fIExecStopPre=\fR,
+\fIExecStopPost=\fR, or
+\fIExecReload=\fR\&. When the death of the process is a result of systemd operation (e\&.g\&. service stop or restart), the service will not be restarted\&. Timeouts include missing the watchdog "keep\-alive ping" deadline and a service start, reload, and stop operation timeouts\&.
+.sp
+Takes one of
+\fBno\fR,
+\fBon\-success\fR,
+\fBon\-failure\fR,
+\fBon\-watchdog\fR,
+\fBon\-abort\fR, or
+\fBalways\fR\&. If set to
+\fBno\fR
+(the default), the service will not be restarted\&. If set to
+\fBon\-success\fR, it will be restarted only when the service process exits cleanly\&. In this context, a clean exit means an exit code of 0, or one of the signals
+\fBSIGHUP\fR,
+\fBSIGINT\fR,
+\fBSIGTERM\fR, or
+\fBSIGPIPE\fR, and additionally, exit statuses and signals specified in
+\fISuccessExitStatus=\fR\&. If set to
+\fBon\-failure\fR, the service will be restarted when the process exits with an nonzero exit code, is terminated by a signal (including on core dump), when an operation (such as service reload) times out, and when the configured watchdog timeout is triggered\&. If set to
+\fBon\-abort\fR, the service will be restarted only if the service process exits due to an uncaught signal not specified as a clean exit status\&. If set to
+\fBon\-watchdog\fR, the service will be restarted only if the watchdog timeout for the service expires\&. If set to
+\fBalways\fR, the service will be restarted regardless whether it exited cleanly or not, got terminated abnormally by a signal or hit a timeout\&.
+.sp
+In addition to the above settings, the service will not be restarted if the exit code or signal is specified in
+\fIRestartPreventExitStatus=\fR
+(see below)\&.
+.RE
+.PP
+\fISuccessExitStatus=\fR
+.RS 4
+Takes a list of exit status definitions that when returned by the main service process will be considered successful termination, in addition to the normal successful exit code 0 and the signals
+\fBSIGHUP\fR,
+\fBSIGINT\fR,
+\fBSIGTERM\fR
+and
+\fBSIGPIPE\fR\&. Exit status definitions can either be numeric exit codes or termination signal names, separated by spaces\&. Example:
+"SuccessExitStatus=1 2 8 \fBSIGKILL\fR", ensures that exit codes 1, 2, 8 and the termination signal
+\fBSIGKILL\fR
+are considered clean service terminations\&. This option may appear more than once in which case the list of successful exit statuses is merged\&. If the empty string is assigned to this option, the list is reset, all prior assignments of this option will have no effect\&.
+.RE
+.PP
+\fIRestartPreventExitStatus=\fR
+.RS 4
+Takes a list of exit status definitions that when returned by the main service process will prevent automatic service restarts regardless of the restart setting configured with
+\fIRestart=\fR\&. Exit status definitions can either be numeric exit codes or termination signal names, and are separated by spaces\&. Defaults to the empty list, so that by default no exit status is excluded from the configured restart logic\&. Example:
+"RestartPreventExitStatus=1 6 SIGABRT", ensures that exit codes 1 and 6 and the termination signal SIGABRT will not result in automatic service restarting\&. This option may appear more than once in which case the list of restart preventing statuses is merged\&. If the empty string is assigned to this option, the list is reset, all prior assignments of this option will have no effect\&.
+.RE
+.PP
+\fIPermissionsStartOnly=\fR
+.RS 4
+Takes a boolean argument\&. If true, the permission related execution options as configured with
+\fIUser=\fR
+and similar options (see
+\fBsystemd.exec\fR(5)
+for more information) are only applied to the process started with
+\fIExecStart=\fR, and not to the various other
+\fIExecStartPre=\fR,
+\fIExecStartPost=\fR,
+\fIExecReload=\fR,
+\fIExecStop=\fR,
+\fIExecStopPost=\fR
+commands\&. If false, the setting is applied to all configured commands the same way\&. Defaults to false\&.
+.RE
+.PP
+\fIRootDirectoryStartOnly=\fR
+.RS 4
+Takes a boolean argument\&. If true, the root directory as configured with the
+\fIRootDirectory=\fR
+option (see
+\fBsystemd.exec\fR(5)
+for more information) is only applied to the process started with
+\fIExecStart=\fR, and not to the various other
+\fIExecStartPre=\fR,
+\fIExecStartPost=\fR,
+\fIExecReload=\fR,
+\fIExecStop=\fR,
+\fIExecStopPost=\fR
+commands\&. If false, the setting is applied to all configured commands the same way\&. Defaults to false\&.
+.RE
+.PP
+\fINonBlocking=\fR
+.RS 4
+Set O_NONBLOCK flag for all file descriptors passed via socket\-based activation\&. If true, all file descriptors >= 3 (i\&.e\&. all except STDIN/STDOUT/STDERR) will have the O_NONBLOCK flag set and hence are in non\-blocking mode\&. This option is only useful in conjunction with a socket unit, as described in
+\fBsystemd.socket\fR(5)\&. Defaults to false\&.
+.RE
+.PP
+\fINotifyAccess=\fR
+.RS 4
+Controls access to the service status notification socket, as accessible via the
+\fBsd_notify\fR(3)
+call\&. Takes one of
+\fBnone\fR
+(the default),
+\fBmain\fR
+or
+\fBall\fR\&. If
+\fBnone\fR, no daemon status updates are accepted from the service processes, all status update messages are ignored\&. If
+\fBmain\fR, only service updates sent from the main process of the service are accepted\&. If
+\fBall\fR, all services updates from all members of the service\*(Aqs control group are accepted\&. This option should be set to open access to the notification socket when using
+\fIType=notify\fR
+or
+\fIWatchdogSec=\fR
+(see above)\&. If those options are used but
+\fINotifyAccess=\fR
+is not configured, it will be implicitly set to
+\fBmain\fR\&.
+.RE
+.PP
+\fISockets=\fR
+.RS 4
+Specifies the name of the socket units this service shall inherit the sockets from when the service is started\&. Normally it should not be necessary to use this setting as all sockets whose unit shares the same name as the service (ignoring the different suffix of course) are passed to the spawned process\&.
+.sp
+Note that the same socket may be passed to multiple processes at the same time\&. Also note that a different service may be activated on incoming traffic than inherits the sockets\&. Or in other words: the
+\fIService=\fR
+setting of
+\&.socket
+units does not have to match the inverse of the
+\fISockets=\fR
+setting of the
+\&.service
+it refers to\&.
+.sp
+This option may appear more than once, in which case the list of socket units is merged\&. If the empty string is assigned to this option, the list of sockets is reset, all prior uses of this setting will have no effect\&.
+.RE
+.PP
+\fIStartLimitInterval=\fR, \fIStartLimitBurst=\fR
+.RS 4
+Configure service start rate limiting\&. By default, services which are started more often than 5 times within 10s are not permitted to start any more times until the 10s interval ends\&. With these two options, this rate limiting may be modified\&. Use
+\fIStartLimitInterval=\fR
+to configure the checking interval (defaults to 10s, set to 0 to disable any kind of rate limiting)\&. Use
+\fIStartLimitBurst=\fR
+to configure how many starts per interval are allowed (defaults to 5)\&. These configuration options are particularly useful in conjunction with
+\fIRestart=\fR, however apply to all kinds of starts (including manual), not just those triggered by the
+\fIRestart=\fR
+logic\&. Note that units which are configured for
+\fIRestart=\fR
+and which reach the start limit are not attempted to be restarted anymore, however they may still be restarted manually at a later point from which point on the restart logic is again activated\&. Note that
+\fBsystemctl reset\-failed\fR
+will cause the restart rate counter for a service to be flushed, which is useful if the administrator wants to manually start a service and the start limit interferes with that\&.
+.RE
+.PP
+\fIStartLimitAction=\fR
+.RS 4
+Configure the action to take if the rate limit configured with
+\fIStartLimitInterval=\fR
+and
+\fIStartLimitBurst=\fR
+is hit\&. Takes one of
+\fBnone\fR,
+\fBreboot\fR,
+\fBreboot\-force\fR
+or
+\fBreboot\-immediate\fR\&. If
+\fBnone\fR
+is set, hitting the rate limit will trigger no action besides that the start will not be permitted\&.
+\fBreboot\fR
+causes a reboot following the normal shutdown procedure (i\&.e\&. equivalent to
+\fBsystemctl reboot\fR),
+\fBreboot\-force\fR
+causes an forced reboot which will terminate all processes forcibly but should cause no dirty file systems on reboot (i\&.e\&. equivalent to
+\fBsystemctl reboot \-f\fR) and
+\fBreboot\-immediate\fR
+causes immediate execution of the
+\fBreboot\fR(2)
+system call, which might result in data loss\&. Defaults to
+\fBnone\fR\&.
+.RE
+.PP
+Check
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)
+for more settings\&.
+.SH "COMPATIBILITY OPTIONS"
+.PP
+The following options are also available in the
+"[Service]"
+section, but exist purely for compatibility reasons and should not be used in newly written service files\&.
+.PP
+\fISysVStartPriority=\fR
+.RS 4
+Set the SysV start priority to use to order this service in relation to SysV services lacking LSB headers\&. This option is only necessary to fix ordering in relation to legacy SysV services, that have no ordering information encoded in the script headers\&. As such it should only be used as temporary compatibility option, and not be used in new unit files\&. Almost always it is a better choice to add explicit ordering directives via
+\fIAfter=\fR
+or
+\fIBefore=\fR, instead\&. For more details see
+\fBsystemd.unit\fR(5)\&. If used, pass an integer value in the range 0\-99\&.
+.RE
+.PP
+\fIFsckPassNo=\fR
+.RS 4
+Set the fsck passno priority to use to order this service in relation to other file system checking services\&. This option is only necessary to fix ordering in relation to fsck jobs automatically created for all
+/etc/fstab
+entries with a value in the fs_passno column > 0\&. As such it should only be used as option for fsck services\&. Almost always it is a better choice to add explicit ordering directives via
+\fIAfter=\fR
+or
+\fIBefore=\fR, instead\&. For more details see
+\fBsystemd.unit\fR(5)\&. If used, pass an integer value in the same range as
+/etc/fstab\*(Aqs fs_passno column\&. See
+\fBfstab\fR(5)
+for details\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.exec\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.directives\fR(7)
+.SH "NOTES"
+.IP " 1." 4
+Incompatibilities with SysV
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Incompatibilities
+.RE
diff --git a/man/systemd.service.html b/man/systemd.service.html
index 635566aa6b..408ff03eac 100644
--- a/man/systemd.service.html
+++ b/man/systemd.service.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.service — Service unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code></p></div><div class="refsect1"><a name="idm259788122528"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.service"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.service — Service unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code></p></div><div class="refsect1"><a name="idm274700965504"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
<code class="filename">.service</code> encodes information
about a process controlled and supervised by
systemd.</p><p>This man page lists the configuration options
@@ -27,16 +27,19 @@
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
for the common options of all unit configuration
files. The common configuration items are configured
- in the generic <code class="literal">[Unit]</code> and
- <code class="literal">[Install]</code> sections. The service
+ in the generic "<code class="literal">[Unit]</code>" and
+ "<code class="literal">[Install]</code>" sections. The service
specific configuration options are configured in the
- <code class="literal">[Service]</code> section.</p><p>Additional options are listed in
+ "<code class="literal">[Service]</code>" section.</p><p>Additional options are listed in
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>,
which define the execution environment the commands
are executed in, and in
- <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
+ <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
which define the way the processes of the service are
- terminated.</p><p>Unless <code class="varname">DefaultDependencies=</code>
+ terminated, and in
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ which configure resource control settings for the
+ processes of the service.</p><p>Unless <code class="varname">DefaultDependencies=</code>
is set to <code class="option">false</code>, service units will
implicitly have dependencies of type
<code class="varname">Requires=</code> and
@@ -59,8 +62,8 @@
comprehensive but not 100%. For details about the
incompatibilities see the <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Incompatibilities" target="_top">Incompatibilities
with SysV</a> document.
- </p></div><div class="refsect1"><a name="idm259787988448"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Service files must include a
- <code class="literal">[Service]</code> section, which carries
+ </p></div><div class="refsect1"><a name="idm274704848656"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Service files must include a
+ "<code class="literal">[Service]</code>" section, which carries
information about the service and the process it
supervises. A number of options that may be used in
this section are shared with other unit types. These
@@ -68,7 +71,7 @@
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
and
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>. The
- options specific to the <code class="literal">[Service]</code>
+ options specific to the "<code class="literal">[Service]</code>"
section of service units are the following:</p><div class="variablelist"><dl class="variablelist"><dt id="Type="><span class="term"><code class="varname">Type=</code></span><a class="headerlink" title="Permalink to this term" href="#Type=">¶</a></dt><dd><p>Configures the process
start-up type for this service
unit. One of <code class="option">simple</code>,
@@ -79,26 +82,26 @@
<code class="option">idle</code>.</p><p>If set to
<code class="option">simple</code> (the default
value if <code class="varname">BusName=</code>
- is not specified) it is expected that
+ is not specified), it is expected that
the process configured with
<code class="varname">ExecStart=</code> is the
main process of the service. In this
mode, if the process offers
functionality to other processes on
- the system its communication channels
+ the system, its communication channels
should be installed before the daemon
is started up (e.g. sockets set up by
systemd, via socket activation), as
systemd will immediately proceed
starting follow-up units.</p><p>If set to
- <code class="option">forking</code> it is
+ <code class="option">forking</code>, it is
expected that the process configured
with <code class="varname">ExecStart=</code>
will call <code class="function">fork()</code>
as part of its start-up. The parent process is
expected to exit when start-up is
complete and all communication
- channels set up. The child continues
+ channels are set up. The child continues
to run as the main daemon
process. This is the behavior of
traditional UNIX daemons. If this
@@ -141,14 +144,18 @@
starting up. systemd will proceed
starting follow-up units after this
notification message has been sent. If
- this option is used
+ this option is used,
<code class="varname">NotifyAccess=</code> (see
below) should be set to open access to
the notification socket provided by
systemd. If
<code class="varname">NotifyAccess=</code> is
not set, it will be implicitly set to
- <code class="option">main</code>.</p><p>Behavior of
+ <code class="option">main</code>. Note that
+ currently
+ <code class="varname">Type=</code><code class="option">notify</code>
+ will not work if used in combination with
+ <code class="varname">PrivateNetwork=</code><code class="option">yes</code>.</p><p>Behavior of
<code class="option">idle</code> is very similar
to <code class="option">simple</code>, however
actual execution of the service
@@ -173,7 +180,7 @@
guessing algorithm might come to
incorrect conclusions if a daemon
consists of more than one process. If
- the main PID cannot be determined
+ the main PID cannot be determined,
failure detection and automatic
restarting of a service will not work
reliably. Defaults to
@@ -215,8 +222,8 @@
suitable for XDG
<code class="filename">.desktop</code> files.
Lone semicolons may be escaped as
- '<code class="literal">\;</code>'. If the empty
- string is assigned to this option the
+ "<code class="literal">\;</code>". If the empty
+ string is assigned to this option, the
list of commands to start is reset,
prior assignments of this option will
have no effect.</p><p>If more than one command is
@@ -224,55 +231,56 @@
one by one sequentially in the order
they appear in the unit file. If one
of the commands fails (and is not
- prefixed with '<code class="literal">-</code>'),
+ prefixed with "<code class="literal">-</code>"),
other lines are not executed and the
unit is considered failed.</p><p>Unless
<code class="varname">Type=forking</code> is
set, the process started via this
command line will be considered the
main process of the daemon.</p><p>The command line accepts
- '<code class="literal">%</code>' specifiers as
+ "<code class="literal">%</code>" specifiers as
described in
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>. Note
that the first argument of the command
line (i.e. the program to execute) may
not include specifiers.</p><p>Basic environment variable
substitution is supported. Use
- <code class="literal">${FOO}</code> as part of a
+ "<code class="literal">${FOO}</code>" as part of a
word, or as a word of its own on the
command line, in which case it will be
replaced by the value of the
environment variable including all
whitespace it contains, resulting in a
single argument. Use
- <code class="literal">$FOO</code> as a separate
+ "<code class="literal">$FOO</code>" as a separate
word on the command line, in which
case it will be replaced by the value
of the environment variable split up
at whitespace, resulting in zero or
- more arguments. Note that the first
+ more arguments. To pass literal dollar sign
+ use "<code class="literal">$$</code>". Note that the first
argument (i.e. the program to execute)
may not be a variable, since it must
be a literal and absolute path
name.</p><p>Optionally, if the absolute file
name is prefixed with
- '<code class="literal">@</code>', the second token
+ "<code class="literal">@</code>", the second token
will be passed as
- <code class="literal">argv[0]</code> to the
+ "<code class="literal">argv[0]</code>" to the
executed process, followed by the
further arguments specified. If the
- absolute file name is prefixed with
- '<code class="literal">-</code>' an exit code of
+ absolute filename is prefixed with
+ "<code class="literal">-</code>", an exit code of
the command normally considered a
failure (i.e. non-zero exit status or
abnormal exit due to signal) is ignored
and considered success. If both
- '<code class="literal">-</code>' and
- '<code class="literal">@</code>' are used they
+ "<code class="literal">-</code>" and
+ "<code class="literal">@</code>" are used, they
can appear in either order.</p><p>Note that this setting does not
directly support shell command
lines. If shell command lines are to
- be used they need to be passed
+ be used, they need to be passed
explicitly to a shell implementation
of some kind. Example:</p><pre class="programlisting">ExecStart=/bin/sh -c 'dmesg | tac'
</pre><p>For services run by a user
@@ -289,7 +297,7 @@
that multiple command lines are allowed
and the commands are executed one
after the other, serially.</p><p>If any of those commands (not
- prefixed with '<code class="literal">-</code>')
+ prefixed with "<code class="literal">-</code>")
fail, the rest are not executed and
the unit is considered failed.</p></dd><dt id="ExecReload="><span class="term"><code class="varname">ExecReload=</code></span><a class="headerlink" title="Permalink to this term" href="#ExecReload=">¶</a></dt><dd><p>Commands to execute to
trigger a configuration reload in the
@@ -320,7 +328,7 @@
<code class="varname">KillMode=</code> setting
(see
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>). If
- this option is not specified the
+ this option is not specified, the
process is terminated right-away when
service stop is requested. Specifier
and environment variable substitution
@@ -331,7 +339,7 @@
was stopped. This includes cases where
the commands configured in
<code class="varname">ExecStop=</code> were used,
- where the service doesn't have any
+ where the service does not have any
<code class="varname">ExecStop=</code> defined, or
where the service exited unexpectedly. This
argument takes multiple command lines,
@@ -365,9 +373,9 @@
wait for stop. If a service is asked
to stop but does not terminate in the
specified time, it will be terminated
- forcibly via SIGTERM, and after
+ forcibly via <code class="constant">SIGTERM</code>, and after
another delay of this time with
- SIGKILL (See
+ <code class="constant">SIGKILL</code> (See
<code class="varname">KillMode=</code>
in <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>).
Takes a unit-less value in seconds, or a
@@ -386,11 +394,11 @@
regularly with "WATCHDOG=1" (i.e. the
"keep-alive ping"). If the time
between two such calls is larger than
- the configured time then the service
+ the configured time, then the service
is placed in a failure state. By
setting <code class="varname">Restart=</code> to
<code class="option">on-failure</code> or
- <code class="option">always</code> the service
+ <code class="option">always</code>, the service
will be automatically restarted. The
time configured here will be passed to
the executed service process in the
@@ -399,7 +407,7 @@
daemons to automatically enable the
keep-alive pinging logic if watchdog
support is enabled for the service. If
- this option is used
+ this option is used,
<code class="varname">NotifyAccess=</code> (see
below) should be set to open access to
the notification socket provided by
@@ -430,19 +438,20 @@
<code class="option">no</code>,
<code class="option">on-success</code>,
<code class="option">on-failure</code>,
+ <code class="option">on-watchdog</code>,
<code class="option">on-abort</code>, or
<code class="option">always</code>. If set to
- <code class="option">no</code> (the default) the
+ <code class="option">no</code> (the default), the
service will not be restarted. If set to
- <code class="option">on-success</code> it will be
+ <code class="option">on-success</code>, it will be
restarted only when the service process
exits cleanly.
In this context, a clean exit means
an exit code of 0, or one of the signals
- SIGHUP, SIGINT, SIGTERM, or SIGPIPE, and
+ <code class="constant">SIGHUP</code>, <code class="constant">SIGINT</code>, <code class="constant">SIGTERM</code>, or <code class="constant">SIGPIPE</code>, and
additionally, exit statuses and signals
specified in <code class="varname">SuccessExitStatus=</code>.
- If set to <code class="option">on-failure</code>
+ If set to <code class="option">on-failure</code>,
the service will be restarted when the
process exits with an nonzero exit code,
is terminated by a signal (including on
@@ -450,13 +459,17 @@
service reload) times out, and when the
configured watchdog timeout is triggered.
If set to
- <code class="option">on-abort</code> the service
+ <code class="option">on-abort</code>, the service
will be restarted only if the service
process exits due to an uncaught
signal not specified as a clean exit
status.
If set to
- <code class="option">always</code> the service
+ <code class="option">on-watchdog</code>, the service
+ will be restarted only if the watchdog
+ timeout for the service expires.
+ If set to
+ <code class="option">always</code>, the service
will be restarted regardless whether
it exited cleanly or not, got
terminated abnormally by a signal or
@@ -469,20 +482,20 @@
by the main service process will be
considered successful termination, in
addition to the normal successful exit
- code 0 and the signals SIGHUP, SIGINT,
- SIGTERM and SIGPIPE. Exit status
+ code 0 and the signals <code class="constant">SIGHUP</code>, <code class="constant">SIGINT</code>,
+ <code class="constant">SIGTERM</code> and <code class="constant">SIGPIPE</code>. Exit status
definitions can either be numeric exit
codes or termination signal names,
separated by spaces. Example:
"<code class="literal">SuccessExitStatus=1 2 8
- SIGKILL</code>", ensures that exit
+ <code class="constant">SIGKILL</code></code>", ensures that exit
codes 1, 2, 8 and the termination
- signal SIGKILL are considered clean
+ signal <code class="constant">SIGKILL</code> are considered clean
service terminations. This option may
appear more than once in which case
the list of successful exit statuses
is merged. If the empty string is
- assigned to this option the list is
+ assigned to this option, the list is
reset, all prior assignments of this
option will have no
effect.</p></dd><dt id="RestartPreventExitStatus="><span class="term"><code class="varname">RestartPreventExitStatus=</code></span><a class="headerlink" title="Permalink to this term" href="#RestartPreventExitStatus=">¶</a></dt><dd><p>Takes a list of exit
@@ -507,7 +520,7 @@
option may appear more than once in
which case the list of restart preventing
statuses is merged. If the empty
- string is assigned to this option the
+ string is assigned to this option, the
list is reset, all prior assignments
of this option will have no
effect.</p></dd><dt id="PermissionsStartOnly="><span class="term"><code class="varname">PermissionsStartOnly=</code></span><a class="headerlink" title="Permalink to this term" href="#PermissionsStartOnly=">¶</a></dt><dd><p>Takes a boolean
@@ -565,13 +578,13 @@
<code class="option">none</code> (the default),
<code class="option">main</code> or
<code class="option">all</code>. If
- <code class="option">none</code> no daemon status
+ <code class="option">none</code>, no daemon status
updates are accepted from the service
processes, all status update messages
- are ignored. If <code class="option">main</code>
+ are ignored. If <code class="option">main</code>,
only service updates sent from the
main process of the service are
- accepted. If <code class="option">all</code> all
+ accepted. If <code class="option">all</code>, all
services updates from all members of
the service's control group are
accepted. This option should be set to
@@ -580,8 +593,8 @@
<code class="varname">Type=notify</code> or
<code class="varname">WatchdogSec=</code> (see
above). If those options are used but
- <code class="varname">NotifyAccess=</code> not
- configured it will be implicitly set
+ <code class="varname">NotifyAccess=</code> is not
+ configured, it will be implicitly set
to
<code class="option">main</code>.</p></dd><dt id="Sockets="><span class="term"><code class="varname">Sockets=</code></span><a class="headerlink" title="Permalink to this term" href="#Sockets=">¶</a></dt><dd><p>Specifies the name of
the socket units this service shall
@@ -600,23 +613,23 @@
in other words: the
<code class="varname">Service=</code> setting of
<code class="filename">.socket</code> units
- doesn't have to match the inverse of
+ does not have to match the inverse of
the <code class="varname">Sockets=</code>
setting of the
<code class="filename">.service</code> it
refers to.</p><p>This option may appear more than
once, in which case the list of socket
units is merged. If the empty string
- is assigned to this option the list of
+ is assigned to this option, the list of
sockets is reset, all prior uses of
this setting will have no
effect.</p></dd><dt id="StartLimitInterval="><span class="term"><code class="varname">StartLimitInterval=</code>, </span><span class="term"><code class="varname">StartLimitBurst=</code></span><a class="headerlink" title="Permalink to this term" href="#StartLimitInterval=">¶</a></dt><dd><p>Configure service
- start rate limiting. By default
+ start rate limiting. By default,
services which are started more often
than 5 times within 10s are not
permitted to start any more times
until the 10s interval ends. With
- these two options this rate limiting
+ these two options, this rate limiting
may be modified. Use
<code class="varname">StartLimitInterval=</code>
to configure the checking interval
@@ -681,8 +694,8 @@
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
and
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
- for more settings.</p></div><div class="refsect1"><a name="idm259783100944"></a><h2 id="Compatibility Options">Compatibility Options<a class="headerlink" title="Permalink to this headline" href="#Compatibility%20Options">¶</a></h2><p>The following options are also available in the
- <code class="literal">[Service]</code> section, but exist purely
+ for more settings.</p></div><div class="refsect1"><a name="idm274699763520"></a><h2 id="Compatibility Options">Compatibility Options<a class="headerlink" title="Permalink to this headline" href="#Compatibility%20Options">¶</a></h2><p>The following options are also available in the
+ "<code class="literal">[Service]</code>" section, but exist purely
for compatibility reasons and should not be used in
newly written service files.</p><div class="variablelist"><dl class="variablelist"><dt id="SysVStartPriority="><span class="term"><code class="varname">SysVStartPriority=</code></span><a class="headerlink" title="Permalink to this term" href="#SysVStartPriority=">¶</a></dt><dd><p>Set the SysV start
priority to use to order this service
@@ -724,11 +737,12 @@
<code class="filename">/etc/fstab</code>'s
fs_passno column. See
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
- for details.</p></dd></dl></div></div><div class="refsect1"><a name="idm259783088144"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ for details.</p></dd></dl></div></div><div class="refsect1"><a name="idm274699749792"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index 0454cf292e..5e1ddf7188 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -73,9 +73,12 @@
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
which define the execution environment the commands
are executed in, and in
- <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
which define the way the processes of the service are
- terminated.</para>
+ terminated, and in
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which configure resource control settings for the
+ processes of the service.</para>
<para>Unless <varname>DefaultDependencies=</varname>
is set to <option>false</option>, service units will
@@ -137,13 +140,13 @@
<para>If set to
<option>simple</option> (the default
value if <varname>BusName=</varname>
- is not specified) it is expected that
+ is not specified), it is expected that
the process configured with
<varname>ExecStart=</varname> is the
main process of the service. In this
mode, if the process offers
functionality to other processes on
- the system its communication channels
+ the system, its communication channels
should be installed before the daemon
is started up (e.g. sockets set up by
systemd, via socket activation), as
@@ -151,14 +154,14 @@
starting follow-up units.</para>
<para>If set to
- <option>forking</option> it is
+ <option>forking</option>, it is
expected that the process configured
with <varname>ExecStart=</varname>
will call <function>fork()</function>
as part of its start-up. The parent process is
expected to exit when start-up is
complete and all communication
- channels set up. The child continues
+ channels are set up. The child continues
to run as the main daemon
process. This is the behavior of
traditional UNIX daemons. If this
@@ -207,14 +210,18 @@
starting up. systemd will proceed
starting follow-up units after this
notification message has been sent. If
- this option is used
+ this option is used,
<varname>NotifyAccess=</varname> (see
below) should be set to open access to
the notification socket provided by
systemd. If
<varname>NotifyAccess=</varname> is
not set, it will be implicitly set to
- <option>main</option>.</para>
+ <option>main</option>. Note that
+ currently
+ <varname>Type=</varname><option>notify</option>
+ will not work if used in combination with
+ <varname>PrivateNetwork=</varname><option>yes</option>.</para>
<para>Behavior of
<option>idle</option> is very similar
@@ -255,7 +262,7 @@
guessing algorithm might come to
incorrect conclusions if a daemon
consists of more than one process. If
- the main PID cannot be determined
+ the main PID cannot be determined,
failure detection and automatic
restarting of a service will not work
reliably. Defaults to
@@ -319,8 +326,8 @@
suitable for XDG
<filename>.desktop</filename> files.
Lone semicolons may be escaped as
- '<literal>\;</literal>'. If the empty
- string is assigned to this option the
+ <literal>\;</literal>. If the empty
+ string is assigned to this option, the
list of commands to start is reset,
prior assignments of this option will
have no effect.</para>
@@ -330,7 +337,7 @@
one by one sequentially in the order
they appear in the unit file. If one
of the commands fails (and is not
- prefixed with '<literal>-</literal>'),
+ prefixed with <literal>-</literal>),
other lines are not executed and the
unit is considered failed.</para>
@@ -341,7 +348,7 @@
main process of the daemon.</para>
<para>The command line accepts
- '<literal>%</literal>' specifiers as
+ <literal>%</literal> specifiers as
described in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note
that the first argument of the command
@@ -362,7 +369,8 @@
case it will be replaced by the value
of the environment variable split up
at whitespace, resulting in zero or
- more arguments. Note that the first
+ more arguments. To pass literal dollar sign
+ use <literal>$$</literal>. Note that the first
argument (i.e. the program to execute)
may not be a variable, since it must
be a literal and absolute path
@@ -370,25 +378,25 @@
<para>Optionally, if the absolute file
name is prefixed with
- '<literal>@</literal>', the second token
+ <literal>@</literal>, the second token
will be passed as
<literal>argv[0]</literal> to the
executed process, followed by the
further arguments specified. If the
- absolute file name is prefixed with
- '<literal>-</literal>' an exit code of
+ absolute filename is prefixed with
+ <literal>-</literal>, an exit code of
the command normally considered a
failure (i.e. non-zero exit status or
abnormal exit due to signal) is ignored
and considered success. If both
- '<literal>-</literal>' and
- '<literal>@</literal>' are used they
+ <literal>-</literal> and
+ <literal>@</literal> are used, they
can appear in either order.</para>
<para>Note that this setting does not
directly support shell command
lines. If shell command lines are to
- be used they need to be passed
+ be used, they need to be passed
explicitly to a shell implementation
of some kind. Example:</para>
<programlisting>ExecStart=/bin/sh -c 'dmesg | tac'
@@ -417,7 +425,7 @@
after the other, serially.</para>
<para>If any of those commands (not
- prefixed with '<literal>-</literal>')
+ prefixed with <literal>-</literal>)
fail, the rest are not executed and
the unit is considered failed.</para>
</listitem>
@@ -464,7 +472,7 @@
<varname>KillMode=</varname> setting
(see
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>). If
- this option is not specified the
+ this option is not specified, the
process is terminated right-away when
service stop is requested. Specifier
and environment variable substitution
@@ -480,7 +488,7 @@
was stopped. This includes cases where
the commands configured in
<varname>ExecStop=</varname> were used,
- where the service doesn't have any
+ where the service does not have any
<varname>ExecStop=</varname> defined, or
where the service exited unexpectedly. This
argument takes multiple command lines,
@@ -529,9 +537,9 @@
wait for stop. If a service is asked
to stop but does not terminate in the
specified time, it will be terminated
- forcibly via SIGTERM, and after
+ forcibly via <constant>SIGTERM</constant>, and after
another delay of this time with
- SIGKILL (See
+ <constant>SIGKILL</constant> (See
<varname>KillMode=</varname>
in <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
Takes a unit-less value in seconds, or a
@@ -560,11 +568,11 @@
regularly with "WATCHDOG=1" (i.e. the
"keep-alive ping"). If the time
between two such calls is larger than
- the configured time then the service
+ the configured time, then the service
is placed in a failure state. By
setting <varname>Restart=</varname> to
<option>on-failure</option> or
- <option>always</option> the service
+ <option>always</option>, the service
will be automatically restarted. The
time configured here will be passed to
the executed service process in the
@@ -573,7 +581,7 @@
daemons to automatically enable the
keep-alive pinging logic if watchdog
support is enabled for the service. If
- this option is used
+ this option is used,
<varname>NotifyAccess=</varname> (see
below) should be set to open access to
the notification socket provided by
@@ -611,19 +619,20 @@
<option>no</option>,
<option>on-success</option>,
<option>on-failure</option>,
+ <option>on-watchdog</option>,
<option>on-abort</option>, or
<option>always</option>. If set to
- <option>no</option> (the default) the
+ <option>no</option> (the default), the
service will not be restarted. If set to
- <option>on-success</option> it will be
+ <option>on-success</option>, it will be
restarted only when the service process
exits cleanly.
In this context, a clean exit means
an exit code of 0, or one of the signals
- SIGHUP, SIGINT, SIGTERM, or SIGPIPE, and
+ <constant>SIGHUP</constant>, <constant>SIGINT</constant>, <constant>SIGTERM</constant>, or <constant>SIGPIPE</constant>, and
additionally, exit statuses and signals
specified in <varname>SuccessExitStatus=</varname>.
- If set to <option>on-failure</option>
+ If set to <option>on-failure</option>,
the service will be restarted when the
process exits with an nonzero exit code,
is terminated by a signal (including on
@@ -631,13 +640,17 @@
service reload) times out, and when the
configured watchdog timeout is triggered.
If set to
- <option>on-abort</option> the service
+ <option>on-abort</option>, the service
will be restarted only if the service
process exits due to an uncaught
signal not specified as a clean exit
status.
If set to
- <option>always</option> the service
+ <option>on-watchdog</option>, the service
+ will be restarted only if the watchdog
+ timeout for the service expires.
+ If set to
+ <option>always</option>, the service
will be restarted regardless whether
it exited cleanly or not, got
terminated abnormally by a signal or
@@ -657,20 +670,20 @@
by the main service process will be
considered successful termination, in
addition to the normal successful exit
- code 0 and the signals SIGHUP, SIGINT,
- SIGTERM and SIGPIPE. Exit status
+ code 0 and the signals <constant>SIGHUP</constant>, <constant>SIGINT</constant>,
+ <constant>SIGTERM</constant> and <constant>SIGPIPE</constant>. Exit status
definitions can either be numeric exit
codes or termination signal names,
separated by spaces. Example:
- "<literal>SuccessExitStatus=1 2 8
- SIGKILL</literal>", ensures that exit
+ <literal>SuccessExitStatus=1 2 8
+ <constant>SIGKILL</constant></literal>, ensures that exit
codes 1, 2, 8 and the termination
- signal SIGKILL are considered clean
+ signal <constant>SIGKILL</constant> are considered clean
service terminations. This option may
appear more than once in which case
the list of successful exit statuses
is merged. If the empty string is
- assigned to this option the list is
+ assigned to this option, the list is
reset, all prior assignments of this
option will have no
effect.</para></listitem>
@@ -692,15 +705,15 @@
that by default no exit status is
excluded from the configured restart
logic. Example:
- "<literal>RestartPreventExitStatus=1 6
- SIGABRT</literal>", ensures that exit
+ <literal>RestartPreventExitStatus=1 6
+ SIGABRT</literal>, ensures that exit
codes 1 and 6 and the termination
signal SIGABRT will not result in
automatic service restarting. This
option may appear more than once in
which case the list of restart preventing
statuses is merged. If the empty
- string is assigned to this option the
+ string is assigned to this option, the
list is reset, all prior assignments
of this option will have no
effect.</para></listitem>
@@ -778,13 +791,13 @@
<option>none</option> (the default),
<option>main</option> or
<option>all</option>. If
- <option>none</option> no daemon status
+ <option>none</option>, no daemon status
updates are accepted from the service
processes, all status update messages
- are ignored. If <option>main</option>
+ are ignored. If <option>main</option>,
only service updates sent from the
main process of the service are
- accepted. If <option>all</option> all
+ accepted. If <option>all</option>, all
services updates from all members of
the service's control group are
accepted. This option should be set to
@@ -793,8 +806,8 @@
<varname>Type=notify</varname> or
<varname>WatchdogSec=</varname> (see
above). If those options are used but
- <varname>NotifyAccess=</varname> not
- configured it will be implicitly set
+ <varname>NotifyAccess=</varname> is not
+ configured, it will be implicitly set
to
<option>main</option>.</para></listitem>
</varlistentry>
@@ -820,7 +833,7 @@
in other words: the
<varname>Service=</varname> setting of
<filename>.socket</filename> units
- doesn't have to match the inverse of
+ does not have to match the inverse of
the <varname>Sockets=</varname>
setting of the
<filename>.service</filename> it
@@ -829,7 +842,7 @@
<para>This option may appear more than
once, in which case the list of socket
units is merged. If the empty string
- is assigned to this option the list of
+ is assigned to this option, the list of
sockets is reset, all prior uses of
this setting will have no
effect.</para></listitem>
@@ -840,12 +853,12 @@
<term><varname>StartLimitBurst=</varname></term>
<listitem><para>Configure service
- start rate limiting. By default
+ start rate limiting. By default,
services which are started more often
than 5 times within 10s are not
permitted to start any more times
until the 10s interval ends. With
- these two options this rate limiting
+ these two options, this rate limiting
may be modified. Use
<varname>StartLimitInterval=</varname>
to configure the checking interval
@@ -994,6 +1007,7 @@
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
</para>
diff --git a/man/systemd.slice.5 b/man/systemd.slice.5
new file mode 100644
index 0000000000..3959257827
--- /dev/null
+++ b/man/systemd.slice.5
@@ -0,0 +1,71 @@
+'\" t
+.TH "SYSTEMD\&.SLICE" "5" "" "systemd 208" "systemd.slice"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.slice \- Slice unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIslice\fR\&.slice
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.slice"
+encodes information about a slice which is a concept for hierarchially managing resources of a group of processes\&. This management is performed by creating a node in the Linux Control Group (cgroup) tree\&. Units that manage processes (primarilly scope and service units) may be assigned to a specific slice\&. For each slice, certain resource limits may the be set that apply to all processes of all units contained in that slice\&. Slices are organized hierarchially in a tree\&. The name of the slice encodes the location in the tree\&. The name consists of a dash\-separated series of names, which describes the path to the slice from the root slice\&. The root slice is named,
+\-\&.slice\&. Example:
+foo\-bar\&.slice
+is a slice that is located within
+foo\&.slice, which in turn is located in the root slice
+\-\&.slice\&.
+.PP
+By default, service and scope units are placed in
+system\&.slice, virtual machines and containers registered with
+\fBsystemd-machined\fR(1)
+are found in
+machine\&.slice, and user sessions handled by
+\fBsystemd-logind\fR(1)
+in
+user\&.slice\&. See
+\fBsystemd.special\fR(5)
+for more information\&.
+.PP
+See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The slice specific configuration options are configured in the [Slice] section\&. Currently, only generic resource control settings as described in
+\fBsystemd.resource-control\fR(7)
+are allowed\&.
+.PP
+Unless
+\fIDefaultDependencies=false\fR
+is used, slice units will implicitly have dependencies of type
+\fIConflicts=\fR
+and
+\fIBefore=\fR
+on
+shutdown\&.target\&. These ensure that slice units are removed prior to system shutdown\&. Only slice units involved with early boot or late system shutdown should disable this option\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.scope\fR(5),
+\fBsystemd.special\fR(7),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.slice.html b/man/systemd.slice.html
new file mode 100644
index 0000000000..e40cfa310c
--- /dev/null
+++ b/man/systemd.slice.html
@@ -0,0 +1,72 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>systemd.slice</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><style>
+ a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+ visibility: hidden;
+ }
+
+ a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+ }
+
+ h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
+ visibility: visible;
+ }
+ </style><a href="index.html">Index </a>·
+ <a href="systemd.directives.html">Directives </a>·
+ <a href="../python-systemd/index.html">Python </a>·
+ <a href="../libudev/index.html">libudev </a>·
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.slice"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.slice — Slice unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>slice</code></em>.slice</code></p></div><div class="refsect1"><a name="idm274685835792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.slice</code>" encodes information about a slice which
+ is a concept for hierarchially managing resources of a group of
+ processes. This management is performed by creating a node in the
+ Linux Control Group (cgroup) tree. Units that manage processes
+ (primarilly scope and service units) may be assigned to a specific
+ slice. For each slice, certain resource limits may the be set that
+ apply to all processes of all units contained in that
+ slice. Slices are organized hierarchially in a tree. The name of
+ the slice encodes the location in the tree. The name consists of a
+ dash-separated series of names, which describes the path to the
+ slice from the root slice. The root slice is named,
+ <code class="filename">-.slice</code>. Example:
+ <code class="filename">foo-bar.slice</code> is a slice that is located
+ within <code class="filename">foo.slice</code>, which in turn is located in
+ the root slice <code class="filename">-.slice</code>.
+ </p><p>By default, service and scope units are placed in
+ <code class="filename">system.slice</code>, virtual machines and containers
+ registered with
+ <a href="systemd-machined.html"><span class="citerefentry"><span class="refentrytitle">systemd-machined</span>(1)</span></a>
+ are found in <code class="filename">machine.slice</code>, and user sessions
+ handled by
+ <a href="systemd-logind.html"><span class="citerefentry"><span class="refentrytitle">systemd-logind</span>(1)</span></a>
+ in <code class="filename">user.slice</code>. See
+ <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(5)</span></a>
+ for more information.</p><p>See
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>
+ for the common options of all unit configuration
+ files. The common configuration items are configured
+ in the generic [Unit] and [Install] sections. The
+ slice specific configuration options are configured in
+ the [Slice] section. Currently, only generic resource control settings
+ as described in
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(7)</span></a> are allowed.
+ </p><p>Unless <code class="varname">DefaultDependencies=false</code>
+ is used, slice units will implicitly have dependencies of
+ type <code class="varname">Conflicts=</code> and
+ <code class="varname">Before=</code> on
+ <code class="filename">shutdown.target</code>. These ensure
+ that slice units are removed prior to system
+ shutdown. Only slice units involved with early boot or
+ late system shutdown should disable this option.
+ </p></div><div class="refsect1"><a name="idm274689718688"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ <a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ <a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>,
+ <a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
+ </p></div></div></body></html>
diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml
new file mode 100644
index 0000000000..4d27ddf890
--- /dev/null
+++ b/man/systemd.slice.xml
@@ -0,0 +1,121 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+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.
+
+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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="systemd.slice">
+ <refentryinfo>
+ <title>systemd.slice</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>systemd.slice</refentrytitle>
+ <manvolnum>5</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>systemd.slice</refname>
+ <refpurpose>Slice unit configuration</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename><replaceable>slice</replaceable>.slice</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>A unit configuration file whose name ends in
+ <literal>.slice</literal> encodes information about a slice which
+ is a concept for hierarchially managing resources of a group of
+ processes. This management is performed by creating a node in the
+ Linux Control Group (cgroup) tree. Units that manage processes
+ (primarilly scope and service units) may be assigned to a specific
+ slice. For each slice, certain resource limits may the be set that
+ apply to all processes of all units contained in that
+ slice. Slices are organized hierarchially in a tree. The name of
+ the slice encodes the location in the tree. The name consists of a
+ dash-separated series of names, which describes the path to the
+ slice from the root slice. The root slice is named,
+ <filename>-.slice</filename>. Example:
+ <filename>foo-bar.slice</filename> is a slice that is located
+ within <filename>foo.slice</filename>, which in turn is located in
+ the root slice <filename>-.slice</filename>.
+ </para>
+
+ <para>By default, service and scope units are placed in
+ <filename>system.slice</filename>, virtual machines and containers
+ registered with
+ <citerefentry><refentrytitle>systemd-machined</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ are found in <filename>machine.slice</filename>, and user sessions
+ handled by
+ <citerefentry><refentrytitle>systemd-logind</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ in <filename>user.slice</filename>. See
+ <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for more information.</para>
+
+ <para>See
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for the common options of all unit configuration
+ files. The common configuration items are configured
+ in the generic [Unit] and [Install] sections. The
+ slice specific configuration options are configured in
+ the [Slice] section. Currently, only generic resource control settings
+ as described in
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>7</manvolnum></citerefentry> are allowed.
+ </para>
+
+ <para>Unless <varname>DefaultDependencies=false</varname>
+ is used, slice units will implicitly have dependencies of
+ type <varname>Conflicts=</varname> and
+ <varname>Before=</varname> on
+ <filename>shutdown.target</filename>. These ensure
+ that slice units are removed prior to system
+ shutdown. Only slice units involved with early boot or
+ late system shutdown should disable this option.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/systemd.snapshot.5 b/man/systemd.snapshot.5
new file mode 100644
index 0000000000..f30ee04bde
--- /dev/null
+++ b/man/systemd.snapshot.5
@@ -0,0 +1,44 @@
+'\" t
+.TH "SYSTEMD\&.SNAPSHOT" "5" "" "systemd 208" "systemd.snapshot"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.snapshot \- Snapshot unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIsnapshot\fR\&.snapshot
+.SH "DESCRIPTION"
+.PP
+Snapshot units are not configured via unit configuration files\&. Nonetheless they are named similar to filenames\&. A unit whose name ends in
+"\&.snapshot"
+refers to a dynamic snapshot of the systemd runtime state\&.
+.PP
+Snapshots are not configured on disk but created dynamically via
+\fBsystemctl snapshot\fR
+(see
+\fBsystemctl\fR(8)
+for details) or an equivalent command\&. When created, they will automatically get dependencies on the currently activated units\&. They act as saved runtime state of the systemd manager\&. Later on, the user may choose to return to the saved state via
+\fBsystemctl isolate\fR\&. They are useful to roll back to a defined state after temporarily starting/stopping services or similar\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.snapshot.html b/man/systemd.snapshot.html
index 139f1d69f4..1a555e9459 100644
--- a/man/systemd.snapshot.html
+++ b/man/systemd.snapshot.html
@@ -19,10 +19,10 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.snapshot"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.snapshot — Snapshot unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>snapshot</code></em>.snapshot</code></p></div><div class="refsect1"><a name="idm259785627680"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Snapshot units are not configured via unit
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.snapshot"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.snapshot — Snapshot unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>snapshot</code></em>.snapshot</code></p></div><div class="refsect1"><a name="idm274701916352"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>Snapshot units are not configured via unit
configuration files. Nonetheless they are named
- similar to filenames. A unit name whose name ends in
- <code class="filename">.snapshot</code> refers to a dynamic
+ similar to filenames. A unit whose name ends in
+ "<code class="literal">.snapshot</code>" refers to a dynamic
snapshot of the systemd runtime state.</p><p>Snapshots are not configured on disk but created
dynamically via <span class="command"><strong>systemctl snapshot</strong></span>
(see
@@ -35,7 +35,7 @@
<span class="command"><strong>systemctl isolate</strong></span>. They are
useful to roll back to a defined state after
temporarily starting/stopping services or
- similar.</p></div><div class="refsect1"><a name="idm259785622512"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ similar.</p></div><div class="refsect1"><a name="idm274701911184"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd.snapshot.xml b/man/systemd.snapshot.xml
index 08d14c4e01..1bb074a9b1 100644
--- a/man/systemd.snapshot.xml
+++ b/man/systemd.snapshot.xml
@@ -56,8 +56,8 @@
<para>Snapshot units are not configured via unit
configuration files. Nonetheless they are named
- similar to filenames. A unit name whose name ends in
- <filename>.snapshot</filename> refers to a dynamic
+ similar to filenames. A unit whose name ends in
+ <literal>.snapshot</literal> refers to a dynamic
snapshot of the systemd runtime state.</para>
<para>Snapshots are not configured on disk but created
diff --git a/man/systemd.socket.5 b/man/systemd.socket.5
new file mode 100644
index 0000000000..d23a42c34a
--- /dev/null
+++ b/man/systemd.socket.5
@@ -0,0 +1,461 @@
+'\" t
+.TH "SYSTEMD\&.SOCKET" "5" "" "systemd 208" "systemd.socket"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.socket \- Socket unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIsocket\fR\&.socket
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.socket"
+encodes information about an IPC or network socket or a file system FIFO controlled and supervised by systemd, for socket\-based activation\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The socket specific configuration options are configured in the [Socket] section\&.
+.PP
+Additional options are listed in
+\fBsystemd.exec\fR(5), which define the execution environment the
+\fBExecStartPre=\fR,
+\fBExecStartPost=\fR,
+\fBExecStopPre=\fR
+and
+\fBExecStopPost=\fR
+commands are executed in, and in
+\fBsystemd.kill\fR(5), which define the way the processes are terminated, and in
+\fBsystemd.resource-control\fR(5), which configure resource control settings for the processes of the socket\&.
+.PP
+For each socket file a matching service file (see
+\fBsystemd.service\fR(5)
+for details) must exist, describing the service to start on incoming traffic on the socket\&. Depending on the setting of
+\fBAccept=\fR
+(see below), this must either be named like the socket unit, but with the suffix replaced; or it must be a template file named the same way\&. Example: a socket file
+foo\&.socket
+needs a matching service
+foo\&.service
+if
+\fBAccept=false\fR
+is set\&. If
+\fBAccept=true\fR
+is set, a service template file
+foo@\&.service
+must exist from which services are instantiated for each incoming connection\&.
+.PP
+Unless
+\fIDefaultDependencies=\fR
+is set to
+\fBfalse\fR, socket units will implicitly have dependencies of type
+\fIRequires=\fR
+and
+\fIAfter=\fR
+on
+sysinit\&.target
+as well as dependencies of type
+\fIConflicts=\fR
+and
+\fIBefore=\fR
+on
+shutdown\&.target\&. These ensure that socket units pull in basic system initialization, and are terminated cleanly prior to system shutdown\&. Only sockets involved with early boot or late system shutdown should disable this option\&.
+.PP
+Socket units may be used to implement on\-demand starting of services, as well as parallelized starting of services\&.
+.PP
+Note that the daemon software configured for socket activation with socket units needs to be able to accept sockets from systemd, either via systemd\*(Aqs native socket passing interface (see
+\fBsd_listen_fds\fR(3)
+for details) or via the traditional
+\fBinetd\fR(8)\-style socket passing (i\&.e\&. sockets passed in via STDIN and STDOUT, using
+\fIStandardInput=socket\fR
+in the service file)\&.
+.SH "OPTIONS"
+.PP
+Socket files must include a [Socket] section, which carries information about the socket or FIFO it supervises\&. A number of options that may be used in this section are shared with other unit types\&. These options are documented in
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)\&. The options specific to the [Socket] section of socket units are the following:
+.PP
+\fIListenStream=\fR, \fIListenDatagram=\fR, \fIListenSequentialPacket=\fR
+.RS 4
+Specifies an address to listen on for a stream (\fBSOCK_STREAM\fR), datagram (\fBSOCK_DGRAM\fR), or sequential packet (\fBSOCK_SEQPACKET\fR) socket, respectively\&. The address can be written in various formats:
+.sp
+If the address starts with a slash ("/"), it is read as file system socket in the
+\fBAF_UNIX\fR
+socket family\&.
+.sp
+If the address starts with an at symbol ("@"), it is read as abstract namespace socket in the
+\fBAF_UNIX\fR
+family\&. The
+"@"
+is replaced with a
+\fBNUL\fR
+character before binding\&. For details, see
+\fBunix\fR(7)\&.
+.sp
+If the address string is a single number, it is read as port number to listen on via IPv6\&. Depending on the value of
+\fIBindIPv6Only=\fR
+(see below) this might result in the service being available via both IPv6 and IPv4 (default) or just via IPv6\&.
+.sp
+If the address string is a string in the format v\&.w\&.x\&.y:z, it is read as IPv4 specifier for listening on an address v\&.w\&.x\&.y on a port z\&.
+.sp
+If the address string is a string in the format [x]:y, it is read as IPv6 address x on a port y\&. Note that this might make the service available via IPv4, too, depending on the
+\fIBindIPv6Only=\fR
+setting (see below)\&.
+.sp
+Note that
+\fBSOCK_SEQPACKET\fR
+(i\&.e\&.
+\fIListenSequentialPacket=\fR) is only available for
+\fBAF_UNIX\fR
+sockets\&.
+\fBSOCK_STREAM\fR
+(i\&.e\&.
+\fIListenStream=\fR) when used for IP sockets refers to TCP sockets,
+\fBSOCK_DGRAM\fR
+(i\&.e\&.
+\fIListenDatagram=\fR) to UDP\&.
+.sp
+These options may be specified more than once in which case incoming traffic on any of the sockets will trigger service activation, and all listed sockets will be passed to the service, regardless whether there is incoming traffic on them or not\&. If the empty string is assigned to any of these options, the list of addresses to listen on is reset, all prior uses of any of these options will have no effect\&.
+.sp
+If an IP address is used here, it is often desirable to listen on it before the interface it is configured on is up and running, and even regardless whether it will be up and running ever at all\&. To deal with this it is recommended to set the
+\fIFreeBind=\fR
+option described below\&.
+.RE
+.PP
+\fIListenFIFO=\fR
+.RS 4
+Specifies a file system FIFO to listen on\&. This expects an absolute file system path as argument\&. Behavior otherwise is very similar to the
+\fIListenDatagram=\fR
+directive above\&.
+.RE
+.PP
+\fIListenSpecial=\fR
+.RS 4
+Specifies a special file in the file system to listen on\&. This expects an absolute file system path as argument\&. Behavior otherwise is very similar to the
+\fIListenFIFO=\fR
+directive above\&. Use this to open character device nodes as well as special files in
+/proc
+and
+/sys\&.
+.RE
+.PP
+\fIListenNetlink=\fR
+.RS 4
+Specifies a Netlink family to create a socket for to listen on\&. This expects a short string referring to the
+\fBAF_NETLINK\fR
+family name (such as
+\fIaudit\fR
+or
+\fIkobject\-uevent\fR) as argument, optionally suffixed by a whitespace followed by a multicast group integer\&. Behavior otherwise is very similar to the
+\fIListenDatagram=\fR
+directive above\&.
+.RE
+.PP
+\fIListenMessageQueue=\fR
+.RS 4
+Specifies a POSIX message queue name to listen on\&. This expects a valid message queue name (i\&.e\&. beginning with /)\&. Behavior otherwise is very similar to the
+\fIListenFIFO=\fR
+directive above\&. On Linux message queue descriptors are actually file descriptors and can be inherited between processes\&.
+.RE
+.PP
+\fIBindIPv6Only=\fR
+.RS 4
+Takes a one of
+\fBdefault\fR,
+\fBboth\fR
+or
+\fBipv6\-only\fR\&. Controls the IPV6_V6ONLY socket option (see
+\fBipv6\fR(7)
+for details)\&. If
+\fBboth\fR, IPv6 sockets bound will be accessible via both IPv4 and IPv6\&. If
+\fBipv6\-only\fR, they will be accessible via IPv6 only\&. If
+\fBdefault\fR
+(which is the default, surprise!), the system wide default setting is used, as controlled by
+/proc/sys/net/ipv6/bindv6only, which in turn defaults to the equivalent of
+\fBboth\fR\&.
+.RE
+.PP
+\fIBacklog=\fR
+.RS 4
+Takes an unsigned integer argument\&. Specifies the number of connections to queue that have not been accepted yet\&. This setting matters only for stream and sequential packet sockets\&. See
+\fBlisten\fR(2)
+for details\&. Defaults to SOMAXCONN (128)\&.
+.RE
+.PP
+\fIBindToDevice=\fR
+.RS 4
+Specifies a network interface name to bind this socket to\&. If set, traffic will only be accepted from the specified network interfaces\&. This controls the SO_BINDTODEVICE socket option (see
+\fBsocket\fR(7)
+for details)\&. If this option is used, an automatic dependency from this socket unit on the network interface device unit (\fBsystemd.device\fR(5)
+is created\&.
+.RE
+.PP
+\fIDirectoryMode=\fR
+.RS 4
+If listening on a file system socket or FIFO, the parent directories are automatically created if needed\&. This option specifies the file system access mode used when creating these directories\&. Takes an access mode in octal notation\&. Defaults to 0755\&.
+.RE
+.PP
+\fISocketMode=\fR
+.RS 4
+If listening on a file system socket or FIFO, this option specifies the file system access mode used when creating the file node\&. Takes an access mode in octal notation\&. Defaults to 0666\&.
+.RE
+.PP
+\fIAccept=\fR
+.RS 4
+Takes a boolean argument\&. If true, a service instance is spawned for each incoming connection and only the connection socket is passed to it\&. If false, all listening sockets themselves are passed to the started service unit, and only one service unit is spawned for all connections (also see above)\&. This value is ignored for datagram sockets and FIFOs where a single service unit unconditionally handles all incoming traffic\&. Defaults to
+\fBfalse\fR\&. For performance reasons, it is recommended to write new daemons only in a way that is suitable for
+\fBAccept=false\fR\&. A daemon listening on an
+\fBAF_UNIX\fR
+socket may, but does not need to, call
+\fBclose\fR(2)
+on the received socket before exiting\&. However, it must not unlink the socket from a file system\&. It should not invoke
+\fBshutdown\fR(2)
+on sockets it got with
+\fIAccept=false\fR, but it may do so for sockets it got with
+\fIAccept=true\fR
+set\&. Setting
+\fIAccept=true\fR
+is mostly useful to allow daemons designed for usage with
+\fBinetd\fR(8)
+to work unmodified with systemd socket activation\&.
+.RE
+.PP
+\fIMaxConnections=\fR
+.RS 4
+The maximum number of connections to simultaneously run services instances for, when
+\fBAccept=true\fR
+is set\&. If more concurrent connections are coming in, they will be refused until at least one existing connection is terminated\&. This setting has no effect on sockets configured with
+\fBAccept=false\fR
+or datagram sockets\&. Defaults to 64\&.
+.RE
+.PP
+\fIKeepAlive=\fR
+.RS 4
+Takes a boolean argument\&. If true, the TCP/IP stack will send a keep alive message after 2h (depending on the configuration of
+/proc/sys/net/ipv4/tcp_keepalive_time) for all TCP streams accepted on this socket\&. This controls the SO_KEEPALIVE socket option (see
+\fBsocket\fR(7)
+and the
+\m[blue]\fBTCP Keepalive HOWTO\fR\m[]\&\s-2\u[1]\d\s+2
+for details\&.) Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIPriority=\fR
+.RS 4
+Takes an integer argument controlling the priority for all traffic sent from this socket\&. This controls the SO_PRIORITY socket option (see
+\fBsocket\fR(7)
+for details\&.)\&.
+.RE
+.PP
+\fIReceiveBuffer=\fR, \fISendBuffer=\fR
+.RS 4
+Takes an integer argument controlling the receive or send buffer sizes of this socket, respectively\&. This controls the SO_RCVBUF and SO_SNDBUF socket options (see
+\fBsocket\fR(7)
+for details\&.)\&.
+.RE
+.PP
+\fIIPTOS=\fR
+.RS 4
+Takes an integer argument controlling the IP Type\-Of\-Service field for packets generated from this socket\&. This controls the IP_TOS socket option (see
+\fBip\fR(7)
+for details\&.)\&. Either a numeric string or one of
+\fBlow\-delay\fR,
+\fBthroughput\fR,
+\fBreliability\fR
+or
+\fBlow\-cost\fR
+may be specified\&.
+.RE
+.PP
+\fIIPTTL=\fR
+.RS 4
+Takes an integer argument controlling the IPv4 Time\-To\-Live/IPv6 Hop\-Count field for packets generated from this socket\&. This sets the IP_TTL/IPV6_UNICAST_HOPS socket options (see
+\fBip\fR(7)
+and
+\fBipv6\fR(7)
+for details\&.)
+.RE
+.PP
+\fIMark=\fR
+.RS 4
+Takes an integer value\&. Controls the firewall mark of packets generated by this socket\&. This can be used in the firewall logic to filter packets from this socket\&. This sets the SO_MARK socket option\&. See
+\fBiptables\fR(8)
+for details\&.
+.RE
+.PP
+\fIReusePort=\fR
+.RS 4
+Takes a boolean value\&. If true, allows multiple
+\fBbind\fR(2)s to this TCP or UDP port\&. This controls the SO_REUSEPORT socket option\&. See
+\fBsocket\fR(7)
+for details\&.
+.RE
+.PP
+\fISmackLabel=\fR, \fISmackLabelIPIn=\fR, \fISmackLabelIPOut=\fR
+.RS 4
+Takes a string value\&. Controls the extended attributes
+"security\&.SMACK64",
+"security\&.SMACK64IPIN"
+and
+"security\&.SMACK64IPOUT", respectively, i\&.e\&. the security label of the FIFO, or the security label for the incoming or outgoing connections of the socket, respectively\&. See
+\m[blue]\fBSmack\&.txt\fR\m[]\&\s-2\u[2]\d\s+2
+for details\&.
+.RE
+.PP
+\fIPipeSize=\fR
+.RS 4
+Takes an integer value\&. Controls the pipe buffer size of FIFOs configured in this socket unit\&. See
+\fBfcntl\fR(2)
+for details\&.
+.RE
+.PP
+\fIMessageQueueMaxMessages=\fR, \fIMessageQueueMessageSize=\fR
+.RS 4
+These two settings take integer values and control the mq_maxmsg field or the mq_msgsize field, respectively, when creating the message queue\&. Note that either none or both of these variables need to be set\&. See
+\fBmq_setattr\fR(3)
+for details\&.
+.RE
+.PP
+\fIFreeBind=\fR
+.RS 4
+Takes a boolean value\&. Controls whether the socket can be bound to non\-local IP addresses\&. This is useful to configure sockets listening on specific IP addresses before those IP addresses are successfully configured on a network interface\&. This sets the IP_FREEBIND socket option\&. For robustness reasons it is recommended to use this option whenever you bind a socket to a specific IP address\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fITransparent=\fR
+.RS 4
+Takes a boolean value\&. Controls the IP_TRANSPARENT socket option\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIBroadcast=\fR
+.RS 4
+Takes a boolean value\&. This controls the SO_BROADCAST socket option, which allows broadcast datagrams to be sent from this socket\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIPassCredentials=\fR
+.RS 4
+Takes a boolean value\&. This controls the SO_PASSCRED socket option, which allows
+\fBAF_UNIX\fR
+sockets to receive the credentials of the sending process in an ancillary message\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIPassSecurity=\fR
+.RS 4
+Takes a boolean value\&. This controls the SO_PASSSEC socket option, which allows
+\fBAF_UNIX\fR
+sockets to receive the security context of the sending process in an ancillary message\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fITCPCongestion=\fR
+.RS 4
+Takes a string value\&. Controls the TCP congestion algorithm used by this socket\&. Should be one of "westwood", "veno", "cubic", "lp" or any other available algorithm supported by the IP stack\&. This setting applies only to stream sockets\&.
+.RE
+.PP
+\fIExecStartPre=\fR, \fIExecStartPost=\fR
+.RS 4
+Takes one or more command lines, which are executed before or after the listening sockets/FIFOs are created and bound, respectively\&. The first token of the command line must be an absolute filename, then followed by arguments for the process\&. Multiple command lines may be specified following the same scheme as used for
+\fIExecStartPre=\fR
+of service unit files\&.
+.RE
+.PP
+\fIExecStopPre=\fR, \fIExecStopPost=\fR
+.RS 4
+Additional commands that are executed before or after the listening sockets/FIFOs are closed and removed, respectively\&. Multiple command lines may be specified following the same scheme as used for
+\fIExecStartPre=\fR
+of service unit files\&.
+.RE
+.PP
+\fITimeoutSec=\fR
+.RS 4
+Configures the time to wait for the commands specified in
+\fIExecStartPre=\fR,
+\fIExecStartPost=\fR,
+\fIExecStopPre=\fR
+and
+\fIExecStopPost=\fR
+to finish\&. If a command does not exit within the configured time, the socket will be considered failed and be shut down again\&. All commands still running, will be terminated forcibly via
+\fBSIGTERM\fR, and after another delay of this time with
+\fBSIGKILL\fR\&. (See
+\fBKillMode=\fR
+in
+\fBsystemd.kill\fR(5)\&.) Takes a unit\-less value in seconds, or a time span value such as "5min 20s"\&. Pass 0 to disable the timeout logic\&. Defaults to 90s\&.
+.RE
+.PP
+\fIService=\fR
+.RS 4
+Specifies the service unit name to activate on incoming traffic\&. This defaults to the service that bears the same name as the socket (ignoring the different suffixes)\&. In most cases it should not be necessary to use this option\&.
+.RE
+.PP
+Check
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)
+for more settings\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.directives\fR(7)
+.PP
+For more extensive descriptions see the "systemd for Developers" series:
+\m[blue]\fBSocket Activation\fR\m[]\&\s-2\u[3]\d\s+2,
+\m[blue]\fBSocket Activation, part II\fR\m[]\&\s-2\u[4]\d\s+2,
+\m[blue]\fBConverting inetd Services\fR\m[]\&\s-2\u[5]\d\s+2,
+\m[blue]\fBSocket Activated Internet Services and OS Containers\fR\m[]\&\s-2\u[6]\d\s+2\&.
+.SH "NOTES"
+.IP " 1." 4
+TCP Keepalive HOWTO
+.RS 4
+\%http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
+.RE
+.IP " 2." 4
+Smack.txt
+.RS 4
+\%https://www.kernel.org/doc/Documentation/security/Smack.txt
+.RE
+.IP " 3." 4
+Socket Activation
+.RS 4
+\%http://0pointer.de/blog/projects/socket-activation.html
+.RE
+.IP " 4." 4
+Socket Activation, part II
+.RS 4
+\%http://0pointer.de/blog/projects/socket-activation2.html
+.RE
+.IP " 5." 4
+Converting inetd Services
+.RS 4
+\%http://0pointer.de/blog/projects/inetd.html
+.RE
+.IP " 6." 4
+Socket Activated Internet Services and OS Containers
+.RS 4
+\%http://0pointer.de/blog/projects/socket-activated-containers.html
+.RE
diff --git a/man/systemd.socket.html b/man/systemd.socket.html
index 7235809d75..4d2ee1cabc 100644
--- a/man/systemd.socket.html
+++ b/man/systemd.socket.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.socket"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.socket — Socket unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code></p></div><div class="refsect1"><a name="idm259768532416"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.socket</code> encodes information about
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.socket"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.socket — Socket unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code></p></div><div class="refsect1"><a name="idm274692930944"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.socket</code>" encodes information about
an IPC or network socket or a file system FIFO
controlled and supervised by systemd, for socket-based
activation.</p><p>This man page lists the configuration options
@@ -38,9 +38,12 @@
<code class="option">ExecStopPre=</code> and
<code class="option">ExecStopPost=</code> commands are executed
in, and in
- <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
- which define the way the processes are
- terminated.</p><p>For each socket file a matching service file
+ <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
+ which define the way the processes are terminated, and
+ in
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ which configure resource control settings for the
+ processes of the socket.</p><p>For each socket file a matching service file
(see
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>
for details) must exist, describing the service to
@@ -52,7 +55,7 @@
<code class="filename">foo.socket</code> needs a matching
service <code class="filename">foo.service</code> if
<code class="option">Accept=false</code> is set. If
- <code class="option">Accept=true</code> is set a service template
+ <code class="option">Accept=true</code> is set, a service template
file <code class="filename">foo@.service</code> must exist from
which services are instantiated for each incoming
connection.</p><p>Unless <code class="varname">DefaultDependencies=</code>
@@ -79,7 +82,7 @@
<a href="inetd.html"><span class="citerefentry"><span class="refentrytitle">inetd</span>(8)</span></a>-style
socket passing (i.e. sockets passed in via STDIN and
STDOUT, using <code class="varname">StandardInput=socket</code>
- in the service file).</p></div><div class="refsect1"><a name="idm259768715248"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Socket files must include a [Socket] section,
+ in the service file).</p></div><div class="refsect1"><a name="idm274692985600"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Socket files must include a [Socket] section,
which carries information about the socket or FIFO it
supervises. A number of options that may be used in
this section are shared with other unit types. These
@@ -90,20 +93,22 @@
options specific to the [Socket] section of socket
units are the following:</p><div class="variablelist"><dl class="variablelist"><dt id="ListenStream="><span class="term"><code class="varname">ListenStream=</code>, </span><span class="term"><code class="varname">ListenDatagram=</code>, </span><span class="term"><code class="varname">ListenSequentialPacket=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenStream=">¶</a></dt><dd><p>Specifies an address
to listen on for a stream
- (SOCK_STREAM), datagram (SOCK_DGRAM),
+ (<code class="constant">SOCK_STREAM</code>), datagram (<code class="constant">SOCK_DGRAM</code>),
or sequential packet
- (SOCK_SEQPACKET) socket, respectively. The address
+ (<code class="constant">SOCK_SEQPACKET</code>) socket, respectively. The address
can be written in various formats:</p><p>If the address starts with a
- slash (/), it is read as file system
- socket in the AF_UNIX socket
- family.</p><p>If the address starts with an
- at symbol (@) it is read as abstract
- namespace socket in the AF_UNIX
- family. The @ is replaced with a NUL
- character before binding. For details
- see
+ slash ("<code class="literal">/</code>"), it is read as file system
+ socket in the <code class="constant">AF_UNIX</code> socket
+ family.</p><p>If the address starts with an at
+ symbol ("<code class="literal">@</code>"), it is read as abstract
+ namespace socket in the
+ <code class="constant">AF_UNIX</code>
+ family. The "<code class="literal">@</code>" is
+ replaced with a
+ <code class="constant">NUL</code> character
+ before binding. For details, see
<a href="unix.html"><span class="citerefentry"><span class="refentrytitle">unix</span>(7)</span></a>.</p><p>If the address string is a
- single number it is read as port
+ single number, it is read as port
number to listen on via
IPv6. Depending on the value of
<code class="varname">BindIPv6Only=</code> (see below) this
@@ -111,23 +116,23 @@
available via both IPv6 and IPv4 (default) or
just via IPv6.
</p><p>If the address string is a
- string in the format v.w.x.y:z it is
+ string in the format v.w.x.y:z, it is
read as IPv4 specifier for listening
on an address v.w.x.y on a port
z.</p><p>If the address string is a
- string in the format [x]:y it is read
+ string in the format [x]:y, it is read
as IPv6 address x on a port y. Note
that this might make the service
available via IPv4, too, depending on
the <code class="varname">BindIPv6Only=</code>
setting (see below).
- </p><p>Note that SOCK_SEQPACKET
+ </p><p>Note that <code class="constant">SOCK_SEQPACKET</code>
(i.e. <code class="varname">ListenSequentialPacket=</code>)
- is only available for AF_UNIX
- sockets. SOCK_STREAM
+ is only available for <code class="constant">AF_UNIX</code>
+ sockets. <code class="constant">SOCK_STREAM</code>
(i.e. <code class="varname">ListenStream=</code>)
when used for IP sockets refers to TCP
- sockets, SOCK_DGRAM
+ sockets, <code class="constant">SOCK_DGRAM</code>
(i.e. <code class="varname">ListenDatagram=</code>)
to UDP.</p><p>These options may be specified
more than once in which case incoming
@@ -167,7 +172,7 @@
<code class="filename">/sys</code>.</p></dd><dt id="ListenNetlink="><span class="term"><code class="varname">ListenNetlink=</code></span><a class="headerlink" title="Permalink to this term" href="#ListenNetlink=">¶</a></dt><dd><p>Specifies a Netlink
family to create a socket for to
listen on. This expects a short string
- referring to the AF_NETLINK family
+ referring to the <code class="constant">AF_NETLINK</code> family
name (such as <code class="varname">audit</code>
or <code class="varname">kobject-uevent</code>)
as argument, optionally suffixed by a
@@ -197,7 +202,7 @@
<code class="option">ipv6-only</code>, they will
be accessible via IPv6 only. If
<code class="option">default</code> (which is the
- default, surprise!) the system wide
+ default, surprise!), the system wide
default setting is used, as controlled
by
<code class="filename">/proc/sys/net/ipv6/bindv6only</code>,
@@ -213,7 +218,7 @@
for details. Defaults to SOMAXCONN
(128).</p></dd><dt id="BindToDevice="><span class="term"><code class="varname">BindToDevice=</code></span><a class="headerlink" title="Permalink to this term" href="#BindToDevice=">¶</a></dt><dd><p>Specifies a network
interface name to bind this socket
- to. If set traffic will only be
+ to. If set, traffic will only be
accepted from the specified network
interfaces. This controls the
SO_BINDTODEVICE socket option (see
@@ -247,17 +252,30 @@
and only one service unit is spawned
for all connections (also see
above). This value is ignored for
- datagram sockets and FIFOs where
- a single service unit unconditionally
+ datagram sockets and FIFOs where a
+ single service unit unconditionally
handles all incoming traffic. Defaults
to <code class="option">false</code>. For
performance reasons, it is recommended
to write new daemons only in a way
that is suitable for
- <code class="option">Accept=false</code>. This
- option is mostly useful to allow
- daemons designed for usage with
- <a href="inetd.html"><span class="citerefentry"><span class="refentrytitle">inetd</span>(8)</span></a>,
+ <code class="option">Accept=false</code>. A
+ daemon listening on an <code class="constant">AF_UNIX</code> socket
+ may, but does not need to, call
+ <a href="close.html"><span class="citerefentry"><span class="refentrytitle">close</span>(2)</span></a>
+ on the received socket before
+ exiting. However, it must not unlink
+ the socket from a file system. It
+ should not invoke
+ <a href="shutdown.html"><span class="citerefentry"><span class="refentrytitle">shutdown</span>(2)</span></a>
+ on sockets it got with
+ <code class="varname">Accept=false</code>, but
+ it may do so for sockets it got with
+ <code class="varname">Accept=true</code> set.
+ Setting <code class="varname">Accept=true</code>
+ is mostly useful to allow daemons
+ designed for usage with
+ <a href="inetd.html"><span class="citerefentry"><span class="refentrytitle">inetd</span>(8)</span></a>
to work unmodified with systemd socket
activation.</p></dd><dt id="MaxConnections="><span class="term"><code class="varname">MaxConnections=</code></span><a class="headerlink" title="Permalink to this term" href="#MaxConnections=">¶</a></dt><dd><p>The maximum number of
connections to simultaneously run
@@ -267,7 +285,7 @@
are coming in, they will be refused
until at least one existing connection
is terminated. This setting has no
- effect for sockets configured with
+ effect on sockets configured with
<code class="option">Accept=false</code> or datagram
sockets. Defaults to
64.</p></dd><dt id="KeepAlive="><span class="term"><code class="varname">KeepAlive=</code></span><a class="headerlink" title="Permalink to this term" href="#KeepAlive=">¶</a></dt><dd><p>Takes a boolean
@@ -322,22 +340,28 @@
filter packets from this socket. This
sets the SO_MARK socket option. See
<a href="iptables.html"><span class="citerefentry"><span class="refentrytitle">iptables</span>(8)</span></a>
+ for details.</p></dd><dt id="ReusePort="><span class="term"><code class="varname">ReusePort=</code></span><a class="headerlink" title="Permalink to this term" href="#ReusePort=">¶</a></dt><dd><p>Takes a boolean
+ value. If true, allows multiple <a href="bind.html"><span class="citerefentry"><span class="refentrytitle">bind</span>(2)</span></a>s
+ to this TCP or UDP port. This
+ controls the SO_REUSEPORT socket
+ option. See
+ <a href="socket.html"><span class="citerefentry"><span class="refentrytitle">socket</span>(7)</span></a>
for details.</p></dd><dt id="SmackLabel="><span class="term"><code class="varname">SmackLabel=</code>, </span><span class="term"><code class="varname">SmackLabelIPIn=</code>, </span><span class="term"><code class="varname">SmackLabelIPOut=</code></span><a class="headerlink" title="Permalink to this term" href="#SmackLabel=">¶</a></dt><dd><p>Takes a string
value. Controls the extended
attributes
- <code class="literal">security.SMACK64</code>,
- <code class="literal">security.SMACK64IPIN</code>
+ "<code class="literal">security.SMACK64</code>",
+ "<code class="literal">security.SMACK64IPIN</code>"
and
- <code class="literal">security.SMACK64IPOUT</code>,
+ "<code class="literal">security.SMACK64IPOUT</code>",
respectively, i.e. the security label
of the FIFO, or the security label for
the incoming or outgoing connections
- of the socket, respectively. See
+ of the socket, respectively. See
<a class="ulink" href="https://www.kernel.org/doc/Documentation/security/Smack.txt" target="_top">Smack.txt</a>
for details.</p></dd><dt id="PipeSize="><span class="term"><code class="varname">PipeSize=</code></span><a class="headerlink" title="Permalink to this term" href="#PipeSize=">¶</a></dt><dd><p>Takes an integer
value. Controls the pipe buffer size
of FIFOs configured in this socket
- unit. See
+ unit. See
<a href="fcntl.html"><span class="citerefentry"><span class="refentrytitle">fcntl</span>(2)</span></a>
for details.</p></dd><dt id="MessageQueueMaxMessages=,
MessageQueueMessageSize="><span class="term"><code class="varname">MessageQueueMaxMessages=</code>,
@@ -370,16 +394,16 @@
socket. Defaults to
<code class="option">false</code>.</p></dd><dt id="PassCredentials="><span class="term"><code class="varname">PassCredentials=</code></span><a class="headerlink" title="Permalink to this term" href="#PassCredentials=">¶</a></dt><dd><p>Takes a boolean
value. This controls the SO_PASSCRED
- socket option, which allows AF_UNIX sockets to
+ socket option, which allows <code class="constant">AF_UNIX</code> sockets to
receive the credentials of the sending
process in an ancillary message.
Defaults to
<code class="option">false</code>.</p></dd><dt id="PassSecurity="><span class="term"><code class="varname">PassSecurity=</code></span><a class="headerlink" title="Permalink to this term" href="#PassSecurity=">¶</a></dt><dd><p>Takes a boolean
value. This controls the SO_PASSSEC
- socket option, which allows AF_UNIX
+ socket option, which allows <code class="constant">AF_UNIX</code>
sockets to receive the security
context of the sending process in an
- ancillary message. Defaults to
+ ancillary message. Defaults to
<code class="option">false</code>.</p></dd><dt id="TCPCongestion="><span class="term"><code class="varname">TCPCongestion=</code></span><a class="headerlink" title="Permalink to this term" href="#TCPCongestion=">¶</a></dt><dd><p>Takes a string
value. Controls the TCP congestion
algorithm used by this socket. Should
@@ -392,7 +416,7 @@
before or after the listening
sockets/FIFOs are created and
bound, respectively. The first token of the command
- line must be an absolute file name,
+ line must be an absolute filename,
then followed by arguments for the
process. Multiple command lines may be
specified following the same scheme as
@@ -416,8 +440,8 @@
will be considered failed and be shut
down again. All commands still running,
will be terminated forcibly via
- SIGTERM, and after another delay of
- this time with SIGKILL. (See
+ <code class="constant">SIGTERM</code>, and after another delay of
+ this time with <code class="constant">SIGKILL</code>. (See
<code class="option">KillMode=</code> in <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>.)
Takes a unit-less value in seconds, or
a time span value such as "5min
@@ -433,16 +457,17 @@
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
and
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
- for more settings.</p></div><div class="refsect1"><a name="idm259763682032"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ for more settings.</p></div><div class="refsect1"><a name="idm274687879792"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>,
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
<a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
</p><p>
- For more extensive descriptions see the "Systemd for Developers" series:
+ For more extensive descriptions see the "systemd for Developers" series:
<a class="ulink" href="http://0pointer.de/blog/projects/socket-activation.html" target="_top">Socket Activation</a>,
<a class="ulink" href="http://0pointer.de/blog/projects/socket-activation2.html" target="_top">Socket Activation, part II</a>,
<a class="ulink" href="http://0pointer.de/blog/projects/inetd.html" target="_top">Converting inetd Services</a>,
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
index 6dc847df3f..8c88d9f8aa 100644
--- a/man/systemd.socket.xml
+++ b/man/systemd.socket.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.socket</filename> encodes information about
+ <literal>.socket</literal> encodes information about
an IPC or network socket or a file system FIFO
controlled and supervised by systemd, for socket-based
activation.</para>
@@ -77,9 +77,12 @@
<option>ExecStopPre=</option> and
<option>ExecStopPost=</option> commands are executed
in, and in
- <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- which define the way the processes are
- terminated.</para>
+ <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which define the way the processes are terminated, and
+ in
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which configure resource control settings for the
+ processes of the socket.</para>
<para>For each socket file a matching service file
(see
@@ -93,7 +96,7 @@
<filename>foo.socket</filename> needs a matching
service <filename>foo.service</filename> if
<option>Accept=false</option> is set. If
- <option>Accept=true</option> is set a service template
+ <option>Accept=true</option> is set, a service template
file <filename>foo@.service</filename> must exist from
which services are instantiated for each incoming
connection.</para>
@@ -150,26 +153,28 @@
<term><varname>ListenSequentialPacket=</varname></term>
<listitem><para>Specifies an address
to listen on for a stream
- (SOCK_STREAM), datagram (SOCK_DGRAM),
+ (<constant>SOCK_STREAM</constant>), datagram (<constant>SOCK_DGRAM</constant>),
or sequential packet
- (SOCK_SEQPACKET) socket, respectively. The address
+ (<constant>SOCK_SEQPACKET</constant>) socket, respectively. The address
can be written in various formats:</para>
<para>If the address starts with a
- slash (/), it is read as file system
- socket in the AF_UNIX socket
+ slash (<literal>/</literal>), it is read as file system
+ socket in the <constant>AF_UNIX</constant> socket
family.</para>
- <para>If the address starts with an
- at symbol (@) it is read as abstract
- namespace socket in the AF_UNIX
- family. The @ is replaced with a NUL
- character before binding. For details
- see
+ <para>If the address starts with an at
+ symbol (<literal>@</literal>), it is read as abstract
+ namespace socket in the
+ <constant>AF_UNIX</constant>
+ family. The <literal>@</literal> is
+ replaced with a
+ <constant>NUL</constant> character
+ before binding. For details, see
<citerefentry><refentrytitle>unix</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
<para>If the address string is a
- single number it is read as port
+ single number, it is read as port
number to listen on via
IPv6. Depending on the value of
<varname>BindIPv6Only=</varname> (see below) this
@@ -179,13 +184,13 @@
</para>
<para>If the address string is a
- string in the format v.w.x.y:z it is
+ string in the format v.w.x.y:z, it is
read as IPv4 specifier for listening
on an address v.w.x.y on a port
z.</para>
<para>If the address string is a
- string in the format [x]:y it is read
+ string in the format [x]:y, it is read
as IPv6 address x on a port y. Note
that this might make the service
available via IPv4, too, depending on
@@ -193,13 +198,13 @@
setting (see below).
</para>
- <para>Note that SOCK_SEQPACKET
+ <para>Note that <constant>SOCK_SEQPACKET</constant>
(i.e. <varname>ListenSequentialPacket=</varname>)
- is only available for AF_UNIX
- sockets. SOCK_STREAM
+ is only available for <constant>AF_UNIX</constant>
+ sockets. <constant>SOCK_STREAM</constant>
(i.e. <varname>ListenStream=</varname>)
when used for IP sockets refers to TCP
- sockets, SOCK_DGRAM
+ sockets, <constant>SOCK_DGRAM</constant>
(i.e. <varname>ListenDatagram=</varname>)
to UDP.</para>
@@ -258,7 +263,7 @@
<listitem><para>Specifies a Netlink
family to create a socket for to
listen on. This expects a short string
- referring to the AF_NETLINK family
+ referring to the <constant>AF_NETLINK</constant> family
name (such as <varname>audit</varname>
or <varname>kobject-uevent</varname>)
as argument, optionally suffixed by a
@@ -298,7 +303,7 @@
<option>ipv6-only</option>, they will
be accessible via IPv6 only. If
<option>default</option> (which is the
- default, surprise!) the system wide
+ default, surprise!), the system wide
default setting is used, as controlled
by
<filename>/proc/sys/net/ipv6/bindv6only</filename>,
@@ -325,7 +330,7 @@
<term><varname>BindToDevice=</varname></term>
<listitem><para>Specifies a network
interface name to bind this socket
- to. If set traffic will only be
+ to. If set, traffic will only be
accepted from the specified network
interfaces. This controls the
SO_BINDTODEVICE socket option (see
@@ -374,17 +379,30 @@
and only one service unit is spawned
for all connections (also see
above). This value is ignored for
- datagram sockets and FIFOs where
- a single service unit unconditionally
+ datagram sockets and FIFOs where a
+ single service unit unconditionally
handles all incoming traffic. Defaults
to <option>false</option>. For
performance reasons, it is recommended
to write new daemons only in a way
that is suitable for
- <option>Accept=false</option>. This
- option is mostly useful to allow
- daemons designed for usage with
- <citerefentry><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <option>Accept=false</option>. A
+ daemon listening on an <constant>AF_UNIX</constant> socket
+ may, but does not need to, call
+ <citerefentry><refentrytitle>close</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ on the received socket before
+ exiting. However, it must not unlink
+ the socket from a file system. It
+ should not invoke
+ <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ on sockets it got with
+ <varname>Accept=false</varname>, but
+ it may do so for sockets it got with
+ <varname>Accept=true</varname> set.
+ Setting <varname>Accept=true</varname>
+ is mostly useful to allow daemons
+ designed for usage with
+ <citerefentry><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
to work unmodified with systemd socket
activation.</para></listitem>
</varlistentry>
@@ -399,7 +417,7 @@
are coming in, they will be refused
until at least one existing connection
is terminated. This setting has no
- effect for sockets configured with
+ effect on sockets configured with
<option>Accept=false</option> or datagram
sockets. Defaults to
64.</para></listitem>
@@ -490,6 +508,17 @@
</varlistentry>
<varlistentry>
+ <term><varname>ReusePort=</varname></term>
+ <listitem><para>Takes a boolean
+ value. If true, allows multiple <citerefentry><refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum></citerefentry>s
+ to this TCP or UDP port. This
+ controls the SO_REUSEPORT socket
+ option. See
+ <citerefentry><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for details.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>SmackLabel=</varname></term>
<term><varname>SmackLabelIPIn=</varname></term>
<term><varname>SmackLabelIPOut=</varname></term>
@@ -503,7 +532,7 @@
respectively, i.e. the security label
of the FIFO, or the security label for
the incoming or outgoing connections
- of the socket, respectively. See
+ of the socket, respectively. See
<ulink
url="https://www.kernel.org/doc/Documentation/security/Smack.txt">Smack.txt</ulink>
for details.</para></listitem>
@@ -514,7 +543,7 @@
<listitem><para>Takes an integer
value. Controls the pipe buffer size
of FIFOs configured in this socket
- unit. See
+ unit. See
<citerefentry><refentrytitle>fcntl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
for details.</para></listitem>
</varlistentry>
@@ -571,7 +600,7 @@
<term><varname>PassCredentials=</varname></term>
<listitem><para>Takes a boolean
value. This controls the SO_PASSCRED
- socket option, which allows AF_UNIX sockets to
+ socket option, which allows <constant>AF_UNIX</constant> sockets to
receive the credentials of the sending
process in an ancillary message.
Defaults to
@@ -582,10 +611,10 @@
<term><varname>PassSecurity=</varname></term>
<listitem><para>Takes a boolean
value. This controls the SO_PASSSEC
- socket option, which allows AF_UNIX
+ socket option, which allows <constant>AF_UNIX</constant>
sockets to receive the security
context of the sending process in an
- ancillary message. Defaults to
+ ancillary message. Defaults to
<option>false</option>.</para></listitem>
</varlistentry>
@@ -609,7 +638,7 @@
before or after the listening
sockets/FIFOs are created and
bound, respectively. The first token of the command
- line must be an absolute file name,
+ line must be an absolute filename,
then followed by arguments for the
process. Multiple command lines may be
specified following the same scheme as
@@ -644,8 +673,8 @@
will be considered failed and be shut
down again. All commands still running,
will be terminated forcibly via
- SIGTERM, and after another delay of
- this time with SIGKILL. (See
+ <constant>SIGTERM</constant>, and after another delay of
+ this time with <constant>SIGKILL</constant>. (See
<option>KillMode=</option> in <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.)
Takes a unit-less value in seconds, or
a time span value such as "5min
@@ -683,12 +712,13 @@
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
</para>
<para>
- For more extensive descriptions see the "Systemd for Developers" series:
+ For more extensive descriptions see the "systemd for Developers" series:
<ulink url="http://0pointer.de/blog/projects/socket-activation.html">Socket Activation</ulink>,
<ulink url="http://0pointer.de/blog/projects/socket-activation2.html">Socket Activation, part II</ulink>,
<ulink url="http://0pointer.de/blog/projects/inetd.html">Converting inetd Services</ulink>,
diff --git a/man/systemd.special.7 b/man/systemd.special.7
new file mode 100644
index 0000000000..476cd49c72
--- /dev/null
+++ b/man/systemd.special.7
@@ -0,0 +1,648 @@
+'\" t
+.TH "SYSTEMD\&.SPECIAL" "7" "" "systemd 208" "systemd.special"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.special \- Special systemd units
+.SH "SYNOPSIS"
+.PP
+basic\&.target,
+bluetooth\&.target,
+ctrl\-alt\-del\&.target,
+cryptsetup\&.target,
+dbus\&.service,
+dbus\&.socket,
+default\&.target,
+display\-manager\&.service,
+emergency\&.target,
+exit\&.target,
+final\&.target,
+getty\&.target,
+graphical\&.target,
+halt\&.target,
+hibernate\&.target,
+hybrid\-sleep\&.target,
+initrd\-fs\&.target,
+kbrequest\&.target,
+kexec\&.target,
+local\-fs\&.target,
+local\-fs\-pre\&.target,
+multi\-user\&.target,
+network\&.target,
+network\-online\&.target,
+nss\-lookup\&.target,
+nss\-user\-lookup\&.target,
+paths\&.target,
+poweroff\&.target,
+printer\&.target,
+reboot\&.target,
+remote\-fs\&.target,
+remote\-fs\-pre\&.target,
+rescue\&.target,
+initrd\-root\-fs\&.target,
+rpcbind\&.target,
+runlevel2\&.target,
+runlevel3\&.target,
+runlevel4\&.target,
+runlevel5\&.target,
+shutdown\&.target,
+sigpwr\&.target,
+sleep\&.target,
+smartcard\&.target,
+sockets\&.target,
+sound\&.target,
+suspend\&.target,
+swap\&.target,
+sysinit\&.target,
+syslog\&.socket,
+system\-update\&.target,
+time\-sync\&.target,
+timers\&.target,
+umount\&.target,
+\-\&.slice,
+system\&.slice,
+user\&.slice,
+machine\&.slice
+.SH "DESCRIPTION"
+.PP
+A few units are treated specially by systemd\&. They have special internal semantics and cannot be renamed\&.
+.SH "SPECIAL SYSTEM UNITS"
+.PP
+basic\&.target
+.RS 4
+A special target unit covering basic boot\-up\&.
+.sp
+systemd automatically adds dependencies of the types
+\fIRequires=\fR
+and
+\fIAfter=\fR
+for this target unit to all services (except for those with
+\fIDefaultDependencies=no\fR)\&.
+.sp
+Usually this should pull\-in all mount points, swap devices, sockets, timers, and path units and other basic initialization necessary for general purpose daemons\&.
+.RE
+.PP
+ctrl\-alt\-del\&.target
+.RS 4
+systemd starts this target whenever Control+Alt+Del is pressed on the console\&. Usually this should be aliased (symlinked) to
+reboot\&.target\&.
+.RE
+.PP
+cryptsetup\&.target
+.RS 4
+A target that pulls in setup services for all encrypted block devices\&.
+.RE
+.PP
+dbus\&.service
+.RS 4
+A special unit for the D\-Bus bus daemon\&. As soon as this service is fully started up systemd will connect to it and register its service\&.
+.RE
+.PP
+dbus\&.socket
+.RS 4
+A special unit for the D\-Bus system bus socket\&. All units with
+\fIType=dbus\fR
+automatically gain a dependency on this unit\&.
+.RE
+.PP
+default\&.target
+.RS 4
+The default unit systemd starts at bootup\&. Usually this should be aliased (symlinked) to
+multi\-user\&.target
+or
+graphical\&.target\&.
+.sp
+The default unit systemd starts at bootup can be overridden with the
+\fIsystemd\&.unit=\fR
+kernel command line option\&.
+.RE
+.PP
+display\-manager\&.service
+.RS 4
+The display manager service\&. Usually this should be aliased (symlinked) to
+gdm\&.service
+or a similar display manager service\&.
+.RE
+.PP
+emergency\&.target
+.RS 4
+A special target unit that starts an emergency shell on the main console\&. This unit is supposed to be used with the kernel command line option
+\fIsystemd\&.unit=\fR
+and has otherwise little use\&.
+.RE
+.PP
+final\&.target
+.RS 4
+A special target unit that is used during the shutdown logic and may be used to pull in late services after all normal services are already terminated and all mounts unmounted\&.
+.RE
+.PP
+getty\&.target
+.RS 4
+A special target unit that pulls in statically configured local TTY
+getty
+instances\&.
+.RE
+.PP
+graphical\&.target
+.RS 4
+A special target unit for setting up a graphical login screen\&. This pulls in
+multi\-user\&.target\&.
+.sp
+Units that are needed for graphical logins shall add
+\fIWants=\fR
+dependencies for their unit to this unit (or
+multi\-user\&.target) during installation\&. This is best configured via
+\fIWantedBy=graphical\&.target\fR
+in the unit\*(Aqs
+"[Install]"
+section\&.
+.RE
+.PP
+hibernate\&.target
+.RS 4
+A special target unit for hibernating the system\&. This pulls in
+sleep\&.target\&.
+.RE
+.PP
+hybrid\-sleep\&.target
+.RS 4
+A special target unit for hibernating and suspending the system at the same time\&. This pulls in
+sleep\&.target\&.
+.RE
+.PP
+halt\&.target
+.RS 4
+A special target unit for shutting down and halting the system\&. Note that this target is distinct from
+poweroff\&.target
+in that it generally really just halts the system rather than powering it down\&.
+.sp
+Applications wanting to halt the system should start this unit\&.
+.RE
+.PP
+initrd\-fs\&.target
+.RS 4
+\fBsystemd-fstab-generator\fR(3)
+automatically adds dependencies of type
+\fIBefore=\fR
+to
+sysroot\-usr\&.mount
+and all mount points found in
+/etc/fstab
+that have the
+\fBauto\fR
+and
+\fBx\-initrd\&.mount\fR
+mount options set\&.
+.RE
+.PP
+kbrequest\&.target
+.RS 4
+systemd starts this target whenever Alt+ArrowUp is pressed on the console\&. This is a good candidate to be aliased (symlinked) to
+rescue\&.target\&.
+.RE
+.PP
+kexec\&.target
+.RS 4
+A special target unit for shutting down and rebooting the system via kexec\&.
+.sp
+Applications wanting to reboot the system with kexec should start this unit\&.
+.RE
+.PP
+local\-fs\&.target
+.RS 4
+\fBsystemd-fstab-generator\fR(3)
+automatically adds dependencies of type
+\fIBefore=\fR
+to all mount units that refer to local mount points for this target unit\&. In addition, it adds dependencies of type
+\fIWants=\fR
+to this target unit for those mounts listed in
+/etc/fstab
+that have the
+\fBauto\fR
+mount option set\&.
+.RE
+.PP
+multi\-user\&.target
+.RS 4
+A special target unit for setting up a multi\-user system (non\-graphical)\&. This is pulled in by
+graphical\&.target\&.
+.sp
+Units that are needed for a multi\-user system shall add
+\fIWants=\fR
+dependencies for their unit to this unit during installation\&. This is best configured via
+\fIWantedBy=multi\-user\&.target\fR
+in the unit\*(Aqs
+"[Install]"
+section\&.
+.RE
+.PP
+network\-online\&.target
+.RS 4
+Units that strictly require a configured network connection should pull in
+network\-online\&.target
+(via a
+\fIWants=\fR
+type dependency) and order themselves after it\&. This target unit is intended to pull in a service that delays further execution until the network is sufficiently set up\&. What precisely this requires is left to the implementation of the network managing service\&.
+.sp
+Note the distinction between this unit and
+network\&.target\&. This unit is an active unit (i\&.e\&. pulled in by the consumer rather than the provider of this functionality) and pulls in a service which possibly adds substantial delays to further execution\&. In contrast,
+network\&.target
+is a passive unit (i\&.e\&. pulled in by the provider of the functionality, rather than the consumer) that usually does not delay execution much\&. Usually,
+network\&.target
+is part of the boot of most systems, while
+network\-online\&.target
+is not, except when at least one unit requires it\&. Also see
+\m[blue]\fBRunning Services After the Network is up\fR\m[]\&\s-2\u[1]\d\s+2
+for more information\&.
+.sp
+All mount units for remote network file systems automatically pull in this unit, and order themselves after it\&. Note that networking daemons that simply provide functionality to other hosts generally do not need to pull this in\&.
+.RE
+.PP
+paths\&.target
+.RS 4
+A special target unit that sets up all path units (see
+\fBsystemd.path\fR(5)
+for details) that shall be active after boot\&.
+.sp
+It is recommended that path units installed by applications get pulled in via
+\fIWants=\fR
+dependencies from this unit\&. This is best configured via a
+\fIWantedBy=paths\&.target\fR
+in the path unit\*(Aqs
+"[Install]"
+section\&.
+.RE
+.PP
+poweroff\&.target
+.RS 4
+A special target unit for shutting down and powering off the system\&.
+.sp
+Applications wanting to power off the system should start this unit\&.
+.sp
+runlevel0\&.target
+is an alias for this target unit, for compatibility with SysV\&.
+.RE
+.PP
+reboot\&.target
+.RS 4
+A special target unit for shutting down and rebooting the system\&.
+.sp
+Applications wanting to reboot the system should start this unit\&.
+.sp
+runlevel6\&.target
+is an alias for this target unit, for compatibility with SysV\&.
+.RE
+.PP
+remote\-fs\&.target
+.RS 4
+Similar to
+local\-fs\&.target, but for remote mount points\&.
+.sp
+systemd automatically adds dependencies of type
+\fIAfter=\fR
+for this target unit to all SysV init script service units with an LSB header referring to the
+"$remote_fs"
+facility\&.
+.RE
+.PP
+rescue\&.target
+.RS 4
+A special target unit for setting up the base system and a rescue shell\&.
+.sp
+runlevel1\&.target
+is an alias for this target unit, for compatibility with SysV\&.
+.RE
+.PP
+initrd\-root\-fs\&.target
+.RS 4
+\fBsystemd-fstab-generator\fR(3)
+automatically adds dependencies of type
+\fIBefore=\fR
+to the
+sysroot\&.mount
+unit, which is generated from the kernel command line\&.
+.RE
+.PP
+runlevel2\&.target, runlevel3\&.target, runlevel4\&.target, runlevel5\&.target
+.RS 4
+These are targets that are called whenever the SysV compatibility code asks for runlevel 2, 3, 4, 5, respectively\&. It is a good idea to make this an alias for (i\&.e\&. symlink to)
+multi\-user\&.target
+(for runlevel 2) or
+graphical\&.target
+(the others)\&.
+.RE
+.PP
+shutdown\&.target
+.RS 4
+A special target unit that terminates the services on system shutdown\&.
+.sp
+Services that shall be terminated on system shutdown shall add
+\fIConflicts=\fR
+dependencies to this unit for their service unit, which is implicitly done when
+\fIDefaultDependencies=yes\fR
+is set (the default)\&.
+.RE
+.PP
+sigpwr\&.target
+.RS 4
+A special target that is started when systemd receives the SIGPWR process signal, which is normally sent by the kernel or UPS daemons when power fails\&.
+.RE
+.PP
+sleep\&.target
+.RS 4
+A special target unit that is pulled in by
+suspend\&.target,
+hibernate\&.target
+and
+hybrid\-sleep\&.target
+and may be used to hook units into the sleep state logic\&.
+.RE
+.PP
+sockets\&.target
+.RS 4
+A special target unit that sets up all socket units\&.(see
+\fBsystemd.socket\fR(5)
+for details) that shall be active after boot\&.
+.sp
+Services that can be socket\-activated shall add
+\fIWants=\fR
+dependencies to this unit for their socket unit during installation\&. This is best configured via a
+\fIWantedBy=sockets\&.target\fR
+in the socket unit\*(Aqs
+"[Install]"
+section\&.
+.RE
+.PP
+suspend\&.target
+.RS 4
+A special target unit for suspending the system\&. This pulls in
+sleep\&.target\&.
+.RE
+.PP
+swap\&.target
+.RS 4
+Similar to
+local\-fs\&.target, but for swap partitions and swap files\&.
+.RE
+.PP
+sysinit\&.target
+.RS 4
+A special target unit covering early boot\-up scripts\&.
+.RE
+.PP
+syslog\&.socket
+.RS 4
+The socket unit syslog implementations should listen on\&. All userspace log messages will be made available on this socket\&. For more information about syslog integration, please consult the
+\m[blue]\fBSyslog Interface\fR\m[]\&\s-2\u[2]\d\s+2
+document\&.
+.RE
+.PP
+system\-update\&.target
+.RS 4
+A special target unit that is used for off\-line system updates\&.
+\fBsystemd-system-update-generator\fR(8)
+will redirect the boot process to this target if
+/system\-update
+exists\&. For more information see the
+\m[blue]\fBSystem Updates Specification\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.RE
+.PP
+timers\&.target
+.RS 4
+A special target unit that sets up all timer units (see
+\fBsystemd.timer\fR(5)
+for details) that shall be active after boot\&.
+.sp
+It is recommended that timer units installed by applications get pulled in via
+\fIWants=\fR
+dependencies from this unit\&. This is best configured via
+\fIWantedBy=timers\&.target\fR
+in the timer unit\*(Aqs
+"[Install]"
+section\&.
+.RE
+.PP
+umount\&.target
+.RS 4
+A special target unit that umounts all mount and automount points on system shutdown\&.
+.sp
+Mounts that shall be unmounted on system shutdown shall add Conflicts dependencies to this unit for their mount unit, which is implicitly done when
+\fIDefaultDependencies=yes\fR
+is set (the default)\&.
+.RE
+.SH "SPECIAL SYSTEM UNITS FOR DEVICES"
+.PP
+Some target units are automatically pulled in as devices of certain kinds show up in the system\&. These may be used to automatically activate various services based on the specific type of the available hardware\&.
+.PP
+bluetooth\&.target
+.RS 4
+This target is started automatically as soon as a Bluetooth controller is plugged in or becomes available at boot\&.
+.sp
+This may be used to pull in Bluetooth management daemons dynamically when Bluetooth hardware is found\&.
+.RE
+.PP
+printer\&.target
+.RS 4
+This target is started automatically as soon as a printer is plugged in or becomes available at boot\&.
+.sp
+This may be used to pull in printer management daemons dynamically when printer hardware is found\&.
+.RE
+.PP
+smartcard\&.target
+.RS 4
+This target is started automatically as soon as a smartcard controller is plugged in or becomes available at boot\&.
+.sp
+This may be used to pull in smartcard management daemons dynamically when smartcard hardware is found\&.
+.RE
+.PP
+sound\&.target
+.RS 4
+This target is started automatically as soon as a sound card is plugged in or becomes available at boot\&.
+.sp
+This may be used to pull in audio management daemons dynamically when audio hardware is found\&.
+.RE
+.SH "SPECIAL PASSIVE SYSTEM UNITS"
+.PP
+A number of special system targets are defined that can be used to properly order boot\-up of optional services\&. These targets are generally not part of the initial boot transaction, unless they are explicitly pulled in by one of the implementing services\&. Note specifically, that these
+\fIpassive\fR
+target units are generally not pulled in by the consumer of a service, but by the provider of the service\&. This means: a consuming service should order itself after these targets (as appropriate), but not pull it in\&. A providing service should order itself before these targets (as appropriate) and pull it in (via a
+\fIWants=\fR
+type dependency)\&.
+.PP
+Note that these passive units cannot be started manually, i\&.e\&.
+"systemctl start time\-sync\&.target"
+will fail with an error\&. They can only be pulled in by dependency\&. This is enforced since they exist for ordering purposes only and thus are not useful as only unit within a transaction\&.
+.PP
+local\-fs\-pre\&.target
+.RS 4
+This target unit is automatically ordered before all local mount points marked with
+\fBauto\fR
+(see above)\&. It can be used to execute certain units before all local mounts\&.
+.RE
+.PP
+network\&.target
+.RS 4
+This unit is supposed to indicate when network functionality is available, but it is only very weakly defined what that is supposed to mean, with one exception: at shutdown, a unit that is ordered after
+network\&.target
+will be stopped before the network \-\- to whatever level it might be set up then \-\- is shut down\&. Also see
+\m[blue]\fBRunning Services After the Network is up\fR\m[]\&\s-2\u[1]\d\s+2
+for more information\&. Also see
+network\-online\&.target
+described above\&.
+.sp
+systemd automatically adds dependencies of type
+\fIAfter=\fR
+for this target unit to all SysV init script service units with an LSB header referring to the
+"$network"
+facility\&.
+.RE
+.PP
+nss\-lookup\&.target
+.RS 4
+A target that should be used as synchronization point for all host/network name service lookups\&. Note that this is independent of user/group name lookups for which
+nss\-user\-lookup\&.target
+should be used\&. systemd automatically adds dependencies of type
+\fIAfter=\fR
+for this target unit to all SysV init script service units with an LSB header referring to the
+"$named"
+facility\&.
+.RE
+.PP
+nss\-user\-lookup\&.target
+.RS 4
+A target that should be used as synchronization point for all user/group name service lookups\&. Note that this is independent of host/network name lookups for which
+nss\-lookup\&.target
+should be used\&.
+.RE
+.PP
+remote\-fs\-pre\&.target
+.RS 4
+This target unit is automatically ordered before all remote mount point units (see above)\&. It can be used to run certain units before the remote mounts are established\&. Note that this unit is generally not part of the initial transaction, unless the unit that wants to be ordered before all remote mounts pulls it in via a
+\fIWants=\fR
+type dependency\&. If the unit wants to be pulled in by the first remote mount showing up, it should use
+network\-online\&.target
+(see above)\&.
+.sp
+Again, this target unit is
+\fInot\fR
+suitable for pulling in other units, it is only useful for ordering\&.
+.RE
+.PP
+rpcbind\&.target
+.RS 4
+systemd automatically adds dependencies of type
+\fIAfter=\fR
+for this target unit to all SysV init script service units with an LSB header referring to the
+"$portmap"
+facility\&.
+.RE
+.PP
+time\-sync\&.target
+.RS 4
+systemd automatically adds dependencies of type
+\fIAfter=\fR
+for this target unit to all SysV init script service units with an LSB header referring to the
+"$time"
+facility\&.
+.RE
+.SH "SPECIAL USER UNITS"
+.PP
+When systemd runs as a user instance, the following special units are available, which have similar definitions as their system counterparts:
+default\&.target,
+shutdown\&.target,
+sockets\&.target,
+timers\&.target,
+paths\&.target,
+bluetooth\&.target,
+printer\&.target,
+smartcard\&.target,
+sound\&.target\&.
+.PP
+In addition the following special unit is understood only when systemd runs as service instance:
+.PP
+exit\&.target
+.RS 4
+A special service unit for shutting down the user service manager\&.
+.sp
+Applications wanting to terminate the user service manager should start this unit\&. If systemd receives
+\fBSIGTERM\fR
+or
+\fBSIGINT\fR
+when running as user service daemon, it will start this unit\&.
+.sp
+Normally, this pulls in
+shutdown\&.target
+which in turn should be conflicted by all units that want to be shut down on user service manager exit\&.
+.RE
+.SH "SPECIAL SLICE UNITS"
+.PP
+There are four
+"\&.slice"
+units which form the basis of the hierarchy for assignment of resources for services, users, and virtual machines or containers\&.
+.PP
+\-\&.slice
+.RS 4
+The root slice is the root of the hierarchy\&. It usually does not contain units directly, but may be used to set defaults for the whole tree\&.
+.RE
+.PP
+system\&.slice
+.RS 4
+By default, all services services started by
+\fBsystemd\fR
+are found in this slice\&.
+.RE
+.PP
+user\&.slice
+.RS 4
+By default, all user processes and services started on behalf of the user, including the per\-user systemd instance are found in this slice\&.
+.RE
+.PP
+machine\&.slice
+.RS 4
+By defalt, all virtual machines and containers registered with
+\fBsystemd\-machined\fR
+are found in this slice\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.target\fR(5),
+\fBsystemd.slice\fR(5),
+\fBbootup\fR(7),
+\fBsystemd-fstab-generator\fR(8)
+.SH "NOTES"
+.IP " 1." 4
+Running Services After the Network is up
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
+.RE
+.IP " 2." 4
+Syslog Interface
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/syslog
+.RE
+.IP " 3." 4
+System Updates Specification
+.RS 4
+\%http://freedesktop.org/wiki/Software/systemd/SystemUpdates
+.RE
diff --git a/man/systemd.special.html b/man/systemd.special.html
index 0e32f5b13f..811fd23678 100644
--- a/man/systemd.special.html
+++ b/man/systemd.special.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.special"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.special — Special systemd units</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">basic.target</code>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.special"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.special — Special systemd units</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">basic.target</code>,
<code class="filename">bluetooth.target</code>,
<code class="filename">ctrl-alt-del.target</code>,
<code class="filename">cryptsetup.target</code>,
@@ -71,9 +71,13 @@
<code class="filename">system-update.target</code>,
<code class="filename">time-sync.target</code>,
<code class="filename">timers.target</code>,
- <code class="filename">umount.target</code></p></div><div class="refsect1"><a name="idm259772036336"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A few units are treated specially by
+ <code class="filename">umount.target</code>,
+ <code class="filename">-.slice</code>,
+ <code class="filename">system.slice</code>,
+ <code class="filename">user.slice</code>,
+ <code class="filename">machine.slice</code></p></div><div class="refsect1"><a name="idm274680627360"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A few units are treated specially by
systemd. They have special internal semantics and
- cannot be renamed.</p></div><div class="refsect1"><a name="idm259772034992"></a><h2 id="Special System Units">Special System Units<a class="headerlink" title="Permalink to this headline" href="#Special%20System%20Units">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="basic.target"><span class="term"><code class="filename">basic.target</code></span><a class="headerlink" title="Permalink to this term" href="#basic.target">¶</a></dt><dd><p>A special target unit
+ cannot be renamed.</p></div><div class="refsect1"><a name="idm274680626016"></a><h2 id="Special System Units">Special System Units<a class="headerlink" title="Permalink to this headline" href="#Special%20System%20Units">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="basic.target"><span class="term"><code class="filename">basic.target</code></span><a class="headerlink" title="Permalink to this term" href="#basic.target">¶</a></dt><dd><p>A special target unit
covering basic boot-up.</p><p>systemd automatically
adds dependencies of the types
<code class="varname">Requires=</code>
@@ -155,7 +159,7 @@
best configured via
<code class="varname">WantedBy=graphical.target</code>
in the unit's
- <code class="literal">[Install]</code>
+ "<code class="literal">[Install]</code>"
section.</p></dd><dt id="hibernate.target"><span class="term"><code class="filename">hibernate.target</code></span><a class="headerlink" title="Permalink to this term" href="#hibernate.target">¶</a></dt><dd><p>A special target unit
for hibernating the
system. This pulls in
@@ -176,7 +180,7 @@
dependencies of type
<code class="varname">Before=</code> to
<code class="filename">sysroot-usr.mount</code>
- and all mount points fround in
+ and all mount points found in
<code class="filename">/etc/fstab</code>
that have the
<code class="option">auto</code> and
@@ -215,9 +219,9 @@
this unit during
installation. This is best
configured via
- <code class="varname">WantedBy=multi-uer.target</code>
+ <code class="varname">WantedBy=multi-user.target</code>
in the unit's
- <code class="literal">[Install]</code>
+ "<code class="literal">[Install]</code>"
section.</p></dd><dt id="network-online.target"><span class="term"><code class="filename">network-online.target</code></span><a class="headerlink" title="Permalink to this term" href="#network-online.target">¶</a></dt><dd><p>Units that strictly
require a configured network
connection should pull in
@@ -267,7 +271,7 @@
after it. Note that networking
daemons that simply provide
functionality to other hosts
- generally don't need to pull
+ generally do not need to pull
this in.</p></dd><dt id="paths.target"><span class="term"><code class="filename">paths.target</code></span><a class="headerlink" title="Permalink to this term" href="#paths.target">¶</a></dt><dd><p>A special target unit
that sets up all path units
(see
@@ -282,7 +286,7 @@
via a
<code class="varname">WantedBy=paths.target</code>
in the path unit's
- <code class="literal">[Install]</code>
+ "<code class="literal">[Install]</code>"
section.</p></dd><dt id="poweroff.target"><span class="term"><code class="filename">poweroff.target</code></span><a class="headerlink" title="Permalink to this term" href="#poweroff.target">¶</a></dt><dd><p>A special target unit
for shutting down and powering off the system.</p><p>Applications wanting to
power off the system should start
@@ -302,7 +306,7 @@
this target unit to all SysV
init script service units with
an LSB header referring to the
- <code class="literal">$remote_fs</code>
+ "<code class="literal">$remote_fs</code>"
facility.</p></dd><dt id="rescue.target"><span class="term"><code class="filename">rescue.target</code></span><a class="headerlink" title="Permalink to this term" href="#rescue.target">¶</a></dt><dd><p>A special target unit
for setting up the base system
and a rescue shell.</p><p><code class="filename">runlevel1.target</code>
@@ -361,7 +365,7 @@
configured via a
<code class="varname">WantedBy=sockets.target</code>
in the socket unit's
- <code class="literal">[Install]</code>
+ "<code class="literal">[Install]</code>"
section.</p></dd><dt id="suspend.target"><span class="term"><code class="filename">suspend.target</code></span><a class="headerlink" title="Permalink to this term" href="#suspend.target">¶</a></dt><dd><p>A special target unit
for suspending the
system. This pulls in
@@ -402,7 +406,7 @@
via
<code class="varname">WantedBy=timers.target</code>
in the timer unit's
- <code class="literal">[Install]</code>
+ "<code class="literal">[Install]</code>"
section.</p></dd><dt id="umount.target"><span class="term"><code class="filename">umount.target</code></span><a class="headerlink" title="Permalink to this term" href="#umount.target">¶</a></dt><dd><p>A special target unit
that umounts all mount and
automount points on system
@@ -413,7 +417,7 @@
their mount unit, which is
implicitly done when
<code class="varname">DefaultDependencies=yes</code>
- is set (the default).</p></dd></dl></div></div><div class="refsect1"><a name="idm259766971904"></a><h2 id="Special System Units for Devices">Special System Units for Devices<a class="headerlink" title="Permalink to this headline" href="#Special%20System%20Units%20for%20Devices">¶</a></h2><p>Some target units are automatically pulled in as
+ is set (the default).</p></dd></dl></div></div><div class="refsect1"><a name="idm274675515024"></a><h2 id="Special System Units for Devices">Special System Units for Devices<a class="headerlink" title="Permalink to this headline" href="#Special%20System%20Units%20for%20Devices">¶</a></h2><p>Some target units are automatically pulled in as
devices of certain kinds show up in the system. These
may be used to automatically activate various services
based on the specific type of the available
@@ -448,7 +452,7 @@
boot.</p><p>This may be used to pull
in audio management daemons
dynamically when audio
- hardware is found.</p></dd></dl></div></div><div class="refsect1"><a name="idm259766958752"></a><h2 id="Special Passive System Units ">Special Passive System Units <a class="headerlink" title="Permalink to this headline" href="#Special%20Passive%20System%20Units%20">¶</a></h2><p>A number of special system targets are defined
+ hardware is found.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675501872"></a><h2 id="Special Passive System Units ">Special Passive System Units <a class="headerlink" title="Permalink to this headline" href="#Special%20Passive%20System%20Units%20">¶</a></h2><p>A number of special system targets are defined
that can be used to properly order boot-up of optional
services. These targets are generally not part of the
initial boot transaction, unless they are explicitly
@@ -462,8 +466,8 @@
before these targets (as appropriate) and pull it in
(via a <code class="varname">Wants=</code> type
dependency).</p><p>Note that these passive units cannot be started
- manually, i.e. <code class="literal">systemctl start
- time-sync.target</code> will fail with an
+ manually, i.e. "<code class="literal">systemctl start
+ time-sync.target</code>" will fail with an
error. They can only be pulled in by dependency. This
is enforced since they exist for ordering purposes
only and thus are not useful as only unit within a
@@ -496,7 +500,7 @@
this target unit to all SysV
init script service units with
an LSB header referring to the
- <code class="literal">$network</code>
+ "<code class="literal">$network</code>"
facility.</p></dd><dt id="nss-lookup.target"><span class="term"><code class="filename">nss-lookup.target</code></span><a class="headerlink" title="Permalink to this term" href="#nss-lookup.target">¶</a></dt><dd><p>A target that should be
used as synchronization point
for all host/network name
@@ -512,7 +516,7 @@
this target unit to all SysV
init script service units with
an LSB header referring to the
- <code class="literal">$named</code>
+ "<code class="literal">$named</code>"
facility.</p></dd><dt id="nss-user-lookup.target"><span class="term"><code class="filename">nss-user-lookup.target</code></span><a class="headerlink" title="Permalink to this term" href="#nss-user-lookup.target">¶</a></dt><dd><p>A target that should be
used as synchronization point
for all user/group name
@@ -536,7 +540,7 @@
<code class="varname">Wants=</code> type
dependency. If the unit wants
to be pulled in by the first
- remote mount showing up it
+ remote mount showing up, it
should use
<code class="filename">network-online.target</code>
(see above).</p><p>Again, this target unit
@@ -549,15 +553,15 @@
this target unit to all SysV
init script service units with
an LSB header referring to the
- <code class="literal">$portmap</code>
+ "<code class="literal">$portmap</code>"
facility.</p></dd><dt id="time-sync.target"><span class="term"><code class="filename">time-sync.target</code></span><a class="headerlink" title="Permalink to this term" href="#time-sync.target">¶</a></dt><dd><p>systemd automatically
adds dependencies of type
<code class="varname">After=</code> for
this target unit to all SysV
init script service units with
an LSB header referring to the
- <code class="literal">$time</code>
- facility.</p></dd></dl></div></div><div class="refsect1"><a name="idm259766925744"></a><h2 id="Special User Units">Special User Units<a class="headerlink" title="Permalink to this headline" href="#Special%20User%20Units">¶</a></h2><p>When systemd runs as a user instance, the
+ "<code class="literal">$time</code>"
+ facility.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675468624"></a><h2 id="Special User Units">Special User Units<a class="headerlink" title="Permalink to this headline" href="#Special%20User%20Units">¶</a></h2><p>When systemd runs as a user instance, the
following special units are available, which have
similar definitions as their system counterparts:
<code class="filename">default.target</code>,
@@ -575,19 +579,41 @@
terminate the user service
manager should start this
unit. If systemd receives
- SIGTERM or SIGINT when running
- as user service daemon it will
+ <code class="constant">SIGTERM</code> or <code class="constant">SIGINT</code> when running
+ as user service daemon, it will
start this unit.</p><p>Normally, this pulls in
<code class="filename">shutdown.target</code>
which in turn should be
conflicted by all units that
want to be shut down on
- user service manager exit.</p></dd></dl></div></div><div class="refsect1"><a name="idm259766913616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ user service manager exit.</p></dd></dl></div></div><div class="refsect1"><a name="idm274675455728"></a><h2 id="Special Slice Units">Special Slice Units<a class="headerlink" title="Permalink to this headline" href="#Special%20Slice%20Units">¶</a></h2><p>There are four "<code class="literal">.slice</code>" units
+ which form the basis of the hierarchy for assignment
+ of resources for services, users, and virtual machines
+ or containers.</p><div class="variablelist"><dl class="variablelist"><dt id="-.slice"><span class="term"><code class="filename">-.slice</code></span><a class="headerlink" title="Permalink to this term" href="#-.slice">¶</a></dt><dd><p>The root slice is the
+ root of the hierarchy. It
+ usually does not contain units
+ directly, but may be used to
+ set defaults for the whole
+ tree.</p></dd><dt id="system.slice"><span class="term"><code class="filename">system.slice</code></span><a class="headerlink" title="Permalink to this term" href="#system.slice">¶</a></dt><dd><p>By default, all services
+ services started by
+ <span class="command"><strong>systemd</strong></span> are
+ found in this slice.</p></dd><dt id="user.slice"><span class="term"><code class="filename">user.slice</code></span><a class="headerlink" title="Permalink to this term" href="#user.slice">¶</a></dt><dd><p>By default, all user
+ processes and services started
+ on behalf of the user,
+ including the per-user systemd
+ instance are found in this
+ slice.</p></dd><dt id="machine.slice"><span class="term"><code class="filename">machine.slice</code></span><a class="headerlink" title="Permalink to this term" href="#machine.slice">¶</a></dt><dd><p>By defalt, all virtual
+ machines and containers
+ registered with
+ <span class="command"><strong>systemd-machined</strong></span>
+ are found in this slice.
+ </p></dd></dl></div></div><div class="refsect1"><a name="idm274675443264"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
<a href="systemd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
<a href="systemd.socket.html"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>,
<a href="systemd.target.html"><span class="citerefentry"><span class="refentrytitle">systemd.target</span>(5)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>,
<a href="bootup.html"><span class="citerefentry"><span class="refentrytitle">bootup</span>(7)</span></a>,
<a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 7164b1e614..863a029fe3 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -100,7 +100,11 @@
<filename>system-update.target</filename>,
<filename>time-sync.target</filename>,
<filename>timers.target</filename>,
- <filename>umount.target</filename></para>
+ <filename>umount.target</filename>,
+ <filename>-.slice</filename>,
+ <filename>system.slice</filename>,
+ <filename>user.slice</filename>,
+ <filename>machine.slice</filename></para>
</refsynopsisdiv>
<refsect1>
@@ -314,7 +318,7 @@
dependencies of type
<varname>Before=</varname> to
<filename>sysroot-usr.mount</filename>
- and all mount points fround in
+ and all mount points found in
<filename>/etc/fstab</filename>
that have the
<option>auto</option> and
@@ -381,7 +385,7 @@
this unit during
installation. This is best
configured via
- <varname>WantedBy=multi-uer.target</varname>
+ <varname>WantedBy=multi-user.target</varname>
in the unit's
<literal>[Install]</literal>
section.</para>
@@ -444,7 +448,7 @@
after it. Note that networking
daemons that simply provide
functionality to other hosts
- generally don't need to pull
+ generally do not need to pull
this in.</para>
</listitem>
</varlistentry>
@@ -935,7 +939,7 @@
<varname>Wants=</varname> type
dependency. If the unit wants
to be pulled in by the first
- remote mount showing up it
+ remote mount showing up, it
should use
<filename>network-online.target</filename>
(see above).</para>
@@ -1007,8 +1011,8 @@
terminate the user service
manager should start this
unit. If systemd receives
- SIGTERM or SIGINT when running
- as user service daemon it will
+ <constant>SIGTERM</constant> or <constant>SIGINT</constant> when running
+ as user service daemon, it will
start this unit.</para>
<para>Normally, this pulls in
@@ -1023,6 +1027,63 @@
</refsect1>
<refsect1>
+ <title>Special Slice Units</title>
+
+ <para>There are four <literal>.slice</literal> units
+ which form the basis of the hierarchy for assignment
+ of resources for services, users, and virtual machines
+ or containers.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>-.slice</filename></term>
+ <listitem>
+ <para>The root slice is the
+ root of the hierarchy. It
+ usually does not contain units
+ directly, but may be used to
+ set defaults for the whole
+ tree.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>system.slice</filename></term>
+ <listitem>
+ <para>By default, all services
+ services started by
+ <command>systemd</command> are
+ found in this slice.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>user.slice</filename></term>
+ <listitem>
+ <para>By default, all user
+ processes and services started
+ on behalf of the user,
+ including the per-user systemd
+ instance are found in this
+ slice.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>machine.slice</filename></term>
+ <listitem>
+ <para>By defalt, all virtual
+ machines and containers
+ registered with
+ <command>systemd-machined</command>
+ are found in this slice.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
@@ -1030,6 +1091,7 @@
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
diff --git a/man/systemd.swap.5 b/man/systemd.swap.5
new file mode 100644
index 0000000000..d2861fbf90
--- /dev/null
+++ b/man/systemd.swap.5
@@ -0,0 +1,129 @@
+'\" t
+.TH "SYSTEMD\&.SWAP" "5" "" "systemd 208" "systemd.swap"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.swap \- Swap unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIswap\fR\&.swap
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.swap"
+encodes information about a swap device or file for memory paging controlled and supervised by systemd\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The swap specific configuration options are configured in the [Swap] section\&.
+.PP
+Additional options are listed in
+\fBsystemd.exec\fR(5), which define the execution environment the
+\fBswapon\fR(8)
+binary is executed in, and in
+\fBsystemd.kill\fR(5), which define the way the processes are terminated, and in
+\fBsystemd.resource-control\fR(5), which configure resource control settings for the processes of the service\&.
+.PP
+Swap units must be named after the devices or files they control\&. Example: the swap device
+/dev/sda5
+must be configured in a unit file
+dev\-sda5\&.swap\&. For details about the escaping logic used to convert a file system path to a unit name see
+\fBsystemd.unit\fR(5)\&.
+.PP
+All swap units automatically get the appropriate dependencies on the devices or on the mount points of the files they are activated from\&.
+.PP
+Swap units with
+\fIDefaultDependencies=\fR
+enabled implicitly acquire a conflicting dependency to
+umount\&.target
+so that they are deactivated at shutdown\&.
+.SH "FSTAB"
+.PP
+Swap units may either be configured via unit files, or via
+/etc/fstab
+(see
+\fBfstab\fR(5)
+for details)\&. Swaps listed in
+/etc/fstab
+will be converted into native units dynamically at boot and when the configuration of the system manager is reloaded\&. See
+\fBsystemd-fstab-generator\fR(8)
+for details about the conversion\&.
+.PP
+If a swap device or file is configured in both
+/etc/fstab
+and a unit file, the configuration in the latter takes precedence\&.
+.PP
+Unless the
+\fBnoauto\fR
+option is set for them all swap units configured in
+/etc/fstab
+are also added as requirements to
+swap\&.target, so that they are waited for and activated during boot\&.
+.SH "OPTIONS"
+.PP
+Swap files must include a [Swap] section, which carries information about the swap device it supervises\&. A number of options that may be used in this section are shared with other unit types\&. These options are documented in
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)\&. The options specific to the [Swap] section of swap units are the following:
+.PP
+\fIWhat=\fR
+.RS 4
+Takes an absolute path of a device node or file to use for paging\&. See
+\fBswapon\fR(8)
+for details\&. If this refers to a device node, a dependency on the respective device unit is automatically created\&. (See
+\fBsystemd.device\fR(5)
+for more information\&.) If this refers to a file, a dependency on the respective mount unit is automatically created\&. (See
+\fBsystemd.mount\fR(5)
+for more information\&.) This option is mandatory\&.
+.RE
+.PP
+\fIPriority=\fR
+.RS 4
+Swap priority to use when activating the swap device or file\&. This takes an integer\&. This setting is optional\&.
+.RE
+.PP
+\fITimeoutSec=\fR
+.RS 4
+Configures the time to wait for the swapon command to finish\&. If a command does not exit within the configured time, the swap will be considered failed and be shut down again\&. All commands still running will be terminated forcibly via
+\fBSIGTERM\fR, and after another delay of this time with
+\fBSIGKILL\fR\&. (See
+\fBKillMode=\fR
+in
+\fBsystemd.kill\fR(5)\&.) Takes a unit\-less value in seconds, or a time span value such as "5min 20s"\&. Pass 0 to disable the timeout logic\&. Defaults to 90s\&.
+.RE
+.PP
+Check
+\fBsystemd.exec\fR(5)
+and
+\fBsystemd.kill\fR(5)
+for more settings\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.exec\fR(5),
+\fBsystemd.kill\fR(5),
+\fBsystemd.resource-control\fR(5),
+\fBsystemd.device\fR(5),
+\fBsystemd.mount\fR(5),
+\fBswapon\fR(8),
+\fBsystemd-fstab-generator\fR(8),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.swap.html b/man/systemd.swap.html
index ecd67492b9..f69d768787 100644
--- a/man/systemd.swap.html
+++ b/man/systemd.swap.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.swap"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.swap — Swap unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></p></div><div class="refsect1"><a name="idm259782483392"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.swap</code> encodes information about a
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.swap"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.swap — Swap unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>swap</code></em>.swap</code></p></div><div class="refsect1"><a name="idm274701352320"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.swap</code>" encodes information about a
swap device or file for memory paging controlled and
supervised by systemd.</p><p>This man page lists the configuration options
specific to this unit type. See
@@ -34,9 +34,12 @@
which define the execution environment the
<a href="swapon.html"><span class="citerefentry"><span class="refentrytitle">swapon</span>(8)</span></a>
binary is executed in, and in
- <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
+ <a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
which define the way the processes are
- terminated.</p><p>Swap units must be named after the devices
+ terminated, and in
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
+ which configure resource control settings for the
+ processes of the service.</p><p>Swap units must be named after the devices
or files they control. Example: the swap device
<code class="filename">/dev/sda5</code> must be configured in a
unit file <code class="filename">dev-sda5.swap</code>. For
@@ -48,7 +51,7 @@
<code class="varname">DefaultDependencies=</code> enabled
implicitly acquire a conflicting dependency to
<code class="filename">umount.target</code> so that they are
- deactivated at shutdown.</p></div><div class="refsect1"><a name="idm259782607008"></a><h2 id="fstab"><code class="filename">fstab</code><a class="headerlink" title="Permalink to this headline" href="#fstab">¶</a></h2><p>Swap units may either be configured via unit
+ deactivated at shutdown.</p></div><div class="refsect1"><a name="idm274701216896"></a><h2 id="fstab"><code class="filename">fstab</code><a class="headerlink" title="Permalink to this headline" href="#fstab">¶</a></h2><p>Swap units may either be configured via unit
files, or via <code class="filename">/etc/fstab</code> (see
<a href="fstab.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a>
for details). Swaps listed in
@@ -58,13 +61,13 @@
reloaded. See
<a href="systemd-fstab-generator.html"><span class="citerefentry"><span class="refentrytitle">systemd-fstab-generator</span>(8)</span></a>
for details about the conversion.</p><p>If a swap device or file is configured in both
- <code class="filename">/etc/fstab</code> and a unit file the
+ <code class="filename">/etc/fstab</code> and a unit file, the
configuration in the latter takes precedence.</p><p>Unless the <code class="option">noauto</code> option is set
for them all swap units configured in
<code class="filename">/etc/fstab</code> are also added as
requirements to <code class="filename">swap.target</code>, so
that they are waited for and activated during
- boot.</p></div><div class="refsect1"><a name="idm259782666976"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Swap files must include a [Swap] section, which
+ boot.</p></div><div class="refsect1"><a name="idm274701407808"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Swap files must include a [Swap] section, which
carries information about the swap device it
supervises. A number of options that may be used in
this section are shared with other unit types. These
@@ -94,12 +97,12 @@
setting is optional.</p></dd><dt id="TimeoutSec="><span class="term"><code class="varname">TimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#TimeoutSec=">¶</a></dt><dd><p>Configures the time to
wait for the swapon command to
finish. If a command does not exit
- within the configured time the swap
+ within the configured time, the swap
will be considered failed and be shut
down again. All commands still running
will be terminated forcibly via
- SIGTERM, and after another delay of
- this time with SIGKILL. (See
+ <code class="constant">SIGTERM</code>, and after another delay of
+ this time with <code class="constant">SIGKILL</code>. (See
<code class="option">KillMode=</code> in
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>.)
Takes a unit-less value in seconds, or
@@ -110,12 +113,13 @@
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>
and
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>
- for more settings.</p></div><div class="refsect1"><a name="idm259782643520"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ for more settings.</p></div><div class="refsect1"><a name="idm274701383664"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
<a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>,
<a href="systemd.kill.html"><span class="citerefentry"><span class="refentrytitle">systemd.kill</span>(5)</span></a>,
+ <a href="systemd.resource-control.html"><span class="citerefentry"><span class="refentrytitle">systemd.resource-control</span>(5)</span></a>,
<a href="systemd.device.html"><span class="citerefentry"><span class="refentrytitle">systemd.device</span>(5)</span></a>,
<a href="systemd.mount.html"><span class="citerefentry"><span class="refentrytitle">systemd.mount</span>(5)</span></a>,
<a href="swapon.html"><span class="citerefentry"><span class="refentrytitle">swapon</span>(8)</span></a>,
diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
index 8268e6164d..813ae6c942 100644
--- a/man/systemd.swap.xml
+++ b/man/systemd.swap.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.swap</filename> encodes information about a
+ <literal>.swap</literal> encodes information about a
swap device or file for memory paging controlled and
supervised by systemd.</para>
@@ -73,9 +73,12 @@
which define the execution environment the
<citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>
binary is executed in, and in
- <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
which define the way the processes are
- terminated.</para>
+ terminated, and in
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ which configure resource control settings for the
+ processes of the service.</para>
<para>Swap units must be named after the devices
or files they control. Example: the swap device
@@ -111,7 +114,7 @@
for details about the conversion.</para>
<para>If a swap device or file is configured in both
- <filename>/etc/fstab</filename> and a unit file the
+ <filename>/etc/fstab</filename> and a unit file, the
configuration in the latter takes precedence.</para>
<para>Unless the <option>noauto</option> option is set
@@ -172,12 +175,12 @@
<listitem><para>Configures the time to
wait for the swapon command to
finish. If a command does not exit
- within the configured time the swap
+ within the configured time, the swap
will be considered failed and be shut
down again. All commands still running
will be terminated forcibly via
- SIGTERM, and after another delay of
- this time with SIGKILL. (See
+ <constant>SIGTERM</constant>, and after another delay of
+ this time with <constant>SIGKILL</constant>. (See
<option>KillMode=</option> in
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.)
Takes a unit-less value in seconds, or
@@ -203,6 +206,7 @@
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
diff --git a/man/systemd.target.5 b/man/systemd.target.5
new file mode 100644
index 0000000000..25fa18841e
--- /dev/null
+++ b/man/systemd.target.5
@@ -0,0 +1,60 @@
+'\" t
+.TH "SYSTEMD\&.TARGET" "5" "" "systemd 208" "systemd.target"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.target \- Target unit configuration
+.SH "SYNOPSIS"
+.PP
+\fItarget\fR\&.target
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.target"
+encodes information about a target unit of systemd, which is used for grouping units and as well\-known synchronization points during start\-up\&.
+.PP
+This unit type has no specific options\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. A separate [Target] section does not exist, since no target\-specific options may be configured\&.
+.PP
+Target units do not offer any additional functionality on top of the generic functionality provided by units\&. They exist merely to group units via dependencies (useful as boot targets), and to establish standardized names for synchronization points used in dependencies between units\&. Among other things, target units are a more flexible replacement for SysV runlevels in the classic SysV init system\&. (And for compatibility reasons special target units such as
+runlevel3\&.target
+exist which are used by the SysV runlevel compatibility code in systemd\&. See
+\fBsystemd.special\fR(7)
+for details)\&.
+.PP
+Unless
+\fIDefaultDependencies=\fR
+is set to
+\fBfalse\fR, target units will implicitly complement all configured dependencies of type
+\fIWants=\fR,
+\fIRequires=\fR,
+\fIRequiresOverridable=\fR
+with dependencies of type
+\fIAfter=\fR
+if the units in question also have
+\fIDefaultDependencies=true\fR\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.special\fR(7),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.target.html b/man/systemd.target.html
index 985b8b3b7e..b7dd784d48 100644
--- a/man/systemd.target.html
+++ b/man/systemd.target.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.target"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.target — Target unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>target</code></em>.target</code></p></div><div class="refsect1"><a name="idm259786714560"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.target</code> encodes information about
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.target"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.target — Target unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>target</code></em>.target</code></p></div><div class="refsect1"><a name="idm274684648832"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.target</code>" encodes information about
a target unit of systemd, which is used for grouping
units and as well-known synchronization points during
start-up.</p><p>This unit type has no specific options. See
@@ -51,7 +51,7 @@
dependencies of type <code class="varname">After=</code> if the
units in question also have
<code class="varname">DefaultDependencies=true</code>.
- </p></div><div class="refsect1"><a name="idm259786840032"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </p></div><div class="refsect1"><a name="idm274684516432"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd.target.xml b/man/systemd.target.xml
index fd51cfde3a..15662a548d 100644
--- a/man/systemd.target.xml
+++ b/man/systemd.target.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.target</filename> encodes information about
+ <literal>.target</literal> encodes information about
a target unit of systemd, which is used for grouping
units and as well-known synchronization points during
start-up.</para>
diff --git a/man/systemd.time.7 b/man/systemd.time.7
new file mode 100644
index 0000000000..f5f230f0bc
--- /dev/null
+++ b/man/systemd.time.7
@@ -0,0 +1,328 @@
+'\" t
+.TH "SYSTEMD\&.TIME" "7" "" "systemd 208" "systemd.time"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.time \- Time and date specifications
+.SH "DESCRIPTION"
+.PP
+In systemd, timestamps, time spans, and calendar events are displayed and may be specified in closely related syntaxes\&.
+.SH "DISPLAYING TIME SPANS"
+.PP
+Time spans refer to time durations\&. On display, systemd will present time spans as a space\-separated series of time values each suffixed by a time unit\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+2h 30min
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+All specified time values are meant to be added up\&. The above hence refers to 150 minutes\&.
+.SH "PARSING TIME SPANS"
+.PP
+When parsing, systemd will accept the same time span syntax\&. Separating spaces may be omitted\&. The following time units are understood:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+usec, us
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+msec, ms
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+seconds, second, sec, s
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+minutes, minute, min, m
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+hours, hour, hr, h
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+days, day, d
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+weeks, week, w
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+months, month
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+years, year, y
+.RE
+.PP
+If no time unit is specified, generally seconds are assumed, but some exceptions exist and are marked as such\&. In a few cases
+"ns",
+"nsec"
+is accepted too, where the granularity of the time span allows for this\&.
+.PP
+Examples for valid time span specifications:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+2 h
+2hours
+48hr
+1y 12month
+55s500ms
+300ms20s 5day
+.fi
+.if n \{\
+.RE
+.\}
+.SH "DISPLAYING TIMESTAMPS"
+.PP
+Timestamps refer to specific, unique points in time\&. On display, systemd will format these in the local timezone as follows:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+Fri 2012\-11\-23 23:02:15 CET
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The weekday is printed according to the locale choice of the user\&.
+.SH "PARSING TIMESTAMPS"
+.PP
+When parsing systemd will accept a similar timestamp syntax, but excluding any timezone specification (this limitation might be removed eventually)\&. The weekday specification is optional, but when the weekday is specified it must either be in the abbreviated ("Wed") or non\-abbreviated ("Wednesday") English language form (case does not matter), and is not subject to the locale choice of the user\&. Either the date, or the time part may be omitted, in which case the current date or 00:00:00, resp\&., is assumed\&. The seconds component of the time may also be omitted, in which case ":00" is assumed\&. Year numbers may be specified in full or may be abbreviated (omitting the century)\&.
+.PP
+A timestamp is considered invalid if a weekday is specified and the date does not actually match the specified day of the week\&.
+.PP
+When parsing, systemd will also accept a few special placeholders instead of timestamps:
+"now"
+may be used to refer to the current time (or of the invocation of the command that is currently executed)\&.
+"today",
+"yesterday",
+"tomorrow"
+refer to 00:00:00 of the current day, the day before or the next day, respectively\&.
+.PP
+When parsing, systemd will also accept relative time specifications\&. A time span (see above) that is prefixed with
+"+"
+is evaluated to the current time plus the specified time span\&. Correspondingly, a time span that is prefixed with
+"\-"
+is evaluated to the current time minus the specified time span\&. Instead of prefixing the time span with
+"\-", it may also be suffixed with a space and the word
+"ago"\&.
+.PP
+Examples for valid timestamps and their normalized form (assuming the current time was 2012\-11\-23 18:15:22):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+Fri 2012\-11\-23 11:12:13 → Fri 2012\-11\-23 11:12:13
+ 2012\-11\-23 11:12:13 → Fri 2012\-11\-23 11:12:13
+ 2012\-11\-23 → Fri 2012\-11\-23 00:00:00
+ 12\-11\-23 → Fri 2012\-11\-23 00:00:00
+ 11:12:13 → Fri 2012\-11\-23 11:12:13
+ 11:12 → Fri 2012\-11\-23 11:12:00
+ now → Fri 2012\-11\-23 18:15:22
+ today → Fri 2012\-11\-23 00:00:00
+ yesterday → Fri 2012\-11\-22 00:00:00
+ tomorrow → Fri 2012\-11\-24 00:00:00
+ +3h30min → Fri 2012\-11\-23 21:45:22
+ \-5s → Fri 2012\-11\-23 18:15:17
+ 11min ago → Fri 2012\-11\-23 18:04:22
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Note that timestamps printed by systemd will not be parsed correctly by systemd, as the timezone specification is not accepted, and printing timestamps is subject to locale settings for the weekday while parsing only accepts English weekday names\&.
+.PP
+In some cases, systemd will display a relative timestamp (relative to the current time, or the time of invocation of the command) instead or in addition to an absolute timestamp as described above\&. A relative timestamp is formatted as follows:
+.PP
+2 months 5 days ago
+.PP
+Note that any relative timestamp will also parse correctly where a timestamp is expected\&. (see above)
+.SH "CALENDAR EVENTS"
+.PP
+Calendar events may be used to refer to one or more points in time in a single expression\&. They form a superset of the absolute timestamps explained above:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+Thu,Fri 2012\-*\-1,5 11:12:13
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The above refers to 11:12:13 of the first or fifth day of any month of the year 2012, given that it is a Thursday or Friday\&.
+.PP
+The weekday specification is optional\&. If specified, it should consist of one or more English language weekday names, either in the abbreviated (Wed) or non\-abbreviated (Wednesday) form (case does not matter), separated by commas\&. Specifying two weekdays separated by
+"\-"
+refers to a range of continuous weekdays\&.
+","
+and
+"\-"
+may be combined freely\&.
+.PP
+In the date and time specifications, any component may be specified as
+"*"
+in which case any value will match\&. Alternatively, each component can be specified as list of values separated by commas\&. Values may also be suffixed with
+"/"
+and a repetition value, which indicates that the value and all values plus multiples of the repetition value are matched\&.
+.PP
+Either time or date specification may be omitted, in which case the current day and 00:00:00 is implied, respectively\&. If the second component is not specified,
+":00"
+is assumed\&.
+.PP
+Timezone names may not be specified\&.
+.PP
+The special expressions
+"hourly",
+"daily",
+"monthly"
+and
+"weekly"
+may be used as calendar events which refer to
+"*\-*\-* *:00:00",
+"*\-*\-* 00:00:00",
+"*\-*\-01 00:00:00"
+and
+"Mon *\-*\-* 00:00:00", respectively\&.
+.PP
+Examples for valid timestamps and their normalized form:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ Sat,Thu,Mon\-Wed,Sat\-Sun → Mon\-Thu,Sat,Sun *\-*\-* 00:00:00
+ Mon,Sun 12\-*\-* 2,1:23 → Mon,Sun 2012\-*\-* 01,02:23:00
+ Wed *\-1 → Wed *\-*\-01 00:00:00
+ Wed\-Wed,Wed *\-1 → Wed *\-*\-01 00:00:00
+ Wed, 17:48 → Wed *\-*\-* 17:48:00
+Wed\-Sat,Tue 12\-10\-15 1:2:3 → Tue\-Sat 2012\-10\-15 01:02:03
+ *\-*\-7 0:0:0 → *\-*\-07 00:00:00
+ 10\-15 → *\-10\-15 00:00:00
+ monday *\-12\-* 17:00 → Mon *\-12\-* 17:00:00
+ Mon,Fri *\-*\-3,1,2 *:30:45 → Mon,Fri *\-*\-01,02,03 *:30:45
+ 12,14,13,12:20,10,30 → *\-*\-* 12,13,14:10,20,30:00
+ mon,fri *\-1/2\-1,3 *:30:45 → Mon,Fri *\-01/2\-01,03 *:30:45
+ 03\-05 08:05:40 → *\-03\-05 08:05:40
+ 08:05:40 → *\-*\-* 08:05:40
+ 05:40 → *\-*\-* 05:40:00
+ Sat,Sun 12\-05 08:05:40 → Sat,Sun *\-12\-05 08:05:40
+ Sat,Sun 08:05:40 → Sat,Sun *\-*\-* 08:05:40
+ 2003\-03\-05 05:40 → 2003\-03\-05 05:40:00
+ 2003\-03\-05 → 2003\-03\-05 00:00:00
+ 03\-05 → *\-03\-05 00:00:00
+ hourly → *\-*\-* *:00:00
+ daily → *\-*\-* 00:00:00
+ monthly → *\-*\-01 00:00:00
+ weekly → Mon *\-*\-* 00:00:00
+ *:2/3 → *\-*\-* *:02/3:00
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Calendar events are used by timer units, see
+\fBsystemd.timer\fR(5)
+for details\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBjournalctl\fR(1),
+\fBsystemd.timer\fR(5),
+\fBsystemd.unit\fR(5),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.time.html b/man/systemd.time.html
index aa0338e800..ffe6ee0131 100644
--- a/man/systemd.time.html
+++ b/man/systemd.time.html
@@ -19,60 +19,60 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.time"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.time — Time and date specifications</p></div><div class="refsect1"><a name="idm259769968128"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>In systemd timestamps, timespans, and calendar
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.time"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.time — Time and date specifications</p></div><div class="refsect1"><a name="idm274707325792"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>In systemd, timestamps, time spans, and calendar
events are displayed and may be specified in closely
- related syntaxes.</p></div><div class="refsect1"><a name="idm259769966784"></a><h2 id="Displaying Timespans">Displaying Timespans<a class="headerlink" title="Permalink to this headline" href="#Displaying%20Timespans">¶</a></h2><p>Timespans refer to time durations. On display
- systemd will present timespans as a space separated
+ related syntaxes.</p></div><div class="refsect1"><a name="idm274707324448"></a><h2 id="Displaying Time Spans">Displaying Time Spans<a class="headerlink" title="Permalink to this headline" href="#Displaying%20Time%20Spans">¶</a></h2><p>Time spans refer to time durations. On display,
+ systemd will present time spans as a space-separated
series of time values each suffixed by a time
unit.</p><pre class="programlisting">2h 30min</pre><p>All specified time values are meant to be added
- up. The above hence refers to 150 minutes.</p></div><div class="refsect1"><a name="idm259769964304"></a><h2 id="Parsing Timespans">Parsing Timespans<a class="headerlink" title="Permalink to this headline" href="#Parsing%20Timespans">¶</a></h2><p>When parsing systemd will accept the same
- timespan syntax. Separating spaces may be omitted. The
+ up. The above hence refers to 150 minutes.</p></div><div class="refsect1"><a name="idm274707321952"></a><h2 id="Parsing Time Spans">Parsing Time Spans<a class="headerlink" title="Permalink to this headline" href="#Parsing%20Time%20Spans">¶</a></h2><p>When parsing, systemd will accept the same
+ time span syntax. Separating spaces may be omitted. The
following time units are understood:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>usec, us</p></li><li class="listitem"><p>msec, ms</p></li><li class="listitem"><p>seconds, second, sec, s</p></li><li class="listitem"><p>minutes, minute, min, m</p></li><li class="listitem"><p>hours, hour, hr, h</p></li><li class="listitem"><p>days, day, d</p></li><li class="listitem"><p>weeks, week, w</p></li><li class="listitem"><p>months, month</p></li><li class="listitem"><p>years, year, y</p></li></ul></div><p>If no time unit is specified, generally seconds
are assumed, but some exceptions exist and are marked
- as such. In a few cases <code class="literal">ns</code>,
- <code class="literal">nsec</code> is accepted too, where the
- granularity of the timespan allows for this.</p><p>Examples for valid timespan specifications:</p><pre class="programlisting">2 h
+ as such. In a few cases "<code class="literal">ns</code>",
+ "<code class="literal">nsec</code>" is accepted too, where the
+ granularity of the time span allows for this.</p><p>Examples for valid time span specifications:</p><pre class="programlisting">2 h
2hours
48hr
1y 12month
55s500ms
-300ms20s 5day</pre></div><div class="refsect1"><a name="idm259769954688"></a><h2 id="Displaying Timestamps">Displaying Timestamps<a class="headerlink" title="Permalink to this headline" href="#Displaying%20Timestamps">¶</a></h2><p>Timestamps refer to specific, unique points in
- time. On display systemd will format these in the
- local timezone as follows:</p><pre class="programlisting">Fri 2012-11-23 23:02:15 CET</pre><p>The week day is printed according to the locale
- choice of the user.</p></div><div class="refsect1"><a name="idm259769952240"></a><h2 id="Parsing Timestamps">Parsing Timestamps<a class="headerlink" title="Permalink to this headline" href="#Parsing%20Timestamps">¶</a></h2><p>When parsing systemd will accept a similar
+300ms20s 5day</pre></div><div class="refsect1"><a name="idm274707189216"></a><h2 id="Displaying Timestamps">Displaying Timestamps<a class="headerlink" title="Permalink to this headline" href="#Displaying%20Timestamps">¶</a></h2><p>Timestamps refer to specific, unique points in
+ time. On display, systemd will format these in the
+ local timezone as follows:</p><pre class="programlisting">Fri 2012-11-23 23:02:15 CET</pre><p>The weekday is printed according to the locale
+ choice of the user.</p></div><div class="refsect1"><a name="idm274707186768"></a><h2 id="Parsing Timestamps">Parsing Timestamps<a class="headerlink" title="Permalink to this headline" href="#Parsing%20Timestamps">¶</a></h2><p>When parsing systemd will accept a similar
timestamp syntax, but excluding any timezone
specification (this limitation might be removed
- eventually). The week day specification is optional,
- but when the week day is specified it must either be
- in the abbreviated (<code class="literal">Wed</code>) or
- non-abbreviated (<code class="literal">Wednesday</code>) english
- language form (case doesn't matter), and is not
+ eventually). The weekday specification is optional,
+ but when the weekday is specified it must either be
+ in the abbreviated ("<code class="literal">Wed</code>") or
+ non-abbreviated ("<code class="literal">Wednesday</code>") English
+ language form (case does not matter), and is not
subject to the locale choice of the user. Either the
date, or the time part may be omitted, in which case
the current date or 00:00:00, resp., is assumed. The
seconds component of the time may also be omitted, in
which case ":00" is assumed. Year numbers may be
specified in full or may be abbreviated (omitting the
- century).</p><p>A timestamp is considered invalid if a week day
+ century).</p><p>A timestamp is considered invalid if a weekday
is specified and the date does not actually match the
- specified day of the week.</p><p>When parsing systemd will also accept a few
+ specified day of the week.</p><p>When parsing, systemd will also accept a few
special placeholders instead of timestamps:
- <code class="literal">now</code> may be used to refer to the
+ "<code class="literal">now</code>" may be used to refer to the
current time (or of the invocation of the command
- that is currently executed). <code class="literal">today</code>,
- <code class="literal">yesterday</code>,
- <code class="literal">tomorrow</code> refer to 00:00:00 of the
+ that is currently executed). "<code class="literal">today</code>",
+ "<code class="literal">yesterday</code>",
+ "<code class="literal">tomorrow</code>" refer to 00:00:00 of the
current day, the day before or the next day,
- respectively.</p><p>When parsing systemd will also accept relative
- time specifications. A timespan (see above) that is
- prefixed with <code class="literal">+</code> is evaluated to the
+ respectively.</p><p>When parsing, systemd will also accept relative
+ time specifications. A time span (see above) that is
+ prefixed with "<code class="literal">+</code>" is evaluated to the
current time plus the specified
- timespan. Correspondingly a timespan that is prefix
- with <code class="literal">-</code> is evaluated to the current
- time minus the specified timespan. Instead of
- prefixing the timespan with <code class="literal">-</code> it
+ time span. Correspondingly, a time span that is prefixed
+ with "<code class="literal">-</code>" is evaluated to the current
+ time minus the specified time span. Instead of
+ prefixing the time span with "<code class="literal">-</code>", it
may also be suffixed with a space and the word
- <code class="literal">ago</code>.</p><p>Examples for valid timestamps and their
+ "<code class="literal">ago</code>".</p><p>Examples for valid timestamps and their
normalized form (assuming the current time was
2012-11-23 18:15:22):</p><pre class="programlisting">Fri 2012-11-23 11:12:13 → Fri 2012-11-23 11:12:13
2012-11-23 11:12:13 → Fri 2012-11-23 11:12:13
@@ -89,39 +89,40 @@
11min ago → Fri 2012-11-23 18:04:22</pre><p>Note that timestamps printed by systemd will not
be parsed correctly by systemd, as the timezone
specification is not accepted, and printing timestamps
- is subject to locale settings for the week day while
- parsing only accepts english week day names.</p><p>In some cases systemd will display a relative
+ is subject to locale settings for the weekday while
+ parsing only accepts English weekday names.</p><p>In some cases, systemd will display a relative
timestamp (relative to the current time, or the time
of invocation of the command) instead or in addition
to an absolute timestamp as described above. A
relative timestamp is formatted as follows:</p><p>2 months 5 days ago</p><p>Note that any relative timestamp will also parse
- correctly where a timestamp is expected. (see above)</p></div><div class="refsect1"><a name="idm259773833232"></a><h2 id="Calendar Events">Calendar Events<a class="headerlink" title="Permalink to this headline" href="#Calendar%20Events">¶</a></h2><p>Calendar events may be used to refer to one or
+ correctly where a timestamp is expected. (see above)</p></div><div class="refsect1"><a name="idm274707370192"></a><h2 id="Calendar Events">Calendar Events<a class="headerlink" title="Permalink to this headline" href="#Calendar%20Events">¶</a></h2><p>Calendar events may be used to refer to one or
more points in time in a single expression. They form
a superset of the absolute timestamps explained above:</p><pre class="programlisting">Thu,Fri 2012-*-1,5 11:12:13</pre><p>The above refers to 11:12:13 of the first or
fifth day of any month of the year 2012, given that it
- is a thursday or friday.</p><p>The weekday specification is optional. If
- specified it should consist of one or more english
- language week day names, either in the abbreviated
+ is a Thursday or Friday.</p><p>The weekday specification is optional. If
+ specified, it should consist of one or more English
+ language weekday names, either in the abbreviated
(Wed) or non-abbreviated (Wednesday) form (case does
- not matter), separated by commas. Specifying two week
- days separated by "-" refers to a range of continuous
- week days. "," and "-" may be combined freely.</p><p>In the date and time specifications any
- component may be specified as "*" in which case any
- value will match. Alternatively, each component can be
- specified as list of values separated by
- commas. Values may also be suffixed with "/" and a
- repetition value, which indicates that the value and
- all values plus multiples of the repetition value are
- matched.</p><p>Either time or date specification may be
+ not matter), separated by commas. Specifying two
+ weekdays separated by "<code class="literal">-</code>" refers to a
+ range of continuous weekdays. "<code class="literal">,</code>" and
+ "<code class="literal">-</code>" may be combined freely.</p><p>In the date and time specifications, any
+ component may be specified as "<code class="literal">*</code>" in
+ which case any value will match. Alternatively, each
+ component can be specified as list of values separated
+ by commas. Values may also be suffixed with
+ "<code class="literal">/</code>" and a repetition value, which
+ indicates that the value and all values plus multiples
+ of the repetition value are matched.</p><p>Either time or date specification may be
omitted, in which case the current day and 00:00:00 is
implied, respectively. If the second component is not
- specified ":00" is assumed.</p><p>Timezone names may not be specified.</p><p>The special expressions
- <code class="literal">hourly</code>, <code class="literal">daily</code>,
- <code class="literal">monthly</code> and <code class="literal">weekly</code>
+ specified, "<code class="literal">:00</code>" is assumed.</p><p>Timezone names may not be specified.</p><p>The special expressions
+ "<code class="literal">hourly</code>", "<code class="literal">daily</code>",
+ "<code class="literal">monthly</code>" and "<code class="literal">weekly</code>"
may be used as calendar events which refer to
- <code class="literal">*-*-* *:00:00</code>, <code class="literal">*-*-*
- 00:00:00</code>, <code class="literal">*-*-01 00:00:00</code> and
- <code class="literal">Mon *-*-* 00:00:00</code>,
+ "<code class="literal">*-*-* *:00:00</code>", "<code class="literal">*-*-*
+ 00:00:00</code>", "<code class="literal">*-*-01 00:00:00</code>" and
+ "<code class="literal">Mon *-*-* 00:00:00</code>",
respectively.</p><p>Examples for valid timestamps and their
normalized form:</p><pre class="programlisting"> Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-* 00:00:00
Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
@@ -149,7 +150,7 @@ Wed-Sat,Tue 12-10-15 1:2:3 → Tue-Sat 2012-10-15 01:02:03
weekly → Mon *-*-* 00:00:00
*:2/3 → *-*-* *:02/3:00</pre><p>Calendar events are used by timer units, see
<a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>
- for details.</p></div><div class="refsect1"><a name="idm259773906032"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ for details.</p></div><div class="refsect1"><a name="idm274702371456"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="journalctl.html"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a>,
<a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>,
diff --git a/man/systemd.time.xml b/man/systemd.time.xml
index a9318bb787..f438fa5bb9 100644
--- a/man/systemd.time.xml
+++ b/man/systemd.time.xml
@@ -50,16 +50,16 @@
<refsect1>
<title>Description</title>
- <para>In systemd timestamps, timespans, and calendar
+ <para>In systemd, timestamps, time spans, and calendar
events are displayed and may be specified in closely
related syntaxes.</para>
</refsect1>
<refsect1>
- <title>Displaying Timespans</title>
+ <title>Displaying Time Spans</title>
- <para>Timespans refer to time durations. On display
- systemd will present timespans as a space separated
+ <para>Time spans refer to time durations. On display,
+ systemd will present time spans as a space-separated
series of time values each suffixed by a time
unit.</para>
@@ -70,10 +70,10 @@
</refsect1>
<refsect1>
- <title>Parsing Timespans</title>
+ <title>Parsing Time Spans</title>
- <para>When parsing systemd will accept the same
- timespan syntax. Separating spaces may be omitted. The
+ <para>When parsing, systemd will accept the same
+ time span syntax. Separating spaces may be omitted. The
following time units are understood:</para>
<itemizedlist>
@@ -92,9 +92,9 @@
are assumed, but some exceptions exist and are marked
as such. In a few cases <literal>ns</literal>,
<literal>nsec</literal> is accepted too, where the
- granularity of the timespan allows for this.</para>
+ granularity of the time span allows for this.</para>
- <para>Examples for valid timespan specifications:</para>
+ <para>Examples for valid time span specifications:</para>
<programlisting>2 h
2hours
@@ -108,12 +108,12 @@
<title>Displaying Timestamps</title>
<para>Timestamps refer to specific, unique points in
- time. On display systemd will format these in the
+ time. On display, systemd will format these in the
local timezone as follows:</para>
<programlisting>Fri 2012-11-23 23:02:15 CET</programlisting>
- <para>The week day is printed according to the locale
+ <para>The weekday is printed according to the locale
choice of the user.</para>
</refsect1>
@@ -123,11 +123,11 @@
<para>When parsing systemd will accept a similar
timestamp syntax, but excluding any timezone
specification (this limitation might be removed
- eventually). The week day specification is optional,
- but when the week day is specified it must either be
+ eventually). The weekday specification is optional,
+ but when the weekday is specified it must either be
in the abbreviated (<literal>Wed</literal>) or
- non-abbreviated (<literal>Wednesday</literal>) english
- language form (case doesn't matter), and is not
+ non-abbreviated (<literal>Wednesday</literal>) English
+ language form (case does not matter), and is not
subject to the locale choice of the user. Either the
date, or the time part may be omitted, in which case
the current date or 00:00:00, resp., is assumed. The
@@ -136,11 +136,11 @@
specified in full or may be abbreviated (omitting the
century).</para>
- <para>A timestamp is considered invalid if a week day
+ <para>A timestamp is considered invalid if a weekday
is specified and the date does not actually match the
specified day of the week.</para>
- <para>When parsing systemd will also accept a few
+ <para>When parsing, systemd will also accept a few
special placeholders instead of timestamps:
<literal>now</literal> may be used to refer to the
current time (or of the invocation of the command
@@ -150,14 +150,14 @@
current day, the day before or the next day,
respectively.</para>
- <para>When parsing systemd will also accept relative
- time specifications. A timespan (see above) that is
+ <para>When parsing, systemd will also accept relative
+ time specifications. A time span (see above) that is
prefixed with <literal>+</literal> is evaluated to the
current time plus the specified
- timespan. Correspondingly a timespan that is prefix
+ time span. Correspondingly, a time span that is prefixed
with <literal>-</literal> is evaluated to the current
- time minus the specified timespan. Instead of
- prefixing the timespan with <literal>-</literal> it
+ time minus the specified time span. Instead of
+ prefixing the time span with <literal>-</literal>, it
may also be suffixed with a space and the word
<literal>ago</literal>.</para>
@@ -182,10 +182,10 @@
<para>Note that timestamps printed by systemd will not
be parsed correctly by systemd, as the timezone
specification is not accepted, and printing timestamps
- is subject to locale settings for the week day while
- parsing only accepts english week day names.</para>
+ is subject to locale settings for the weekday while
+ parsing only accepts English weekday names.</para>
- <para>In some cases systemd will display a relative
+ <para>In some cases, systemd will display a relative
timestamp (relative to the current time, or the time
of invocation of the command) instead or in addition
to an absolute timestamp as described above. A
@@ -208,29 +208,30 @@
<para>The above refers to 11:12:13 of the first or
fifth day of any month of the year 2012, given that it
- is a thursday or friday.</para>
+ is a Thursday or Friday.</para>
<para>The weekday specification is optional. If
- specified it should consist of one or more english
- language week day names, either in the abbreviated
+ specified, it should consist of one or more English
+ language weekday names, either in the abbreviated
(Wed) or non-abbreviated (Wednesday) form (case does
- not matter), separated by commas. Specifying two week
- days separated by "-" refers to a range of continuous
- week days. "," and "-" may be combined freely.</para>
-
- <para>In the date and time specifications any
- component may be specified as "*" in which case any
- value will match. Alternatively, each component can be
- specified as list of values separated by
- commas. Values may also be suffixed with "/" and a
- repetition value, which indicates that the value and
- all values plus multiples of the repetition value are
- matched.</para>
+ not matter), separated by commas. Specifying two
+ weekdays separated by <literal>-</literal> refers to a
+ range of continuous weekdays. <literal>,</literal> and
+ <literal>-</literal> may be combined freely.</para>
+
+ <para>In the date and time specifications, any
+ component may be specified as <literal>*</literal> in
+ which case any value will match. Alternatively, each
+ component can be specified as list of values separated
+ by commas. Values may also be suffixed with
+ <literal>/</literal> and a repetition value, which
+ indicates that the value and all values plus multiples
+ of the repetition value are matched.</para>
<para>Either time or date specification may be
omitted, in which case the current day and 00:00:00 is
implied, respectively. If the second component is not
- specified ":00" is assumed.</para>
+ specified, <literal>:00</literal> is assumed.</para>
<para>Timezone names may not be specified.</para>
diff --git a/man/systemd.timer.5 b/man/systemd.timer.5
new file mode 100644
index 0000000000..4a650d365f
--- /dev/null
+++ b/man/systemd.timer.5
@@ -0,0 +1,111 @@
+'\" t
+.TH "SYSTEMD\&.TIMER" "5" "" "systemd 208" "systemd.timer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.timer \- Timer unit configuration
+.SH "SYNOPSIS"
+.PP
+\fItimer\fR\&.timer
+.SH "DESCRIPTION"
+.PP
+A unit configuration file whose name ends in
+"\&.timer"
+encodes information about a timer controlled and supervised by systemd, for timer\-based activation\&.
+.PP
+This man page lists the configuration options specific to this unit type\&. See
+\fBsystemd.unit\fR(5)
+for the common options of all unit configuration files\&. The common configuration items are configured in the generic [Unit] and [Install] sections\&. The timer specific configuration options are configured in the [Timer] section\&.
+.PP
+For each timer file, a matching unit file must exist, describing the unit to activate when the timer elapses\&. By default, a service by the same name as the timer (except for the suffix) is activated\&. Example: a timer file
+foo\&.timer
+activates a matching service
+foo\&.service\&. The unit to activate may be controlled by
+\fIUnit=\fR
+(see below)\&.
+.PP
+Unless
+\fIDefaultDependencies=\fR
+is set to
+\fBfalse\fR, timer units will implicitly have dependencies of type
+\fIConflicts=\fR
+and
+\fIBefore=\fR
+on
+shutdown\&.target\&. These ensure that timer units are stopped cleanly prior to system shutdown\&. Only timer units involved with early boot or late system shutdown should disable this option\&.
+.SH "OPTIONS"
+.PP
+Timer files must include a [Timer] section, which carries information about the timer it defines\&. The options specific to the [Timer] section of timer units are the following:
+.PP
+\fIOnActiveSec=\fR, \fIOnBootSec=\fR, \fIOnStartupSec=\fR, \fIOnUnitActiveSec=\fR, \fIOnUnitInactiveSec=\fR
+.RS 4
+Defines monotonic timers relative to different starting points:
+\fIOnActiveSec=\fR
+defines a timer relative to the moment the timer itself is activated\&.
+\fIOnBootSec=\fR
+defines a timer relative to when the machine was booted up\&.
+\fIOnStartupSec=\fR
+defines a timer relative to when systemd was first started\&.
+\fIOnUnitActiveSec=\fR
+defines a timer relative to when the unit the timer is activating was last activated\&.
+\fIOnUnitInactiveSec=\fR
+defines a timer relative to when the unit the timer is activating was last deactivated\&.
+.sp
+Multiple directives may be combined of the same and of different types\&. For example, by combining
+\fIOnBootSec=\fR
+and
+\fIOnUnitActiveSec=\fR, it is possible to define a timer that elapses in regular intervals and activates a specific service each time\&.
+.sp
+The arguments to the directives are time spans configured in seconds\&. Example: "OnBootSec=50" means 50s after boot\-up\&. The argument may also include time units\&. Example: "OnBootSec=5h 30min" means 5 hours and 30 minutes after boot\-up\&. For details about the syntax of time spans see
+\fBsystemd.unit\fR(5)\&.
+.sp
+If a timer configured with
+\fIOnBootSec=\fR
+or
+\fIOnStartupSec=\fR
+is already in the past when the timer unit is activated, it will immediately elapse and the configured unit is started\&. This is not the case for timers defined in the other directives\&.
+.sp
+These are monotonic timers, independent of wall\-clock time and timezones\&. If the computer is temporarily suspended, the monotonic clock stops too\&.
+.sp
+If the empty string is assigned to any of these options, the list of timers is reset, and all prior assignments will have no effect\&.
+.RE
+.PP
+\fIOnCalendar=\fR
+.RS 4
+Defines realtime (i\&.e\&. wallclock) timers via calendar event expressions\&. See
+\fBsystemd.time\fR(7)
+for more information on the syntax of calendar event expressions\&. Otherwise the semantics are similar to
+\fIOnActiveSec=\fR
+and related settings\&.
+.RE
+.PP
+\fIUnit=\fR
+.RS 4
+The unit to activate when this timer elapses\&. The argument is a unit name, whose suffix is not
+"\&.timer"\&. If not specified, this value defaults to a service that has the same name as the timer unit, except for the suffix\&. (See above\&.) It is recommended that the unit name that is activated and the unit name of the timer unit are named identically, except for the suffix\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.unit\fR(5),
+\fBsystemd.service\fR(5),
+\fBsystemd.time\fR(7),
+\fBsystemd.directives\fR(7)
diff --git a/man/systemd.timer.html b/man/systemd.timer.html
index 8863ef1ec7..76b09e1533 100644
--- a/man/systemd.timer.html
+++ b/man/systemd.timer.html
@@ -19,8 +19,8 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.timer"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.timer — Timer unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>timer</code></em>.timer</code></p></div><div class="refsect1"><a name="idm259771669952"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
- <code class="filename">.timer</code> encodes information about
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.timer"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.timer — Timer unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>timer</code></em>.timer</code></p></div><div class="refsect1"><a name="idm274685232304"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file whose name ends in
+ "<code class="literal">.timer</code>" encodes information about
a timer controlled and supervised by systemd, for
timer-based activation.</p><p>This man page lists the configuration options
specific to this unit type. See
@@ -45,7 +45,7 @@
that timer units are stopped cleanly prior to system
shutdown. Only timer units involved with early boot or
late system shutdown should disable this
- option.</p></div><div class="refsect1"><a name="idm259771796112"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Timer files must include a [Timer] section,
+ option.</p></div><div class="refsect1"><a name="idm274685223008"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Timer files must include a [Timer] section,
which carries information about the timer it
defines. The options specific to the [Timer] section
of timer units are the following:</p><div class="variablelist"><dl class="variablelist"><dt id="OnActiveSec="><span class="term"><code class="varname">OnActiveSec=</code>, </span><span class="term"><code class="varname">OnBootSec=</code>, </span><span class="term"><code class="varname">OnStartupSec=</code>, </span><span class="term"><code class="varname">OnUnitActiveSec=</code>, </span><span class="term"><code class="varname">OnUnitInactiveSec=</code></span><a class="headerlink" title="Permalink to this term" href="#OnActiveSec=">¶</a></dt><dd><p>Defines monotonic timers
@@ -69,7 +69,7 @@
combined of the same and of different
types. For example, by combining
<code class="varname">OnBootSec=</code> and
- <code class="varname">OnUnitActiveSec=</code> it is
+ <code class="varname">OnUnitActiveSec=</code>, it is
possible to define a timer that
elapses in regular intervals and
activates a specific service each
@@ -93,7 +93,7 @@
independent of wall-clock time and timezones. If the
computer is temporarily suspended, the
monotonic clock stops too.</p><p>If the empty string is assigned
- to any of these options the list of
+ to any of these options, the list of
timers is reset, and all prior
assignments will have no
effect.</p></dd><dt id="OnCalendar="><span class="term"><code class="varname">OnCalendar=</code></span><a class="headerlink" title="Permalink to this term" href="#OnCalendar=">¶</a></dt><dd><p>Defines realtime
@@ -107,7 +107,7 @@
related settings.</p></dd><dt id="Unit="><span class="term"><code class="varname">Unit=</code></span><a class="headerlink" title="Permalink to this term" href="#Unit=">¶</a></dt><dd><p>The unit to activate
when this timer elapses. The argument is a
unit name, whose suffix is not
- <code class="filename">.timer</code>. If not
+ "<code class="literal">.timer</code>". If not
specified, this value defaults to a
service that has the same name as the
timer unit, except for the
@@ -115,7 +115,7 @@
that the unit name that is activated
and the unit name of the timer unit
are named identically, except for the
- suffix.</p></dd></dl></div></div><div class="refsect1"><a name="idm259771921968"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ suffix.</p></dd></dl></div></div><div class="refsect1"><a name="idm274689185168"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.unit.html"><span class="citerefentry"><span class="refentrytitle">systemd.unit</span>(5)</span></a>,
diff --git a/man/systemd.timer.xml b/man/systemd.timer.xml
index 2b9d91a60f..659bc81ccd 100644
--- a/man/systemd.timer.xml
+++ b/man/systemd.timer.xml
@@ -55,7 +55,7 @@
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.timer</filename> encodes information about
+ <literal>.timer</literal> encodes information about
a timer controlled and supervised by systemd, for
timer-based activation.</para>
@@ -128,7 +128,7 @@
combined of the same and of different
types. For example, by combining
<varname>OnBootSec=</varname> and
- <varname>OnUnitActiveSec=</varname> it is
+ <varname>OnUnitActiveSec=</varname>, it is
possible to define a timer that
elapses in regular intervals and
activates a specific service each
@@ -160,7 +160,7 @@
monotonic clock stops too.</para>
<para>If the empty string is assigned
- to any of these options the list of
+ to any of these options, the list of
timers is reset, and all prior
assignments will have no
effect.</para></listitem>
@@ -187,7 +187,7 @@
<listitem><para>The unit to activate
when this timer elapses. The argument is a
unit name, whose suffix is not
- <filename>.timer</filename>. If not
+ <literal>.timer</literal>. If not
specified, this value defaults to a
service that has the same name as the
timer unit, except for the
diff --git a/man/systemd.unit.5 b/man/systemd.unit.5
new file mode 100644
index 0000000000..67acbd287e
--- /dev/null
+++ b/man/systemd.unit.5
@@ -0,0 +1,873 @@
+'\" t
+.TH "SYSTEMD\&.UNIT" "5" "" "systemd 208" "systemd.unit"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+systemd.unit \- Unit configuration
+.SH "SYNOPSIS"
+.PP
+\fIservice\fR\&.service,
+\fIsocket\fR\&.socket,
+\fIdevice\fR\&.device,
+\fImount\fR\&.mount,
+\fIautomount\fR\&.automount,
+\fIswap\fR\&.swap,
+\fItarget\fR\&.target,
+\fIpath\fR\&.path,
+\fItimer\fR\&.timer,
+\fIsnapshot\fR\&.snapshot,
+\fIslice\fR\&.slice,
+\fIscope\fR\&.scope
+.PP
+.nf
+/etc/systemd/system/*
+/run/systemd/system/*
+/usr/lib/systemd/system/*
+\&.\&.\&.
+
+.fi
+.PP
+.nf
+$HOME/\&.config/systemd/user/*
+/etc/systemd/user/*
+/run/systemd/user/*
+/usr/lib/systemd/user/*
+\&.\&.\&.
+
+.fi
+.SH "DESCRIPTION"
+.PP
+A unit configuration file encodes information about a service, a socket, a device, a mount point, an automount point, a swap file or partition, a start\-up target, a watched file system path, a timer controlled and supervised by
+\fBsystemd\fR(1), a temporary system state snapshot, a resource management slice or a group of externally created processes\&. The syntax is inspired by
+\m[blue]\fBXDG Desktop Entry Specification\fR\m[]\&\s-2\u[1]\d\s+2\&.desktop
+files, which are in turn inspired by Microsoft Windows
+\&.ini
+files\&.
+.PP
+This man page lists the common configuration options of all the unit types\&. These options need to be configured in the [Unit] or [Install] sections of the unit files\&.
+.PP
+In addition to the generic [Unit] and [Install] sections described here, each unit may have a type\-specific section, e\&.g\&. [Service] for a service unit\&. See the respective man pages for more information:
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.device\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.automount\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd.target\fR(5),
+\fBsystemd.path\fR(5),
+\fBsystemd.timer\fR(5),
+\fBsystemd.snapshot\fR(5)\&.
+\fBsystemd.slice\fR(5)\&.
+\fBsystemd.scope\fR(5)\&.
+.PP
+Unit files are loaded from a set of paths determined during compilation, described in the next section\&.
+.PP
+Unit files may contain additional options on top of those listed here\&. If systemd encounters an unknown option, it will write a warning log message but continue loading the unit\&. If an option is prefixed with
+\fBX\-\fR, it is ignored completely by systemd\&. Applications may use this to include additional information in the unit files\&.
+.PP
+Boolean arguments used in unit files can be written in various formats\&. For positive settings the strings
+\fB1\fR,
+\fByes\fR,
+\fBtrue\fR
+and
+\fBon\fR
+are equivalent\&. For negative settings, the strings
+\fB0\fR,
+\fBno\fR,
+\fBfalse\fR
+and
+\fBoff\fR
+are equivalent\&.
+.PP
+Time span values encoded in unit files can be written in various formats\&. A stand\-alone number specifies a time in seconds\&. If suffixed with a time unit, the unit is honored\&. A concatenation of multiple values with units is supported, in which case the values are added up\&. Example: "50" refers to 50 seconds; "2min 200ms" refers to 2 minutes plus 200 milliseconds, i\&.e\&. 120200ms\&. The following time units are understood: s, min, h, d, w, ms, us\&. For details see
+\fBsystemd.time\fR(7)\&.
+.PP
+Empty lines and lines starting with # or ; are ignored\&. This may be used for commenting\&. Lines ending in a backslash are concatenated with the following line while reading and the backslash is replaced by a space character\&. This may be used to wrap long lines\&.
+.PP
+Along with a unit file
+foo\&.service, the directory
+foo\&.service\&.wants/
+may exist\&. All unit files symlinked from such a directory are implicitly added as dependencies of type
+\fIWanted=\fR
+to the unit\&. This is useful to hook units into the start\-up of other units, without having to modify their unit files\&. For details about the semantics of
+\fIWanted=\fR, see below\&. The preferred way to create symlinks in the
+\&.wants/
+directory of a unit file is with the
+\fBenable\fR
+command of the
+\fBsystemctl\fR(1)
+tool which reads information from the [Install] section of unit files (see below)\&. A similar functionality exists for
+\fIRequires=\fR
+type dependencies as well, the directory suffix is
+\&.requires/
+in this case\&.
+.PP
+Along with a unit file
+foo\&.service, a directory
+foo\&.service\&.d/
+may exist\&. All files with the suffix
+"\&.conf"
+from this directory will be parsed after the file itself is parsed\&. This is useful to alter or add configuration settings to a unit, without having to modify their unit files\&. Make sure that the file that is included has the appropriate section headers before any directive\&.
+.PP
+If a line starts with
+\fB\&.include\fR
+followed by a filename, the specified file will be parsed at this point\&. Make sure that the file that is included has the appropriate section headers before any directives\&.
+.PP
+Note that while systemd offers a flexible dependency system between units it is recommended to use this functionality only sparingly and instead rely on techniques such as bus\-based or socket\-based activation which make dependencies implicit, resulting in a both simpler and more flexible system\&.
+.PP
+Some unit names reflect paths existing in the file system namespace\&. Example: a device unit
+dev\-sda\&.device
+refers to a device with the device node
+/dev/sda
+in the file system namespace\&. If this applies, a special way to escape the path name is used, so that the result is usable as part of a filename\&. Basically, given a path, "/" is replaced by "\-", and all unprintable characters and the "\-" are replaced by C\-style "\ex20" escapes\&. The root directory "/" is encoded as single dash, while otherwise the initial and ending "/" is removed from all paths during transformation\&. This escaping is reversible\&.
+.PP
+Optionally, units may be instantiated from a template file at runtime\&. This allows creation of multiple units from a single configuration file\&. If systemd looks for a unit configuration file, it will first search for the literal unit name in the filesystem\&. If that yields no success and the unit name contains an
+"@"
+character, systemd will look for a unit template that shares the same name but with the instance string (i\&.e\&. the part between the
+"@"
+character and the suffix) removed\&. Example: if a service
+getty@tty3\&.service
+is requested and no file by that name is found, systemd will look for
+getty@\&.service
+and instantiate a service from that configuration file if it is found\&.
+.PP
+To refer to the instance string from within the configuration file you may use the special
+"%i"
+specifier in many of the configuration options\&. See below for details\&.
+.PP
+If a unit file is empty (i\&.e\&. has the file size 0) or is symlinked to
+/dev/null, its configuration will not be loaded and it appears with a load state of
+"masked", and cannot be activated\&. Use this as an effective way to fully disable a unit, making it impossible to start it even manually\&.
+.PP
+The unit file format is covered by the
+\m[blue]\fBInterface Stability Promise\fR\m[]\&\s-2\u[2]\d\s+2\&.
+.SH "UNIT LOAD PATH"
+.PP
+Unit files are loaded from a set of paths determined during compilation, described in the two tables below\&. Unit files found in directories listed earlier override files with the same name in directories lower in the list\&.
+.PP
+When systemd is running in user mode (\fB\-\-user\fR) and the variable
+\fI$SYSTEMD_UNIT_PATH\fR
+is set, this contents of this variable overrides the unit load path\&.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&1.\ \& Load path when running in system mode (\-\-system).
+.TS
+allbox tab(:);
+lB lB.
+T{
+Path
+T}:T{
+Description
+T}
+.T&
+l l
+l l
+l l.
+T{
+/etc/systemd/system
+T}:T{
+Local configuration
+T}
+T{
+/run/systemd/system
+T}:T{
+Runtime units
+T}
+T{
+/usr/lib/systemd/system
+T}:T{
+Units of installed packages
+T}
+.TE
+.sp 1
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&2.\ \& Load path when running in user mode (\-\-user).
+.TS
+allbox tab(:);
+lB lB.
+T{
+Path
+T}:T{
+Description
+T}
+.T&
+l l
+l l
+l l
+l l.
+T{
+$HOME/\&.config/systemd/user
+T}:T{
+User configuration
+T}
+T{
+/etc/systemd/user
+T}:T{
+Local configuration
+T}
+T{
+/run/systemd/user
+T}:T{
+Runtime units
+T}
+T{
+/usr/lib/systemd/user
+T}:T{
+Units of installed packages
+T}
+.TE
+.sp 1
+.PP
+Additional units might be loaded into systemd ("linked") from directories not on the unit load path\&. See the
+\fBlink\fR
+command for
+\fBsystemctl\fR(1)\&. Also, some units are dynamically created via generators
+\m[blue]\fBGenerators\fR\m[]\&\s-2\u[3]\d\s+2\&.
+.SH "OPTIONS"
+.PP
+Unit file may include a [Unit] section, which carries generic information about the unit that is not dependent on the type of unit:
+.PP
+\fIDescription=\fR
+.RS 4
+A free\-form string describing the unit\&. This is intended for use in UIs to show descriptive information along with the unit name\&. The description should contain a name that means something to the end user\&.
+"Apache2 Web Server"
+is a good example\&. Bad examples are
+"high\-performance light\-weight HTTP server"
+(too generic) or
+"Apache2"
+(too specific and meaningless for people who do not know Apache)\&.
+.RE
+.PP
+\fIDocumentation=\fR
+.RS 4
+A space\-separated list of URIs referencing documentation for this unit or its configuration\&. Accepted are only URIs of the types
+"http://",
+"https://",
+"file:",
+"info:",
+"man:"\&. For more information about the syntax of these URIs, see
+\fBuri\fR(7)\&. The URIs should be listed in order of relevance, starting with the most relevant\&. It is a good idea to first reference documentation that explains what the unit\*(Aqs purpose is, followed by how it is configured, followed by any other related documentation\&. This option may be specified more than once in which case the specified list of URIs is merged\&. If the empty string is assigned to this option, the list is reset and all prior assignments will have no effect\&.
+.RE
+.PP
+\fIRequires=\fR
+.RS 4
+Configures requirement dependencies on other units\&. If this unit gets activated, the units listed here will be activated as well\&. If one of the other units gets deactivated or its activation fails, this unit will be deactivated\&. This option may be specified more than once, in which case requirement dependencies for all listed names are created\&. Note that requirement dependencies do not influence the order in which services are started or stopped\&. This has to be configured independently with the
+\fIAfter=\fR
+or
+\fIBefore=\fR
+options\&. If a unit
+foo\&.service
+requires a unit
+bar\&.service
+as configured with
+\fIRequires=\fR
+and no ordering is configured with
+\fIAfter=\fR
+or
+\fIBefore=\fR, then both units will be started simultaneously and without any delay between them if
+foo\&.service
+is activated\&. Often it is a better choice to use
+\fIWants=\fR
+instead of
+\fIRequires=\fR
+in order to achieve a system that is more robust when dealing with failing services\&.
+.sp
+Note that dependencies of this type may also be configured outside of the unit configuration file by adding a symlink to a
+\&.requires/
+directory accompanying the unit file\&. For details see above\&.
+.RE
+.PP
+\fIRequiresOverridable=\fR
+.RS 4
+Similar to
+\fIRequires=\fR\&. Dependencies listed in
+\fIRequiresOverridable=\fR
+which cannot be fulfilled or fail to start are ignored if the startup was explicitly requested by the user\&. If the start\-up was pulled in indirectly by some dependency or automatic start\-up of units that is not requested by the user, this dependency must be fulfilled and otherwise the transaction fails\&. Hence, this option may be used to configure dependencies that are normally honored unless the user explicitly starts up the unit, in which case whether they failed or not is irrelevant\&.
+.RE
+.PP
+\fIRequisite=\fR, \fIRequisiteOverridable=\fR
+.RS 4
+Similar to
+\fIRequires=\fR
+and
+\fIRequiresOverridable=\fR, respectively\&. However, if a unit listed here is not started already it will not be started and the transaction fails immediately\&.
+.RE
+.PP
+\fIWants=\fR
+.RS 4
+A weaker version of
+\fIRequires=\fR\&. A unit listed in this option will be started if the configuring unit is\&. However, if the listed unit fails to start up or cannot be added to the transaction this has no impact on the validity of the transaction as a whole\&. This is the recommended way to hook start\-up of one unit to the start\-up of another unit\&.
+.sp
+Note that dependencies of this type may also be configured outside of the unit configuration file by adding a symlink to a
+\&.wants/
+directory accompanying the unit file\&. For details see above\&.
+.RE
+.PP
+\fIBindsTo=\fR
+.RS 4
+Configures requirement dependencies, very similar in style to
+\fIRequires=\fR, however in addition to this behavior it also declares that this unit is stopped when any of the units listed suddenly disappears\&. Units can suddenly, unexpectedly disappear if a service terminates on its own choice, a device is unplugged or a mount point unmounted without involvement of systemd\&.
+.RE
+.PP
+\fIPartOf=\fR
+.RS 4
+Configures dependencies similar to
+\fIRequires=\fR, but limited to stopping and restarting of units\&. When systemd stops or restarts the units listed here, the action is propagated to this unit\&. Note that this is a one way dependency \- changes to this unit do not affect the listed units\&.
+.RE
+.PP
+\fIConflicts=\fR
+.RS 4
+Configures negative requirement dependencies\&. If a unit has a
+\fIConflicts=\fR
+setting on another unit, starting the former will stop the latter and vice versa\&. Note that this setting is independent of and orthogonal to the
+\fIAfter=\fR
+and
+\fIBefore=\fR
+ordering dependencies\&.
+.sp
+If a unit A that conflicts with a unit B is scheduled to be started at the same time as B, the transaction will either fail (in case both are required part of the transaction) or be modified to be fixed (in case one or both jobs are not a required part of the transaction)\&. In the latter case the job that is not the required will be removed, or in case both are not required the unit that conflicts will be started and the unit that is conflicted is stopped\&.
+.RE
+.PP
+\fIBefore=\fR, \fIAfter=\fR
+.RS 4
+Configures ordering dependencies between units\&. If a unit
+foo\&.service
+contains a setting
+\fBBefore=bar\&.service\fR
+and both units are being started,
+bar\&.service\*(Aqs start\-up is delayed until
+foo\&.service
+is started up\&. Note that this setting is independent of and orthogonal to the requirement dependencies as configured by
+\fIRequires=\fR\&. It is a common pattern to include a unit name in both the
+\fIAfter=\fR
+and
+\fIRequires=\fR
+option in which case the unit listed will be started before the unit that is configured with these options\&. This option may be specified more than once, in which case ordering dependencies for all listed names are created\&.
+\fIAfter=\fR
+is the inverse of
+\fIBefore=\fR, i\&.e\&. while
+\fIAfter=\fR
+ensures that the configured unit is started after the listed unit finished starting up,
+\fIBefore=\fR
+ensures the opposite, i\&.e\&. that the configured unit is fully started up before the listed unit is started\&. Note that when two units with an ordering dependency between them are shut down, the inverse of the start\-up order is applied\&. i\&.e\&. if a unit is configured with
+\fIAfter=\fR
+on another unit, the former is stopped before the latter if both are shut down\&. If one unit with an ordering dependency on another unit is shut down while the latter is started up, the shut down is ordered before the start\-up regardless whether the ordering dependency is actually of type
+\fIAfter=\fR
+or
+\fIBefore=\fR\&. If two units have no ordering dependencies between them, they are shut down or started up simultaneously, and no ordering takes place\&.
+.RE
+.PP
+\fIOnFailure=\fR
+.RS 4
+Lists one or more units that are activated when this unit enters the
+"failed"
+state\&.
+.RE
+.PP
+\fIPropagatesReloadTo=\fR, \fIReloadPropagatedFrom=\fR
+.RS 4
+Lists one or more units where reload requests on the unit will be propagated to/on the other unit will be propagated from\&. Issuing a reload request on a unit will automatically also enqueue a reload request on all units that the reload request shall be propagated to via these two settings\&.
+.RE
+.PP
+\fIRequiresMountsFor=\fR
+.RS 4
+Takes a space\-separated list of absolute paths\&. Automatically adds dependencies of type
+\fIRequires=\fR
+and
+\fIAfter=\fR
+for all mount units required to access the specified path\&.
+.RE
+.PP
+\fIOnFailureIsolate=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, the unit listed in
+\fIOnFailure=\fR
+will be enqueued in isolation mode, i\&.e\&. all units that are not its dependency will be stopped\&. If this is set, only a single unit may be listed in
+\fIOnFailure=\fR\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIIgnoreOnIsolate=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, this unit will not be stopped when isolating another unit\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIIgnoreOnSnapshot=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, this unit will not be included in snapshots\&. Defaults to
+\fBtrue\fR
+for device and snapshot units,
+\fBfalse\fR
+for the others\&.
+.RE
+.PP
+\fIStopWhenUnneeded=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, this unit will be stopped when it is no longer used\&. Note that in order to minimize the work to be executed, systemd will not stop units by default unless they are conflicting with other units, or the user explicitly requested their shut down\&. If this option is set, a unit will be automatically cleaned up if no other active unit requires it\&. Defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIRefuseManualStart=\fR, \fIRefuseManualStop=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, this unit can only be activated or deactivated indirectly\&. In this case, explicit start\-up or termination requested by the user is denied, however if it is started or stopped as a dependency of another unit, start\-up or termination will succeed\&. This is mostly a safety feature to ensure that the user does not accidentally activate units that are not intended to be activated explicitly, and not accidentally deactivate units that are not intended to be deactivated\&. These options default to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIAllowIsolate=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, this unit may be used with the
+\fBsystemctl isolate\fR
+command\&. Otherwise, this will be refused\&. It probably is a good idea to leave this disabled except for target units that shall be used similar to runlevels in SysV init systems, just as a precaution to avoid unusable system states\&. This option defaults to
+\fBfalse\fR\&.
+.RE
+.PP
+\fIDefaultDependencies=\fR
+.RS 4
+Takes a boolean argument\&. If
+\fBtrue\fR, (the default), a few default dependencies will implicitly be created for the unit\&. The actual dependencies created depend on the unit type\&. For example, for service units, these dependencies ensure that the service is started only after basic system initialization is completed and is properly terminated on system shutdown\&. See the respective man pages for details\&. Generally, only services involved with early boot or late shutdown should set this option to
+\fBfalse\fR\&. It is highly recommended to leave this option enabled for the majority of common units\&. If set to
+\fBfalse\fR, this option does not disable all implicit dependencies, just non\-essential ones\&.
+.RE
+.PP
+\fIJobTimeoutSec=\fR
+.RS 4
+When clients are waiting for a job of this unit to complete, time out after the specified time\&. If this time limit is reached, the job will be cancelled, the unit however will not change state or even enter the
+"failed"
+mode\&. This value defaults to 0 (job timeouts disabled), except for device units\&. NB: this timeout is independent from any unit\-specific timeout (for example, the timeout set with
+\fITimeout=\fR
+in service units) as the job timeout has no effect on the unit itself, only on the job that might be pending for it\&. Or in other words: unit\-specific timeouts are useful to abort unit state changes, and revert them\&. The job timeout set with this option however is useful to abort only the job waiting for the unit state to change\&.
+.RE
+.PP
+\fIConditionPathExists=\fR, \fIConditionPathExistsGlob=\fR, \fIConditionPathIsDirectory=\fR, \fIConditionPathIsSymbolicLink=\fR, \fIConditionPathIsMountPoint=\fR, \fIConditionPathIsReadWrite=\fR, \fIConditionDirectoryNotEmpty=\fR, \fIConditionFileNotEmpty=\fR, \fIConditionFileIsExecutable=\fR, \fIConditionKernelCommandLine=\fR, \fIConditionVirtualization=\fR, \fIConditionSecurity=\fR, \fIConditionCapability=\fR, \fIConditionHost=\fR, \fIConditionACPower=\fR, \fIConditionNull=\fR
+.RS 4
+Before starting a unit verify that the specified condition is true\&. If it is not true, the starting of the unit will be skipped, however all ordering dependencies of it are still respected\&. A failing condition will not result in the unit being moved into a failure state\&. The condition is checked at the time the queued start job is to be executed\&.
+.sp
+With
+\fIConditionPathExists=\fR
+a file existence condition is checked before a unit is started\&. If the specified absolute path name does not exist, the condition will fail\&. If the absolute path name passed to
+\fIConditionPathExists=\fR
+is prefixed with an exclamation mark ("!"), the test is negated, and the unit is only started if the path does not exist\&.
+.sp
+\fIConditionPathExistsGlob=\fR
+is similar to
+\fIConditionPathExists=\fR, but checks for the existence of at least one file or directory matching the specified globbing pattern\&.
+.sp
+\fIConditionPathIsDirectory=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether a certain path exists and is a directory\&.
+.sp
+\fIConditionPathIsSymbolicLink=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether a certain path exists and is a symbolic link\&.
+.sp
+\fIConditionPathIsMountPoint=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether a certain path exists and is a mount point\&.
+.sp
+\fIConditionPathIsReadWrite=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether the underlying file system is readable and writable (i\&.e\&. not mounted read\-only)\&.
+.sp
+\fIConditionDirectoryNotEmpty=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether a certain path exists and is a non\-empty directory\&.
+.sp
+\fIConditionFileNotEmpty=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether a certain path exists and refers to a regular file with a non\-zero size\&.
+.sp
+\fIConditionFileIsExecutable=\fR
+is similar to
+\fIConditionPathExists=\fR
+but verifies whether a certain path exists, is a regular file and marked executable\&.
+.sp
+Similar,
+\fIConditionKernelCommandLine=\fR
+may be used to check whether a specific kernel command line option is set (or if prefixed with the exclamation mark unset)\&. The argument must either be a single word, or an assignment (i\&.e\&. two words, separated
+"=")\&. In the former case the kernel command line is searched for the word appearing as is, or as left hand side of an assignment\&. In the latter case the exact assignment is looked for with right and left hand side matching\&.
+.sp
+\fIConditionVirtualization=\fR
+may be used to check whether the system is executed in a virtualized environment and optionally test whether it is a specific implementation\&. Takes either boolean value to check if being executed in any virtualized environment, or one of
+\fIvm\fR
+and
+\fIcontainer\fR
+to test against a generic type of virtualization solution, or one of
+\fIqemu\fR,
+\fIkvm\fR,
+\fIvmware\fR,
+\fImicrosoft\fR,
+\fIoracle\fR,
+\fIxen\fR,
+\fIbochs\fR,
+\fIchroot\fR,
+\fIuml\fR,
+\fIopenvz\fR,
+\fIlxc\fR,
+\fIlxc\-libvirt\fR,
+\fIsystemd\-nspawn\fR
+to test against a specific implementation\&. If multiple virtualization technologies are nested, only the innermost is considered\&. The test may be negated by prepending an exclamation mark\&.
+.sp
+\fIConditionSecurity=\fR
+may be used to check whether the given security module is enabled on the system\&. Currently the recognized values values are
+\fIselinux\fR,
+\fIapparmor\fR,
+\fIima\fR
+and
+\fIsmack\fR\&. The test may be negated by prepending an exclamation mark\&.
+.sp
+\fIConditionCapability=\fR
+may be used to check whether the given capability exists in the capability bounding set of the service manager (i\&.e\&. this does not check whether capability is actually available in the permitted or effective sets, see
+\fBcapabilities\fR(7)
+for details)\&. Pass a capability name such as
+"CAP_MKNOD", possibly prefixed with an exclamation mark to negate the check\&.
+.sp
+\fIConditionHost=\fR
+may be used to match against the hostname or machine ID of the host\&. This either takes a hostname string (optionally with shell style globs) which is tested against the locally set hostname as returned by
+\fBgethostname\fR(2), or a machine ID formatted as string (see
+\fBmachine-id\fR(5))\&. The test may be negated by prepending an exclamation mark\&.
+.sp
+\fIConditionACPower=\fR
+may be used to check whether the system has AC power, or is exclusively battery powered at the time of activation of the unit\&. This takes a boolean argument\&. If set to
+\fItrue\fR, the condition will hold only if at least one AC connector of the system is connected to a power source, or if no AC connectors are known\&. Conversely, if set to
+\fIfalse\fR, the condition will hold only if there is at least one AC connector known and all AC connectors are disconnected from a power source\&.
+.sp
+Finally,
+\fIConditionNull=\fR
+may be used to add a constant condition check value to the unit\&. It takes a boolean argument\&. If set to
+\fIfalse\fR, the condition will always fail, otherwise succeed\&.
+.sp
+If multiple conditions are specified, the unit will be executed if all of them apply (i\&.e\&. a logical AND is applied)\&. Condition checks can be prefixed with a pipe symbol (|) in which case a condition becomes a triggering condition\&. If at least one triggering condition is defined for a unit, then the unit will be executed if at least one of the triggering conditions apply and all of the non\-triggering conditions\&. If you prefix an argument with the pipe symbol and an exclamation mark, the pipe symbol must be passed first, the exclamation second\&. Except for
+\fIConditionPathIsSymbolicLink=\fR, all path checks follow symlinks\&. If any of these options is assigned the empty string, the list of conditions is reset completely, all previous condition settings (of any kind) will have no effect\&.
+.RE
+.PP
+\fISourcePath=\fR
+.RS 4
+A path to a configuration file this unit has been generated from\&. This is primarily useful for implementation of generator tools that convert configuration from an external configuration file format into native unit files\&. Thus functionality should not be used in normal units\&.
+.RE
+.PP
+Unit file may include a [Install] section, which carries installation information for the unit\&. This section is not interpreted by
+\fBsystemd\fR(1)
+during runtime\&. It is used exclusively by the
+\fBenable\fR
+and
+\fBdisable\fR
+commands of the
+\fBsystemctl\fR(1)
+tool during installation of a unit:
+.PP
+\fIAlias=\fR
+.RS 4
+Additional names this unit shall be installed under\&. The names listed here must have the same suffix (i\&.e\&. type) as the unit file name\&. This option may be specified more than once, in which case all listed names are used\&. At installation time,
+\fBsystemctl enable\fR
+will create symlinks from these names to the unit filename\&.
+.RE
+.PP
+\fIWantedBy=\fR, \fIRequiredBy=\fR
+.RS 4
+A symbolic link is created in the
+\&.wants/
+or
+\&.requires/
+directory of the listed unit when this unit is activated by
+\fBsystemctl enable\fR\&. This has the effect that a dependency of type
+\fIWants=\fR
+or
+\fIRequires=\fR
+is added from the listed unit to the current unit\&. The primary result is that the current unit will be started when the listed unit is started\&. See the description of
+\fIWants=\fR
+and
+\fIRequires=\fR
+in the [Unit] section for details\&.
+.sp
+\fBWantedBy=foo\&.service\fR
+in a service
+bar\&.service
+is mostly equivalent to
+\fBAlias=foo\&.service\&.wants/bar\&.service\fR
+in the same file\&. In case of template units,
+\fBsystemctl enable\fR
+must be called with an instance name, and this instance will be added to the
+\&.wants/
+or
+\&.requires/
+list of the listed unit\&. E\&.g\&.
+\fBWantedBy=getty\&.target\fR
+in a service
+getty@\&.service
+will result in
+\fBsystemctl enable getty@tty2\&.service\fR
+creating a
+getty\&.target\&.wants/getty@tty2\&.service
+link to
+getty@\&.service\&.
+.RE
+.PP
+\fIAlso=\fR
+.RS 4
+Additional units to install/deinstall when this unit is installed/deinstalled\&. If the user requests installation/deinstallation of a unit with this option configured,
+\fBsystemctl enable\fR
+and
+\fBsystemctl disable\fR
+will automatically install/uninstall units listed in this option as well\&.
+.RE
+.PP
+The following specifiers are interpreted in the Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v\&. For their meaning see the next section\&.
+.SH "SPECIFIERS"
+.PP
+Many settings resolve specifiers which may be used to write generic unit files referring to runtime or unit parameters that are replaced when the unit files are loaded\&. The following specifiers are understood:
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&3.\ \&Specifiers available in unit files
+.TS
+allbox tab(:);
+lB lB lB.
+T{
+Specifier
+T}:T{
+Meaning
+T}:T{
+Details
+T}
+.T&
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l
+l l l.
+T{
+"%n"
+T}:T{
+Full unit name
+T}:T{
+\ \&
+T}
+T{
+"%N"
+T}:T{
+Unescaped full unit name
+T}:T{
+\ \&
+T}
+T{
+"%p"
+T}:T{
+Prefix name
+T}:T{
+For instantiated units this refers to the string before the @\&. For non\-instantiated units this refers to to the name of the unit with the type suffix removed\&.
+T}
+T{
+"%P"
+T}:T{
+Unescaped prefix name
+T}:T{
+\ \&
+T}
+T{
+"%i"
+T}:T{
+Instance name
+T}:T{
+For instantiated units: this is the string between the "@" character and the suffix\&.
+T}
+T{
+"%I"
+T}:T{
+Unescaped instance name
+T}:T{
+\ \&
+T}
+T{
+"%f"
+T}:T{
+Unescaped filename
+T}:T{
+This is either the unescaped instance name (if applicable) with / prepended (if applicable), or the prefix name similarly prepended with /\&.
+T}
+T{
+"%c"
+T}:T{
+Control group path of the unit
+T}:T{
+\ \&
+T}
+T{
+"%r"
+T}:T{
+Root control group path where units are placed\&.
+T}:T{
+For system instances this usually resolves to /system, except in containers, where the path might be prefixed with the container\*(Aqs root control group\&.
+T}
+T{
+"%R"
+T}:T{
+Parent directory of the control group path where units are placed\&.
+T}:T{
+For system instances this usually
+ resolves to /, except in
+ containers, where this resolves to the
+ container\*(Aqs root directory\&.
+T}
+T{
+"%t"
+T}:T{
+Runtime socket dir
+T}:T{
+This is either /run (for the system manager) or "$XDG_RUNTIME_DIR" (for user managers)\&.
+T}
+T{
+"%u"
+T}:T{
+User name
+T}:T{
+This is the name of the configured user of the unit, or (if none is set) the user running the systemd instance\&.
+T}
+T{
+"%U"
+T}:T{
+User UID
+T}:T{
+This is the UID of the configured user of the unit, or (if none is set) the user running the systemd instance\&.
+T}
+T{
+"%h"
+T}:T{
+User home directory
+T}:T{
+This is the home directory of the configured user of the unit, or (if none is set) the user running the systemd instance\&.
+T}
+T{
+"%s"
+T}:T{
+User shell
+T}:T{
+This is the shell of the configured user of the unit, or (if none is set) the user running the systemd instance\&. If the user is "root" (UID equal to 0), the shell configured in account database is ignored and /bin/sh is always used\&.
+T}
+T{
+"%m"
+T}:T{
+Machine ID
+T}:T{
+The machine ID of the running system, formatted as string\&. See \fBmachine-id\fR(5) for more information\&.
+T}
+T{
+"%b"
+T}:T{
+Boot ID
+T}:T{
+The boot ID of the running system, formatted as string\&. See \fBrandom\fR(4) for more information\&.
+T}
+T{
+"%H"
+T}:T{
+Host name
+T}:T{
+The hostname of the running system\&.
+T}
+T{
+"%v"
+T}:T{
+Kernel release
+T}:T{
+Identical to \fBuname \-r\fR output\&.
+T}
+T{
+"%%"
+T}:T{
+Escaped %
+T}:T{
+Single percent sign\&.
+T}
+.TE
+.sp 1
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(8),
+\fBsystemd.special\fR(7),
+\fBsystemd.service\fR(5),
+\fBsystemd.socket\fR(5),
+\fBsystemd.device\fR(5),
+\fBsystemd.mount\fR(5),
+\fBsystemd.automount\fR(5),
+\fBsystemd.swap\fR(5),
+\fBsystemd.target\fR(5),
+\fBsystemd.path\fR(5),
+\fBsystemd.timer\fR(5),
+\fBsystemd.snapshot\fR(5),
+\fBsystemd.scope\fR(5),
+\fBsystemd.slice\fR(5),
+\fBsystemd.time\fR(7),
+\fBcapabilities\fR(7),
+\fBsystemd.directives\fR(7),
+\fBuname\fR(1)
+.SH "NOTES"
+.IP " 1." 4
+XDG Desktop Entry Specification
+.RS 4
+\%http://standards.freedesktop.org/desktop-entry-spec/latest/
+.RE
+.IP " 2." 4
+Interface Stability Promise
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise
+.RE
+.IP " 3." 4
+Generators
+.RS 4
+\%http://www.freedesktop.org/wiki/Software/systemd/Generators/
+.RE
diff --git a/man/systemd.unit.html b/man/systemd.unit.html
index 3646921313..7947f99e3b 100644
--- a/man/systemd.unit.html
+++ b/man/systemd.unit.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="systemd.unit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.unit — Unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="systemd.unit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>systemd.unit — Unit configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename"><em class="replaceable"><code>service</code></em>.service</code>,
<code class="filename"><em class="replaceable"><code>socket</code></em>.socket</code>,
<code class="filename"><em class="replaceable"><code>device</code></em>.device</code>,
<code class="filename"><em class="replaceable"><code>mount</code></em>.mount</code>,
@@ -28,22 +28,28 @@
<code class="filename"><em class="replaceable"><code>target</code></em>.target</code>,
<code class="filename"><em class="replaceable"><code>path</code></em>.path</code>,
<code class="filename"><em class="replaceable"><code>timer</code></em>.timer</code>,
- <code class="filename"><em class="replaceable"><code>snapshot</code></em>.snapshot</code></p><div class="literallayout"><p><code class="filename">/etc/systemd/system/*</code><br>
+ <code class="filename"><em class="replaceable"><code>snapshot</code></em>.snapshot</code>,
+ <code class="filename"><em class="replaceable"><code>slice</code></em>.slice</code>,
+ <code class="filename"><em class="replaceable"><code>scope</code></em>.scope</code></p><div class="literallayout"><p><code class="filename">/etc/systemd/system/*</code><br>
<code class="filename">/run/systemd/system/*</code><br>
<code class="filename">/usr/lib/systemd/system/*</code><br>
<code class="filename">...</code><br>
-                </p></div><div class="literallayout"><p><code class="filename">/etc/systemd/user/*</code><br>
+                </p></div><div class="literallayout"><p><code class="filename">$HOME/.config/systemd/user/*</code><br>
+<code class="filename">/etc/systemd/user/*</code><br>
<code class="filename">/run/systemd/user/*</code><br>
<code class="filename">/usr/lib/systemd/user/*</code><br>
<code class="filename">...</code><br>
-                </p></div></div><div class="refsect1"><a name="idm259770089184"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file encodes information
+                </p></div></div><div class="refsect1"><a name="idm274689862320"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>A unit configuration file encodes information
about a service, a socket, a device, a mount point, an
automount point, a swap file or partition, a start-up
- target, a file system path, or a timer controlled and
- supervised by
- <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>. The
- syntax is inspired by <a class="ulink" href="http://standards.freedesktop.org/desktop-entry-spec/latest/" target="_top">XDG
- Desktop Entry Specification</a> <code class="filename">.desktop</code> files, which are in turn
+ target, a watched file system path, a timer controlled
+ and supervised by
+ <a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
+ a temporary system state snapshot, a resource
+ management slice or a group of externally created
+ processes. The syntax is inspired by <a class="ulink" href="http://standards.freedesktop.org/desktop-entry-spec/latest/" target="_top">XDG
+ Desktop Entry Specification</a>
+ <code class="filename">.desktop</code> files, which are in turn
inspired by Microsoft Windows
<code class="filename">.ini</code> files.</p><p>This man page lists the common configuration
options of all the unit types. These options need to
@@ -63,19 +69,21 @@
<a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>,
<a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>,
<a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a>.
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>.
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>.
</p><p>Unit files are loaded from a set of paths
determined during compilation, described in the next section.
</p><p>Unit files may contain additional options on top
of those listed here. If systemd encounters an unknown
- option it will write a warning log message but
+ option, it will write a warning log message but
continue loading the unit. If an option is prefixed
- with <code class="option">X-</code> it is ignored completely by
+ with <code class="option">X-</code>, it is ignored completely by
systemd. Applications may use this to include
additional information in the unit files.</p><p>Boolean arguments used in unit files can be
written in various formats. For positive settings the
strings <code class="option">1</code>, <code class="option">yes</code>,
<code class="option">true</code> and <code class="option">on</code> are
- equivalent. For negative settings the strings
+ equivalent. For negative settings, the strings
<code class="option">0</code>, <code class="option">no</code>,
<code class="option">false</code> and <code class="option">off</code> are
equivalent.</p><p>Time span values encoded in unit files can be
@@ -93,14 +101,14 @@
in a backslash are concatenated with the following
line while reading and the backslash is replaced by a
space character. This may be used to wrap long lines.</p><p>Along with a unit file
- <code class="filename">foo.service</code> the directory
+ <code class="filename">foo.service</code>, the directory
<code class="filename">foo.service.wants/</code> may exist. All
unit files symlinked from such a directory are
implicitly added as dependencies of type
<code class="varname">Wanted=</code> to the unit. This is useful
to hook units into the start-up of other units,
without having to modify their unit files. For details
- about the semantics of <code class="varname">Wanted=</code> see
+ about the semantics of <code class="varname">Wanted=</code>, see
below. The preferred way to create symlinks in the
<code class="filename">.wants/</code> directory of a unit file
is with the <span class="command"><strong>enable</strong></span> command of the
@@ -110,16 +118,16 @@
functionality exists for <code class="varname">Requires=</code>
type dependencies as well, the directory suffix is
<code class="filename">.requires/</code> in this case.</p><p>Along with a unit file
- <code class="filename">foo.service</code> a directory
+ <code class="filename">foo.service</code>, a directory
<code class="filename">foo.service.d/</code> may exist. All
- files with the suffix <code class="filename">.conf</code> from
+ files with the suffix "<code class="literal">.conf</code>" from
this directory will be parsed after the file itself is
parsed. This is useful to alter or add configuration
settings to a unit, without having to modify their
unit files. Make sure that the file that is included
has the appropriate section headers before any
directive.</p><p>If a line starts with <code class="option">.include</code>
- followed by a file name, the specified file will be
+ followed by a filename, the specified file will be
parsed at this point. Make sure that the file that is
included has the appropriate section headers before
any directives.</p><p>Note that while systemd offers a flexible
@@ -128,12 +136,12 @@
on techniques such as bus-based or socket-based
activation which make dependencies implicit, resulting
in a both simpler and more flexible system.</p><p>Some unit names reflect paths existing in the
- file system name space. Example: a device unit
+ file system namespace. Example: a device unit
<code class="filename">dev-sda.device</code> refers to a device
with the device node <code class="filename">/dev/sda</code> in
- the file system namespace. If this applies a special
+ the file system namespace. If this applies, a special
way to escape the path name is used, so that the
- result is usable as part of a file name. Basically,
+ result is usable as part of a filename. Basically,
given a path, "/" is replaced by "-", and all
unprintable characters and the "-" are replaced by
C-style "\x20" escapes. The root directory "/" is
@@ -142,12 +150,12 @@
transformation. This escaping is reversible.</p><p>Optionally, units may be instantiated from a
template file at runtime. This allows creation of
multiple units from a single configuration file. If
- systemd looks for a unit configuration file it will
+ systemd looks for a unit configuration file, it will
first search for the literal unit name in the
filesystem. If that yields no success and the unit
- name contains an @ character, systemd will look for a
+ name contains an "<code class="literal">@</code>" character, systemd will look for a
unit template that shares the same name but with the
- instance string (i.e. the part between the @ character
+ instance string (i.e. the part between the "<code class="literal">@</code>" character
and the suffix) removed. Example: if a service
<code class="filename">getty@tty3.service</code> is requested
and no file by that name is found, systemd will look
@@ -155,55 +163,64 @@
instantiate a service from that configuration file if
it is found.</p><p>To refer to the instance string from
within the configuration file you may use the special
- <code class="literal">%i</code> specifier in many of the
+ "<code class="literal">%i</code>" specifier in many of the
configuration options. See below for details.</p><p>If a unit file is empty (i.e. has the file size
- 0) or is symlinked to <code class="filename">/dev/null</code>
+ 0) or is symlinked to <code class="filename">/dev/null</code>,
its configuration will not be loaded and it appears
- with a load state of <code class="literal">masked</code>, and
+ with a load state of "<code class="literal">masked</code>", and
cannot be activated. Use this as an effective way to
fully disable a unit, making it impossible to start it
even manually.</p><p>The unit file format is covered by the
<a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise" target="_top">Interface
- Stability Promise</a>.</p></div><div class="refsect1"><a name="idm259770239584"></a><h2 id="Unit Load Path">Unit Load Path<a class="headerlink" title="Permalink to this headline" href="#Unit%20Load%20Path">¶</a></h2><p>Unit files are loaded from a set of paths
+ Stability Promise</a>.</p></div><div class="refsect1"><a name="idm274684859136"></a><h2 id="Unit Load Path">Unit Load Path<a class="headerlink" title="Permalink to this headline" href="#Unit%20Load%20Path">¶</a></h2><p>Unit files are loaded from a set of paths
determined during compilation, described in the two
- tables below. Unit files found in directories higher
- in the hierarchy override files with the same name
- lower in the hierarchy, thus allowing overrides.
- </p><p>When systemd is running in user mode
+ tables below. Unit files found in directories listed
+ earlier override files with the same name in
+ directories lower in the list.</p><p>When systemd is running in user mode
(<code class="option">--user</code>) and the variable
<code class="varname">$SYSTEMD_UNIT_PATH</code> is set, this
contents of this variable overrides the unit load
path.
- </p><div class="table"><a name="idm259770236848"></a><p class="title"><b>Table 1. 
+ </p><div class="table"><a name="idm274684856528"></a><p class="title"><b>Table 1. 
Load path when running in system mode (<code class="option">--system</code>).
</b></p><div class="table-contents"><table summary="
Load path when running in system mode (--system).
- " border="1"><colgroup><col class="path"><col class="expl"></colgroup><thead><tr><th>Path</th><th>Description</th></tr></thead><tbody><tr><td><code class="filename">/run/systemd/generator.early</code></td><td>Generated units (early)</td></tr><tr><td><code class="filename">/etc/systemd/system</code></td><td>Local configuration</td></tr><tr><td><code class="filename">/run/systemd/systemd</code></td><td>Volatile units</td></tr><tr><td><code class="filename">/run/systemd/generator</code></td><td>Generated units (middle)</td></tr><tr><td><code class="filename">/usr/local/lib/systemd/system</code></td><td>Units for local packages</td></tr><tr><td><code class="filename">/usr/lib/systemd/system</code></td><td>Units for installed packages</td></tr><tr><td><code class="filename">/run/systemd/generator.late</code></td><td>Generated units (late)</td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idm259770220320"></a><p class="title"><b>Table 2. 
- Load path when running in session mode (<code class="option">--user</code>).
+ " border="1"><colgroup><col class="path"><col class="expl"></colgroup><thead><tr><th>Path</th><th>Description</th></tr></thead><tbody><tr><td><code class="filename">/etc/systemd/system</code></td><td>Local configuration</td></tr><tr><td><code class="filename">/run/systemd/system</code></td><td>Runtime units</td></tr><tr><td><code class="filename">/usr/lib/systemd/system</code></td><td>Units of installed packages</td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="idm274684847280"></a><p class="title"><b>Table 2. 
+ Load path when running in user mode (<code class="option">--user</code>).
</b></p><div class="table-contents"><table summary="
- Load path when running in session mode (--user).
- " border="1"><colgroup><col class="path"><col class="expl"></colgroup><thead><tr><th>Path</th><th>Description</th></tr></thead><tbody><tr><td><code class="filename">/tmp/systemd-generator.early.<em class="replaceable"><code>XXXXXX</code></em></code></td><td>Generated units (early)</td></tr><tr><td><code class="filename">/etc/systemd/user</code></td><td>Local configuration</td></tr><tr><td><code class="filename">/run/systemd/user</code></td><td>Volatile units</td></tr><tr><td><code class="filename">/tmp/systemd-generator.<em class="replaceable"><code>XXXXXX</code></em></code></td><td>Generated units (middle)</td></tr><tr><td><code class="filename">/usr/local/lib/systemd/user</code></td><td>Units for local packages</td></tr><tr><td><code class="filename">/usr/lib/systemd/user</code></td><td>Units for installed packages</td></tr><tr><td><code class="filename">/tmp/systemd-generator.late.<em class="replaceable"><code>XXXXXX</code></em></code></td><td>Generated units (late)</td></tr></tbody></table></div></div><br class="table-break"><p>Additional units might be loaded into systemd
+ Load path when running in user mode (--user).
+ " border="1"><colgroup><col class="path"><col class="expl"></colgroup><thead><tr><th>Path</th><th>Description</th></tr></thead><tbody><tr><td><code class="filename">$HOME/.config/systemd/user</code></td><td>User configuration</td></tr><tr><td><code class="filename">/etc/systemd/user</code></td><td>Local configuration</td></tr><tr><td><code class="filename">/run/systemd/user</code></td><td>Runtime units</td></tr><tr><td><code class="filename">/usr/lib/systemd/user</code></td><td>Units of installed packages</td></tr></tbody></table></div></div><br class="table-break"><p>Additional units might be loaded into systemd
("linked") from directories not on the unit load
path. See the <span class="command"><strong>link</strong></span> command for
- <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>.
- </p></div><div class="refsect1"><a name="idm259765544848"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Unit file may include a [Unit] section, which
+ <a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>. Also,
+ some units are dynamically created via generators
+ <a class="ulink" href="http://www.freedesktop.org/wiki/Software/systemd/Generators/" target="_top">Generators</a>.
+ </p></div><div class="refsect1"><a name="idm274684833712"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>Unit file may include a [Unit] section, which
carries generic information about the unit that is not
dependent on the type of unit:</p><div class="variablelist"><dl class="variablelist"><dt id="Description="><span class="term"><code class="varname">Description=</code></span><a class="headerlink" title="Permalink to this term" href="#Description=">¶</a></dt><dd><p>A free-form string
describing the unit. This is intended
for use in UIs to show descriptive
information along with the unit
- name.</p></dd><dt id="Documentation="><span class="term"><code class="varname">Documentation=</code></span><a class="headerlink" title="Permalink to this term" href="#Documentation=">¶</a></dt><dd><p>A space separated list
+ name. The description should contain a name
+ that means something to the end user.
+ "<code class="literal">Apache2 Web Server</code>" is a good
+ example. Bad examples are
+ "<code class="literal">high-performance light-weight HTTP
+ server</code>" (too generic) or
+ "<code class="literal">Apache2</code>" (too specific and
+ meaningless for people who do not know
+ Apache).</p></dd><dt id="Documentation="><span class="term"><code class="varname">Documentation=</code></span><a class="headerlink" title="Permalink to this term" href="#Documentation=">¶</a></dt><dd><p>A space-separated list
of URIs referencing documentation for
this unit or its
configuration. Accepted are only URIs
of the types
- <code class="literal">http://</code>,
- <code class="literal">https://</code>,
- <code class="literal">file:</code>,
- <code class="literal">info:</code>,
- <code class="literal">man:</code>. For more
+ "<code class="literal">http://</code>",
+ "<code class="literal">https://</code>",
+ "<code class="literal">file:</code>",
+ "<code class="literal">info:</code>",
+ "<code class="literal">man:</code>". For more
information about the syntax of these
- URIs see
+ URIs, see
<a href="uri.html"><span class="citerefentry"><span class="refentrytitle">uri</span>(7)</span></a>. The
URIs should be listed in order of
relevance, starting with the most
@@ -215,7 +232,7 @@
option may be specified more than once
in which case the specified list of
URIs is merged. If the empty string is
- assigned to this option the list is
+ assigned to this option, the list is
reset and all prior assignments will
have no effect.</p></dd><dt id="Requires="><span class="term"><code class="varname">Requires=</code></span><a class="headerlink" title="Permalink to this term" href="#Requires=">¶</a></dt><dd><p>Configures requirement
dependencies on other units. If this
@@ -267,7 +284,7 @@
the start-up was pulled in indirectly
by some dependency or automatic
start-up of units that is not
- requested by the user this dependency
+ requested by the user, this dependency
must be fulfilled and otherwise the
transaction fails. Hence, this option
may be used to configure dependencies
@@ -388,13 +405,13 @@
type <code class="varname">After=</code> or
<code class="varname">Before=</code>. If two
units have no ordering dependencies
- between them they are shut down
+ between them, they are shut down
or started up simultaneously, and
no ordering takes
place. </p></dd><dt id="OnFailure="><span class="term"><code class="varname">OnFailure=</code></span><a class="headerlink" title="Permalink to this term" href="#OnFailure=">¶</a></dt><dd><p>Lists one or more
units that are activated when this
unit enters the
- '<code class="literal">failed</code>'
+ "<code class="literal">failed</code>"
state.</p></dd><dt id="PropagatesReloadTo="><span class="term"><code class="varname">PropagatesReloadTo=</code>, </span><span class="term"><code class="varname">ReloadPropagatedFrom=</code></span><a class="headerlink" title="Permalink to this term" href="#PropagatesReloadTo=">¶</a></dt><dd><p>Lists one or more
units where reload requests on the
unit will be propagated to/on the
@@ -404,34 +421,34 @@
reload request on all units that the
reload request shall be propagated to
via these two
- settings.</p></dd><dt id="RequiresMountsFor="><span class="term"><code class="varname">RequiresMountsFor=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiresMountsFor=">¶</a></dt><dd><p>Takes a space
- separated list of absolute paths. Automatically
+ settings.</p></dd><dt id="RequiresMountsFor="><span class="term"><code class="varname">RequiresMountsFor=</code></span><a class="headerlink" title="Permalink to this term" href="#RequiresMountsFor=">¶</a></dt><dd><p>Takes a space-separated
+ list of absolute paths. Automatically
adds dependencies of type
<code class="varname">Requires=</code> and
<code class="varname">After=</code> for all
mount units required to access the
specified path.</p></dd><dt id="OnFailureIsolate="><span class="term"><code class="varname">OnFailureIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#OnFailureIsolate=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code> the
+ argument. If <code class="option">true</code>, the
unit listed in
<code class="varname">OnFailure=</code> will be
enqueued in isolation mode, i.e. all
units that are not its dependency will
- be stopped. If this is set only a
+ be stopped. If this is set, only a
single unit may be listed in
<code class="varname">OnFailure=</code>. Defaults
to
<code class="option">false</code>.</p></dd><dt id="IgnoreOnIsolate="><span class="term"><code class="varname">IgnoreOnIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreOnIsolate=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
this unit will not be stopped when
isolating another unit. Defaults to
<code class="option">false</code>.</p></dd><dt id="IgnoreOnSnapshot="><span class="term"><code class="varname">IgnoreOnSnapshot=</code></span><a class="headerlink" title="Permalink to this term" href="#IgnoreOnSnapshot=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
this unit will not be included in
snapshots. Defaults to
<code class="option">true</code> for device and
snapshot units, <code class="option">false</code>
for the others.</p></dd><dt id="StopWhenUnneeded="><span class="term"><code class="varname">StopWhenUnneeded=</code></span><a class="headerlink" title="Permalink to this term" href="#StopWhenUnneeded=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
this unit will be stopped when it is
no longer used. Note that in order to
minimize the work to be executed,
@@ -443,10 +460,10 @@
automatically cleaned up if no other
active unit requires it. Defaults to
<code class="option">false</code>.</p></dd><dt id="RefuseManualStart="><span class="term"><code class="varname">RefuseManualStart=</code>, </span><span class="term"><code class="varname">RefuseManualStop=</code></span><a class="headerlink" title="Permalink to this term" href="#RefuseManualStart=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
this unit can only be activated
or deactivated indirectly. In
- this case explicit start-up
+ this case, explicit start-up
or termination requested by the
user is denied, however if it is
started or stopped as a
@@ -460,10 +477,10 @@
not intended to be deactivated.
These options default to
<code class="option">false</code>.</p></dd><dt id="AllowIsolate="><span class="term"><code class="varname">AllowIsolate=</code></span><a class="headerlink" title="Permalink to this term" href="#AllowIsolate=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
this unit may be used with the
<span class="command"><strong>systemctl isolate</strong></span>
- command. Otherwise this will be
+ command. Otherwise, this will be
refused. It probably is a good idea to
leave this disabled except for target
units that shall be used similar to
@@ -471,7 +488,7 @@
as a precaution to avoid unusable
system states. This option defaults to
<code class="option">false</code>.</p></dd><dt id="DefaultDependencies="><span class="term"><code class="varname">DefaultDependencies=</code></span><a class="headerlink" title="Permalink to this term" href="#DefaultDependencies=">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="option">true</code>
+ argument. If <code class="option">true</code>,
(the default), a few default
dependencies will implicitly be
created for the unit. The actual
@@ -489,16 +506,16 @@
highly recommended to leave this
option enabled for the majority of
common units. If set to
- <code class="option">false</code> this option
+ <code class="option">false</code>, this option
does not disable all implicit
dependencies, just non-essential
ones.</p></dd><dt id="JobTimeoutSec="><span class="term"><code class="varname">JobTimeoutSec=</code></span><a class="headerlink" title="Permalink to this term" href="#JobTimeoutSec=">¶</a></dt><dd><p>When clients are
waiting for a job of this unit to
complete, time out after the specified
- time. If this time limit is reached
+ time. If this time limit is reached,
the job will be cancelled, the unit
however will not change state or even
- enter the '<code class="literal">failed</code>'
+ enter the "<code class="literal">failed</code>"
mode. This value defaults to 0 (job
timeouts disabled), except for device
units. NB: this timeout is independent
@@ -516,7 +533,7 @@
waiting for the unit state to
change.</p></dd><dt id="ConditionPathExists="><span class="term"><code class="varname">ConditionPathExists=</code>, </span><span class="term"><code class="varname">ConditionPathExistsGlob=</code>, </span><span class="term"><code class="varname">ConditionPathIsDirectory=</code>, </span><span class="term"><code class="varname">ConditionPathIsSymbolicLink=</code>, </span><span class="term"><code class="varname">ConditionPathIsMountPoint=</code>, </span><span class="term"><code class="varname">ConditionPathIsReadWrite=</code>, </span><span class="term"><code class="varname">ConditionDirectoryNotEmpty=</code>, </span><span class="term"><code class="varname">ConditionFileNotEmpty=</code>, </span><span class="term"><code class="varname">ConditionFileIsExecutable=</code>, </span><span class="term"><code class="varname">ConditionKernelCommandLine=</code>, </span><span class="term"><code class="varname">ConditionVirtualization=</code>, </span><span class="term"><code class="varname">ConditionSecurity=</code>, </span><span class="term"><code class="varname">ConditionCapability=</code>, </span><span class="term"><code class="varname">ConditionHost=</code>, </span><span class="term"><code class="varname">ConditionACPower=</code>, </span><span class="term"><code class="varname">ConditionNull=</code></span><a class="headerlink" title="Permalink to this term" href="#ConditionPathExists=">¶</a></dt><dd><p>Before starting a unit
verify that the specified condition is
- true. If it is not true the starting
+ true. If it is not true, the starting
of the unit will be skipped, however
all ordering dependencies of it are
still respected. A failing condition
@@ -529,12 +546,12 @@
a file existence condition is
checked before a unit is started. If
the specified absolute path name does
- not exist the condition will
+ not exist, the condition will
fail. If the absolute path name passed
to
<code class="varname">ConditionPathExists=</code>
is prefixed with an exclamation mark
- ('!'), the test is negated, and the unit
+ ("<code class="literal">!</code>"), the test is negated, and the unit
is only started if the path does not
exist.</p><p><code class="varname">ConditionPathExistsGlob=</code>
is similar to
@@ -585,7 +602,7 @@
exclamation mark unset). The argument
must either be a single word, or an
assignment (i.e. two words, separated
- '='). In the former
+ "<code class="literal">=</code>"). In the former
case the kernel command line is
searched for the word appearing as is,
or as left hand side of an
@@ -612,21 +629,23 @@
<code class="varname">xen</code>,
<code class="varname">bochs</code>,
<code class="varname">chroot</code>,
+ <code class="varname">uml</code>,
<code class="varname">openvz</code>,
<code class="varname">lxc</code>,
<code class="varname">lxc-libvirt</code>,
<code class="varname">systemd-nspawn</code> to
test against a specific
implementation. If multiple
- virtualization technologies are nested
+ virtualization technologies are nested,
only the innermost is considered. The
test may be negated by prepending an
exclamation mark.</p><p><code class="varname">ConditionSecurity=</code>
may be used to check whether the given
security module is enabled on the
- system. Currently the only recognized
+ system. Currently the recognized values
values are <code class="varname">selinux</code>,
- <code class="varname">apparmor</code>, and
+ <code class="varname">apparmor</code>,
+ <code class="varname">ima</code> and
<code class="varname">smack</code>.
The test may be negated by prepending
an exclamation
@@ -639,15 +658,15 @@
the permitted or effective sets, see
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>
for details). Pass a capability name
- such as <code class="literal">CAP_MKNOD</code>,
+ such as "<code class="literal">CAP_MKNOD</code>",
possibly prefixed with an exclamation
mark to negate the check.</p><p><code class="varname">ConditionHost=</code>
may be used to match against the
- host name or machine ID of the
- host. This either takes a host name
+ hostname or machine ID of the
+ host. This either takes a hostname
string (optionally with shell style
globs) which is tested against the
- locally set host name as returned by
+ locally set hostname as returned by
<a href="gethostname.html"><span class="citerefentry"><span class="refentrytitle">gethostname</span>(2)</span></a>,
or a machine ID formatted as string
(see
@@ -659,12 +678,12 @@
battery powered at the time of
activation of the unit. This takes a
boolean argument. If set to
- <code class="varname">true</code> the condition
+ <code class="varname">true</code>, the condition
will hold only if at least one AC
connector of the system is connected
to a power source, or if no AC
connectors are known. Conversely, if
- set to <code class="varname">false</code> the
+ set to <code class="varname">false</code>, the
condition will hold only if there is
at least one AC connector known and
all AC connectors are disconnected
@@ -673,28 +692,28 @@
be used to add a constant condition
check value to the unit. It takes a
boolean argument. If set to
- <code class="varname">false</code> the condition
+ <code class="varname">false</code>, the condition
will always fail, otherwise
succeed.</p><p>If multiple conditions are
- specified the unit will be executed if
+ specified, the unit will be executed if
all of them apply (i.e. a logical AND
is applied). Condition checks can be
prefixed with a pipe symbol (|) in
which case a condition becomes a
triggering condition. If at least one
triggering condition is defined for a
- unit then the unit will be executed if
+ unit, then the unit will be executed if
at least one of the triggering
conditions apply and all of the
non-triggering conditions. If you
prefix an argument with the pipe
- symbol and an exclamation mark the
+ symbol and an exclamation mark, the
pipe symbol must be passed first, the
exclamation second. Except for
<code class="varname">ConditionPathIsSymbolicLink=</code>,
all path checks follow symlinks. If
any of these options is assigned the
- empty string the list of conditions is
+ empty string, the list of conditions is
reset completely, all previous
condition settings (of any kind) will
have no effect.</p></dd><dt id="SourcePath="><span class="term"><code class="varname">SourcePath=</code></span><a class="headerlink" title="Permalink to this term" href="#SourcePath=">¶</a></dt><dd><p>A path to a
@@ -723,19 +742,44 @@
time,
<span class="command"><strong>systemctl enable</strong></span>
will create symlinks from these names
- to the unit file name.</p></dd><dt id="WantedBy="><span class="term"><code class="varname">WantedBy=</code>, </span><span class="term"><code class="varname">RequiredBy=</code></span><a class="headerlink" title="Permalink to this term" href="#WantedBy=">¶</a></dt><dd><p>Installs a symlink in
- the <code class="filename">.wants/</code>
- or <code class="filename">.requires/</code>
- subdirectory for a unit, respectively. This has the
- effect that when the listed unit name
- is activated the unit listing it is
- activated
- too. <span class="command"><strong>WantedBy=foo.service</strong></span>
+ to the unit filename.</p></dd><dt id="WantedBy="><span class="term"><code class="varname">WantedBy=</code>, </span><span class="term"><code class="varname">RequiredBy=</code></span><a class="headerlink" title="Permalink to this term" href="#WantedBy=">¶</a></dt><dd><p>A symbolic link is
+ created in the
+ <code class="filename">.wants/</code> or
+ <code class="filename">.requires/</code> directory
+ of the listed unit when this unit is
+ activated by <span class="command"><strong>systemctl
+ enable</strong></span>. This has the effect
+ that a dependency of type
+ <code class="varname">Wants=</code> or
+ <code class="varname">Requires=</code> is added
+ from the listed unit to the current
+ unit. The primary result is that the
+ current unit will be started when the
+ listed unit is started. See the
+ description of
+ <code class="varname">Wants=</code> and
+ <code class="varname">Requires=</code> in the
+ [Unit] section for details.</p><p><span class="command"><strong>WantedBy=foo.service</strong></span>
in a service
<code class="filename">bar.service</code> is
mostly equivalent to
<span class="command"><strong>Alias=foo.service.wants/bar.service</strong></span>
- in the same file.</p></dd><dt id="Also="><span class="term"><code class="varname">Also=</code></span><a class="headerlink" title="Permalink to this term" href="#Also=">¶</a></dt><dd><p>Additional units to
+ in the same file. In case of template
+ units, <span class="command"><strong>systemctl enable</strong></span>
+ must be called with an instance name, and
+ this instance will be added to the
+ <code class="filename">.wants/</code> or
+ <code class="filename">.requires/</code> list
+ of the listed unit.
+ E.g. <span class="command"><strong>WantedBy=getty.target</strong></span>
+ in a service
+ <code class="filename">getty@.service</code>
+ will result in <span class="command"><strong>systemctl
+ enable getty@tty2.service</strong></span>
+ creating a
+ <code class="filename">getty.target.wants/getty@tty2.service</code>
+ link to <code class="filename">getty@.service</code>.
+ </p></dd><dt id="Also="><span class="term"><code class="varname">Also=</code></span><a class="headerlink" title="Permalink to this term" href="#Also=">¶</a></dt><dd><p>Additional units to
install/deinstall when this unit is
installed/deinstalled. If the user
requests installation/deinstallation
@@ -745,13 +789,16 @@
disable</strong></span> will automatically
install/uninstall units listed in this option as
well.</p></dd></dl></div><p>The following specifiers are interpreted in the
- Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b.
+ Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v.
For their meaning see the next section.
- </p></div><div class="refsect1"><a name="idm259765388784"></a><h2 id="Specifiers">Specifiers<a class="headerlink" title="Permalink to this headline" href="#Specifiers">¶</a></h2><p>Many settings resolve specifiers which may be
+ </p></div><div class="refsect1"><a name="idm274684663424"></a><h2 id="Specifiers">Specifiers<a class="headerlink" title="Permalink to this headline" href="#Specifiers">¶</a></h2><p>Many settings resolve specifiers which may be
used to write generic unit files referring to runtime
or unit parameters that are replaced when the unit
files are loaded. The following specifiers are
- understood:</p><div class="table"><a name="idm259765387472"></a><p class="title"><b>Table 3. Specifiers available in unit files</b></p><div class="table-contents"><table summary="Specifiers available in unit files" border="1"><colgroup><col align="left" class="spec"><col align="left" class="mean"><col align="left" class="detail"></colgroup><thead><tr><th align="left">Specifier</th><th align="left">Meaning</th><th align="left">Details</th></tr></thead><tbody><tr><td align="left"><code class="literal">%n</code></td><td align="left">Full unit name</td><td align="left"> </td></tr><tr><td align="left"><code class="literal">%N</code></td><td align="left">Unescaped full unit name</td><td align="left"> </td></tr><tr><td align="left"><code class="literal">%p</code></td><td align="left">Prefix name</td><td align="left">For instantiated units this refers to the string before the @. For non-instantiated units this refers to to the name of the unit with the type suffix removed.</td></tr><tr><td align="left"><code class="literal">%P</code></td><td align="left">Unescaped prefix name</td><td align="left"> </td></tr><tr><td align="left"><code class="literal">%i</code></td><td align="left">Instance name</td><td align="left">For instantiated units: this is the string between the @ character and the suffix.</td></tr><tr><td align="left"><code class="literal">%I</code></td><td align="left">Unescaped instance name</td><td align="left"> </td></tr><tr><td align="left"><code class="literal">%f</code></td><td align="left">Unescaped file name</td><td align="left">This is either the unescaped instance name (if applicable) with <code class="filename">/</code> prepended (if applicable), or the prefix name similarly prepended with <code class="filename">/</code>.</td></tr><tr><td align="left"><code class="literal">%c</code></td><td align="left">Control group path of the unit</td><td align="left"> </td></tr><tr><td align="left"><code class="literal">%r</code></td><td align="left">Root control group path where units are placed.</td><td align="left">For system instances this usually resolves to <code class="filename">/system</code>, except in containers, where the path might be prefixed with the container's root control group.</td></tr><tr><td align="left"><code class="literal">%R</code></td><td align="left">Parent directory of the control group path where units are placed.</td><td align="left">For system instances this usually resolves to <code class="filename">/</code>, except in containers, where this resolves to the container's root directory. This specifier is particularly useful in the <code class="varname">ControlGroup=</code> setting (see <a href="systemd.exec.html"><span class="citerefentry"><span class="refentrytitle">systemd.exec</span>(5)</span></a>).</td></tr><tr><td align="left"><code class="literal">%t</code></td><td align="left">Runtime socket dir</td><td align="left">This is either <code class="filename">/run</code> (for the system manager) or <code class="literal">$XDG_RUNTIME_DIR</code> (for user managers).</td></tr><tr><td align="left"><code class="literal">%u</code></td><td align="left">User name</td><td align="left">This is the name of the configured user of the unit, or (if none is set) the user running the systemd instance.</td></tr><tr><td align="left"><code class="literal">%U</code></td><td align="left">User UID</td><td align="left">This is the UID of the configured user of the unit, or (if none is set) the user running the systemd instance.</td></tr><tr><td align="left"><code class="literal">%h</code></td><td align="left">User home directory</td><td align="left">This is the home directory of the configured user of the unit, or (if none is set) the user running the systemd instance.</td></tr><tr><td align="left"><code class="literal">%s</code></td><td align="left">User shell</td><td align="left">This is the shell of the configured user of the unit, or (if none is set) the user running the systemd instance. If the user is <code class="literal">root</code> (UID equal to 0), the shell configured in account database is ignored and <code class="filename">/bin/sh</code> is always used.</td></tr><tr><td align="left"><code class="literal">%m</code></td><td align="left">Machine ID</td><td align="left">The machine ID of the running system, formatted as string. See <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> for more information.</td></tr><tr><td align="left"><code class="literal">%b</code></td><td align="left">Boot ID</td><td align="left">The boot ID of the running system, formatted as string. See <a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a> for more information.</td></tr><tr><td align="left"><code class="literal">%H</code></td><td align="left">Host name</td><td align="left">The host name of the running system.</td></tr><tr><td align="left"><code class="literal">%%</code></td><td align="left">Escaped %</td><td align="left">Single percent sign.</td></tr></tbody></table></div></div><br class="table-break"></div><div class="refsect1"><a name="idm259765336960"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ understood:</p><div class="table"><a name="idm274684662112"></a><p class="title"><b>Table 3. Specifiers available in unit files</b></p><div class="table-contents"><table summary="Specifiers available in unit files" border="1"><colgroup><col align="left" class="spec"><col align="left" class="mean"><col align="left" class="detail"></colgroup><thead><tr><th align="left">Specifier</th><th align="left">Meaning</th><th align="left">Details</th></tr></thead><tbody><tr><td align="left">"<code class="literal">%n</code>"</td><td align="left">Full unit name</td><td align="left"> </td></tr><tr><td align="left">"<code class="literal">%N</code>"</td><td align="left">Unescaped full unit name</td><td align="left"> </td></tr><tr><td align="left">"<code class="literal">%p</code>"</td><td align="left">Prefix name</td><td align="left">For instantiated units this refers to the string before the @. For non-instantiated units this refers to to the name of the unit with the type suffix removed.</td></tr><tr><td align="left">"<code class="literal">%P</code>"</td><td align="left">Unescaped prefix name</td><td align="left"> </td></tr><tr><td align="left">"<code class="literal">%i</code>"</td><td align="left">Instance name</td><td align="left">For instantiated units: this is the string between the "<code class="literal">@</code>" character and the suffix.</td></tr><tr><td align="left">"<code class="literal">%I</code>"</td><td align="left">Unescaped instance name</td><td align="left"> </td></tr><tr><td align="left">"<code class="literal">%f</code>"</td><td align="left">Unescaped filename</td><td align="left">This is either the unescaped instance name (if applicable) with <code class="filename">/</code> prepended (if applicable), or the prefix name similarly prepended with <code class="filename">/</code>.</td></tr><tr><td align="left">"<code class="literal">%c</code>"</td><td align="left">Control group path of the unit</td><td align="left"> </td></tr><tr><td align="left">"<code class="literal">%r</code>"</td><td align="left">Root control group path where units are placed.</td><td align="left">For system instances this usually resolves to <code class="filename">/system</code>, except in containers, where the path might be prefixed with the container's root control group.</td></tr><tr><td align="left">"<code class="literal">%R</code>"</td><td align="left">Parent directory of the control group path where units are placed.</td><td align="left">For system instances this usually
+ resolves to <code class="filename">/</code>, except in
+ containers, where this resolves to the
+ container's root directory.</td></tr><tr><td align="left">"<code class="literal">%t</code>"</td><td align="left">Runtime socket dir</td><td align="left">This is either <code class="filename">/run</code> (for the system manager) or "<code class="literal">$XDG_RUNTIME_DIR</code>" (for user managers).</td></tr><tr><td align="left">"<code class="literal">%u</code>"</td><td align="left">User name</td><td align="left">This is the name of the configured user of the unit, or (if none is set) the user running the systemd instance.</td></tr><tr><td align="left">"<code class="literal">%U</code>"</td><td align="left">User UID</td><td align="left">This is the UID of the configured user of the unit, or (if none is set) the user running the systemd instance.</td></tr><tr><td align="left">"<code class="literal">%h</code>"</td><td align="left">User home directory</td><td align="left">This is the home directory of the configured user of the unit, or (if none is set) the user running the systemd instance.</td></tr><tr><td align="left">"<code class="literal">%s</code>"</td><td align="left">User shell</td><td align="left">This is the shell of the configured user of the unit, or (if none is set) the user running the systemd instance. If the user is "<code class="literal">root</code>" (UID equal to 0), the shell configured in account database is ignored and <code class="filename">/bin/sh</code> is always used.</td></tr><tr><td align="left">"<code class="literal">%m</code>"</td><td align="left">Machine ID</td><td align="left">The machine ID of the running system, formatted as string. See <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> for more information.</td></tr><tr><td align="left">"<code class="literal">%b</code>"</td><td align="left">Boot ID</td><td align="left">The boot ID of the running system, formatted as string. See <a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a> for more information.</td></tr><tr><td align="left">"<code class="literal">%H</code>"</td><td align="left">Host name</td><td align="left">The hostname of the running system.</td></tr><tr><td align="left">"<code class="literal">%v</code>"</td><td align="left">Kernel release</td><td align="left">Identical to <span class="command"><strong>uname -r</strong></span> output.</td></tr><tr><td align="left">"<code class="literal">%%</code>"</td><td align="left">Escaped %</td><td align="left">Single percent sign.</td></tr></tbody></table></div></div><br class="table-break"></div><div class="refsect1"><a name="idm274684609296"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(8)</span></a>,
<a href="systemd.special.html"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
@@ -765,7 +812,10 @@
<a href="systemd.path.html"><span class="citerefentry"><span class="refentrytitle">systemd.path</span>(5)</span></a>,
<a href="systemd.timer.html"><span class="citerefentry"><span class="refentrytitle">systemd.timer</span>(5)</span></a>,
<a href="systemd.snapshot.html"><span class="citerefentry"><span class="refentrytitle">systemd.snapshot</span>(5)</span></a>,
+ <a href="systemd.scope.html"><span class="citerefentry"><span class="refentrytitle">systemd.scope</span>(5)</span></a>,
+ <a href="systemd.slice.html"><span class="citerefentry"><span class="refentrytitle">systemd.slice</span>(5)</span></a>,
<a href="systemd.time.html"><span class="citerefentry"><span class="refentrytitle">systemd.time</span>(7)</span></a>,
<a href="capabilities.html"><span class="citerefentry"><span class="refentrytitle">capabilities</span>(7)</span></a>,
- <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>
+ <a href="systemd.directives.html"><span class="citerefentry"><span class="refentrytitle">systemd.directives</span>(7)</span></a>,
+ <a href="uname.html"><span class="citerefentry"><span class="refentrytitle">uname</span>(1)</span></a>
</p></div></div></body></html>
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index c56837a6e5..5c8b8e8868 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -60,7 +60,9 @@
<filename><replaceable>target</replaceable>.target</filename>,
<filename><replaceable>path</replaceable>.path</filename>,
<filename><replaceable>timer</replaceable>.timer</filename>,
- <filename><replaceable>snapshot</replaceable>.snapshot</filename></para>
+ <filename><replaceable>snapshot</replaceable>.snapshot</filename>,
+ <filename><replaceable>slice</replaceable>.slice</filename>,
+ <filename><replaceable>scope</replaceable>.scope</filename></para>
<para><literallayout><filename>/etc/systemd/system/*</filename>
<filename>/run/systemd/system/*</filename>
@@ -68,7 +70,8 @@
<filename>...</filename>
</literallayout></para>
- <para><literallayout><filename>/etc/systemd/user/*</filename>
+ <para><literallayout><filename>$HOME/.config/systemd/user/*</filename>
+<filename>/etc/systemd/user/*</filename>
<filename>/run/systemd/user/*</filename>
<filename>/usr/lib/systemd/user/*</filename>
<filename>...</filename>
@@ -81,12 +84,15 @@
<para>A unit configuration file encodes information
about a service, a socket, a device, a mount point, an
automount point, a swap file or partition, a start-up
- target, a file system path, or a timer controlled and
- supervised by
- <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>. The
- syntax is inspired by <ulink
+ target, a watched file system path, a timer controlled
+ and supervised by
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ a temporary system state snapshot, a resource
+ management slice or a group of externally created
+ processes. The syntax is inspired by <ulink
url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG
- Desktop Entry Specification</ulink> <filename>.desktop</filename> files, which are in turn
+ Desktop Entry Specification</ulink>
+ <filename>.desktop</filename> files, which are in turn
inspired by Microsoft Windows
<filename>.ini</filename> files.</para>
@@ -110,6 +116,8 @@
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
</para>
<para>Unit files are loaded from a set of paths
@@ -118,9 +126,9 @@
<para>Unit files may contain additional options on top
of those listed here. If systemd encounters an unknown
- option it will write a warning log message but
+ option, it will write a warning log message but
continue loading the unit. If an option is prefixed
- with <option>X-</option> it is ignored completely by
+ with <option>X-</option>, it is ignored completely by
systemd. Applications may use this to include
additional information in the unit files.</para>
@@ -128,7 +136,7 @@
written in various formats. For positive settings the
strings <option>1</option>, <option>yes</option>,
<option>true</option> and <option>on</option> are
- equivalent. For negative settings the strings
+ equivalent. For negative settings, the strings
<option>0</option>, <option>no</option>,
<option>false</option> and <option>off</option> are
equivalent.</para>
@@ -152,14 +160,14 @@
space character. This may be used to wrap long lines.</para>
<para>Along with a unit file
- <filename>foo.service</filename> the directory
+ <filename>foo.service</filename>, the directory
<filename>foo.service.wants/</filename> may exist. All
unit files symlinked from such a directory are
implicitly added as dependencies of type
<varname>Wanted=</varname> to the unit. This is useful
to hook units into the start-up of other units,
without having to modify their unit files. For details
- about the semantics of <varname>Wanted=</varname> see
+ about the semantics of <varname>Wanted=</varname>, see
below. The preferred way to create symlinks in the
<filename>.wants/</filename> directory of a unit file
is with the <command>enable</command> command of the
@@ -171,9 +179,9 @@
<filename>.requires/</filename> in this case.</para>
<para>Along with a unit file
- <filename>foo.service</filename> a directory
+ <filename>foo.service</filename>, a directory
<filename>foo.service.d/</filename> may exist. All
- files with the suffix <filename>.conf</filename> from
+ files with the suffix <literal>.conf</literal> from
this directory will be parsed after the file itself is
parsed. This is useful to alter or add configuration
settings to a unit, without having to modify their
@@ -182,7 +190,7 @@
directive.</para>
<para>If a line starts with <option>.include</option>
- followed by a file name, the specified file will be
+ followed by a filename, the specified file will be
parsed at this point. Make sure that the file that is
included has the appropriate section headers before
any directives.</para>
@@ -195,12 +203,12 @@
in a both simpler and more flexible system.</para>
<para>Some unit names reflect paths existing in the
- file system name space. Example: a device unit
+ file system namespace. Example: a device unit
<filename>dev-sda.device</filename> refers to a device
with the device node <filename noindex='true'>/dev/sda</filename> in
- the file system namespace. If this applies a special
+ the file system namespace. If this applies, a special
way to escape the path name is used, so that the
- result is usable as part of a file name. Basically,
+ result is usable as part of a filename. Basically,
given a path, "/" is replaced by "-", and all
unprintable characters and the "-" are replaced by
C-style "\x20" escapes. The root directory "/" is
@@ -211,12 +219,12 @@
<para>Optionally, units may be instantiated from a
template file at runtime. This allows creation of
multiple units from a single configuration file. If
- systemd looks for a unit configuration file it will
+ systemd looks for a unit configuration file, it will
first search for the literal unit name in the
filesystem. If that yields no success and the unit
- name contains an @ character, systemd will look for a
+ name contains an <literal>@</literal> character, systemd will look for a
unit template that shares the same name but with the
- instance string (i.e. the part between the @ character
+ instance string (i.e. the part between the <literal>@</literal> character
and the suffix) removed. Example: if a service
<filename>getty@tty3.service</filename> is requested
and no file by that name is found, systemd will look
@@ -230,7 +238,7 @@
configuration options. See below for details.</para>
<para>If a unit file is empty (i.e. has the file size
- 0) or is symlinked to <filename>/dev/null</filename>
+ 0) or is symlinked to <filename>/dev/null</filename>,
its configuration will not be loaded and it appears
with a load state of <literal>masked</literal>, and
cannot be activated. Use this as an effective way to
@@ -249,10 +257,9 @@
<para>Unit files are loaded from a set of paths
determined during compilation, described in the two
- tables below. Unit files found in directories higher
- in the hierarchy override files with the same name
- lower in the hierarchy, thus allowing overrides.
- </para>
+ tables below. Unit files found in directories listed
+ earlier override files with the same name in
+ directories lower in the list.</para>
<para>When systemd is running in user mode
(<option>--user</option>) and the variable
@@ -277,32 +284,16 @@
</thead>
<tbody>
<row>
- <entry><filename>/run/systemd/generator.early</filename></entry>
- <entry>Generated units (early)</entry>
- </row>
- <row>
<entry><filename>/etc/systemd/system</filename></entry>
<entry>Local configuration</entry>
</row>
<row>
- <entry><filename>/run/systemd/systemd</filename></entry>
- <entry>Volatile units</entry>
- </row>
- <row>
- <entry><filename>/run/systemd/generator</filename></entry>
- <entry>Generated units (middle)</entry>
- </row>
- <row>
- <entry><filename>/usr/local/lib/systemd/system</filename></entry>
- <entry>Units for local packages</entry>
+ <entry><filename>/run/systemd/system</filename></entry>
+ <entry>Runtime units</entry>
</row>
<row>
<entry><filename>/usr/lib/systemd/system</filename></entry>
- <entry>Units for installed packages</entry>
- </row>
- <row>
- <entry><filename>/run/systemd/generator.late</filename></entry>
- <entry>Generated units (late)</entry>
+ <entry>Units of installed packages</entry>
</row>
</tbody>
</tgroup>
@@ -310,7 +301,7 @@
<table>
<title>
- Load path when running in session mode (<option>--user</option>).
+ Load path when running in user mode (<option>--user</option>).
</title>
<tgroup cols='2'>
@@ -324,8 +315,8 @@
</thead>
<tbody>
<row>
- <entry><filename>/tmp/systemd-generator.early.<replaceable>XXXXXX</replaceable></filename></entry>
- <entry>Generated units (early)</entry>
+ <entry><filename>$HOME/.config/systemd/user</filename></entry>
+ <entry>User configuration</entry>
</row>
<row>
<entry><filename>/etc/systemd/user</filename></entry>
@@ -333,23 +324,11 @@
</row>
<row>
<entry><filename>/run/systemd/user</filename></entry>
- <entry>Volatile units</entry>
- </row>
- <row>
- <entry><filename>/tmp/systemd-generator.<replaceable>XXXXXX</replaceable></filename></entry>
- <entry>Generated units (middle)</entry>
- </row>
- <row>
- <entry><filename>/usr/local/lib/systemd/user</filename></entry>
- <entry>Units for local packages</entry>
+ <entry>Runtime units</entry>
</row>
<row>
<entry><filename>/usr/lib/systemd/user</filename></entry>
- <entry>Units for installed packages</entry>
- </row>
- <row>
- <entry><filename>/tmp/systemd-generator.late.<replaceable>XXXXXX</replaceable></filename></entry>
- <entry>Generated units (late)</entry>
+ <entry>Units of installed packages</entry>
</row>
</tbody>
</tgroup>
@@ -358,7 +337,10 @@
<para>Additional units might be loaded into systemd
("linked") from directories not on the unit load
path. See the <command>link</command> command for
- <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>. Also,
+ some units are dynamically created via generators
+ <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/Generators/">Generators</ulink>.
</para>
</refsect1>
@@ -377,12 +359,20 @@
describing the unit. This is intended
for use in UIs to show descriptive
information along with the unit
- name.</para></listitem>
+ name. The description should contain a name
+ that means something to the end user.
+ <literal>Apache2 Web Server</literal> is a good
+ example. Bad examples are
+ <literal>high-performance light-weight HTTP
+ server</literal> (too generic) or
+ <literal>Apache2</literal> (too specific and
+ meaningless for people who do not know
+ Apache).</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>Documentation=</varname></term>
- <listitem><para>A space separated list
+ <listitem><para>A space-separated list
of URIs referencing documentation for
this unit or its
configuration. Accepted are only URIs
@@ -393,7 +383,7 @@
<literal>info:</literal>,
<literal>man:</literal>. For more
information about the syntax of these
- URIs see
+ URIs, see
<citerefentry><refentrytitle>uri</refentrytitle><manvolnum>7</manvolnum></citerefentry>. The
URIs should be listed in order of
relevance, starting with the most
@@ -405,7 +395,7 @@
option may be specified more than once
in which case the specified list of
URIs is merged. If the empty string is
- assigned to this option the list is
+ assigned to this option, the list is
reset and all prior assignments will
have no effect.</para></listitem>
</varlistentry>
@@ -471,7 +461,7 @@
the start-up was pulled in indirectly
by some dependency or automatic
start-up of units that is not
- requested by the user this dependency
+ requested by the user, this dependency
must be fulfilled and otherwise the
transaction fails. Hence, this option
may be used to configure dependencies
@@ -634,7 +624,7 @@
type <varname>After=</varname> or
<varname>Before=</varname>. If two
units have no ordering dependencies
- between them they are shut down
+ between them, they are shut down
or started up simultaneously, and
no ordering takes
place. </para></listitem>
@@ -646,7 +636,7 @@
<listitem><para>Lists one or more
units that are activated when this
unit enters the
- '<literal>failed</literal>'
+ <literal>failed</literal>
state.</para></listitem>
</varlistentry>
@@ -669,8 +659,8 @@
<varlistentry>
<term><varname>RequiresMountsFor=</varname></term>
- <listitem><para>Takes a space
- separated list of absolute paths. Automatically
+ <listitem><para>Takes a space-separated
+ list of absolute paths. Automatically
adds dependencies of type
<varname>Requires=</varname> and
<varname>After=</varname> for all
@@ -682,12 +672,12 @@
<term><varname>OnFailureIsolate=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option> the
+ argument. If <option>true</option>, the
unit listed in
<varname>OnFailure=</varname> will be
enqueued in isolation mode, i.e. all
units that are not its dependency will
- be stopped. If this is set only a
+ be stopped. If this is set, only a
single unit may be listed in
<varname>OnFailure=</varname>. Defaults
to
@@ -698,7 +688,7 @@
<term><varname>IgnoreOnIsolate=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
this unit will not be stopped when
isolating another unit. Defaults to
<option>false</option>.</para></listitem>
@@ -708,7 +698,7 @@
<term><varname>IgnoreOnSnapshot=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
this unit will not be included in
snapshots. Defaults to
<option>true</option> for device and
@@ -720,7 +710,7 @@
<term><varname>StopWhenUnneeded=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
this unit will be stopped when it is
no longer used. Note that in order to
minimize the work to be executed,
@@ -739,10 +729,10 @@
<term><varname>RefuseManualStop=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
this unit can only be activated
or deactivated indirectly. In
- this case explicit start-up
+ this case, explicit start-up
or termination requested by the
user is denied, however if it is
started or stopped as a
@@ -762,10 +752,10 @@
<term><varname>AllowIsolate=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
this unit may be used with the
<command>systemctl isolate</command>
- command. Otherwise this will be
+ command. Otherwise, this will be
refused. It probably is a good idea to
leave this disabled except for target
units that shall be used similar to
@@ -779,7 +769,7 @@
<term><varname>DefaultDependencies=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
(the default), a few default
dependencies will implicitly be
created for the unit. The actual
@@ -797,7 +787,7 @@
highly recommended to leave this
option enabled for the majority of
common units. If set to
- <option>false</option> this option
+ <option>false</option>, this option
does not disable all implicit
dependencies, just non-essential
ones.</para></listitem>
@@ -809,10 +799,10 @@
<listitem><para>When clients are
waiting for a job of this unit to
complete, time out after the specified
- time. If this time limit is reached
+ time. If this time limit is reached,
the job will be cancelled, the unit
however will not change state or even
- enter the '<literal>failed</literal>'
+ enter the <literal>failed</literal>
mode. This value defaults to 0 (job
timeouts disabled), except for device
units. NB: this timeout is independent
@@ -851,7 +841,7 @@
<listitem><para>Before starting a unit
verify that the specified condition is
- true. If it is not true the starting
+ true. If it is not true, the starting
of the unit will be skipped, however
all ordering dependencies of it are
still respected. A failing condition
@@ -866,12 +856,12 @@
a file existence condition is
checked before a unit is started. If
the specified absolute path name does
- not exist the condition will
+ not exist, the condition will
fail. If the absolute path name passed
to
<varname>ConditionPathExists=</varname>
is prefixed with an exclamation mark
- ('!'), the test is negated, and the unit
+ (<literal>!</literal>), the test is negated, and the unit
is only started if the path does not
exist.</para>
@@ -940,7 +930,7 @@
exclamation mark unset). The argument
must either be a single word, or an
assignment (i.e. two words, separated
- '='). In the former
+ <literal>=</literal>). In the former
case the kernel command line is
searched for the word appearing as is,
or as left hand side of an
@@ -969,13 +959,14 @@
<varname>xen</varname>,
<varname>bochs</varname>,
<varname>chroot</varname>,
+ <varname>uml</varname>,
<varname>openvz</varname>,
<varname>lxc</varname>,
<varname>lxc-libvirt</varname>,
<varname>systemd-nspawn</varname> to
test against a specific
implementation. If multiple
- virtualization technologies are nested
+ virtualization technologies are nested,
only the innermost is considered. The
test may be negated by prepending an
exclamation mark.</para>
@@ -983,9 +974,10 @@
<para><varname>ConditionSecurity=</varname>
may be used to check whether the given
security module is enabled on the
- system. Currently the only recognized
+ system. Currently the recognized values
values are <varname>selinux</varname>,
- <varname>apparmor</varname>, and
+ <varname>apparmor</varname>,
+ <varname>ima</varname> and
<varname>smack</varname>.
The test may be negated by prepending
an exclamation
@@ -1006,11 +998,11 @@
<para><varname>ConditionHost=</varname>
may be used to match against the
- host name or machine ID of the
- host. This either takes a host name
+ hostname or machine ID of the
+ host. This either takes a hostname
string (optionally with shell style
globs) which is tested against the
- locally set host name as returned by
+ locally set hostname as returned by
<citerefentry><refentrytitle>gethostname</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
or a machine ID formatted as string
(see
@@ -1024,12 +1016,12 @@
battery powered at the time of
activation of the unit. This takes a
boolean argument. If set to
- <varname>true</varname> the condition
+ <varname>true</varname>, the condition
will hold only if at least one AC
connector of the system is connected
to a power source, or if no AC
connectors are known. Conversely, if
- set to <varname>false</varname> the
+ set to <varname>false</varname>, the
condition will hold only if there is
at least one AC connector known and
all AC connectors are disconnected
@@ -1040,30 +1032,30 @@
be used to add a constant condition
check value to the unit. It takes a
boolean argument. If set to
- <varname>false</varname> the condition
+ <varname>false</varname>, the condition
will always fail, otherwise
succeed.</para>
<para>If multiple conditions are
- specified the unit will be executed if
+ specified, the unit will be executed if
all of them apply (i.e. a logical AND
is applied). Condition checks can be
prefixed with a pipe symbol (|) in
which case a condition becomes a
triggering condition. If at least one
triggering condition is defined for a
- unit then the unit will be executed if
+ unit, then the unit will be executed if
at least one of the triggering
conditions apply and all of the
non-triggering conditions. If you
prefix an argument with the pipe
- symbol and an exclamation mark the
+ symbol and an exclamation mark, the
pipe symbol must be passed first, the
exclamation second. Except for
<varname>ConditionPathIsSymbolicLink=</varname>,
all path checks follow symlinks. If
any of these options is assigned the
- empty string the list of conditions is
+ empty string, the list of conditions is
reset completely, all previous
condition settings (of any kind) will
have no effect.</para></listitem>
@@ -1107,26 +1099,53 @@
time,
<command>systemctl enable</command>
will create symlinks from these names
- to the unit file name.</para></listitem>
+ to the unit filename.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>WantedBy=</varname></term>
<term><varname>RequiredBy=</varname></term>
- <listitem><para>Installs a symlink in
- the <filename>.wants/</filename>
- or <filename>.requires/</filename>
- subdirectory for a unit, respectively. This has the
- effect that when the listed unit name
- is activated the unit listing it is
- activated
- too. <command>WantedBy=foo.service</command>
+ <listitem><para>A symbolic link is
+ created in the
+ <filename>.wants/</filename> or
+ <filename>.requires/</filename> directory
+ of the listed unit when this unit is
+ activated by <command>systemctl
+ enable</command>. This has the effect
+ that a dependency of type
+ <varname>Wants=</varname> or
+ <varname>Requires=</varname> is added
+ from the listed unit to the current
+ unit. The primary result is that the
+ current unit will be started when the
+ listed unit is started. See the
+ description of
+ <varname>Wants=</varname> and
+ <varname>Requires=</varname> in the
+ [Unit] section for details.</para>
+
+ <para><command>WantedBy=foo.service</command>
in a service
<filename>bar.service</filename> is
mostly equivalent to
<command>Alias=foo.service.wants/bar.service</command>
- in the same file.</para></listitem>
+ in the same file. In case of template
+ units, <command>systemctl enable</command>
+ must be called with an instance name, and
+ this instance will be added to the
+ <filename>.wants/</filename> or
+ <filename>.requires/</filename> list
+ of the listed unit.
+ E.g. <command>WantedBy=getty.target</command>
+ in a service
+ <filename>getty@.service</filename>
+ will result in <command>systemctl
+ enable getty@tty2.service</command>
+ creating a
+ <filename>getty.target.wants/getty@tty2.service</filename>
+ link to <filename>getty@.service</filename>.
+ </para></listitem>
</varlistentry>
<varlistentry>
@@ -1146,7 +1165,7 @@
</variablelist>
<para>The following specifiers are interpreted in the
- Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b.
+ Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v.
For their meaning see the next section.
</para>
</refsect1>
@@ -1197,7 +1216,7 @@
<row>
<entry><literal>%i</literal></entry>
<entry>Instance name</entry>
- <entry>For instantiated units: this is the string between the @ character and the suffix.</entry>
+ <entry>For instantiated units: this is the string between the <literal>@</literal> character and the suffix.</entry>
</row>
<row>
<entry><literal>%I</literal></entry>
@@ -1206,7 +1225,7 @@
</row>
<row>
<entry><literal>%f</literal></entry>
- <entry>Unescaped file name</entry>
+ <entry>Unescaped filename</entry>
<entry>This is either the unescaped instance name (if applicable) with <filename>/</filename> prepended (if applicable), or the prefix name similarly prepended with <filename>/</filename>.</entry>
</row>
<row>
@@ -1222,7 +1241,10 @@
<row>
<entry><literal>%R</literal></entry>
<entry>Parent directory of the control group path where units are placed.</entry>
- <entry>For system instances this usually resolves to <filename>/</filename>, except in containers, where this resolves to the container's root directory. This specifier is particularly useful in the <varname>ControlGroup=</varname> setting (see <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>).</entry>
+ <entry>For system instances this usually
+ resolves to <filename>/</filename>, except in
+ containers, where this resolves to the
+ container's root directory.</entry>
</row>
<row>
<entry><literal>%t</literal></entry>
@@ -1262,7 +1284,12 @@
<row>
<entry><literal>%H</literal></entry>
<entry>Host name</entry>
- <entry>The host name of the running system.</entry>
+ <entry>The hostname of the running system.</entry>
+ </row>
+ <row>
+ <entry><literal>%v</literal></entry>
+ <entry>Kernel release</entry>
+ <entry>Identical to <command>uname -r</command> output.</entry>
</row>
<row>
<entry><literal>%%</literal></entry>
@@ -1290,9 +1317,12 @@
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>uname</refentrytitle><manvolnum>1</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/systemd.xml b/man/systemd.xml
index d009ed8e1c..fe6e331f25 100644
--- a/man/systemd.xml
+++ b/man/systemd.xml
@@ -136,7 +136,7 @@
<term><option>--unit=</option></term>
<listitem><para>Set default unit to
- activate on startup. If not specified
+ activate on startup. If not specified,
defaults to
<filename>default.target</filename>.</para></listitem>
</varlistentry>
@@ -233,7 +233,7 @@
<listitem><para>Highlight important
log messages. Argument is a boolean
- value. If the argument is omitted it
+ value. If the argument is omitted, it
defaults to
<option>true</option>.</para></listitem>
</varlistentry>
@@ -285,25 +285,27 @@
<title>Concepts</title>
<para>systemd provides a dependency system between
- various entities called "units". Units encapsulate
- various objects that are relevant for system boot-up
- and maintenance. The majority of units are configured
- in unit configuration files, whose syntax and basic
- set of options is described in
+ various entities called "units" of 12 different
+ types. Units encapsulate various objects that are
+ relevant for system boot-up and maintenance. The
+ majority of units are configured in unit configuration
+ files, whose syntax and basic set of options is
+ described in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
however some are created automatically from other
- configuration or dynamically from system state. Units
- may be 'active' (meaning started, bound, plugged in,
- ... depending on the unit type, see below), or
- 'inactive' (meaning stopped, unbound, unplugged, ...),
- as well as in the process of being activated or
- deactivated, i.e. between the two states (these states
- are called 'activating', 'deactivating'). A special
- 'failed' state is available as well which is very
- similar to 'inactive' and is entered when the service
- failed in some way (process returned error code on
- exit, or crashed, or an operation timed out). If this
- state is entered the cause will be logged, for later
+ configuration, dynamically from system state or
+ programmatically at runtime. Units may be "active"
+ (meaning started, bound, plugged in, ..., depending on
+ the unit type, see below), or "inactive" (meaning
+ stopped, unbound, unplugged, ...), as well as in the
+ process of being activated or deactivated,
+ i.e. between the two states (these states are called
+ "activating", "deactivating"). A special "failed"
+ state is available as well, which is very similar to
+ "inactive" and is entered when the service failed in
+ some way (process returned error code on exit, or
+ crashed, or an operation timed out). If this state is
+ entered, the cause will be logged, for later
reference. Note that the various unit types may have a
number of additional substates, which are mapped to
the five generalized unit states described
@@ -312,7 +314,7 @@
<para>The following unit types are available:</para>
<orderedlist>
- <listitem><para>Service units, which control
+ <listitem><para>Service units, which start and control
daemons and the processes they consist of. For
details see
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
@@ -369,6 +371,18 @@
objects change or are modified. See
<citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
+ <listitem><para>Slice units may be used to
+ group units which manage system processes
+ (such as service and scope units) in a
+ hierarchical tree for resource management
+ purposes. See
+ <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
+
+ <listitem><para>Scope units are similar to
+ service units, but manage foreign processes
+ instead of starting them as well. See
+ <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
+
</orderedlist>
<para>Units are named as their configuration
@@ -415,7 +429,7 @@
<filename>multi-user.target</filename> (for limited
console-only boots for use in embedded or server
environments, or similar; a subset of
- graphical.target). However it is at the discretion of
+ graphical.target). However, it is at the discretion of
the administrator to configure it as an alias to any
other target unit. See
<citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
@@ -425,7 +439,7 @@
individual Linux control groups named after the unit
which they belong to in the private systemd
hierarchy. (see <ulink
- url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>
+ url="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>
for more information about control groups, or short
"cgroups"). systemd uses this to effectively keep
track of processes. Control group information is
@@ -473,7 +487,7 @@
<para>Systemd contains native implementations of
various tasks that need to be executed as part of the
- boot process. For example, it sets the host name or
+ boot process. For example, it sets the hostname or
configures the loopback network device. It also sets
up and mounts various API file systems, such as
<filename>/sys</filename> or
@@ -611,7 +625,7 @@
<variablelist>
<varlistentry>
- <term>SIGTERM</term>
+ <term><constant>SIGTERM</constant></term>
<listitem><para>Upon receiving this
signal the systemd system manager
@@ -631,7 +645,7 @@
</varlistentry>
<varlistentry>
- <term>SIGINT</term>
+ <term><constant>SIGINT</constant></term>
<listitem><para>Upon receiving this
signal the systemd system manager will
@@ -643,11 +657,11 @@
<para>systemd user managers
treat this signal the same way as
- SIGTERM.</para></listitem>
+ <constant>SIGTERM</constant>.</para></listitem>
</varlistentry>
<varlistentry>
- <term>SIGWINCH</term>
+ <term><constant>SIGWINCH</constant></term>
<listitem><para>When this signal is
received the systemd system manager
@@ -663,7 +677,7 @@
</varlistentry>
<varlistentry>
- <term>SIGPWR</term>
+ <term><constant>SIGPWR</constant></term>
<listitem><para>When this signal is
received the systemd manager
@@ -675,7 +689,7 @@
</varlistentry>
<varlistentry>
- <term>SIGUSR1</term>
+ <term><constant>SIGUSR1</constant></term>
<listitem><para>When this signal is
received the systemd manager will try
@@ -684,7 +698,7 @@
</varlistentry>
<varlistentry>
- <term>SIGUSR2</term>
+ <term><constant>SIGUSR2</constant></term>
<listitem><para>When this signal is
received the systemd manager will log
@@ -695,7 +709,7 @@
</varlistentry>
<varlistentry>
- <term>SIGHUP</term>
+ <term><constant>SIGHUP</constant></term>
<listitem><para>Reloads the complete
daemon configuration. This is mostly
@@ -704,7 +718,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+0</term>
+ <term><constant>SIGRTMIN+0</constant></term>
<listitem><para>Enters default mode, starts the
<filename>default.target</filename>
@@ -714,7 +728,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+1</term>
+ <term><constant>SIGRTMIN+1</constant></term>
<listitem><para>Enters rescue mode,
starts the
@@ -725,7 +739,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+2</term>
+ <term><constant>SIGRTMIN+2</constant></term>
<listitem><para>Enters emergency mode,
starts the
@@ -736,7 +750,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+3</term>
+ <term><constant>SIGRTMIN+3</constant></term>
<listitem><para>Halts the machine,
starts the
@@ -747,7 +761,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+4</term>
+ <term><constant>SIGRTMIN+4</constant></term>
<listitem><para>Powers off the machine,
starts the
@@ -758,7 +772,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+5</term>
+ <term><constant>SIGRTMIN+5</constant></term>
<listitem><para>Reboots the machine,
starts the
@@ -769,7 +783,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+6</term>
+ <term><constant>SIGRTMIN+6</constant></term>
<listitem><para>Reboots the machine via kexec,
starts the
@@ -780,31 +794,31 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+13</term>
+ <term><constant>SIGRTMIN+13</constant></term>
<listitem><para>Immediately halts the machine.</para></listitem>
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+14</term>
+ <term><constant>SIGRTMIN+14</constant></term>
<listitem><para>Immediately powers off the machine.</para></listitem>
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+15</term>
+ <term><constant>SIGRTMIN+15</constant></term>
<listitem><para>Immediately reboots the machine.</para></listitem>
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+16</term>
+ <term><constant>SIGRTMIN+16</constant></term>
<listitem><para>Immediately reboots the machine with kexec.</para></listitem>
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+20</term>
+ <term><constant>SIGRTMIN+20</constant></term>
<listitem><para>Enables display of
status messages on the console, as
@@ -815,7 +829,7 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+21</term>
+ <term><constant>SIGRTMIN+21</constant></term>
<listitem><para>Disables display of
status messages on the console, as
@@ -826,23 +840,23 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+22</term>
- <term>SIGRTMIN+23</term>
+ <term><constant>SIGRTMIN+22</constant></term>
+ <term><constant>SIGRTMIN+23</constant></term>
<listitem><para>Sets the log level to
<literal>debug</literal>
(or <literal>info</literal> on
- <literal>SIGRTMIN+23</literal>), as
+ <constant>SIGRTMIN+23</constant>), as
controlled via
<varname>systemd.log_level=debug</varname>
(or <varname>systemd.log_level=info</varname>
- on <literal>SIGRTMIN+23</literal>) on
+ on <constant>SIGRTMIN+23</constant>) on
the kernel command
line.</para></listitem>
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+24</term>
+ <term><constant>SIGRTMIN+24</constant></term>
<listitem><para>Immediately exits the
manager (only available for --user
@@ -850,28 +864,28 @@
</varlistentry>
<varlistentry>
- <term>SIGRTMIN+26</term>
- <term>SIGRTMIN+27</term>
- <term>SIGRTMIN+28</term>
- <term>SIGRTMIN+29</term>
+ <term><constant>SIGRTMIN+26</constant></term>
+ <term><constant>SIGRTMIN+27</constant></term>
+ <term><constant>SIGRTMIN+28</constant></term>
+ <term><constant>SIGRTMIN+29</constant></term>
<listitem><para>Sets the log level to
<literal>journal-or-kmsg</literal>
(or <literal>console</literal> on
- <literal>SIGRTMIN+27</literal>,
+ <constant>SIGRTMIN+27</constant>,
<literal>kmsg</literal> on
- <literal>SIGRTMIN+28</literal>,
+ <constant>SIGRTMIN+28</constant>,
or <literal>syslog-or-kmsg</literal>
- on <literal>SIGRTMIN+29</literal>), as
+ on <constant>SIGRTMIN+29</constant>), as
controlled via
<varname>systemd.log_target=journal-or-kmsg</varname>
(or <varname>systemd.log_target=console</varname>
- on <literal>SIGRTMIN+27</literal>,
+ on <constant>SIGRTMIN+27</constant>,
<varname>systemd.log_target=kmsg</varname>
- on <literal>SIGRTMIN+28</literal>,
+ on <constant>SIGRTMIN+28</constant>,
or
<varname>systemd.log_target=syslog-or-kmsg</varname>
- on <literal>SIGRTMIN+29</literal>) on
+ on <constant>SIGRTMIN+29</constant>) on
the kernel command
line.</para></listitem>
</varlistentry>
@@ -1008,7 +1022,7 @@
option prefixed with
<literal>rd.</literal> is honored
only in the initial RAM disk (initrd),
- while the one that isn't prefixed only
+ while the one that is not prefixed only
in the main system.</para></listitem>
</varlistentry>
@@ -1016,9 +1030,9 @@
<term><varname>systemd.dump_core=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
systemd dumps core when it
- crashes. Otherwise no core dump is
+ crashes. Otherwise, no core dump is
created. Defaults to
<option>true</option>.</para></listitem>
</varlistentry>
@@ -1027,9 +1041,9 @@
<term><varname>systemd.crash_shell=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
systemd spawns a shell when it
- crashes. Otherwise no shell is
+ crashes. Otherwise, no shell is
spawned. Defaults to
<option>false</option>, for security
reasons, as the shell is not protected
@@ -1044,14 +1058,14 @@
argument. If positive systemd
activates the specified virtual
terminal when it crashes. Defaults to
- <literal>-1</literal>.</para></listitem>
+ <constant>-1</constant>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>systemd.confirm_spawn=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
asks for confirmation when spawning
processes. Defaults to
<option>false</option>.</para></listitem>
@@ -1061,7 +1075,7 @@
<term><varname>systemd.show_status=</varname></term>
<listitem><para>Takes a boolean
- argument. If <option>true</option>
+ argument. If <option>true</option>,
shows terse service status updates on
the console during bootup. Defaults to
<option>true</option>, unless
@@ -1099,30 +1113,38 @@
<term><varname>systemd.setenv=</varname></term>
<listitem><para>Takes a string
- argument in the form
- VARIABLE=VALUE. May be used to set
- environment variables for the init
- process and all its children at boot
- time. May be used more than once to
- set multiple variables. If the equal
- sign and variable are missing it unsets
- an environment variable which might be
- passed in from the initial ram
- disk.</para></listitem>
+ argument in the form VARIABLE=VALUE.
+ May be used to set default environment
+ variables to add to forked child processes.
+ May be used more than once to set multiple
+ variables.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>quiet</varname></term>
- <listitem><para>If passed turns off
+ <listitem><para>Turn off
status output at boot, much like
<varname>systemd.show_status=false</varname>
would. Note that this option is also
read by the kernel itself and disables
- kernel log output to the
- kernel. Passing this option hence
- turns off the usual output from both
- the system manager and the
+ kernel log output. Passing this option
+ hence turns off the usual output from
+ both the system manager and the kernel.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>debug</varname></term>
+
+ <listitem><para>Turn on debugging
+ output. This is equivalent to
+ <varname>systemd.log_level=debug</varname>.
+ Note that this option is also read by
+ the kernel itself and enables kernel
+ debug output. Passing this option
+ hence turns on the debug output from
+ both the system manager and the
kernel.</para></listitem>
</varlistentry>
@@ -1210,7 +1232,7 @@
<listitem><para>Daemon status
notification socket. This is an
- AF_UNIX datagram socket and is used to
+ <constant>AF_UNIX</constant> datagram socket and is used to
implement the daemon notification
logic as implemented by
<citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
@@ -1223,7 +1245,7 @@
<listitem><para>Used internally by the
<citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>8</manvolnum></citerefentry>
tool to implement delayed
- shutdowns. This is an AF_UNIX datagram
+ shutdowns. This is an <constant>AF_UNIX</constant> datagram
socket.</para></listitem>
</varlistentry>
@@ -1234,7 +1256,7 @@
communication channel between
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
and the systemd process. This is an
- AF_UNIX stream socket. This interface
+ <constant>AF_UNIX</constant> stream socket. This interface
is private to systemd and should not
be used in external
projects.</para></listitem>
@@ -1258,6 +1280,7 @@
<refsect1>
<title>See Also</title>
<para>
+ The <ulink url="http://www.freedesktop.org/wiki/Software/systemd/">systemd Homepage</ulink>,
<citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
diff --git a/man/telinit.8 b/man/telinit.8
new file mode 100644
index 0000000000..fd1f0d4004
--- /dev/null
+++ b/man/telinit.8
@@ -0,0 +1,101 @@
+'\" t
+.TH "TELINIT" "8" "" "systemd 208" "telinit"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+telinit \- Change SysV runlevel
+.SH "SYNOPSIS"
+.HP \w'\fBtelinit\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB{COMMAND}\fR\ 'u
+\fBtelinit \fR\fB[OPTIONS...]\fR\fB \fR\fB{COMMAND}\fR
+.SH "DESCRIPTION"
+.PP
+\fBtelinit\fR
+may be used to change the SysV system runlevel\&. Since the concept of SysV runlevels is obsolete the runlevel requests will be transparently translated into systemd unit activation requests\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-no\-wall\fR
+.RS 4
+Do not send wall message before reboot/halt/power\-off\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fB0\fR
+.RS 4
+Power\-off the machine\&. This is translated into an activation request for
+poweroff\&.target
+and is equivalent to
+\fBsystemctl poweroff\fR\&.
+.RE
+.PP
+\fB6\fR
+.RS 4
+Reboot the machine\&. This is translated into an activation request for
+reboot\&.target
+and is equivalent to
+\fBsystemctl reboot\fR\&.
+.RE
+.PP
+\fB2\fR, \fB3\fR, \fB4\fR, \fB5\fR
+.RS 4
+Change the SysV runlevel\&. This is translated into an activation request for
+runlevel2\&.target,
+runlevel3\&.target, \&.\&.\&. and is equivalent to
+\fBsystemctl isolate runlevel2\&.target\fR,
+\fBsystemctl isolate runlevel3\&.target\fR, \&.\&.\&.
+.RE
+.PP
+\fB1\fR, \fBs\fR, \fBS\fR
+.RS 4
+Change into system rescue mode\&. This is translated into an activation request for
+rescue\&.target
+and is equivalent to
+\fBsystemctl rescue\fR\&.
+.RE
+.PP
+\fBq\fR, \fBQ\fR
+.RS 4
+Reload daemon configuration\&. This is equivalent to
+\fBsystemctl daemon\-reload\fR\&.
+.RE
+.PP
+\fBu\fR, \fBU\fR
+.RS 4
+Serialize state, reexecute daemon and deserialize state again\&. This is equivalent to
+\fBsystemctl daemon\-reexec\fR\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "NOTES"
+.PP
+This is a legacy command available for compatibility only\&. It should not be used anymore, as the concept of runlevels is obsolete\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemctl\fR(1),
+\fBwall\fR(1)
diff --git a/man/telinit.html b/man/telinit.html
index af8c851ec0..a165a556ff 100644
--- a/man/telinit.html
+++ b/man/telinit.html
@@ -19,12 +19,12 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="telinit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>telinit — Change SysV runlevel</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">telinit [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm259774643040"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>telinit</strong></span> may be used to change
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="telinit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>telinit — Change SysV runlevel</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">telinit [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm274685255728"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>telinit</strong></span> may be used to change
the SysV system runlevel. Since the concept of SysV
runlevels is obsolete the runlevel requests
will be transparently translated into systemd unit
- activation requests.</p></div><div class="refsect1"><a name="idm259771096928"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
- text and exits.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Don't send wall
+ activation requests.</p></div><div class="refsect1"><a name="idm274685253712"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Prints a short help
+ text and exits.</p></dd><dt id="--no-wall"><span class="term"><code class="option">--no-wall</code></span><a class="headerlink" title="Permalink to this term" href="#--no-wall">¶</a></dt><dd><p>Do not send wall
message before
reboot/halt/power-off.</p></dd></dl></div><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="0"><span class="term"><span class="command"><strong>0</strong></span></span><a class="headerlink" title="Permalink to this term" href="#0">¶</a></dt><dd><p>Power-off the
machine. This is translated into an
@@ -59,10 +59,10 @@
reexecute daemon and deserialize state
again. This is equivalent to
<span class="command"><strong>systemctl
- daemon-reexec</strong></span>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259774728864"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259774727680"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This is a legacy command available for compatibility
+ daemon-reexec</strong></span>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274689119776"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274689118592"></a><h2 id="Notes">Notes<a class="headerlink" title="Permalink to this headline" href="#Notes">¶</a></h2><p>This is a legacy command available for compatibility
only. It should not be used anymore, as the concept of
- runlevels is obsolete.</p></div><div class="refsect1"><a name="idm259774719424"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ runlevels is obsolete.</p></div><div class="refsect1"><a name="idm274689117232"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemctl.html"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
<a href="wall.html"><span class="citerefentry"><span class="refentrytitle">wall</span>(1)</span></a>
diff --git a/man/telinit.xml b/man/telinit.xml
index 4c6064f54a..bb8093914a 100644
--- a/man/telinit.xml
+++ b/man/telinit.xml
@@ -80,7 +80,7 @@
<varlistentry>
<term><option>--no-wall</option></term>
- <listitem><para>Don't send wall
+ <listitem><para>Do not send wall
message before
reboot/halt/power-off.</para></listitem>
</varlistentry>
diff --git a/man/timedatectl.1 b/man/timedatectl.1
new file mode 100644
index 0000000000..700551fd70
--- /dev/null
+++ b/man/timedatectl.1
@@ -0,0 +1,202 @@
+'\" t
+.TH "TIMEDATECTL" "1" "" "systemd 208" "timedatectl"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+timedatectl \- Control the system time and date
+.SH "SYNOPSIS"
+.HP \w'\fBtimedatectl\ \fR\fB[OPTIONS...]\fR\fB\ \fR\fB{COMMAND}\fR\ 'u
+\fBtimedatectl \fR\fB[OPTIONS...]\fR\fB \fR\fB{COMMAND}\fR
+.SH "DESCRIPTION"
+.PP
+\fBtimedatectl\fR
+may be used to query and change the system clock and its settings\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Prints a short help text and exits\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Prints a short version string and exits\&.
+.RE
+.PP
+\fB\-\-no\-pager\fR
+.RS 4
+Do not pipe output into a pager\&.
+.RE
+.PP
+\fB\-\-no\-ask\-password\fR
+.RS 4
+Do not query the user for authentication for privileged operations\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-privileged\fR
+.RS 4
+Acquire privileges via PolicyKit before executing the operation\&.
+.RE
+.PP
+\fB\-H\fR, \fB\-\-host\fR
+.RS 4
+Execute the operation remotely\&. Specify a hostname, or username and hostname separated by
+"@", to connect to\&. This will use SSH to talk to a remote system\&.
+.RE
+.PP
+\fB\-\-adjust\-system\-clock\fR
+.RS 4
+If
+\fBset\-local\-rtc\fR
+is invoked and this option is passed, the system clock is synchronized from the RTC again, taking the new setting into account\&. Otherwise, the RTC is synchronized from the system clock\&.
+.RE
+.PP
+The following commands are understood:
+.PP
+\fBstatus\fR
+.RS 4
+Show current settings of the system clock and RTC\&.
+.RE
+.PP
+\fBset\-time [TIME]\fR
+.RS 4
+Set the system clock to the specified time\&. This will also update the RTC time accordingly\&. The time may be specified in the format "2012\-10\-30 18:17:16"\&.
+.RE
+.PP
+\fBset\-timezone [TIMEZONE]\fR
+.RS 4
+Set the system time zone to the specified value\&. Available timezones can be listed with
+\fBlist\-timezones\fR\&. If the RTC is configured to be in the local time, this will also update the RTC time\&. This call will alter the
+/etc/localtime
+symlink\&. See
+\fBlocaltime\fR(5)
+for more information\&.
+.RE
+.PP
+\fBlist\-timezones\fR
+.RS 4
+List available time zones, one per line\&. Entries from the list can be set as the system timezone with
+\fBset\-timezone\fR\&.
+.RE
+.PP
+\fBset\-local\-rtc [BOOL]\fR
+.RS 4
+Takes a boolean argument\&. If
+"0", the system is configured to maintain the RTC in universal time\&. If
+"1", it will maintain the RTC in local time instead\&. Note that maintaining the RTC in the local timezone is not fully supported and will create various problems with time zone changes and daylight saving adjustments\&. If at all possible, keep the RTC in UTC mode\&. Note that invoking this will also synchronize the RTC from the system clock, unless
+\fB\-\-adjust\-system\-clock\fR
+is passed (see above)\&. This command will change the 3rd line of
+/etc/adjtime, as documented in
+\fBhwclock\fR(8)\&.
+.RE
+.PP
+\fBset\-ntp [BOOL]\fR
+.RS 4
+Takes a boolean argument\&. Controls whether NTP based network time synchronization is enabled (if available)\&.
+.RE
+.SH "EXIT STATUS"
+.PP
+On success 0 is returned, a non\-zero failure code otherwise\&.
+.SH "ENVIRONMENT"
+.PP
+\fI$SYSTEMD_PAGER\fR
+.RS 4
+Pager to use when
+\fB\-\-no\-pager\fR
+is not given; overrides
+\fI$PAGER\fR\&. Setting this to an empty string or the value
+"cat"
+is equivalent to passing
+\fB\-\-no\-pager\fR\&.
+.RE
+.SH "EXAMPLES"
+.PP
+Show current settings:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ timedatectl
+ Local time: Fri, 2012\-11\-02 09:26:46 CET
+ Universal time: Fri, 2012\-11\-02 08:26:46 UTC
+ RTC time: Fri, 2012\-11\-02 08:26:45
+ Timezone: Europe/Warsaw
+ UTC offset: +0100
+ NTP enabled: no
+NTP synchronized: no
+ RTC in local TZ: no
+ DST active: no
+ Last DST change: CEST → CET, DST became inactive
+ Sun, 2012\-10\-28 02:59:59 CEST
+ Sun, 2012\-10\-28 02:00:00 CET
+ Next DST change: CET → CEST, DST will become active
+ the clock will jump one hour forward
+ Sun, 2013\-03\-31 01:59:59 CET
+ Sun, 2013\-03\-31 03:00:00 CEST
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Enable an NTP daemon (chronyd):
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ timedatectl set\-ntp true
+==== AUTHENTICATING FOR org\&.freedesktop\&.timedate1\&.set\-ntp ===
+Authentication is required to control whether network time synchronization shall be enabled\&.
+Authenticating as: user
+Password: ********
+==== AUTHENTICATION COMPLETE ===
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ systemctl status chronyd\&.service
+chronyd\&.service \- NTP client/server
+ Loaded: loaded (/usr/lib/systemd/system/chronyd\&.service; enabled)
+ Active: active (running) since Fri, 2012\-11\-02 09:36:25 CET; 5s ago
+\&.\&.\&.
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBhwclock\fR(8),
+\fBdate\fR(1),
+\fBlocaltime\fR(5),
+\fBsystemctl\fR(1),
+\fBsystemd-timedated.service\fR(8)
diff --git a/man/timedatectl.html b/man/timedatectl.html
index 4c15755999..3e024cec2c 100644
--- a/man/timedatectl.html
+++ b/man/timedatectl.html
@@ -19,24 +19,25 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="timedatectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>timedatectl — Control the system time and date</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">timedatectl [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm259798163584"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>timedatectl</strong></span> may be used to
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="timedatectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>timedatectl — Control the system time and date</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">timedatectl [OPTIONS...] {COMMAND}</code> </p></div></div><div class="refsect1"><a name="idm274703814688"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>timedatectl</strong></span> may be used to
query and change the system clock and its
- settings.</p></div><div class="refsect1"><a name="idm259798234656"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
+ settings.</p></div><div class="refsect1"><a name="idm274703812832"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#-h">¶</a></dt><dd><p>Prints a short help
text and exits.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Prints a short version
string and exits.</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="#--no-pager">¶</a></dt><dd><p>Do not pipe output into a
- pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Don't query the user
+ pager.</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="#--no-ask-password">¶</a></dt><dd><p>Do not query the user
for authentication for privileged
- operations.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute the operation
+ operations.</p></dd><dt id="-P"><span class="term"><code class="option">-P</code>, </span><span class="term"><code class="option">--privileged</code></span><a class="headerlink" title="Permalink to this term" href="#-P">¶</a></dt><dd><p>Acquire privileges via PolicyKit
+ before executing the operation.</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host</code></span><a class="headerlink" title="Permalink to this term" href="#-H">¶</a></dt><dd><p>Execute the operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by "<code class="literal">@</code>",
to connect to. This will use SSH to
talk to a remote
system.</p></dd><dt id="--adjust-system-clock"><span class="term"><code class="option">--adjust-system-clock</code></span><a class="headerlink" title="Permalink to this term" href="#--adjust-system-clock">¶</a></dt><dd><p>If
<span class="command"><strong>set-local-rtc</strong></span> is
- invoked and this option is passed the
+ invoked and this option is passed, the
system clock is synchronized from the
RTC again, taking the new setting into
- account. Otherwise the RTC is
+ account. Otherwise, the RTC is
synchronized from the system
clock.</p></dd></dl></div><p>The following commands are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="status"><span class="term"><span class="command"><strong>status</strong></span></span><a class="headerlink" title="Permalink to this term" href="#status">¶</a></dt><dd><p>Show current settings
of the system clock and
@@ -47,10 +48,10 @@
"2012-10-30
18:17:16".</p></dd><dt id="set-timezone [TIMEZONE]"><span class="term"><span class="command"><strong>set-timezone [TIMEZONE]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-timezone%20%5BTIMEZONE%5D">¶</a></dt><dd><p>Set the system time
zone to the specified value. Available
- time zones can be listed with
+ timezones can be listed with
<span class="command"><strong>list-timezones</strong></span>. If
the RTC is configured to be in the
- local time this will also update the
+ local time, this will also update the
RTC time. This call will alter the
<code class="filename">/etc/localtime</code>
symlink. See
@@ -59,19 +60,19 @@
information.</p></dd><dt id="list-timezones"><span class="term"><span class="command"><strong>list-timezones</strong></span></span><a class="headerlink" title="Permalink to this term" href="#list-timezones">¶</a></dt><dd><p>List available time
zones, one per line. Entries from the
list can be set as the system
- time zone with
+ timezone with
<span class="command"><strong>set-timezone</strong></span>.</p></dd><dt id="set-local-rtc [BOOL]"><span class="term"><span class="command"><strong>set-local-rtc [BOOL]</strong></span></span><a class="headerlink" title="Permalink to this term" href="#set-local-rtc%20%5BBOOL%5D">¶</a></dt><dd><p>Takes a boolean
- argument. If <code class="literal">0</code> the
+ argument. If "<code class="literal">0</code>", the
system is configured to maintain the
- RTC in universal time, if
- <code class="literal">1</code> it will maintain
+ RTC in universal time. If
+ "<code class="literal">1</code>", it will maintain
the RTC in local time instead. Note
that maintaining the RTC in the local
- time zone is not fully supported and
+ timezone is not fully supported and
will create various problems with time
zone changes and daylight saving
- adjustments. If at all possible use
- RTC in UTC. Note that invoking this
+ adjustments. If at all possible, keep the
+ RTC in UTC mode. Note that invoking this
will also synchronize the RTC from the
system clock, unless
<code class="option">--adjust-system-clock</code> is
@@ -83,13 +84,13 @@
argument. Controls whether NTP based
network time synchronization is
enabled (if
- available).</p></dd></dl></div></div><div class="refsect1"><a name="idm259798321808"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
- code otherwise.</p></div><div class="refsect1"><a name="idm259798320624"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
+ available).</p></dd></dl></div></div><div class="refsect1"><a name="idm274707674464"></a><h2 id="Exit status">Exit status<a class="headerlink" title="Permalink to this headline" href="#Exit%20status">¶</a></h2><p>On success 0 is returned, a non-zero failure
+ code otherwise.</p></div><div class="refsect1"><a name="idm274707673280"></a><h2 id="Environment">Environment<a class="headerlink" title="Permalink to this headline" href="#Environment">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="#%24SYSTEMD_PAGER">¶</a></dt><dd><p>Pager to use when
<code class="option">--no-pager</code> is not given;
overrides <code class="varname">$PAGER</code>. Setting
this to an empty string or the value
- <code class="literal">cat</code> is equivalent to passing
- <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm259798308656"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Show current settings:
+ "<code class="literal">cat</code>" is equivalent to passing
+ <code class="option">--no-pager</code>.</p></dd></dl></div></div><div class="refsect1"><a name="idm274707668304"></a><h2 id="Examples">Examples<a class="headerlink" title="Permalink to this headline" href="#Examples">¶</a></h2><p>Show current settings:
</p><pre class="programlisting">
$ timedatectl
Local time: Fri, 2012-11-02 09:26:46 CET
@@ -126,7 +127,7 @@ chronyd.service - NTP client/server
Active: active (running) since Fri, 2012-11-02 09:36:25 CET; 5s ago
...
</pre><p>
- </p></div><div class="refsect1"><a name="idm259798303280"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ </p></div><div class="refsect1"><a name="idm274707662928"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="hwclock.html"><span class="citerefentry"><span class="refentrytitle">hwclock</span>(8)</span></a>,
<a href="date.html"><span class="citerefentry"><span class="refentrytitle">date</span>(1)</span></a>,
diff --git a/man/timedatectl.xml b/man/timedatectl.xml
index faccc5086d..be0ad3f012 100644
--- a/man/timedatectl.xml
+++ b/man/timedatectl.xml
@@ -92,18 +92,26 @@
<varlistentry>
<term><option>--no-ask-password</option></term>
- <listitem><para>Don't query the user
+ <listitem><para>Do not query the user
for authentication for privileged
operations.</para></listitem>
</varlistentry>
<varlistentry>
+ <term><option>-P</option></term>
+ <term><option>--privileged</option></term>
+
+ <listitem><para>Acquire privileges via PolicyKit
+ before executing the operation.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>-H</option></term>
<term><option>--host</option></term>
<listitem><para>Execute the operation
remotely. Specify a hostname, or
- username and hostname separated by @,
+ username and hostname separated by <literal>@</literal>,
to connect to. This will use SSH to
talk to a remote
system.</para></listitem>
@@ -114,10 +122,10 @@
<listitem><para>If
<command>set-local-rtc</command> is
- invoked and this option is passed the
+ invoked and this option is passed, the
system clock is synchronized from the
RTC again, taking the new setting into
- account. Otherwise the RTC is
+ account. Otherwise, the RTC is
synchronized from the system
clock.</para></listitem>
</varlistentry>
@@ -150,10 +158,10 @@
<listitem><para>Set the system time
zone to the specified value. Available
- time zones can be listed with
+ timezones can be listed with
<command>list-timezones</command>. If
the RTC is configured to be in the
- local time this will also update the
+ local time, this will also update the
RTC time. This call will alter the
<filename>/etc/localtime</filename>
symlink. See
@@ -168,7 +176,7 @@
<listitem><para>List available time
zones, one per line. Entries from the
list can be set as the system
- time zone with
+ timezone with
<command>set-timezone</command>.</para></listitem>
</varlistentry>
@@ -176,17 +184,17 @@
<term><command>set-local-rtc [BOOL]</command></term>
<listitem><para>Takes a boolean
- argument. If <literal>0</literal> the
+ argument. If <literal>0</literal>, the
system is configured to maintain the
- RTC in universal time, if
- <literal>1</literal> it will maintain
+ RTC in universal time. If
+ <literal>1</literal>, it will maintain
the RTC in local time instead. Note
that maintaining the RTC in the local
- time zone is not fully supported and
+ timezone is not fully supported and
will create various problems with time
zone changes and daylight saving
- adjustments. If at all possible use
- RTC in UTC. Note that invoking this
+ adjustments. If at all possible, keep the
+ RTC in UTC mode. Note that invoking this
will also synchronize the RTC from the
system clock, unless
<option>--adjust-system-clock</option> is
diff --git a/man/tmpfiles.d.5 b/man/tmpfiles.d.5
new file mode 100644
index 0000000000..f5110ea426
--- /dev/null
+++ b/man/tmpfiles.d.5
@@ -0,0 +1,279 @@
+'\" t
+.TH "TMPFILES\&.D" "5" "" "systemd 208" "tmpfiles.d"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+tmpfiles.d \- Configuration for creation, deletion and cleaning of volatile and temporary files
+.SH "SYNOPSIS"
+.PP
+/etc/tmpfiles\&.d/*\&.conf
+.PP
+/run/tmpfiles\&.d/*\&.conf
+.PP
+/usr/lib/tmpfiles\&.d/*\&.conf
+.SH "DESCRIPTION"
+.PP
+\fBsystemd\-tmpfiles\fR
+uses the configuration files from the above directories to describe the creation, cleaning and removal of volatile and temporary files and directories which usually reside in directories such as
+/run
+or
+/tmp\&.
+.SH "CONFIGURATION FORMAT"
+.PP
+Each configuration file shall be named in the style of
+<package>\&.conf\&. Files in
+/etc/
+override files with the same name in
+/usr/lib/
+and
+/run/\&. Files in
+/run/
+override files with the same name in
+/usr/lib/\&. Packages should install their configuration files in
+/usr/lib/\&. Files in
+/etc/
+are reserved for the local administrator, who may use this logic to override the configuration files installed by vendor packages\&. All configuration files are sorted by their filename in lexicographic order, regardless in which of the directories they reside\&. If multiple files specify the same path, the entry in the file with the lexicographically earliest name will be applied, all all other conflicting entries logged as errors\&.
+.PP
+If the administrator wants to disable a configuration file supplied by the vendor, the recommended way is to place a symlink to
+/dev/null
+in
+/etc/tmpfiles\&.d/
+bearing the same filename\&.
+.PP
+The configuration format is one line per path containing action, path, mode, ownership, age and argument fields:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+Type Path Mode UID GID Age Argument
+d /run/user 0755 root root 10d \-
+L /tmp/foobar \- \- \- \- /dev/null
+.fi
+.if n \{\
+.RE
+.\}
+.SS "Type"
+.PP
+The following line types are understood:
+.PP
+\fIf\fR
+.RS 4
+Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed)
+.RE
+.PP
+\fIF\fR
+.RS 4
+Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed)
+.RE
+.PP
+\fIw\fR
+.RS 4
+Write the argument parameter to a file, if the file exists\&. Lines of this type accept shell\-style globs in place of normal path names\&. The argument parameter will be written without a trailing newline\&. C\-style backslash escapes are interpreted\&.
+.RE
+.PP
+\fId\fR
+.RS 4
+Create a directory if it does not exist yet
+.RE
+.PP
+\fID\fR
+.RS 4
+Create or empty a directory
+.RE
+.PP
+\fIp\fR
+.RS 4
+Create a named pipe (FIFO) if it does not exist yet
+.RE
+.PP
+\fIL\fR
+.RS 4
+Create a symlink if it does not exist yet
+.RE
+.PP
+\fIc\fR
+.RS 4
+Create a character device node if it does not exist yet
+.RE
+.PP
+\fIb\fR
+.RS 4
+Create a block device node if it does not exist yet
+.RE
+.PP
+\fIm\fR
+.RS 4
+If the specified file path exists adjust its access mode, group and user to the specified values and reset the SELinux label\&. If it doesn\*(Aqt exist do nothing\&.
+.RE
+.PP
+\fIx\fR
+.RS 4
+Ignore a path during cleaning\&. Use this type to exclude paths from clean\-up as controlled with the Age parameter\&. Note that lines of this type do not influence the effect of r or R lines\&. Lines of this type accept shell\-style globs in place of normal path names\&.
+.RE
+.PP
+\fIX\fR
+.RS 4
+Ignore a path during cleanup\&. Use this type to prevent path removal as controlled with the Age parameter\&. Note that if path is a directory, content of a directory is not excluded from clean\-up, only directory itself\&. Lines of this type accept shell\-style globs in place of normal path names\&.
+.RE
+.PP
+\fIr\fR
+.RS 4
+Remove a file or directory if it exists\&. This may not be used to remove non\-empty directories, use R for that\&. Lines of this type accept shell\-style globs in place of normal path names\&.
+.RE
+.PP
+\fIR\fR
+.RS 4
+Recursively remove a path and all its subdirectories (if it is a directory)\&. Lines of this type accept shell\-style globs in place of normal path names\&.
+.RE
+.PP
+\fIz\fR
+.RS 4
+Restore SELinux security context label and set ownership and access mode of a file or directory if it exists\&. Lines of this type accept shell\-style globs in place of normal path names\&.
+.RE
+.PP
+\fIZ\fR
+.RS 4
+Recursively restore SELinux security context label and set ownership and access mode of a path and all its subdirectories (if it is a directory)\&. Lines of this type accept shell\-style globs in place of normal path names\&.
+.RE
+.SS "Path"
+.PP
+The file system path specification supports simple specifier expansion\&. The following expansions are understood:
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.B Table\ \&1.\ \&Specifiers available
+.TS
+allbox tab(:);
+lB lB lB.
+T{
+Specifier
+T}:T{
+Meaning
+T}:T{
+Details
+T}
+.T&
+l l l
+l l l
+l l l
+l l l
+l l l.
+T{
+"%m"
+T}:T{
+Machine ID
+T}:T{
+The machine ID of the running system, formatted as string\&. See \fBmachine-id\fR(5) for more information\&.
+T}
+T{
+"%b"
+T}:T{
+Boot ID
+T}:T{
+The boot ID of the running system, formatted as string\&. See \fBrandom\fR(4) for more information\&.
+T}
+T{
+"%H"
+T}:T{
+Host name
+T}:T{
+The hostname of the running system\&.
+T}
+T{
+"%v"
+T}:T{
+Kernel release
+T}:T{
+Identical to \fBuname \-r\fR output\&.
+T}
+T{
+"%%"
+T}:T{
+Escaped %
+T}:T{
+Single percent sign\&.
+T}
+.TE
+.sp 1
+.SS "Mode"
+.PP
+The file access mode to use when creating this file or directory\&. If omitted or when set to \-, the default is used: 0755 for directories, 0644 for all other file objects\&. For z, Z lines, if omitted or when set to \-, the file access mode will not be modified\&. This parameter is ignored for x, r, R, L lines\&.
+.SS "UID, GID"
+.PP
+The user and group to use for this file or directory\&. This may either be a numeric user/group ID or a user or group name\&. If omitted or when set to \-, the default 0 (root) is used\&. For z, Z lines, when omitted or when set to \-, the file ownership will not be modified\&. These parameters are ignored for x, r, R, L lines\&.
+.SS "Age"
+.PP
+The date field, when set, is used to decide what files to delete when cleaning\&. If a file or directory is older than the current time minus the age field, it is deleted\&. The field format is a series of integers each followed by one of the following postfixes for the respective time units:
+.PP
+\fIs\fR, \fImin\fR, \fIh\fR, \fId\fR, \fIw\fR, \fIms\fR, \fIm\fR, \fIus\fR
+.RS 4
+.RE
+.PP
+If multiple integers and units are specified, the time values are summed up\&. If an integer is given without a unit, s is assumed\&.
+.PP
+When the age is set to zero, the files are cleaned unconditionally\&.
+.PP
+The age field only applies to lines starting with d, D and x\&. If omitted or set to \-, no automatic clean\-up is done\&.
+.PP
+If the age field starts with a tilde character (~), the clean\-up is only applied to files and directories one level inside the directory specified, but not the files and directories immediately inside it\&.
+.SS "Argument"
+.PP
+For L lines determines the destination path of the symlink\&. For c, b determines the major/minor of the device node, with major and minor formatted as integers, separated by :, e\&.g\&. "1:3"\&. For f, F, w may be used to specify a short string that is written to the file, suffixed by a newline\&. Ignored for all other lines\&.
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&/etc/tmpfiles.d/screen.conf example\fR
+.PP
+\fBscreen\fR
+needs two directories created at boot with specific modes and ownership\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+d /var/run/screens 1777 root root 10d
+d /var/run/uscreens 0755 root root 10d12h
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+\fBExample\ \&2.\ \&/etc/tmpfiles.d/abrt.conf example\fR
+.PP
+\fBabrt\fR
+needs a directory created at boot with specific mode and ownership and its content should be preserved\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+d /var/tmp/abrt 0755 abrt abrt
+x /var/tmp/abrt/*
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-tmpfiles\fR(8),
+\fBsystemd-delta\fR(1)
diff --git a/man/tmpfiles.d.html b/man/tmpfiles.d.html
index 94576f6f8c..d19f25f17d 100644
--- a/man/tmpfiles.d.html
+++ b/man/tmpfiles.d.html
@@ -19,14 +19,14 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="tmpfiles.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tmpfiles.d — Configuration for creation, deletion and
- cleaning of volatile and temporary files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/tmpfiles.d/*.conf</code></p><p><code class="filename">/run/tmpfiles.d/*.conf</code></p><p><code class="filename">/usr/lib/tmpfiles.d/*.conf</code></p></div><div class="refsect1"><a name="idm259792686512"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> uses the
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="tmpfiles.d"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tmpfiles.d — Configuration for creation, deletion and
+ cleaning of volatile and temporary files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/tmpfiles.d/*.conf</code></p><p><code class="filename">/run/tmpfiles.d/*.conf</code></p><p><code class="filename">/usr/lib/tmpfiles.d/*.conf</code></p></div><div class="refsect1"><a name="idm274693628464"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p><span class="command"><strong>systemd-tmpfiles</strong></span> uses the
configuration files from the above directories to describe the
creation, cleaning and removal of volatile and
temporary files and directories which usually reside
in directories such as <code class="filename">/run</code>
- or <code class="filename">/tmp</code>.</p></div><div class="refsect1"><a name="idm259789139104"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>Each configuration file shall be named in the
- style of <code class="filename">&lt;program&gt;.conf</code>.
+ or <code class="filename">/tmp</code>.</p></div><div class="refsect1"><a name="idm274693625040"></a><h2 id="Configuration Format">Configuration Format<a class="headerlink" title="Permalink to this headline" href="#Configuration%20Format">¶</a></h2><p>Each configuration file shall be named in the
+ style of <code class="filename">&lt;package&gt;.conf</code>.
Files in <code class="filename">/etc/</code> override files
with the same name in <code class="filename">/usr/lib/</code>
and <code class="filename">/run/</code>. Files in
@@ -38,22 +38,29 @@
administrator, who may use this logic to override the
configuration files installed by vendor packages. All
configuration files are sorted by their filename in
- alphabetical order, regardless in which of the
- directories they reside, to guarantee that a specific
- configuration file takes precedence over another file
- with an alphabetically later name.</p><p>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ lexicographic order, regardless in which of the
+ directories they reside. If multiple files specify the
+ same path, the entry in the file with the lexicographically
+ earliest name will be applied, all all other conflicting
+ entries logged as errors.</p><p>If the administrator wants to disable a
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<code class="filename">/dev/null</code> in
<code class="filename">/etc/tmpfiles.d/</code> bearing the
- same file name.</p><p>The configuration format is one line per path
+ same filename.</p><p>The configuration format is one line per path
containing action, path, mode, ownership, age and argument
fields:</p><pre class="programlisting">Type Path Mode UID GID Age Argument
d /run/user 0755 root root 10d -
-L /tmp/foobar - - - - /dev/null</pre><div class="refsect2"><a name="idm259789128528"></a><h3 id="Type">Type<a class="headerlink" title="Permalink to this headline" href="#Type">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="f"><span class="term"><code class="varname">f</code></span><a class="headerlink" title="Permalink to this term" href="#f">¶</a></dt><dd><p>Create a file if it doesn't exist yet (optionally writing a short string into it, if the argument parameter is passed)</p></dd><dt id="F"><span class="term"><code class="varname">F</code></span><a class="headerlink" title="Permalink to this term" href="#F">¶</a></dt><dd><p>Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed)</p></dd><dt id="w"><span class="term"><code class="varname">w</code></span><a class="headerlink" title="Permalink to this term" href="#w">¶</a></dt><dd><p>Write the argument parameter to a file, if the file exists.
+L /tmp/foobar - - - - /dev/null</pre><div class="refsect2"><a name="idm274697518128"></a><h3 id="Type">Type<a class="headerlink" title="Permalink to this headline" href="#Type">¶</a></h3><p>The following line types are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="f"><span class="term"><code class="varname">f</code></span><a class="headerlink" title="Permalink to this term" href="#f">¶</a></dt><dd><p>Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed)</p></dd><dt id="F"><span class="term"><code class="varname">F</code></span><a class="headerlink" title="Permalink to this term" href="#F">¶</a></dt><dd><p>Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed)</p></dd><dt id="w"><span class="term"><code class="varname">w</code></span><a class="headerlink" title="Permalink to this term" href="#w">¶</a></dt><dd><p>Write the argument parameter to a file, if the file exists.
Lines of this type accept shell-style globs in place of normal path
names. The argument parameter will be written without a trailing
- newline. C-style backslash escapes are interpreted.</p></dd><dt id="d"><span class="term"><code class="varname">d</code></span><a class="headerlink" title="Permalink to this term" href="#d">¶</a></dt><dd><p>Create a directory if it doesn't exist yet</p></dd><dt id="D"><span class="term"><code class="varname">D</code></span><a class="headerlink" title="Permalink to this term" href="#D">¶</a></dt><dd><p>Create or empty a directory</p></dd><dt id="p"><span class="term"><code class="varname">p</code></span><a class="headerlink" title="Permalink to this term" href="#p">¶</a></dt><dd><p>Create a named pipe (FIFO) if it doesn't exist yet</p></dd><dt id="L"><span class="term"><code class="varname">L</code></span><a class="headerlink" title="Permalink to this term" href="#L">¶</a></dt><dd><p>Create a symlink if it doesn't exist yet</p></dd><dt id="c"><span class="term"><code class="varname">c</code></span><a class="headerlink" title="Permalink to this term" href="#c">¶</a></dt><dd><p>Create a character device node if it doesn't exist yet</p></dd><dt id="b"><span class="term"><code class="varname">b</code></span><a class="headerlink" title="Permalink to this term" href="#b">¶</a></dt><dd><p>Create a block device node if it doesn't exist yet</p></dd><dt id="x"><span class="term"><code class="varname">x</code></span><a class="headerlink" title="Permalink to this term" href="#x">¶</a></dt><dd><p>Ignore a path
+ newline. C-style backslash escapes are interpreted.</p></dd><dt id="d"><span class="term"><code class="varname">d</code></span><a class="headerlink" title="Permalink to this term" href="#d">¶</a></dt><dd><p>Create a directory if it does not exist yet</p></dd><dt id="D"><span class="term"><code class="varname">D</code></span><a class="headerlink" title="Permalink to this term" href="#D">¶</a></dt><dd><p>Create or empty a directory</p></dd><dt id="p"><span class="term"><code class="varname">p</code></span><a class="headerlink" title="Permalink to this term" href="#p">¶</a></dt><dd><p>Create a named pipe (FIFO) if it does not exist yet</p></dd><dt id="L"><span class="term"><code class="varname">L</code></span><a class="headerlink" title="Permalink to this term" href="#L">¶</a></dt><dd><p>Create a symlink if it does not exist yet</p></dd><dt id="c"><span class="term"><code class="varname">c</code></span><a class="headerlink" title="Permalink to this term" href="#c">¶</a></dt><dd><p>Create a character device node if it does not exist yet</p></dd><dt id="b"><span class="term"><code class="varname">b</code></span><a class="headerlink" title="Permalink to this term" href="#b">¶</a></dt><dd><p>Create a block device node if it does not exist yet</p></dd><dt id="m"><span class="term"><code class="varname">m</code></span><a class="headerlink" title="Permalink to this term" href="#m">¶</a></dt><dd><p>If the
+ specified file path exists
+ adjust its access mode, group
+ and user to the specified
+ values and reset the SELinux
+ label. If it doesn't exist do
+ nothing.</p></dd><dt id="x"><span class="term"><code class="varname">x</code></span><a class="headerlink" title="Permalink to this term" href="#x">¶</a></dt><dd><p>Ignore a path
during cleaning. Use this type
to exclude paths from clean-up
as controlled with the Age
@@ -103,44 +110,47 @@ L /tmp/foobar - - - - /dev/null</pre><div class="refsect2"><a name
directory). Lines of this type
accept shell-style globs in
place of normal path
- names.</p></dd></dl></div></div><div class="refsect2"><a name="idm259792756656"></a><h3 id="Mode">Mode<a class="headerlink" title="Permalink to this headline" href="#Mode">¶</a></h3><p>The file access mode to use when
+ names.</p></dd></dl></div></div><div class="refsect2"><a name="idm274697481904"></a><h3 id="Path">Path<a class="headerlink" title="Permalink to this headline" href="#Path">¶</a></h3><p>The file system path specification supports simple specifier
+ expansion. The following expansions are
+ understood:</p><div class="table"><a name="idm274697480704"></a><p class="title"><b>Table 1. Specifiers available</b></p><div class="table-contents"><table summary="Specifiers available" border="1"><colgroup><col align="left" class="spec"><col align="left" class="mean"><col align="left" class="detail"></colgroup><thead><tr><th align="left">Specifier</th><th align="left">Meaning</th><th align="left">Details</th></tr></thead><tbody><tr><td align="left">"<code class="literal">%m</code>"</td><td align="left">Machine ID</td><td align="left">The machine ID of the running system, formatted as string. See <a href="machine-id.html"><span class="citerefentry"><span class="refentrytitle">machine-id</span>(5)</span></a> for more information.</td></tr><tr><td align="left">"<code class="literal">%b</code>"</td><td align="left">Boot ID</td><td align="left">The boot ID of the running system, formatted as string. See <a href="random.html"><span class="citerefentry"><span class="refentrytitle">random</span>(4)</span></a> for more information.</td></tr><tr><td align="left">"<code class="literal">%H</code>"</td><td align="left">Host name</td><td align="left">The hostname of the running system.</td></tr><tr><td align="left">"<code class="literal">%v</code>"</td><td align="left">Kernel release</td><td align="left">Identical to <span class="command"><strong>uname -r</strong></span> output.</td></tr><tr><td align="left">"<code class="literal">%%</code>"</td><td align="left">Escaped %</td><td align="left">Single percent sign.</td></tr></tbody></table></div></div><br class="table-break"></div><div class="refsect2"><a name="idm274692544320"></a><h3 id="Mode">Mode<a class="headerlink" title="Permalink to this headline" href="#Mode">¶</a></h3><p>The file access mode to use when
creating this file or directory. If omitted or
- when set to - the default is used: 0755 for
+ when set to -, the default is used: 0755 for
directories, 0644 for all other file
- objects. For z, Z lines if omitted or when set
- to - the file access mode will not be
+ objects. For z, Z lines, if omitted or when set
+ to -, the file access mode will not be
modified. This parameter is ignored for x, r,
- R, L lines.</p></div><div class="refsect2"><a name="idm259792754944"></a><h3 id="UID, GID">UID, GID<a class="headerlink" title="Permalink to this headline" href="#UID,%20GID">¶</a></h3><p>The user and group to use for this file
+ R, L lines.</p></div><div class="refsect2"><a name="idm274692542672"></a><h3 id="UID, GID">UID, GID<a class="headerlink" title="Permalink to this headline" href="#UID,%20GID">¶</a></h3><p>The user and group to use for this file
or directory. This may either be a numeric
user/group ID or a user or group name. If
- omitted or when set to - the default 0 (root)
- is used. For z, Z lines when omitted or when set to -
+ omitted or when set to -, the default 0 (root)
+ is used. For z, Z lines, when omitted or when set to -,
the file ownership will not be modified.
- These parameters are ignored for x, r, R, L lines.</p></div><div class="refsect2"><a name="idm259792753280"></a><h3 id="Age">Age<a class="headerlink" title="Permalink to this headline" href="#Age">¶</a></h3><p>The date field, when set, is used to
+ These parameters are ignored for x, r, R, L lines.</p></div><div class="refsect2"><a name="idm274692541040"></a><h3 id="Age">Age<a class="headerlink" title="Permalink to this headline" href="#Age">¶</a></h3><p>The date field, when set, is used to
decide what files to delete when cleaning. If
a file or directory is older than the current
- time minus the age field it is deleted. The
+ time minus the age field, it is deleted. The
field format is a series of integers each
followed by one of the following
- postfixes for the respective time units:</p><div class="variablelist"><dl class="variablelist"><dt id="s"><span class="term"><code class="varname">s</code>, </span><span class="term"><code class="varname">min</code>, </span><span class="term"><code class="varname">h</code>, </span><span class="term"><code class="varname">d</code>, </span><span class="term"><code class="varname">w</code>, </span><span class="term"><code class="varname">ms</code>, </span><span class="term"><code class="varname">m</code>, </span><span class="term"><code class="varname">us</code></span><a class="headerlink" title="Permalink to this term" href="#s">¶</a></dt><dd></dd></dl></div><p>If multiple integers and units are specified the time
+ postfixes for the respective time units:</p><div class="variablelist"><dl class="variablelist"><dt id="s"><span class="term"><code class="varname">s</code>, </span><span class="term"><code class="varname">min</code>, </span><span class="term"><code class="varname">h</code>, </span><span class="term"><code class="varname">d</code>, </span><span class="term"><code class="varname">w</code>, </span><span class="term"><code class="varname">ms</code>, </span><span class="term"><code class="varname">m</code>, </span><span class="term"><code class="varname">us</code></span><a class="headerlink" title="Permalink to this term" href="#s">¶</a></dt><dd></dd></dl></div><p>If multiple integers and units are specified, the time
values are summed up. If an integer is given without a unit,
s is assumed.
</p><p>When the age is set to zero, the files are cleaned
unconditionally.</p><p>The age field only applies to lines starting with
- d, D and x. If omitted or set to - no automatic clean-up
+ d, D and x. If omitted or set to -, no automatic clean-up
is done.</p><p>If the age field starts with a tilde
- character (~) the clean-up is only applied to
+ character (~), the clean-up is only applied to
files and directories one level inside the
directory specified, but not the files and
- directories immediately inside it.</p></div><div class="refsect2"><a name="idm259792744496"></a><h3 id="Argument">Argument<a class="headerlink" title="Permalink to this headline" href="#Argument">¶</a></h3><p>For L lines determines the destination
+ directories immediately inside it.</p></div><div class="refsect2"><a name="idm274692532336"></a><h3 id="Argument">Argument<a class="headerlink" title="Permalink to this headline" href="#Argument">¶</a></h3><p>For L lines determines the destination
path of the symlink. For c, b determines the
major/minor of the device node, with major and
minor formatted as integers, separated by :,
e.g. "1:3". For f, F, w may be used to specify
a short string that is written to the file,
suffixed by a newline. Ignored for all other
- lines.</p></div></div><div class="refsect1"><a name="idm259792742688"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259792742016"></a><p class="title"><b>Example 1. /etc/tmpfiles.d/screen.conf example</b></p><div class="example-contents"><p><span class="command"><strong>screen</strong></span> needs two directories created at boot with specific modes and ownership.</p><pre class="programlisting">d /var/run/screens 1777 root root 10d
-d /var/run/uscreens 0755 root root 10d12h</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259792739472"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ lines.</p></div></div><div class="refsect1"><a name="idm274692530560"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274692529920"></a><p class="title"><b>Example 1. /etc/tmpfiles.d/screen.conf example</b></p><div class="example-contents"><p><span class="command"><strong>screen</strong></span> needs two directories created at boot with specific modes and ownership.</p><pre class="programlisting">d /var/run/screens 1777 root root 10d
+d /var/run/uscreens 0755 root root 10d12h</pre></div></div><br class="example-break"><div class="example"><a name="idm274692527552"></a><p class="title"><b>Example 2. /etc/tmpfiles.d/abrt.conf example</b></p><div class="example-contents"><p><span class="command"><strong>abrt</strong></span> needs a directory created at boot with specific mode and ownership and its content should be preserved.</p><pre class="programlisting">d /var/tmp/abrt 0755 abrt abrt
+x /var/tmp/abrt/*</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274692525024"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-tmpfiles.html"><span class="citerefentry"><span class="refentrytitle">systemd-tmpfiles</span>(8)</span></a>,
<a href="systemd-delta.html"><span class="citerefentry"><span class="refentrytitle">systemd-delta</span>(1)</span></a>
diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
index 519f9bc618..9fc4b7cd8f 100644
--- a/man/tmpfiles.d.xml
+++ b/man/tmpfiles.d.xml
@@ -67,7 +67,7 @@
<title>Configuration Format</title>
<para>Each configuration file shall be named in the
- style of <filename>&lt;program&gt;.conf</filename>.
+ style of <filename>&lt;package&gt;.conf</filename>.
Files in <filename>/etc/</filename> override files
with the same name in <filename>/usr/lib/</filename>
and <filename>/run/</filename>. Files in
@@ -79,17 +79,18 @@
administrator, who may use this logic to override the
configuration files installed by vendor packages. All
configuration files are sorted by their filename in
- alphabetical order, regardless in which of the
- directories they reside, to guarantee that a specific
- configuration file takes precedence over another file
- with an alphabetically later name.</para>
+ lexicographic order, regardless in which of the
+ directories they reside. If multiple files specify the
+ same path, the entry in the file with the lexicographically
+ earliest name will be applied, all all other conflicting
+ entries logged as errors.</para>
<para>If the administrator wants to disable a
- configuration file supplied by the vendor the
+ configuration file supplied by the vendor, the
recommended way is to place a symlink to
<filename>/dev/null</filename> in
<filename>/etc/tmpfiles.d/</filename> bearing the
- same file name.</para>
+ same filename.</para>
<para>The configuration format is one line per path
containing action, path, mode, ownership, age and argument
@@ -99,12 +100,16 @@
d /run/user 0755 root root 10d -
L /tmp/foobar - - - - /dev/null</programlisting>
+
<refsect2>
<title>Type</title>
+
+ <para>The following line types are understood:</para>
+
<variablelist>
<varlistentry>
<term><varname>f</varname></term>
- <listitem><para>Create a file if it doesn't exist yet (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
+ <listitem><para>Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed)</para></listitem>
</varlistentry>
<varlistentry>
@@ -122,7 +127,7 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<varlistentry>
<term><varname>d</varname></term>
- <listitem><para>Create a directory if it doesn't exist yet</para></listitem>
+ <listitem><para>Create a directory if it does not exist yet</para></listitem>
</varlistentry>
<varlistentry>
@@ -132,22 +137,33 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<varlistentry>
<term><varname>p</varname></term>
- <listitem><para>Create a named pipe (FIFO) if it doesn't exist yet</para></listitem>
+ <listitem><para>Create a named pipe (FIFO) if it does not exist yet</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>L</varname></term>
- <listitem><para>Create a symlink if it doesn't exist yet</para></listitem>
+ <listitem><para>Create a symlink if it does not exist yet</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>c</varname></term>
- <listitem><para>Create a character device node if it doesn't exist yet</para></listitem>
+ <listitem><para>Create a character device node if it does not exist yet</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>b</varname></term>
- <listitem><para>Create a block device node if it doesn't exist yet</para></listitem>
+ <listitem><para>Create a block device node if it does not exist yet</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>m</varname></term>
+ <listitem><para>If the
+ specified file path exists
+ adjust its access mode, group
+ and user to the specified
+ values and reset the SELinux
+ label. If it doesn't exist do
+ nothing.</para></listitem>
</varlistentry>
<varlistentry>
@@ -233,14 +249,65 @@ L /tmp/foobar - - - - /dev/null</programlisting>
</refsect2>
<refsect2>
+ <title>Path</title>
+
+ <para>The file system path specification supports simple specifier
+ expansion. The following expansions are
+ understood:</para>
+
+ <table>
+ <title>Specifiers available</title>
+ <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+ <colspec colname="spec" />
+ <colspec colname="mean" />
+ <colspec colname="detail" />
+ <thead>
+ <row>
+ <entry>Specifier</entry>
+ <entry>Meaning</entry>
+ <entry>Details</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><literal>%m</literal></entry>
+ <entry>Machine ID</entry>
+ <entry>The machine ID of the running system, formatted as string. See <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
+ </row>
+ <row>
+ <entry><literal>%b</literal></entry>
+ <entry>Boot ID</entry>
+ <entry>The boot ID of the running system, formatted as string. See <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry> for more information.</entry>
+ </row>
+ <row>
+ <entry><literal>%H</literal></entry>
+ <entry>Host name</entry>
+ <entry>The hostname of the running system.</entry>
+ </row>
+ <row>
+ <entry><literal>%v</literal></entry>
+ <entry>Kernel release</entry>
+ <entry>Identical to <command>uname -r</command> output.</entry>
+ </row>
+ <row>
+ <entry><literal>%%</literal></entry>
+ <entry>Escaped %</entry>
+ <entry>Single percent sign.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </refsect2>
+
+ <refsect2>
<title>Mode</title>
<para>The file access mode to use when
creating this file or directory. If omitted or
- when set to - the default is used: 0755 for
+ when set to -, the default is used: 0755 for
directories, 0644 for all other file
- objects. For z, Z lines if omitted or when set
- to - the file access mode will not be
+ objects. For z, Z lines, if omitted or when set
+ to -, the file access mode will not be
modified. This parameter is ignored for x, r,
R, L lines.</para>
</refsect2>
@@ -251,8 +318,8 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<para>The user and group to use for this file
or directory. This may either be a numeric
user/group ID or a user or group name. If
- omitted or when set to - the default 0 (root)
- is used. For z, Z lines when omitted or when set to -
+ omitted or when set to -, the default 0 (root)
+ is used. For z, Z lines, when omitted or when set to -,
the file ownership will not be modified.
These parameters are ignored for x, r, R, L lines.</para>
</refsect2>
@@ -262,7 +329,7 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<para>The date field, when set, is used to
decide what files to delete when cleaning. If
a file or directory is older than the current
- time minus the age field it is deleted. The
+ time minus the age field, it is deleted. The
field format is a series of integers each
followed by one of the following
postfixes for the respective time units:</para>
@@ -279,7 +346,7 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<term><varname>us</varname></term></varlistentry>
</variablelist>
- <para>If multiple integers and units are specified the time
+ <para>If multiple integers and units are specified, the time
values are summed up. If an integer is given without a unit,
s is assumed.
</para>
@@ -288,11 +355,11 @@ L /tmp/foobar - - - - /dev/null</programlisting>
unconditionally.</para>
<para>The age field only applies to lines starting with
- d, D and x. If omitted or set to - no automatic clean-up
+ d, D and x. If omitted or set to -, no automatic clean-up
is done.</para>
<para>If the age field starts with a tilde
- character (~) the clean-up is only applied to
+ character (~), the clean-up is only applied to
files and directories one level inside the
directory specified, but not the files and
directories immediately inside it.</para>
@@ -322,6 +389,13 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<programlisting>d /var/run/screens 1777 root root 10d
d /var/run/uscreens 0755 root root 10d12h</programlisting>
</example>
+ <example>
+ <title>/etc/tmpfiles.d/abrt.conf example</title>
+ <para><command>abrt</command> needs a directory created at boot with specific mode and ownership and its content should be preserved.</para>
+
+ <programlisting>d /var/tmp/abrt 0755 abrt abrt
+x /var/tmp/abrt/*</programlisting>
+ </example>
</refsect1>
<refsect1>
diff --git a/man/udev.7 b/man/udev.7
new file mode 100644
index 0000000000..b131107b54
--- /dev/null
+++ b/man/udev.7
@@ -0,0 +1,533 @@
+'\" t
+.TH "UDEV" "7" "" "systemd 208" "udev"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+udev \- Dynamic device management
+.SH "DESCRIPTION"
+.PP
+udev supplies the system software with device events, manages permissions of device nodes and may create additional symlinks in the
+/dev
+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\&.
+.PP
+The udev daemon,
+\fBsystemd-udevd.service\fR(8), 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 to be used to create meaningful symlink names\&.
+.PP
+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 is provided by the library libudev\&.
+.SH "RULES FILES"
+.PP
+The udev rules are read from the files located in the system rules directory
+/usr/lib/udev/rules\&.d, the volatile runtime directory
+/run/udev/rules\&.d
+and the local administration directory
+/etc/udev/rules\&.d\&. All rules files are collectively sorted and processed in lexical order, regardless of the directories in which they live\&. However, files with identical filenames replace each other\&. Files in
+/etc
+have the highest priority, files in
+/run
+take precedence over files with the same name in
+/lib\&. This can be used to override a system\-supplied rules file with a local file if needed; a symlink in
+/etc
+with the same name as a rules file in
+/lib, pointing to
+/dev/null, disables the rules file entirely\&. Rule files must have the extension
+\&.rules; other extensions are ignored\&.
+.PP
+Every line in the rules file contains at least one key\-value pair\&. Except for empty lines or lines beginning with
+"#", which are ignored\&. There are two kinds of keys: match and assignment\&. If all match keys match against their values, the rule gets applied and the assignment keys get the specified values assigned\&.
+.PP
+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\&.
+.PP
+A rule consists of a comma\-separated list of one or more key\-value pairs\&. Each key has a distinct operation, depending on the used operator\&. Valid operators are:
+.PP
+"=="
+.RS 4
+Compare for equality\&.
+.RE
+.PP
+"!="
+.RS 4
+Compare for inequality\&.
+.RE
+.PP
+"="
+.RS 4
+Assign a value to a key\&. Keys that represent a list are reset and only this single value is assigned\&.
+.RE
+.PP
+"+="
+.RS 4
+Add the value to a key that holds a list of entries\&.
+.RE
+.PP
+":="
+.RS 4
+Assign a value to a key finally; disallow any later changes\&.
+.RE
+.PP
+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\&.
+.PP
+\fIACTION\fR
+.RS 4
+Match the name of the event action\&.
+.RE
+.PP
+\fIDEVPATH\fR
+.RS 4
+Match the devpath of the event device\&.
+.RE
+.PP
+\fIKERNEL\fR
+.RS 4
+Match the name of the event device\&.
+.RE
+.PP
+\fINAME\fR
+.RS 4
+Match the name of a network interface\&. It can be used once the NAME key has been set in one of the preceding rules\&.
+.RE
+.PP
+\fISYMLINK\fR
+.RS 4
+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\&.
+.RE
+.PP
+\fISUBSYSTEM\fR
+.RS 4
+Match the subsystem of the event device\&.
+.RE
+.PP
+\fIDRIVER\fR
+.RS 4
+Match the driver name of the event device\&. Only set this key for devices which are bound to a driver at the time the event is generated\&.
+.RE
+.PP
+\fIATTR{\fR\fI\fIfilename\fR\fR\fI}\fR
+.RS 4
+Match sysfs attribute values of the event device\&. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace\&.
+.RE
+.PP
+\fIKERNELS\fR
+.RS 4
+Search the devpath upwards for a matching device name\&.
+.RE
+.PP
+\fISUBSYSTEMS\fR
+.RS 4
+Search the devpath upwards for a matching device subsystem name\&.
+.RE
+.PP
+\fIDRIVERS\fR
+.RS 4
+Search the devpath upwards for a matching device driver name\&.
+.RE
+.PP
+\fIATTRS{\fR\fI\fIfilename\fR\fR\fI}\fR
+.RS 4
+Search the devpath upwards for a device with matching sysfs attribute values\&. If multiple
+\fIATTRS\fR
+matches are specified, all of them must match on the same device\&. Trailing whitespace in the attribute values is ignored unless the specified match value itself contains trailing whitespace\&.
+.RE
+.PP
+\fITAGS\fR
+.RS 4
+Search the devpath upwards for a device with matching tag\&.
+.RE
+.PP
+\fIENV{\fR\fI\fIkey\fR\fR\fI}\fR
+.RS 4
+Match against a device property value\&.
+.RE
+.PP
+\fITAG\fR
+.RS 4
+Match against a device tag\&.
+.RE
+.PP
+\fITEST{\fR\fI\fIoctal mode mask\fR\fR\fI}\fR
+.RS 4
+Test the existence of a file\&. An octal mode mask can be specified if needed\&.
+.RE
+.PP
+\fIPROGRAM\fR
+.RS 4
+Execute a program to determine whether there is a match; the key is true if the program returns successfully\&. The device properties are made available to the executed program in the environment\&. The program\*(Aqs stdout is available in the RESULT key\&.
+.sp
+This can only be used for very short\-running foreground tasks\&. For details see
+\fIRUN\fR\&.
+.RE
+.PP
+\fIRESULT\fR
+.RS 4
+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\&.
+.RE
+.PP
+Most of the fields support shell glob pattern matching\&. The following pattern characters are supported:
+.PP
+"*"
+.RS 4
+Matches zero or more characters\&.
+.RE
+.PP
+"?"
+.RS 4
+Matches any single character\&.
+.RE
+.PP
+"[]"
+.RS 4
+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 via the
+"\-"
+character\&. For example, to match on the range of all digits, the pattern [0\-9] could be used\&. If the first character following the
+"["
+is a
+"!", any characters not enclosed are matched\&.
+.RE
+.PP
+The following keys can get values assigned:
+.PP
+\fINAME\fR
+.RS 4
+The name to use for a network interface\&. The name of a device node cannot be changed by udev, only additional symlinks can be created\&.
+.RE
+.PP
+\fISYMLINK\fR
+.RS 4
+The name of a symlink targeting the node\&. Every matching rule adds this value to the list of symlinks to be created\&.
+.sp
+The set of characters to name a symlink is limited\&. Allowed characters are
+"0\-9A\-Za\-z#+\-\&.:=@_/", valid UTF\-8 character sequences, and
+"\ex00"
+hex encoding\&. All other characters are replaced by a
+"_"
+character\&.
+.sp
+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\&.
+.sp
+Symlink names must never conflict with the kernel\*(Aqs default device node names, as that would result in unpredictable behavior\&.
+.RE
+.PP
+\fIOWNER\fR, \fIGROUP\fR, \fIMODE\fR
+.RS 4
+The permissions for the device node\&. Every specified value overrides the compiled\-in default value\&.
+.RE
+.PP
+\fIATTR{\fR\fI\fIkey\fR\fR\fI}\fR
+.RS 4
+The value that should be written to a sysfs attribute of the event device\&.
+.RE
+.PP
+\fIENV{\fR\fI\fIkey\fR\fR\fI}\fR
+.RS 4
+Set a device property value\&. Property names with a leading
+"\&."
+are neither stored in the database nor exported to events or external tools (run by, say, the PROGRAM match key)\&.
+.RE
+.PP
+\fITAG\fR
+.RS 4
+Attach a tag to a device\&. This is used to filter events for users of libudev\*(Aqs 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\&.
+.RE
+.PP
+\fIRUN{\fR\fI\fItype\fR\fR\fI}\fR
+.RS 4
+Add a program to the list of programs to be executed after processing all the rules for a specific event, depending on
+"type":
+.PP
+"program"
+.RS 4
+Execute an external program specified as the assigned value\&. If no absolute path is given, the program is expected to live in /usr/lib/udev, otherwise the absolute path must be specified\&.
+.sp
+This is the default if no
+\fItype\fR
+is specified\&.
+.RE
+.PP
+"builtin"
+.RS 4
+As
+\fIprogram\fR, but use one of the built\-in programs rather than an external one\&.
+.RE
+.sp
+The program name and following arguments are separated by spaces\&. Single quotes can be used to specify arguments with spaces\&.
+.sp
+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\&.
+.sp
+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\&.
+.RE
+.PP
+\fILABEL\fR
+.RS 4
+A named label to which a GOTO may jump\&.
+.RE
+.PP
+\fIGOTO\fR
+.RS 4
+Jumps to the next LABEL with a matching name\&.
+.RE
+.PP
+\fIIMPORT{\fR\fI\fItype\fR\fR\fI}\fR
+.RS 4
+Import a set of variables as device properties, depending on
+"type":
+.PP
+"program"
+.RS 4
+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
+\fIRUN\fR\&.
+.RE
+.PP
+"builtin"
+.RS 4
+Similar to
+"program", but use one of the built\-in programs rather than an external one\&.
+.RE
+.PP
+"file"
+.RS 4
+Import a text file specified as the assigned value, the content of which must be in environment key format\&.
+.RE
+.PP
+"db"
+.RS 4
+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\&.
+.RE
+.PP
+"cmdline"
+.RS 4
+Import a single property from the kernel command line\&. For simple flags the value of the property is set to
+"1"\&.
+.RE
+.PP
+"parent"
+.RS 4
+Import the stored keys from the parent device by reading the database entry of the parent device\&. The value assigned to
+\fBIMPORT{parent}\fR
+is used as a filter of key names to import (with the same shell glob pattern matching used for comparisons)\&.
+.RE
+.sp
+This can only be used for very short\-running foreground tasks\&. For details see
+\fBRUN\fR\&.
+.RE
+.PP
+\fIWAIT_FOR\fR
+.RS 4
+Wait for a file to become available or until a timeout of 10 seconds expires\&. The path is relative to the sysfs device; if no path is specified, this waits for an attribute to appear\&.
+.RE
+.PP
+\fIOPTIONS\fR
+.RS 4
+Rule and device options:
+.PP
+\fBlink_priority=\fR\fB\fIvalue\fR\fR
+.RS 4
+Specify the priority of the created symlinks\&. Devices with higher priorities overwrite existing symlinks of other devices\&. The default is 0\&.
+.RE
+.PP
+\fBevent_timeout=\fR
+.RS 4
+Number of seconds an event waits for operations to finish before giving up and terminating itself\&.
+.RE
+.PP
+\fBstring_escape=\fR\fB\fInone|replace\fR\fR
+.RS 4
+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\&.
+.RE
+.PP
+\fBstatic_node=\fR
+.RS 4
+Apply the permissions specified in this rule to the static device node with the specified name\&. Also, for every tag specified in this rule, create a symlink in the directory
+/run/udev/static_node\-tags/\fItag\fR
+pointing at the static device node with the specified name\&. Static device node creation is performed by systemd\-tmpfiles before systemd\-udevd is started\&. The static nodes might not have a corresponding kernel device; they are used to trigger automatic kernel module loading when they are accessed\&.
+.RE
+.PP
+\fBwatch\fR
+.RS 4
+Watch the device node with inotify; when the node is closed after being opened for writing, a change uevent is synthesized\&.
+.RE
+.PP
+\fBnowatch\fR
+.RS 4
+Disable the watching of a device node with inotify\&.
+.RE
+.RE
+.PP
+The
+\fINAME\fR,
+\fISYMLINK\fR,
+\fIPROGRAM\fR,
+\fIOWNER\fR,
+\fIGROUP\fR,
+\fIMODE\fR
+and
+\fIRUN\fR
+fields support simple string substitutions\&. The
+\fIRUN\fR
+substitutions are performed after all rules have been processed, right before the program is executed, allowing for the use of device properties set by earlier matching rules\&. For all other fields, substitutions are performed while the individual rule is being processed\&. The available substitutions are:
+.PP
+\fB$kernel\fR, \fB%k\fR
+.RS 4
+The kernel name for this device\&.
+.RE
+.PP
+\fB$number\fR, \fB%n\fR
+.RS 4
+The kernel number for this device\&. For example,
+"sda3"
+has kernel number
+"3"\&.
+.RE
+.PP
+\fB$devpath\fR, \fB%p\fR
+.RS 4
+The devpath of the device\&.
+.RE
+.PP
+\fB$id\fR, \fB%b\fR
+.RS 4
+The name of the device matched while searching the devpath upwards for
+\fBSUBSYSTEMS\fR,
+\fBKERNELS\fR,
+\fBDRIVERS\fR
+and
+\fBATTRS\fR\&.
+.RE
+.PP
+\fB$driver\fR
+.RS 4
+The driver name of the device matched while searching the devpath upwards for
+\fBSUBSYSTEMS\fR,
+\fBKERNELS\fR,
+\fBDRIVERS\fR
+and
+\fBATTRS\fR\&.
+.RE
+.PP
+\fB$attr{\fR\fB\fIfile\fR\fR\fB}\fR, \fB%s{\fR\fB\fIfile\fR\fR\fB}\fR
+.RS 4
+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, then the attribute from that parent device is used\&.
+.sp
+If the attribute is a symlink, the last element of the symlink target is returned as the value\&.
+.RE
+.PP
+\fB$env{\fR\fB\fIkey\fR\fR\fB}\fR, \fB%E{\fR\fB\fIkey\fR\fR\fB}\fR
+.RS 4
+A device property value\&.
+.RE
+.PP
+\fB$major\fR, \fB%M\fR
+.RS 4
+The kernel major number for the device\&.
+.RE
+.PP
+\fB$minor\fR, \fB%m\fR
+.RS 4
+The kernel minor number for the device\&.
+.RE
+.PP
+\fB$result\fR, \fB%c\fR
+.RS 4
+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:
+"%c{N}"\&. If the number is followed by the
+"+"
+character, this part plus all remaining parts of the result string are substituted:
+"%c{N+}"\&.
+.RE
+.PP
+\fB$parent\fR, \fB%P\fR
+.RS 4
+The node name of the parent device\&.
+.RE
+.PP
+\fB$name\fR
+.RS 4
+The current name of the device\&. If not changed by a rule, it is the name of the kernel device\&.
+.RE
+.PP
+\fB$links\fR
+.RS 4
+A space\-separated list of the current symlinks\&. The value is only set during a remove event or if an earlier rule assigned a value\&.
+.RE
+.PP
+\fB$root\fR, \fB%r\fR
+.RS 4
+The udev_root value\&.
+.RE
+.PP
+\fB$sys\fR, \fB%S\fR
+.RS 4
+The sysfs mount point\&.
+.RE
+.PP
+\fB$devnode\fR, \fB%N\fR
+.RS 4
+The name of the device node\&.
+.RE
+.PP
+\fB%%\fR
+.RS 4
+The
+"%"
+character itself\&.
+.RE
+.PP
+\fB$$\fR
+.RS 4
+The
+"$"
+character itself\&.
+.RE
+.SH "HARDWARE DATABASE FILES"
+.PP
+The hwdb files are read from the files located in the system hwdb directory
+/usr/lib/udev/hwdb\&.d, the volatile runtime directory
+/run/udev/hwdb\&.d
+and the local administration directory
+/etc/udev/hwdb\&.d\&. All hwdb files are collectively sorted and processed in lexical order, regardless of the directories in which they live\&. However, files with identical filenames replace each other\&. Files in
+/etc
+have the highest priority, files in
+/run
+take precedence over files with the same name in
+/lib\&. This can be used to override a system\-supplied hwdb file with a local file if needed; a symlink in
+/etc
+with the same name as a hwdb file in
+/lib, pointing to
+/dev/null, disables the hwdb file entirely\&. hwdb files must have the extension
+\&.hwdb; other extensions are ignored\&.
+.PP
+The hwdb file contains data records consisting of matches and associated key\-value pairs\&. Every record in the hwdb starts with one or more match string, specifying a shell glob to compare the database lookup string against\&. Multiple match lines are specified in additional consecutive lines\&. Every match line is compared indivdually, they are combined by OR\&. Every match line must start at the first character of the line\&.
+.PP
+The match lines are followed by one or more key\-value pair lines, which are recognized by a leading space character\&. The key name and value are separated by
+"="\&. An empty line signifies the end of a record\&. Lines beginning with
+"#"
+are ignored\&.
+.PP
+The content of all hwdb files is read by
+\fBudevadm\fR(8)
+and compiled to a binary database located at
+/etc/udev/hwdb\&.bin\&. During runtime only the binary database is used\&.
+.SH "SEE ALSO"
+.PP
+\fBsystemd-udevd.service\fR(8),
+\fBudevadm\fR(8)
diff --git a/man/udev.html b/man/udev.html
index 67afc9297f..4a2bbc48b3 100644
--- a/man/udev.html
+++ b/man/udev.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="udev"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>udev — Linux dynamic device management</p></div><div class="refsect1"><a name="idm259799302224"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>udev supplies the system software with device events, manages permissions
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="udev"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>udev — Dynamic device management</p></div><div class="refsect1"><a name="idm274701428624"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></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
@@ -31,62 +31,63 @@
provide additional device information to be stored in the udev database or
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 is provided by the library libudev.</p></div><div class="refsect1"><a name="idm259795823600"></a><h2 id="Rules files">Rules files<a class="headerlink" title="Permalink to this headline" href="#Rules%20files">¶</a></h2><p>The udev rules are read from the files located in the
+ sources is provided by the library libudev.</p></div><div class="refsect1"><a name="idm274701424128"></a><h2 id="Rules Files">Rules Files<a class="headerlink" title="Permalink to this headline" href="#Rules%20Files">¶</a></h2><p>The udev rules are read from the files located in the
system rules directory <code class="filename">/usr/lib/udev/rules.d</code>,
the volatile runtime directory <code class="filename">/run/udev/rules.d</code>
and the local administration directory <code class="filename">/etc/udev/rules.d</code>.
All rules files are collectively sorted and processed in lexical order,
regardless of the directories in which they live. However, files with
- identical file names replace each other. Files in <code class="filename">/etc</code>
+ identical filenames replace each other. Files in <code class="filename">/etc</code>
have the highest priority, files in <code class="filename">/run</code> take precedence
over files with the same name in <code class="filename">/lib</code>. This can be
used to override a system-supplied rules file with a local file if needed;
a symlink in <code class="filename">/etc</code> with the same name as a rules file in
<code class="filename">/lib</code>, pointing to <code class="filename">/dev/null</code>,
- disables the rules file entirely.</p><p>Rule files must have the extension <code class="filename">.rules</code>; other
- extensions are ignored.</p><p>Every line in the rules file contains at least one key-value pair.
- Except for empty lines or lines beginning with '#', which are ignored.
+ disables the rules file entirely. Rule files must have the extension
+ <code class="filename">.rules</code>; other extensions are ignored.</p><p>Every line in the rules file contains at least one key-value pair.
+ Except for empty lines or lines beginning with "<code class="literal">#</code>", which are ignored.
There are two kinds of keys: match and assignment.
If all match keys match against their values, the rule gets applied and the
assignment keys get the specified values 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 comma-separated list of one or more key-value pairs.
Each key has a distinct operation, depending on the used operator. Valid
- operators are:</p><div class="variablelist"><dl class="variablelist"><dt id="=="><span class="term"><code class="literal">==</code></span><a class="headerlink" title="Permalink to this term" href="#==">¶</a></dt><dd><p>Compare for equality.</p></dd><dt id="!="><span class="term"><code class="literal">!=</code></span><a class="headerlink" title="Permalink to this term" href="#!=">¶</a></dt><dd><p>Compare for inequality.</p></dd><dt id="="><span class="term"><code class="literal">=</code></span><a class="headerlink" title="Permalink to this term" href="#=">¶</a></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 id="+="><span class="term"><code class="literal">+=</code></span><a class="headerlink" title="Permalink to this term" href="#+=">¶</a></dt><dd><p>Add the value to a key that holds a list of entries.</p></dd><dt id=":="><span class="term"><code class="literal">:=</code></span><a class="headerlink" title="Permalink to this term" href="#:=">¶</a></dt><dd><p>Assign a value to a key finally; disallow any later changes.</p></dd></dl></div><p>The following key names can be used to match against device properties.
+ operators are:</p><div class="variablelist"><dl class="variablelist"><dt id="=="><span class="term">"<code class="literal">==</code>"</span><a class="headerlink" title="Permalink to this term" href="#==">¶</a></dt><dd><p>Compare for equality.</p></dd><dt id="!="><span class="term">"<code class="literal">!=</code>"</span><a class="headerlink" title="Permalink to this term" href="#!=">¶</a></dt><dd><p>Compare for inequality.</p></dd><dt id="="><span class="term">"<code class="literal">=</code>"</span><a class="headerlink" title="Permalink to this term" href="#=">¶</a></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 id="+="><span class="term">"<code class="literal">+=</code>"</span><a class="headerlink" title="Permalink to this term" href="#+=">¶</a></dt><dd><p>Add the value to a key that holds a list of entries.</p></dd><dt id=":="><span class="term">"<code class="literal">:=</code>"</span><a class="headerlink" title="Permalink to this term" href="#:=">¶</a></dt><dd><p>Assign a value to a key finally; disallow any later changes.</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 class="variablelist"><dt id="ACTION"><span class="term"><code class="option">ACTION</code></span><a class="headerlink" title="Permalink to this term" href="#ACTION">¶</a></dt><dd><p>Match the name of the event action.</p></dd><dt id="DEVPATH"><span class="term"><code class="option">DEVPATH</code></span><a class="headerlink" title="Permalink to this term" href="#DEVPATH">¶</a></dt><dd><p>Match the devpath of the event device.</p></dd><dt id="KERNEL"><span class="term"><code class="option">KERNEL</code></span><a class="headerlink" title="Permalink to this term" href="#KERNEL">¶</a></dt><dd><p>Match the name of the event device.</p></dd><dt id="NAME"><span class="term"><code class="option">NAME</code></span><a class="headerlink" title="Permalink to this term" href="#NAME">¶</a></dt><dd><p>Match the name of a network interface. It can be used once the
- NAME key has been set in one of the preceding rules.</p></dd><dt id="SYMLINK"><span class="term"><code class="option">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="#SYMLINK">¶</a></dt><dd><p>Match the name of a symlink targeting the node. It can
+ one and the same parent device.</p><div class="variablelist"><dl class="variablelist"><dt id="ACTION"><span class="term"><code class="varname">ACTION</code></span><a class="headerlink" title="Permalink to this term" href="#ACTION">¶</a></dt><dd><p>Match the name of the event action.</p></dd><dt id="DEVPATH"><span class="term"><code class="varname">DEVPATH</code></span><a class="headerlink" title="Permalink to this term" href="#DEVPATH">¶</a></dt><dd><p>Match the devpath of the event device.</p></dd><dt id="KERNEL"><span class="term"><code class="varname">KERNEL</code></span><a class="headerlink" title="Permalink to this term" href="#KERNEL">¶</a></dt><dd><p>Match the name of the event device.</p></dd><dt id="NAME"><span class="term"><code class="varname">NAME</code></span><a class="headerlink" title="Permalink to this term" href="#NAME">¶</a></dt><dd><p>Match the name of a network interface. It can be used once the
+ NAME key has been set in one of the preceding rules.</p></dd><dt id="SYMLINK"><span class="term"><code class="varname">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="#SYMLINK">¶</a></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 id="SUBSYSTEM"><span class="term"><code class="option">SUBSYSTEM</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEM">¶</a></dt><dd><p>Match the subsystem of the event device.</p></dd><dt id="DRIVER"><span class="term"><code class="option">DRIVER</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVER">¶</a></dt><dd><p>Match the driver name of the event device. Only set this key for devices
- which are bound to a driver at the time the event is generated.</p></dd><dt id="ATTR{filename}"><span class="term"><code class="option">ATTR{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTR%7Bfilename%7D">¶</a></dt><dd><p>Match sysfs attribute values of the event device. Trailing
+ </p></dd><dt id="SUBSYSTEM"><span class="term"><code class="varname">SUBSYSTEM</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEM">¶</a></dt><dd><p>Match the subsystem of the event device.</p></dd><dt id="DRIVER"><span class="term"><code class="varname">DRIVER</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVER">¶</a></dt><dd><p>Match the driver name of the event device. Only set this key for devices
+ which are bound to a driver at the time the event is generated.</p></dd><dt id="ATTR{filename}"><span class="term"><code class="varname">ATTR{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTR%7Bfilename%7D">¶</a></dt><dd><p>Match sysfs attribute values of the event device. Trailing
whitespace in the attribute values is ignored unless the specified match
value itself contains trailing whitespace.
- </p></dd><dt id="KERNELS"><span class="term"><code class="option">KERNELS</code></span><a class="headerlink" title="Permalink to this term" href="#KERNELS">¶</a></dt><dd><p>Search the devpath upwards for a matching device name.</p></dd><dt id="SUBSYSTEMS"><span class="term"><code class="option">SUBSYSTEMS</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEMS">¶</a></dt><dd><p>Search the devpath upwards for a matching device subsystem name.</p></dd><dt id="DRIVERS"><span class="term"><code class="option">DRIVERS</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVERS">¶</a></dt><dd><p>Search the devpath upwards for a matching device driver name.</p></dd><dt id="ATTRS{filename}"><span class="term"><code class="option">ATTRS{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTRS%7Bfilename%7D">¶</a></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
+ </p></dd><dt id="KERNELS"><span class="term"><code class="varname">KERNELS</code></span><a class="headerlink" title="Permalink to this term" href="#KERNELS">¶</a></dt><dd><p>Search the devpath upwards for a matching device name.</p></dd><dt id="SUBSYSTEMS"><span class="term"><code class="varname">SUBSYSTEMS</code></span><a class="headerlink" title="Permalink to this term" href="#SUBSYSTEMS">¶</a></dt><dd><p>Search the devpath upwards for a matching device subsystem name.</p></dd><dt id="DRIVERS"><span class="term"><code class="varname">DRIVERS</code></span><a class="headerlink" title="Permalink to this term" href="#DRIVERS">¶</a></dt><dd><p>Search the devpath upwards for a matching device driver name.</p></dd><dt id="ATTRS{filename}"><span class="term"><code class="varname">ATTRS{<em class="replaceable"><code>filename</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTRS%7Bfilename%7D">¶</a></dt><dd><p>Search the devpath upwards for a device with matching sysfs attribute values.
+ If multiple <code class="varname">ATTRS</code> matches are specified, all of them
must match on the same device. Trailing whitespace in the attribute values is ignored
- unless the specified match value itself contains trailing whitespace.</p></dd><dt id="TAGS"><span class="term"><code class="option">TAGS</code></span><a class="headerlink" title="Permalink to this term" href="#TAGS">¶</a></dt><dd><p>Search the devpath upwards for a device with matching tag.</p></dd><dt id="ENV{key}"><span class="term"><code class="option">ENV{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ENV%7Bkey%7D">¶</a></dt><dd><p>Match against a device property value.</p></dd><dt id="TAG"><span class="term"><code class="option">TAG</code></span><a class="headerlink" title="Permalink to this term" href="#TAG">¶</a></dt><dd><p>Match against a device tag.</p></dd><dt id="TEST{octal mode mask}"><span class="term"><code class="option">TEST{<em class="replaceable"><code>octal mode mask</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#TEST%7Boctal%20mode%20mask%7D">¶</a></dt><dd><p>Test the existence of a file. An octal mode mask can be specified
- if needed.</p></dd><dt id="PROGRAM"><span class="term"><code class="option">PROGRAM</code></span><a class="headerlink" title="Permalink to this term" href="#PROGRAM">¶</a></dt><dd><p>Execute a program to determine whether there
+ unless the specified match value itself contains trailing whitespace.</p></dd><dt id="TAGS"><span class="term"><code class="varname">TAGS</code></span><a class="headerlink" title="Permalink to this term" href="#TAGS">¶</a></dt><dd><p>Search the devpath upwards for a device with matching tag.</p></dd><dt id="ENV{key}"><span class="term"><code class="varname">ENV{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ENV%7Bkey%7D">¶</a></dt><dd><p>Match against a device property value.</p></dd><dt id="TAG"><span class="term"><code class="varname">TAG</code></span><a class="headerlink" title="Permalink to this term" href="#TAG">¶</a></dt><dd><p>Match against a device tag.</p></dd><dt id="TEST{octal mode mask}"><span class="term"><code class="varname">TEST{<em class="replaceable"><code>octal mode mask</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#TEST%7Boctal%20mode%20mask%7D">¶</a></dt><dd><p>Test the existence of a file. An octal mode mask can be specified
+ if needed.</p></dd><dt id="PROGRAM"><span class="term"><code class="varname">PROGRAM</code></span><a class="headerlink" title="Permalink to this term" href="#PROGRAM">¶</a></dt><dd><p>Execute a program to determine whether there
is a match; 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 stdout
is available in the RESULT key.</p><p>This can only be used for very short-running foreground tasks. For details
- see <code class="option">RUN</code>.</p></dd><dt id="RESULT"><span class="term"><code class="option">RESULT</code></span><a class="headerlink" title="Permalink to this term" href="#RESULT">¶</a></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 shell-style pattern matching. The following
- pattern characters are supported:</p><div class="variablelist"><dl class="variablelist"><dt id="*"><span class="term"><code class="literal">*</code></span><a class="headerlink" title="Permalink to this term" href="#*">¶</a></dt><dd><p>Matches zero or more characters.</p></dd><dt id="?"><span class="term"><code class="literal">?</code></span><a class="headerlink" title="Permalink to this term" href="#?">¶</a></dt><dd><p>Matches any single character.</p></dd><dt id="[]"><span class="term"><code class="literal">[]</code></span><a class="headerlink" title="Permalink to this term" href="#%5B%5D">¶</a></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 via the '-' character.
+ see <code class="varname">RUN</code>.</p></dd><dt id="RESULT"><span class="term"><code class="varname">RESULT</code></span><a class="headerlink" title="Permalink to this term" href="#RESULT">¶</a></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 shell glob pattern matching. The following
+ pattern characters are supported:</p><div class="variablelist"><dl class="variablelist"><dt id="*"><span class="term">"<code class="literal">*</code>"</span><a class="headerlink" title="Permalink to this term" href="#*">¶</a></dt><dd><p>Matches zero or more characters.</p></dd><dt id="?"><span class="term">"<code class="literal">?</code>"</span><a class="headerlink" title="Permalink to this term" href="#?">¶</a></dt><dd><p>Matches any single character.</p></dd><dt id="[]"><span class="term">"<code class="literal">[]</code>"</span><a class="headerlink" title="Permalink to this term" href="#%5B%5D">¶</a></dt><dd><p>Matches any single character specified within the brackets. For
+ example, the pattern string "<code class="literal">tty[SR]</code>"
+ would match either "<code class="literal">ttyS</code>" or "<code class="literal">ttyR</code>".
+ Ranges are also supported via the "<code class="literal">-</code>" character.
For example, to match on the range of all digits, the pattern [0-9] could
- 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 class="variablelist"><dt id="NAME"><span class="term"><code class="option">NAME</code></span><a class="headerlink" title="Permalink to this term" href="#NAME">¶</a></dt><dd><p>The name to use for a network interface. The name of a device node
- cannot be changed by udev, only additional symlinks can be created.</p></dd><dt id="SYMLINK"><span class="term"><code class="option">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="#SYMLINK">¶</a></dt><dd><p>The name of a symlink targeting the node. Every matching rule adds
+ be used. If the first character following the "<code class="literal">[</code>" is a
+ "<code class="literal">!</code>", any characters not enclosed are matched.</p></dd></dl></div><p>The following keys can get values assigned:</p><div class="variablelist"><dl class="variablelist"><dt id="NAME"><span class="term"><code class="varname">NAME</code></span><a class="headerlink" title="Permalink to this term" href="#NAME">¶</a></dt><dd><p>The name to use for a network interface. The name of a device node
+ cannot be changed by udev, only additional symlinks can be created.</p></dd><dt id="SYMLINK"><span class="term"><code class="varname">SYMLINK</code></span><a class="headerlink" title="Permalink to this term" href="#SYMLINK">¶</a></dt><dd><p>The name of a symlink targeting the node. Every matching rule adds
this value to the list of symlinks to be created.</p><p>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.</p><p>Multiple symlinks may be specified by separating the names by the
+ characters are "<code class="literal">0-9A-Za-z#+-.:=@_/</code>", valid UTF-8 character
+ sequences, and "<code class="literal">\x00</code>" hex encoding. All other
+ characters are replaced by a "<code class="literal">_</code>" character.</p><p>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
@@ -94,58 +95,62 @@
link_priority is specified, the order of the devices (and which one of
them owns the link) is undefined.</p><p>Symlink names must never conflict with the kernel's default device
node names, as that would result in unpredictable behavior.
- </p></dd><dt id="OWNER, GROUP, MODE"><span class="term"><code class="option">OWNER</code>, <code class="option">GROUP</code>, <code class="option">MODE</code></span><a class="headerlink" title="Permalink to this term" href="#OWNER,%20GROUP,%20MODE">¶</a></dt><dd><p>The permissions for the device node. Every specified value overrides
- the compiled-in default value.</p></dd><dt id="ATTR{key}"><span class="term"><code class="option">ATTR{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTR%7Bkey%7D">¶</a></dt><dd><p>The value that should be written to a sysfs attribute of the
- event device.</p></dd><dt id="ENV{key}"><span class="term"><code class="option">ENV{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ENV%7Bkey%7D">¶</a></dt><dd><p>Set a device property value. Property names with a leading '.'
+ </p></dd><dt id="OWNER, GROUP, MODE"><span class="term"><code class="varname">OWNER</code>, <code class="varname">GROUP</code>, <code class="varname">MODE</code></span><a class="headerlink" title="Permalink to this term" href="#OWNER,%20GROUP,%20MODE">¶</a></dt><dd><p>The permissions for the device node. Every specified value overrides
+ the compiled-in default value.</p></dd><dt id="ATTR{key}"><span class="term"><code class="varname">ATTR{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ATTR%7Bkey%7D">¶</a></dt><dd><p>The value that should be written to a sysfs attribute of the
+ event device.</p></dd><dt id="ENV{key}"><span class="term"><code class="varname">ENV{<em class="replaceable"><code>key</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#ENV%7Bkey%7D">¶</a></dt><dd><p>Set a device property value. Property names with a leading "<code class="literal">.</code>"
are neither stored in the database nor exported to events or
- external tools (run by, say, the PROGRAM match key).</p></dd><dt id="TAG"><span class="term"><code class="option">TAG</code></span><a class="headerlink" title="Permalink to this term" href="#TAG">¶</a></dt><dd><p>Attach a tag to a device. This is used to filter events for users
+ external tools (run by, say, the PROGRAM match key).</p></dd><dt id="TAG"><span class="term"><code class="varname">TAG</code></span><a class="headerlink" title="Permalink to this term" href="#TAG">¶</a></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 id="RUN{type}"><span class="term"><code class="option">RUN{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#RUN%7Btype%7D">¶</a></dt><dd><p>Add a program to the list of programs to be executed after processing all the
- rules for a specific event, depending on <code class="literal">type</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="program"><span class="term"><code class="literal">program</code></span><a class="headerlink" title="Permalink to this term" href="#program">¶</a></dt><dd><p>Execute an external program specified as the assigned
+ handling.</p></dd><dt id="RUN{type}"><span class="term"><code class="varname">RUN{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#RUN%7Btype%7D">¶</a></dt><dd><p>Add a program to the list of programs to be executed after processing all the
+ rules for a specific event, depending on "<code class="literal">type</code>":</p><div class="variablelist"><dl class="variablelist"><dt id="program"><span class="term">"<code class="literal">program</code>"</span><a class="headerlink" title="Permalink to this term" href="#program">¶</a></dt><dd><p>Execute an external program specified as the assigned
value. If no absolute path is given, the program is expected to live in
/usr/lib/udev, otherwise the absolute path must be specified.</p><p>This is the default if no <em class="replaceable"><code>type</code></em> is
- specified.</p></dd><dt id="builtin"><span class="term"><code class="literal">builtin</code></span><a class="headerlink" title="Permalink to this term" href="#builtin">¶</a></dt><dd><p>As <code class="option">program</code>, but use one of the built-in programs rather
+ specified.</p></dd><dt id="builtin"><span class="term">"<code class="literal">builtin</code>"</span><a class="headerlink" title="Permalink to this term" href="#builtin">¶</a></dt><dd><p>As <code class="varname">program</code>, but use one of the built-in programs rather
than an external one.</p></dd></dl></div><p>The program name and following arguments are separated by spaces.
Single quotes can be used to specify arguments with spaces.</p><p>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.</p><p>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.</p></dd><dt id="LABEL"><span class="term"><code class="option">LABEL</code></span><a class="headerlink" title="Permalink to this term" href="#LABEL">¶</a></dt><dd><p>A named label to which a GOTO may jump.</p></dd><dt id="GOTO"><span class="term"><code class="option">GOTO</code></span><a class="headerlink" title="Permalink to this term" href="#GOTO">¶</a></dt><dd><p>Jumps to the next LABEL with a matching name.</p></dd><dt id="IMPORT{type}"><span class="term"><code class="option">IMPORT{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#IMPORT%7Btype%7D">¶</a></dt><dd><p>Import a set of variables as device properties,
- depending on <code class="literal">type</code>:</p><div class="variablelist"><dl class="variablelist"><dt id="program"><span class="term"><code class="literal">program</code></span><a class="headerlink" title="Permalink to this term" href="#program">¶</a></dt><dd><p>Execute an external program specified as the assigned value and
+ killed after the event handling has finished.</p></dd><dt id="LABEL"><span class="term"><code class="varname">LABEL</code></span><a class="headerlink" title="Permalink to this term" href="#LABEL">¶</a></dt><dd><p>A named label to which a GOTO may jump.</p></dd><dt id="GOTO"><span class="term"><code class="varname">GOTO</code></span><a class="headerlink" title="Permalink to this term" href="#GOTO">¶</a></dt><dd><p>Jumps to the next LABEL with a matching name.</p></dd><dt id="IMPORT{type}"><span class="term"><code class="varname">IMPORT{<em class="replaceable"><code>type</code></em>}</code></span><a class="headerlink" title="Permalink to this term" href="#IMPORT%7Btype%7D">¶</a></dt><dd><p>Import a set of variables as device properties,
+ depending on "<code class="literal">type</code>":</p><div class="variablelist"><dl class="variablelist"><dt id="program"><span class="term">"<code class="literal">program</code>"</span><a class="headerlink" title="Permalink to this term" href="#program">¶</a></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 id="builtin"><span class="term"><code class="literal">builtin</code></span><a class="headerlink" title="Permalink to this term" href="#builtin">¶</a></dt><dd><p>As <code class="option">program</code>, but use one of the built-in programs rather
- than an external one.</p></dd><dt id="file"><span class="term"><code class="literal">file</code></span><a class="headerlink" title="Permalink to this term" href="#file">¶</a></dt><dd><p>Import a text file specified as the assigned value, the content
- of which must be in environment key format.</p></dd><dt id="db"><span class="term"><code class="literal">db</code></span><a class="headerlink" title="Permalink to this term" href="#db">¶</a></dt><dd><p>Import a single property specified as the assigned value from the
+ and quoting work like in <code class="varname">RUN</code>.</p></dd><dt id="builtin"><span class="term">"<code class="literal">builtin</code>"</span><a class="headerlink" title="Permalink to this term" href="#builtin">¶</a></dt><dd><p>Similar to "<code class="literal">program</code>", but use one of the
+ built-in programs rather than an external one.</p></dd><dt id="file"><span class="term">"<code class="literal">file</code>"</span><a class="headerlink" title="Permalink to this term" href="#file">¶</a></dt><dd><p>Import a text file specified as the assigned value, the content
+ of which must be in environment key format.</p></dd><dt id="db"><span class="term">"<code class="literal">db</code>"</span><a class="headerlink" title="Permalink to this term" href="#db">¶</a></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 id="cmdline"><span class="term"><code class="literal">cmdline</code></span><a class="headerlink" title="Permalink to this term" href="#cmdline">¶</a></dt><dd><p>Import a single property from the kernel command line. For simple flags
- the value of the property is set to '1'.</p></dd><dt id="parent"><span class="term"><code class="literal">parent</code></span><a class="headerlink" title="Permalink to this term" href="#parent">¶</a></dt><dd><p>Import the stored keys from the parent device by reading
+ by an earlier event.</p></dd><dt id="cmdline"><span class="term">"<code class="literal">cmdline</code>"</span><a class="headerlink" title="Permalink to this term" href="#cmdline">¶</a></dt><dd><p>Import a single property from the kernel command line. For simple flags
+ the value of the property is set to "<code class="literal">1</code>".</p></dd><dt id="parent"><span class="term">"<code class="literal">parent</code>"</span><a class="headerlink" title="Permalink to this term" href="#parent">¶</a></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
+ to import (with the same shell glob pattern matching used for
comparisons).</p></dd></dl></div><p>This can only be used for very short-running foreground tasks. For details
- see <code class="option">RUN</code>.</p></dd><dt id="WAIT_FOR"><span class="term"><code class="option">WAIT_FOR</code></span><a class="headerlink" title="Permalink to this term" href="#WAIT_FOR">¶</a></dt><dd><p>Wait for a file to become available or until a timeout of
+ see <code class="option">RUN</code>.</p></dd><dt id="WAIT_FOR"><span class="term"><code class="varname">WAIT_FOR</code></span><a class="headerlink" title="Permalink to this term" href="#WAIT_FOR">¶</a></dt><dd><p>Wait for a file to become available or until a timeout of
10 seconds expires. The path is relative to the sysfs device;
- if no path is specified, this waits for an attribute to appear.</p></dd><dt id="OPTIONS"><span class="term"><code class="option">OPTIONS</code></span><a class="headerlink" title="Permalink to this term" href="#OPTIONS">¶</a></dt><dd><p>Rule and device options:</p><div class="variablelist"><dl class="variablelist"><dt id="link_priority=value"><span class="term"><code class="option">link_priority=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#link_priority=value">¶</a></dt><dd><p>Specify the priority of the created symlinks. Devices with higher
+ if no path is specified, this waits for an attribute to appear.</p></dd><dt id="OPTIONS"><span class="term"><code class="varname">OPTIONS</code></span><a class="headerlink" title="Permalink to this term" href="#OPTIONS">¶</a></dt><dd><p>Rule and device options:</p><div class="variablelist"><dl class="variablelist"><dt id="link_priority=value"><span class="term"><code class="option">link_priority=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#link_priority=value">¶</a></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 id="event_timeout="><span class="term"><code class="option">event_timeout=</code></span><a class="headerlink" title="Permalink to this term" href="#event_timeout=">¶</a></dt><dd><p>Number of seconds an event waits for operations to finish before
giving up and terminating itself.</p></dd><dt id="string_escape=none|replace"><span class="term"><code class="option">string_escape=<em class="replaceable"><code>none|replace</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#string_escape=none%7Creplace">¶</a></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 id="static_node="><span class="term"><code class="option">static_node=</code></span><a class="headerlink" title="Permalink to this term" href="#static_node=">¶</a></dt><dd><p>Apply the permissions specified in this rule to the static device node with
- 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.</p></dd><dt id="watch"><span class="term"><code class="option">watch</code></span><a class="headerlink" title="Permalink to this term" href="#watch">¶</a></dt><dd><p>Watch the device node with inotify; when the node is closed after being opened for
- writing, a change uevent is synthesized.</p></dd><dt id="nowatch"><span class="term"><code class="option">nowatch</code></span><a class="headerlink" title="Permalink to this term" href="#nowatch">¶</a></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 string substitutions. The <code class="option">RUN</code>
+ the specified name. Also, for every tag specified in this rule, create a symlink
+ in the directory
+ <code class="filename">/run/udev/static_node-tags/<em class="replaceable"><code>tag</code></em></code>
+ pointing at the static device node with the specified name. Static device node
+ creation is performed by systemd-tmpfiles before systemd-udevd is started. The
+ static nodes might not have a corresponding kernel device; they are used to
+ trigger automatic kernel module loading when they are accessed.</p></dd><dt id="watch"><span class="term"><code class="option">watch</code></span><a class="headerlink" title="Permalink to this term" href="#watch">¶</a></dt><dd><p>Watch the device node with inotify; when the node is closed after being opened for
+ writing, a change uevent is synthesized.</p></dd><dt id="nowatch"><span class="term"><code class="option">nowatch</code></span><a class="headerlink" title="Permalink to this term" href="#nowatch">¶</a></dt><dd><p>Disable the watching of a device node with inotify.</p></dd></dl></div></dd></dl></div><p>The <code class="varname">NAME</code>, <code class="varname">SYMLINK</code>, <code class="varname">PROGRAM</code>,
+ <code class="varname">OWNER</code>, <code class="varname">GROUP</code>, <code class="varname">MODE</code> and <code class="varname">RUN</code>
+ fields support simple string substitutions. The <code class="varname">RUN</code>
substitutions are performed after all rules have been processed, right before the program
is executed, allowing for the use of device properties set by earlier matching
rules. For all other fields, substitutions are performed while the individual rule is
- being processed. The available substitutions are:</p><div class="variablelist"><dl class="variablelist"><dt id="$kernel, %k"><span class="term"><code class="option">$kernel</code>, <code class="option">%k</code></span><a class="headerlink" title="Permalink to this term" href="#%24kernel,%20%k">¶</a></dt><dd><p>The kernel name for this device.</p></dd><dt id="$number, %n"><span class="term"><code class="option">$number</code>, <code class="option">%n</code></span><a class="headerlink" title="Permalink to this term" href="#%24number,%20%n">¶</a></dt><dd><p>The kernel number for this device. For example, 'sda3' has
- kernel number of '3'</p></dd><dt id="$devpath, %p"><span class="term"><code class="option">$devpath</code>, <code class="option">%p</code></span><a class="headerlink" title="Permalink to this term" href="#%24devpath,%20%p">¶</a></dt><dd><p>The devpath of the device.</p></dd><dt id="$id, %b"><span class="term"><code class="option">$id</code>, <code class="option">%b</code></span><a class="headerlink" title="Permalink to this term" href="#%24id,%20%b">¶</a></dt><dd><p>The name of the device matched while searching the devpath upwards for
+ being processed. The available substitutions are:</p><div class="variablelist"><dl class="variablelist"><dt id="$kernel, %k"><span class="term"><code class="option">$kernel</code>, <code class="option">%k</code></span><a class="headerlink" title="Permalink to this term" href="#%24kernel,%20%k">¶</a></dt><dd><p>The kernel name for this device.</p></dd><dt id="$number, %n"><span class="term"><code class="option">$number</code>, <code class="option">%n</code></span><a class="headerlink" title="Permalink to this term" href="#%24number,%20%n">¶</a></dt><dd><p>The kernel number for this device. For example,
+ "<code class="literal">sda3</code>" has kernel number "<code class="literal">3</code>".</p></dd><dt id="$devpath, %p"><span class="term"><code class="option">$devpath</code>, <code class="option">%p</code></span><a class="headerlink" title="Permalink to this term" href="#%24devpath,%20%p">¶</a></dt><dd><p>The devpath of the device.</p></dd><dt id="$id, %b"><span class="term"><code class="option">$id</code>, <code class="option">%b</code></span><a class="headerlink" title="Permalink to this term" href="#%24id,%20%b">¶</a></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 id="$driver"><span class="term"><code class="option">$driver</code></span><a class="headerlink" title="Permalink to this term" href="#%24driver">¶</a></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>.
@@ -156,9 +161,34 @@
parent device is used.</p><p>If the attribute is a symlink, the last element of the symlink target is
returned as the value.</p></dd><dt id="$env{key}, %E{key}"><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><a class="headerlink" title="Permalink to this term" href="#%24env%7Bkey%7D,%20%E%7Bkey%7D">¶</a></dt><dd><p>A device property value.</p></dd><dt id="$major, %M"><span class="term"><code class="option">$major</code>, <code class="option">%M</code></span><a class="headerlink" title="Permalink to this term" href="#%24major,%20%M">¶</a></dt><dd><p>The kernel major number for the device.</p></dd><dt id="$minor, %m"><span class="term"><code class="option">$minor</code>, <code class="option">%m</code></span><a class="headerlink" title="Permalink to this term" href="#%24minor,%20%m">¶</a></dt><dd><p>The kernel minor number for the device.</p></dd><dt id="$result, %c"><span class="term"><code class="option">$result</code>, <code class="option">%c</code></span><a class="headerlink" title="Permalink to this term" href="#%24result,%20%c">¶</a></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 '+' character, this part plus all remaining parts
- of the result string are substituted: <code class="option">%c{N+}</code></p></dd><dt id="$parent, %P"><span class="term"><code class="option">$parent</code>, <code class="option">%P</code></span><a class="headerlink" title="Permalink to this term" href="#%24parent,%20%P">¶</a></dt><dd><p>The node name of the parent device.</p></dd><dt id="$name"><span class="term"><code class="option">$name</code></span><a class="headerlink" title="Permalink to this term" href="#%24name">¶</a></dt><dd><p>The current name of the device. If not changed by a rule, it is the
+ by specifying the part number as an attribute: "<code class="literal">%c{N}</code>".
+ If the number is followed by the "<code class="literal">+</code>" character, this part plus all remaining parts
+ of the result string are substituted: "<code class="literal">%c{N+}</code>".</p></dd><dt id="$parent, %P"><span class="term"><code class="option">$parent</code>, <code class="option">%P</code></span><a class="headerlink" title="Permalink to this term" href="#%24parent,%20%P">¶</a></dt><dd><p>The node name of the parent device.</p></dd><dt id="$name"><span class="term"><code class="option">$name</code></span><a class="headerlink" title="Permalink to this term" href="#%24name">¶</a></dt><dd><p>The current name of the device. If not changed by a rule, it is the
name of the kernel device.</p></dd><dt id="$links"><span class="term"><code class="option">$links</code></span><a class="headerlink" title="Permalink to this term" href="#%24links">¶</a></dt><dd><p>A space-separated list of the current symlinks. The value is
- only set during a remove event or if an earlier rule assigned a value.</p></dd><dt id="$root, %r"><span class="term"><code class="option">$root</code>, <code class="option">%r</code></span><a class="headerlink" title="Permalink to this term" href="#%24root,%20%r">¶</a></dt><dd><p>The udev_root value.</p></dd><dt id="$sys, %S"><span class="term"><code class="option">$sys</code>, <code class="option">%S</code></span><a class="headerlink" title="Permalink to this term" href="#%24sys,%20%S">¶</a></dt><dd><p>The sysfs mount point.</p></dd><dt id="$devnode, %N"><span class="term"><code class="option">$devnode</code>, <code class="option">%N</code></span><a class="headerlink" title="Permalink to this term" href="#%24devnode,%20%N">¶</a></dt><dd><p>The name of the device node.</p></dd><dt id="%%"><span class="term"><code class="literal">%%</code></span><a class="headerlink" title="Permalink to this term" href="#%%">¶</a></dt><dd><p>The '%' character itself.</p></dd><dt id="$$"><span class="term"><code class="literal">$$</code></span><a class="headerlink" title="Permalink to this term" href="#%24%24">¶</a></dt><dd><p>The '$' character itself.</p></dd></dl></div></div><div class="refsect1"><a name="idm259794679136"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>,
+ only set during a remove event or if an earlier rule assigned a value.</p></dd><dt id="$root, %r"><span class="term"><code class="option">$root</code>, <code class="option">%r</code></span><a class="headerlink" title="Permalink to this term" href="#%24root,%20%r">¶</a></dt><dd><p>The udev_root value.</p></dd><dt id="$sys, %S"><span class="term"><code class="option">$sys</code>, <code class="option">%S</code></span><a class="headerlink" title="Permalink to this term" href="#%24sys,%20%S">¶</a></dt><dd><p>The sysfs mount point.</p></dd><dt id="$devnode, %N"><span class="term"><code class="option">$devnode</code>, <code class="option">%N</code></span><a class="headerlink" title="Permalink to this term" href="#%24devnode,%20%N">¶</a></dt><dd><p>The name of the device node.</p></dd><dt id="%%"><span class="term"><code class="option">%%</code></span><a class="headerlink" title="Permalink to this term" href="#%%">¶</a></dt><dd><p>The "<code class="literal">%</code>" character itself.</p></dd><dt id="$$"><span class="term"><code class="option">$$</code></span><a class="headerlink" title="Permalink to this term" href="#%24%24">¶</a></dt><dd><p>The "<code class="literal">$</code>" character itself.</p></dd></dl></div></div><div class="refsect1"><a name="idm274700216480"></a><h2 id="Hardware Database Files">Hardware Database Files<a class="headerlink" title="Permalink to this headline" href="#Hardware%20Database%20Files">¶</a></h2><p>The hwdb files are read from the files located in the
+ system hwdb directory <code class="filename">/usr/lib/udev/hwdb.d</code>,
+ the volatile runtime directory <code class="filename">/run/udev/hwdb.d</code>
+ and the local administration directory <code class="filename">/etc/udev/hwdb.d</code>.
+ All hwdb files are collectively sorted and processed in lexical order,
+ regardless of the directories in which they live. However, files with
+ identical filenames replace each other. Files in <code class="filename">/etc</code>
+ have the highest priority, files in <code class="filename">/run</code> take precedence
+ over files with the same name in <code class="filename">/lib</code>. This can be
+ used to override a system-supplied hwdb file with a local file if needed;
+ a symlink in <code class="filename">/etc</code> with the same name as a hwdb file in
+ <code class="filename">/lib</code>, pointing to <code class="filename">/dev/null</code>,
+ disables the hwdb file entirely. hwdb files must have the extension
+ <code class="filename">.hwdb</code>; other extensions are ignored.</p><p>The hwdb file contains data records consisting of matches and
+ associated key-value pairs. Every record in the hwdb starts with one or
+ more match string, specifying a shell glob to compare the database
+ lookup string against. Multiple match lines are specified in additional
+ consecutive lines. Every match line is compared indivdually, they are
+ combined by OR. Every match line must start at the first character of
+ the line.</p><p>The match lines are followed by one or more key-value pair lines, which
+ are recognized by a leading space character. The key name and value are separated
+ by "<code class="literal">=</code>". An empty line signifies the end
+ of a record. Lines beginning with "<code class="literal">#</code>" are ignored.</p><p>The content of all hwdb files is read by
+ <a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a>
+ and compiled to a binary database located at <code class="filename">/etc/udev/hwdb.bin</code>.
+ During runtime only the binary database is used.</p></div><div class="refsect1"><a name="idm274705377616"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a>,
<a href="udevadm.html"><span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></a></p></div></div></body></html>
diff --git a/man/udev.xml b/man/udev.xml
index e253a0677a..f107482329 100644
--- a/man/udev.xml
+++ b/man/udev.xml
@@ -30,7 +30,7 @@
<refnamediv>
<refname>udev</refname>
- <refpurpose>Linux dynamic device management</refpurpose>
+ <refpurpose>Dynamic device management</refpurpose>
</refnamediv>
<refsect1><title>Description</title>
@@ -54,26 +54,24 @@
sources is provided by the library libudev.</para>
</refsect1>
- <refsect1><title>Rules files</title>
+ <refsect1><title>Rules Files</title>
<para>The udev rules are read from the files located in the
system rules directory <filename>/usr/lib/udev/rules.d</filename>,
the volatile runtime directory <filename>/run/udev/rules.d</filename>
and the local administration directory <filename>/etc/udev/rules.d</filename>.
All rules files are collectively sorted and processed in lexical order,
regardless of the directories in which they live. However, files with
- identical file names replace each other. Files in <filename>/etc</filename>
+ identical filenames replace each other. Files in <filename>/etc</filename>
have the highest priority, files in <filename>/run</filename> take precedence
over files with the same name in <filename>/lib</filename>. This can be
used to override a system-supplied rules file with a local file if needed;
a symlink in <filename>/etc</filename> with the same name as a rules file in
<filename>/lib</filename>, pointing to <filename>/dev/null</filename>,
- disables the rules file entirely.</para>
-
- <para>Rule files must have the extension <filename>.rules</filename>; other
- extensions are ignored.</para>
+ disables the rules file entirely. Rule files must have the extension
+ <filename>.rules</filename>; other extensions are ignored.</para>
<para>Every line in the rules file contains at least one key-value pair.
- Except for empty lines or lines beginning with '#', which are ignored.
+ Except for empty lines or lines beginning with <literal>#</literal>, which are ignored.
There are two kinds of keys: match and assignment.
If all match keys match against their values, the rule gets applied and the
assignment keys get the specified values assigned.</para>
@@ -130,28 +128,28 @@
one and the same parent device.</para>
<variablelist class='udev-directives'>
<varlistentry>
- <term><option>ACTION</option></term>
+ <term><varname>ACTION</varname></term>
<listitem>
<para>Match the name of the event action.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>DEVPATH</option></term>
+ <term><varname>DEVPATH</varname></term>
<listitem>
<para>Match the devpath of the event device.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>KERNEL</option></term>
+ <term><varname>KERNEL</varname></term>
<listitem>
<para>Match the name of the event device.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>NAME</option></term>
+ <term><varname>NAME</varname></term>
<listitem>
<para>Match the name of a network interface. It can be used once the
NAME key has been set in one of the preceding rules.</para>
@@ -159,7 +157,7 @@
</varlistentry>
<varlistentry>
- <term><option>SYMLINK</option></term>
+ <term><varname>SYMLINK</varname></term>
<listitem>
<para>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
@@ -169,20 +167,20 @@
</varlistentry>
<varlistentry>
- <term><option>SUBSYSTEM</option></term>
+ <term><varname>SUBSYSTEM</varname></term>
<listitem>
<para>Match the subsystem of the event device.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>DRIVER</option></term>
+ <term><varname>DRIVER</varname></term>
<listitem>
<para>Match the driver name of the event device. Only set this key for devices
which are bound to a driver at the time the event is generated.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>ATTR{<replaceable>filename</replaceable>}</option></term>
+ <term><varname>ATTR{<replaceable>filename</replaceable>}</varname></term>
<listitem>
<para>Match sysfs attribute values of the event device. Trailing
whitespace in the attribute values is ignored unless the specified match
@@ -192,59 +190,59 @@
</varlistentry>
<varlistentry>
- <term><option>KERNELS</option></term>
+ <term><varname>KERNELS</varname></term>
<listitem>
<para>Search the devpath upwards for a matching device name.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>SUBSYSTEMS</option></term>
+ <term><varname>SUBSYSTEMS</varname></term>
<listitem>
<para>Search the devpath upwards for a matching device subsystem name.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>DRIVERS</option></term>
+ <term><varname>DRIVERS</varname></term>
<listitem>
<para>Search the devpath upwards for a matching device driver name.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>ATTRS{<replaceable>filename</replaceable>}</option></term>
+ <term><varname>ATTRS{<replaceable>filename</replaceable>}</varname></term>
<listitem>
<para>Search the devpath upwards for a device with matching sysfs attribute values.
- If multiple <option>ATTRS</option> matches are specified, all of them
+ If multiple <varname>ATTRS</varname> matches are specified, all of them
must match on the same device. Trailing whitespace in the attribute values is ignored
unless the specified match value itself contains trailing whitespace.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>TAGS</option></term>
+ <term><varname>TAGS</varname></term>
<listitem>
<para>Search the devpath upwards for a device with matching tag.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>ENV{<replaceable>key</replaceable>}</option></term>
+ <term><varname>ENV{<replaceable>key</replaceable>}</varname></term>
<listitem>
<para>Match against a device property value.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>TAG</option></term>
+ <term><varname>TAG</varname></term>
<listitem>
<para>Match against a device tag.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>TEST{<replaceable>octal mode mask</replaceable>}</option></term>
+ <term><varname>TEST{<replaceable>octal mode mask</replaceable>}</varname></term>
<listitem>
<para>Test the existence of a file. An octal mode mask can be specified
if needed.</para>
@@ -252,7 +250,7 @@
</varlistentry>
<varlistentry>
- <term><option>PROGRAM</option></term>
+ <term><varname>PROGRAM</varname></term>
<listitem>
<para>Execute a program to determine whether there
is a match; the key is true if the program returns
@@ -260,12 +258,12 @@
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>
+ see <varname>RUN</varname>.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>RESULT</option></term>
+ <term><varname>RESULT</varname></term>
<listitem>
<para>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.</para>
@@ -273,7 +271,7 @@
</varlistentry>
</variablelist>
- <para>Most of the fields support shell-style pattern matching. The following
+ <para>Most of the fields support shell glob pattern matching. The following
pattern characters are supported:</para>
<variablelist>
<varlistentry>
@@ -292,11 +290,12 @@
<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'.
- Ranges are also supported via the '-' character.
+ example, the pattern string <literal>tty[SR]</literal>
+ would match either <literal>ttyS</literal> or <literal>ttyR</literal>.
+ Ranges are also supported via the <literal>-</literal> character.
For example, to match on the range of all digits, the pattern [0-9] could
- be used. If the first character following the '[' is a '!', any characters
- not enclosed are matched.</para>
+ be used. If the first character following the <literal>[</literal> is a
+ <literal>!</literal>, any characters not enclosed are matched.</para>
</listitem>
</varlistentry>
</variablelist>
@@ -304,7 +303,7 @@
<para>The following keys can get values assigned:</para>
<variablelist class='udev-directives'>
<varlistentry>
- <term><option>NAME</option></term>
+ <term><varname>NAME</varname></term>
<listitem>
<para>The name to use for a network interface. The name of a device node
cannot be changed by udev, only additional symlinks can be created.</para>
@@ -312,14 +311,14 @@
</varlistentry>
<varlistentry>
- <term><option>SYMLINK</option></term>
+ <term><varname>SYMLINK</varname></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.</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>
+ characters are <literal>0-9A-Za-z#+-.:=@_/</literal>, valid UTF-8 character
+ sequences, and <literal>\x00</literal> hex encoding. All other
+ characters are replaced by a <literal>_</literal> 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
@@ -334,7 +333,7 @@
</varlistentry>
<varlistentry>
- <term><option>OWNER</option>, <option>GROUP</option>, <option>MODE</option></term>
+ <term><varname>OWNER</varname>, <varname>GROUP</varname>, <varname>MODE</varname></term>
<listitem>
<para>The permissions for the device node. Every specified value overrides
the compiled-in default value.</para>
@@ -342,7 +341,7 @@
</varlistentry>
<varlistentry>
- <term><option>ATTR{<replaceable>key</replaceable>}</option></term>
+ <term><varname>ATTR{<replaceable>key</replaceable>}</varname></term>
<listitem>
<para>The value that should be written to a sysfs attribute of the
event device.</para>
@@ -350,16 +349,16 @@
</varlistentry>
<varlistentry>
- <term><option>ENV{<replaceable>key</replaceable>}</option></term>
+ <term><varname>ENV{<replaceable>key</replaceable>}</varname></term>
<listitem>
- <para>Set a device property value. Property names with a leading '.'
+ <para>Set a device property value. Property names with a leading <literal>.</literal>
are neither stored in the database nor exported to events or
external tools (run by, say, the PROGRAM match key).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>TAG</option></term>
+ <term><varname>TAG</varname></term>
<listitem>
<para>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
@@ -372,7 +371,7 @@
</varlistentry>
<varlistentry>
- <term><option>RUN{<replaceable>type</replaceable>}</option></term>
+ <term><varname>RUN{<replaceable>type</replaceable>}</varname></term>
<listitem>
<para>Add a program to the list of programs to be executed after processing all the
rules for a specific event, depending on <literal>type</literal>:</para>
@@ -390,7 +389,7 @@
<varlistentry>
<term><literal>builtin</literal></term>
<listitem>
- <para>As <option>program</option>, but use one of the built-in programs rather
+ <para>As <varname>program</varname>, but use one of the built-in programs rather
than an external one.</para>
</listitem>
</varlistentry>
@@ -407,21 +406,21 @@
</varlistentry>
<varlistentry>
- <term><option>LABEL</option></term>
+ <term><varname>LABEL</varname></term>
<listitem>
<para>A named label to which a GOTO may jump.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>GOTO</option></term>
+ <term><varname>GOTO</varname></term>
<listitem>
<para>Jumps to the next LABEL with a matching name.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>IMPORT{<replaceable>type</replaceable>}</option></term>
+ <term><varname>IMPORT{<replaceable>type</replaceable>}</varname></term>
<listitem>
<para>Import a set of variables as device properties,
depending on <literal>type</literal>:</para>
@@ -432,14 +431,14 @@
<para>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 <option>RUN</option>.</para>
+ and quoting work like in <varname>RUN</varname>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>builtin</literal></term>
<listitem>
- <para>As <option>program</option>, but use one of the built-in programs rather
- than an external one.</para>
+ <para>Similar to <literal>program</literal>, but use one of the
+ built-in programs rather than an external one.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -461,7 +460,7 @@
<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>
+ the value of the property is set to <literal>1</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -470,7 +469,7 @@
<para>Import the stored keys from the parent device by reading
the database entry of the parent device. The value assigned to
<option>IMPORT{parent}</option> is used as a filter of key names
- to import (with the same shell-style pattern matching used for
+ to import (with the same shell glob pattern matching used for
comparisons).</para>
</listitem>
</varlistentry>
@@ -481,7 +480,7 @@
</varlistentry>
<varlistentry>
- <term><option>WAIT_FOR</option></term>
+ <term><varname>WAIT_FOR</varname></term>
<listitem>
<para>Wait for a file to become available or until a timeout of
10 seconds expires. The path is relative to the sysfs device;
@@ -490,7 +489,7 @@
</varlistentry>
<varlistentry>
- <term><option>OPTIONS</option></term>
+ <term><varname>OPTIONS</varname></term>
<listitem>
<para>Rule and device options:</para>
<variablelist class='udev-directives'>
@@ -520,9 +519,13 @@
<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 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>
+ the specified name. Also, for every tag specified in this rule, create a symlink
+ in the directory
+ <filename>/run/udev/static_node-tags/<replaceable>tag</replaceable></filename>
+ pointing at the static device node with the specified name. Static device node
+ creation is performed by systemd-tmpfiles before systemd-udevd is started. The
+ static nodes might not have a corresponding kernel device; they are used to
+ trigger automatic kernel module loading when they are accessed.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -543,9 +546,9 @@
</varlistentry>
</variablelist>
- <para>The <option>NAME</option>, <option>SYMLINK</option>, <option>PROGRAM</option>,
- <option>OWNER</option>, <option>GROUP</option>, <option>MODE</option> and <option>RUN</option>
- fields support simple string substitutions. The <option>RUN</option>
+ <para>The <varname>NAME</varname>, <varname>SYMLINK</varname>, <varname>PROGRAM</varname>,
+ <varname>OWNER</varname>, <varname>GROUP</varname>, <varname>MODE</varname> and <varname>RUN</varname>
+ fields support simple string substitutions. The <varname>RUN</varname>
substitutions are performed after all rules have been processed, right before the program
is executed, allowing for the use of device properties set by earlier matching
rules. For all other fields, substitutions are performed while the individual rule is
@@ -561,8 +564,8 @@
<varlistentry>
<term><option>$number</option>, <option>%n</option></term>
<listitem>
- <para>The kernel number for this device. For example, 'sda3' has
- kernel number of '3'</para>
+ <para>The kernel number for this device. For example,
+ <literal>sda3</literal> has kernel number <literal>3</literal>.</para>
</listitem>
</varlistentry>
@@ -630,9 +633,9 @@
<listitem>
<para>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: <option>%c{N}</option>.
- If the number is followed by the '+' character, this part plus all remaining parts
- of the result string are substituted: <option>%c{N+}</option></para>
+ by specifying the part number as an attribute: <literal>%c{N}</literal>.
+ If the number is followed by the <literal>+</literal> character, this part plus all remaining parts
+ of the result string are substituted: <literal>%c{N+}</literal>.</para>
</listitem>
</varlistentry>
@@ -681,21 +684,56 @@
</varlistentry>
<varlistentry>
- <term><literal>%%</literal></term>
+ <term><option>%%</option></term>
<listitem>
- <para>The '%' character itself.</para>
+ <para>The <literal>%</literal> character itself.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>$$</literal></term>
+ <term><option>$$</option></term>
<listitem>
- <para>The '$' character itself.</para>
+ <para>The <literal>$</literal> character itself.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
+ <refsect1><title>Hardware Database Files</title>
+ <para>The hwdb files are read from the files located in the
+ system hwdb directory <filename>/usr/lib/udev/hwdb.d</filename>,
+ the volatile runtime directory <filename>/run/udev/hwdb.d</filename>
+ and the local administration directory <filename>/etc/udev/hwdb.d</filename>.
+ All hwdb files are collectively sorted and processed in lexical order,
+ regardless of the directories in which they live. However, files with
+ identical filenames replace each other. Files in <filename>/etc</filename>
+ have the highest priority, files in <filename>/run</filename> take precedence
+ over files with the same name in <filename>/lib</filename>. This can be
+ used to override a system-supplied hwdb file with a local file if needed;
+ a symlink in <filename>/etc</filename> with the same name as a hwdb file in
+ <filename>/lib</filename>, pointing to <filename>/dev/null</filename>,
+ disables the hwdb file entirely. hwdb files must have the extension
+ <filename>.hwdb</filename>; other extensions are ignored.</para>
+
+ <para>The hwdb file contains data records consisting of matches and
+ associated key-value pairs. Every record in the hwdb starts with one or
+ more match string, specifying a shell glob to compare the database
+ lookup string against. Multiple match lines are specified in additional
+ consecutive lines. Every match line is compared indivdually, they are
+ combined by OR. Every match line must start at the first character of
+ the line.</para>
+
+ <para>The match lines are followed by one or more key-value pair lines, which
+ are recognized by a leading space character. The key name and value are separated
+ by <literal>=</literal>. An empty line signifies the end
+ of a record. Lines beginning with <literal>#</literal> are ignored.</para>
+
+ <para>The content of all hwdb files is read by
+ <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ and compiled to a binary database located at <filename>/etc/udev/hwdb.bin</filename>.
+ During runtime only the binary database is used.</para>
+ </refsect1>
+
<refsect1>
<title>See Also</title>
<para><citerefentry>
diff --git a/man/udevadm.8 b/man/udevadm.8
new file mode 100644
index 0000000000..4ddbe84ea6
--- /dev/null
+++ b/man/udevadm.8
@@ -0,0 +1,371 @@
+'\" t
+.TH "UDEVADM" "8" "" "systemd 208" "udevadm"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+udevadm \- udev management tool
+.SH "SYNOPSIS"
+.HP \w'\fBudevadm\fR\ 'u
+\fBudevadm\fR [\fB\-\-debug\fR] [\fB\-\-version\fR] [\fB\-\-help\fR]
+.HP \w'\fBudevadm\ info\ \fR\fB\fIoptions\fR\fR\ 'u
+\fBudevadm info \fR\fB\fIoptions\fR\fR
+.HP \w'\fBudevadm\ trigger\ \fR\fB[options]\fR\ 'u
+\fBudevadm trigger \fR\fB[options]\fR
+.HP \w'\fBudevadm\ settle\ \fR\fB[options]\fR\ 'u
+\fBudevadm settle \fR\fB[options]\fR
+.HP \w'\fBudevadm\ control\ \fR\fB\fIcommand\fR\fR\ 'u
+\fBudevadm control \fR\fB\fIcommand\fR\fR
+.HP \w'\fBudevadm\ monitor\ \fR\fB[options]\fR\ 'u
+\fBudevadm monitor \fR\fB[options]\fR
+.HP \w'\fBudevadm\ hwdb\ \fR\fB[options]\fR\ 'u
+\fBudevadm hwdb \fR\fB[options]\fR
+.HP \w'\fBudevadm\ test\ \fR\fB[options]\fR\fB\ \fR\fB\fIdevpath\fR\fR\ 'u
+\fBudevadm test \fR\fB[options]\fR\fB \fR\fB\fIdevpath\fR\fR
+.HP \w'\fBudevadm\ test\-builtin\ \fR\fB[options]\fR\fB\ \fR\fB\fIcommand\fR\fR\fB\ \fR\fB\fIdevpath\fR\fR\ 'u
+\fBudevadm test\-builtin \fR\fB[options]\fR\fB \fR\fB\fIcommand\fR\fR\fB \fR\fB\fIdevpath\fR\fR
+.SH "DESCRIPTION"
+.PP
+udevadm expects a command and command specific options\&. It controls the runtime behavior of udev, requests kernel events, manages the event queue, and provides simple debugging mechanisms\&.
+.SH "OPTIONS"
+.PP
+\fB\-\-debug\fR
+.RS 4
+Print debug messages to stderr\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print version number\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SS "udevadm info \fIoptions\fR"
+.PP
+Queries the udev database for device information stored in the udev database\&. It can also query the properties of a device from its sysfs representation to help creating udev rules that match this device\&.
+.PP
+\fB\-\-query=\fR\fB\fItype\fR\fR
+.RS 4
+Query the database for specified type of device data\&. It needs the
+\fB\-\-path\fR
+or
+\fB\-\-name\fR
+to identify the specified device\&. Valid queries are:
+\fBname\fR,
+\fBsymlink\fR,
+\fBpath\fR,
+\fBproperty\fR,
+\fBall\fR\&.
+.RE
+.PP
+\fB\-\-path=\fR\fB\fIdevpath\fR\fR
+.RS 4
+The devpath of the device to query\&.
+.RE
+.PP
+\fB\-\-name=\fR\fB\fIfile\fR\fR
+.RS 4
+The name of the device node or a symlink to query
+.RE
+.PP
+\fB\-\-root\fR
+.RS 4
+Print absolute paths in
+\fBname\fR
+or
+\fBsymlink\fR
+query\&.
+.RE
+.PP
+\fB\-\-attribute\-walk\fR
+.RS 4
+Print all sysfs properties of the specified device that can be used in udev rules to match the specified device\&. It prints all devices along the chain, up to the root of sysfs that can be used in udev rules\&.
+.RE
+.PP
+\fB\-\-export\fR
+.RS 4
+Print output as key/value pairs\&. Values are enclosed in single quotes\&.
+.RE
+.PP
+\fB\-\-export\-prefix=\fR\fB\fIname\fR\fR
+.RS 4
+Add a prefix to the key name of exported values\&.
+.RE
+.PP
+\fB\-\-device\-id\-of\-file=\fR\fB\fIfile\fR\fR
+.RS 4
+Print major/minor numbers of the underlying device, where the file lives on\&.
+.RE
+.PP
+\fB\-\-export\-db\fR
+.RS 4
+Export the content of the udev database\&.
+.RE
+.PP
+\fB\-\-cleanup\-db\fR
+.RS 4
+Cleanup the udev database\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print version\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SS "udevadm trigger [options]"
+.PP
+Request device events from the kernel\&. Primarily used to replay events at system coldplug time\&.
+.PP
+\fB\-\-verbose\fR
+.RS 4
+Print the list of devices which will be triggered\&.
+.RE
+.PP
+\fB\-\-dry\-run\fR
+.RS 4
+Do not actually trigger the event\&.
+.RE
+.PP
+\fB\-\-type=\fR\fB\fItype\fR\fR
+.RS 4
+Trigger a specific type of devices\&. Valid types are:
+\fBdevices\fR,
+\fBsubsystems\fR\&. The default value is
+\fBdevices\fR\&.
+.RE
+.PP
+\fB\-\-action=\fR\fB\fIaction\fR\fR
+.RS 4
+Type of event to be triggered\&. The default value is
+\fBchange\fR\&.
+.RE
+.PP
+\fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR
+.RS 4
+Trigger events for devices which belong to a matching subsystem\&. This option can be specified multiple times and supports shell style pattern matching\&.
+.RE
+.PP
+\fB\-\-subsystem\-nomatch=\fR\fB\fIsubsystem\fR\fR
+.RS 4
+Do not trigger events for devices which belong to a matching subsystem\&. This option can be specified multiple times and supports shell style pattern matching\&.
+.RE
+.PP
+\fB\-\-attr\-match=\fR\fB\fIattribute\fR\fR\fB=\fR\fB\fIvalue\fR\fR
+.RS 4
+Trigger events for devices with a matching sysfs attribute\&. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching\&. If no value is specified, the existence of the sysfs attribute is checked\&. This option can be specified multiple times\&.
+.RE
+.PP
+\fB\-\-attr\-nomatch=\fR\fB\fIattribute\fR\fR\fB=\fR\fB\fIvalue\fR\fR
+.RS 4
+Do not trigger events for devices with a matching sysfs attribute\&. If a value is specified along with the attribute name, the content of the attribute is matched against the given value using shell style pattern matching\&. If no value is specified, the existence of the sysfs attribute is checked\&. This option can be specified multiple times\&.
+.RE
+.PP
+\fB\-\-property\-match=\fR\fB\fIproperty\fR\fR\fB=\fR\fB\fIvalue\fR\fR
+.RS 4
+Trigger events for devices with a matching property value\&. This option can be specified multiple times and supports shell style pattern matching\&.
+.RE
+.PP
+\fB\-\-tag\-match=\fR\fB\fIproperty\fR\fR
+.RS 4
+Trigger events for devices with a matching tag\&. This option can be specified multiple times\&.
+.RE
+.PP
+\fB\-\-sysname\-match=\fR\fB\fIname\fR\fR
+.RS 4
+Trigger events for devices with a matching sys device name\&. This option can be specified multiple times and supports shell style pattern matching\&.
+.RE
+.PP
+\fB\-\-parent\-match=\fR\fB\fIsyspath\fR\fR
+.RS 4
+Trigger events for all children of a given device\&.
+.RE
+.SS "udevadm settle [options]"
+.PP
+Watches the udev event queue, and exits if all current events are handled\&.
+.PP
+\fB\-\-timeout=\fR\fB\fIseconds\fR\fR
+.RS 4
+Maximum number of seconds to wait for the event queue to become empty\&. The default value is 120 seconds\&. A value of 0 will check if the queue is empty and always return immediately\&.
+.RE
+.PP
+\fB\-\-seq\-start=\fR\fB\fIseqnum\fR\fR
+.RS 4
+Wait only for events after the given sequence number\&.
+.RE
+.PP
+\fB\-\-seq\-end=\fR\fB\fIseqnum\fR\fR
+.RS 4
+Wait only for events before the given sequence number\&.
+.RE
+.PP
+\fB\-\-exit\-if\-exists=\fR\fB\fIfile\fR\fR
+.RS 4
+Stop waiting if file exists\&.
+.RE
+.PP
+\fB\-\-quiet\fR
+.RS 4
+Do not print any output, like the remaining queue entries when reaching the timeout\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SS "udevadm control \fIcommand\fR"
+.PP
+Modify the internal state of the running udev daemon\&.
+.PP
+\fB\-\-exit\fR
+.RS 4
+Signal and wait for systemd\-udevd to exit\&.
+.RE
+.PP
+\fB\-\-log\-priority=\fR\fB\fIvalue\fR\fR
+.RS 4
+Set the internal log level of systemd\-udevd\&. Valid values are the numerical syslog priorities or their textual representations:
+\fBerr\fR,
+\fBinfo\fR
+and
+\fBdebug\fR\&.
+.RE
+.PP
+\fB\-\-stop\-exec\-queue\fR
+.RS 4
+Signal systemd\-udevd to stop executing new events\&. Incoming events will be queued\&.
+.RE
+.PP
+\fB\-\-start\-exec\-queue\fR
+.RS 4
+Signal systemd\-udevd to enable the execution of events\&.
+.RE
+.PP
+\fB\-\-reload\fR
+.RS 4
+Signal systemd\-udevd to reload the rules files and other databases like the kernel module index\&. Reloading rules and databases does not apply any changes to already existing devices; the new configuration will only be applied to new events\&.
+.RE
+.PP
+\fB\-\-property=\fR\fB\fIKEY\fR\fR\fB=\fR\fB\fIvalue\fR\fR
+.RS 4
+Set a global property for all events\&.
+.RE
+.PP
+\fB\-\-children\-max=\fR\fIvalue\fR
+.RS 4
+Set the maximum number of events, systemd\-udevd will handle at the same time\&.
+.RE
+.PP
+\fB\-\-timeout=\fR\fIseconds\fR
+.RS 4
+The maximum number of seconds to wait for a reply from systemd\-udevd\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SS "udevadm monitor [options]"
+.PP
+Listens to the kernel uevents and events sent out by a udev rule and prints the devpath of the event to the console\&. It can be used to analyze the event timing, by comparing the timestamps of the kernel uevent and the udev event\&.
+.PP
+\fB\-\-kernel\fR
+.RS 4
+Print the kernel uevents\&.
+.RE
+.PP
+\fB\-\-udev\fR
+.RS 4
+Print the udev event after the rule processing\&.
+.RE
+.PP
+\fB\-\-property\fR
+.RS 4
+Also print the properties of the event\&.
+.RE
+.PP
+\fB\-\-subsystem\-match=\fR\fB\fIstring[/string]\fR\fR
+.RS 4
+Filter events by subsystem[/devtype]\&. Only udev events with a matching subsystem value will pass\&.
+.RE
+.PP
+\fB\-\-tag\-match=\fR\fB\fIstring\fR\fR
+.RS 4
+Filter events by property\&. Only udev events with a given tag attached will pass\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SS "udevadm hwdb [options]"
+.PP
+Maintain the hardware database index in
+/etc/udev/hwdb\&.bin\&.
+.PP
+\fB\-\-update\fR
+.RS 4
+Compile the hardware database information located in /usr/lib/udev/hwdb\&.d/, /etc/udev/hwdb\&.d/ and store it in
+/etc/udev/hwdb\&.bin\&. This should be done after any update to the source files; it will not be called automatically\&. The running udev daemon will detect a new database on its own and does not need to be notified about it\&.
+.RE
+.PP
+\fB\-\-test=\fR\fB\fIstring\fR\fR
+.RS 4
+Query the database with a modalias string, and print the retrieved properties\&.
+.RE
+.PP
+\fB\-\-root=\fR\fB\fIstring\fR\fR
+.RS 4
+Alternative root path in the filesystem for reading and writing files\&.
+.RE
+.SS "udevadm test [options] \fIdevpath\fR"
+.PP
+Simulate a udev event run for the given device, and print debug output\&.
+.PP
+\fB\-\-action=\fR\fB\fIstring\fR\fR
+.RS 4
+The action string\&.
+.RE
+.PP
+\fB\-\-subsystem=\fR\fB\fIstring\fR\fR
+.RS 4
+The subsystem string\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SS "udevadm test\-builtin [options] \fIcommand\fR \fIdevpath\fR"
+.PP
+Run a built\-in command for the given device, and print debug output\&.
+.PP
+\fB\-\-help\fR
+.RS 4
+Print help text\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBudev\fR(7)\fBsystemd-udevd.service\fR(8)
diff --git a/man/udevadm.html b/man/udevadm.html
index dce3d93620..13fe8efdb9 100644
--- a/man/udevadm.html
+++ b/man/udevadm.html
@@ -19,9 +19,9 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="udevadm"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>udevadm — udev management tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">udevadm</code> [<code class="option">--debug</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div><div class="cmdsynopsis"><p><code class="command">udevadm info <em class="replaceable"><code>options</code></em></code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm trigger [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm settle [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm control <em class="replaceable"><code>command</code></em></code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm monitor [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm hwdb [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm test [<span class="optional">options</span>] <em class="replaceable"><code>devpath</code></em></code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm test-builtin [<span class="optional">options</span>] <em class="replaceable"><code>command</code></em> <em class="replaceable"><code>devpath</code></em></code> </p></div></div><div class="refsect1"><a name="idm259792571312"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>udevadm expects a command and command specific options. It
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="udevadm"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>udevadm — udev management tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">udevadm</code> [<code class="option">--debug</code>] [<code class="option">--version</code>] [<code class="option">--help</code>]</p></div><div class="cmdsynopsis"><p><code class="command">udevadm info <em class="replaceable"><code>options</code></em></code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm trigger [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm settle [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm control <em class="replaceable"><code>command</code></em></code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm monitor [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm hwdb [<span class="optional">options</span>]</code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm test [<span class="optional">options</span>] <em class="replaceable"><code>devpath</code></em></code> </p></div><div class="cmdsynopsis"><p><code class="command">udevadm test-builtin [<span class="optional">options</span>] <em class="replaceable"><code>command</code></em> <em class="replaceable"><code>devpath</code></em></code> </p></div></div><div class="refsect1"><a name="idm274700826992"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>udevadm expects a command and command specific options. It
controls the runtime behavior of udev, requests kernel events,
- manages the event queue, and provides simple debugging mechanisms.</p></div><div class="refsect1"><a name="idm259792570048"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div><div class="refsect2"><a name="idm259796226592"></a><h3 id="udevadm info options">udevadm info <em class="replaceable"><code>options</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20info%20options">¶</a></h3><p>Queries the udev database for device information
+ manages the event queue, and provides simple debugging mechanisms.</p></div><div class="refsect1"><a name="idm274701547008"></a><h2 id="OPTIONS">OPTIONS<a class="headerlink" title="Permalink to this headline" href="#OPTIONS">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="--debug"><span class="term"><code class="option">--debug</code></span><a class="headerlink" title="Permalink to this term" href="#--debug">¶</a></dt><dd><p>Print debug messages to stderr.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version number.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div><div class="refsect2"><a name="idm274700775072"></a><h3 id="udevadm info options">udevadm info <em class="replaceable"><code>options</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20info%20options">¶</a></h3><p>Queries the udev database for device information
stored in the udev database. It can also query the properties
of a device from its sysfs representation to help creating udev
rules that match this device.</p><div class="variablelist"><dl class="variablelist"><dt id="--query=type"><span class="term"><code class="option">--query=<em class="replaceable"><code>type</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--query=type">¶</a></dt><dd><p>Query the database for specified type of device data. It needs the
@@ -32,7 +32,7 @@
query.</p></dd><dt id="--attribute-walk"><span class="term"><code class="option">--attribute-walk</code></span><a class="headerlink" title="Permalink to this term" href="#--attribute-walk">¶</a></dt><dd><p>Print all sysfs properties of the specified device that can be used
in udev rules to match the specified device. It prints all devices
along the chain, up to the root of sysfs that can be used in udev rules.</p></dd><dt id="--export"><span class="term"><code class="option">--export</code></span><a class="headerlink" title="Permalink to this term" href="#--export">¶</a></dt><dd><p>Print output as key/value pairs. Values are enclosed in single quotes.</p></dd><dt id="--export-prefix=name"><span class="term"><code class="option">--export-prefix=<em class="replaceable"><code>name</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--export-prefix=name">¶</a></dt><dd><p>Add a prefix to the key name of exported values.</p></dd><dt id="--device-id-of-file=file"><span class="term"><code class="option">--device-id-of-file=<em class="replaceable"><code>file</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--device-id-of-file=file">¶</a></dt><dd><p>Print major/minor numbers of the underlying device, where the file
- lives on.</p></dd><dt id="--export-db"><span class="term"><code class="option">--export-db</code></span><a class="headerlink" title="Permalink to this term" href="#--export-db">¶</a></dt><dd><p>Export the content of the udev database.</p></dd><dt id="--cleanup-db"><span class="term"><code class="option">--cleanup-db</code></span><a class="headerlink" title="Permalink to this term" href="#--cleanup-db">¶</a></dt><dd><p>Cleanup the udev database.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm259796189424"></a><h3 id="udevadm trigger [options]">udevadm trigger [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20trigger%20%5Boptions%5D">¶</a></h3><p>Request device events from the kernel. Primarily used to replay events at system coldplug time.</p><div class="variablelist"><dl class="variablelist"><dt id="--verbose"><span class="term"><code class="option">--verbose</code></span><a class="headerlink" title="Permalink to this term" href="#--verbose">¶</a></dt><dd><p>Print the list of devices which will be triggered.</p></dd><dt id="--dry-run"><span class="term"><code class="option">--dry-run</code></span><a class="headerlink" title="Permalink to this term" href="#--dry-run">¶</a></dt><dd><p>Do not actually trigger the event.</p></dd><dt id="--type=type"><span class="term"><code class="option">--type=<em class="replaceable"><code>type</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--type=type">¶</a></dt><dd><p>Trigger a specific type of devices. Valid types are:
+ lives on.</p></dd><dt id="--export-db"><span class="term"><code class="option">--export-db</code></span><a class="headerlink" title="Permalink to this term" href="#--export-db">¶</a></dt><dd><p>Export the content of the udev database.</p></dd><dt id="--cleanup-db"><span class="term"><code class="option">--cleanup-db</code></span><a class="headerlink" title="Permalink to this term" href="#--cleanup-db">¶</a></dt><dd><p>Cleanup the udev database.</p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="#--version">¶</a></dt><dd><p>Print version.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm274700194000"></a><h3 id="udevadm trigger [options]">udevadm trigger [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20trigger%20%5Boptions%5D">¶</a></h3><p>Request device events from the kernel. Primarily used to replay events at system coldplug time.</p><div class="variablelist"><dl class="variablelist"><dt id="--verbose"><span class="term"><code class="option">--verbose</code></span><a class="headerlink" title="Permalink to this term" href="#--verbose">¶</a></dt><dd><p>Print the list of devices which will be triggered.</p></dd><dt id="--dry-run"><span class="term"><code class="option">--dry-run</code></span><a class="headerlink" title="Permalink to this term" href="#--dry-run">¶</a></dt><dd><p>Do not actually trigger the event.</p></dd><dt id="--type=type"><span class="term"><code class="option">--type=<em class="replaceable"><code>type</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--type=type">¶</a></dt><dd><p>Trigger a specific type of devices. Valid types are:
<span class="command"><strong>devices</strong></span>, <span class="command"><strong>subsystems</strong></span>.
The default value is <span class="command"><strong>devices</strong></span>.</p></dd><dt id="--action=action"><span class="term"><code class="option">--action=<em class="replaceable"><code>action</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--action=action">¶</a></dt><dd><p>Type of event to be triggered. The default value is <span class="command"><strong>change</strong></span>.</p></dd><dt id="--subsystem-match=subsystem"><span class="term"><code class="option">--subsystem-match=<em class="replaceable"><code>subsystem</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-match=subsystem">¶</a></dt><dd><p>Trigger events for devices which belong to a matching subsystem. This option
can be specified multiple times and supports shell style pattern matching.</p></dd><dt id="--subsystem-nomatch=subsystem"><span class="term"><code class="option">--subsystem-nomatch=<em class="replaceable"><code>subsystem</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-nomatch=subsystem">¶</a></dt><dd><p>Do not trigger events for devices which belong to a matching subsystem. This option
@@ -45,21 +45,21 @@
of the sysfs attribute is checked. This option can be specified multiple times.</p></dd><dt id="--property-match=property=value"><span class="term"><code class="option">--property-match=<em class="replaceable"><code>property</code></em>=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--property-match=property=value">¶</a></dt><dd><p>Trigger events for devices with a matching property value. This option can be
specified multiple times and supports shell style pattern matching.</p></dd><dt id="--tag-match=property"><span class="term"><code class="option">--tag-match=<em class="replaceable"><code>property</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--tag-match=property">¶</a></dt><dd><p>Trigger events for devices with a matching tag. This option can be
specified multiple times.</p></dd><dt id="--sysname-match=name"><span class="term"><code class="option">--sysname-match=<em class="replaceable"><code>name</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--sysname-match=name">¶</a></dt><dd><p>Trigger events for devices with a matching sys device name. This option can be
- specified multiple times and supports shell style pattern matching.</p></dd><dt id="--parent-match=syspath"><span class="term"><code class="option">--parent-match=<em class="replaceable"><code>syspath</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--parent-match=syspath">¶</a></dt><dd><p>Trigger events for all children of a given device.</p></dd></dl></div></div><div class="refsect2"><a name="idm259791534160"></a><h3 id="udevadm settle [options]">udevadm settle [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20settle%20%5Boptions%5D">¶</a></h3><p>Watches the udev event queue, and exits if all current events are handled.</p><div class="variablelist"><dl class="variablelist"><dt id="--timeout=seconds"><span class="term"><code class="option">--timeout=<em class="replaceable"><code>seconds</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=seconds">¶</a></dt><dd><p>Maximum number of seconds to wait for the event queue to become empty.
+ specified multiple times and supports shell style pattern matching.</p></dd><dt id="--parent-match=syspath"><span class="term"><code class="option">--parent-match=<em class="replaceable"><code>syspath</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--parent-match=syspath">¶</a></dt><dd><p>Trigger events for all children of a given device.</p></dd></dl></div></div><div class="refsect2"><a name="idm274703879968"></a><h3 id="udevadm settle [options]">udevadm settle [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20settle%20%5Boptions%5D">¶</a></h3><p>Watches the udev event queue, and exits if all current events are handled.</p><div class="variablelist"><dl class="variablelist"><dt id="--timeout=seconds"><span class="term"><code class="option">--timeout=<em class="replaceable"><code>seconds</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--timeout=seconds">¶</a></dt><dd><p>Maximum number of seconds to wait for the event queue to become empty.
The default value is 120 seconds. A value of 0 will check if the queue is empty
- and always return immediately.</p></dd><dt id="--seq-start=seqnum"><span class="term"><code class="option">--seq-start=<em class="replaceable"><code>seqnum</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--seq-start=seqnum">¶</a></dt><dd><p>Wait only for events after the given sequence number.</p></dd><dt id="--seq-end=seqnum"><span class="term"><code class="option">--seq-end=<em class="replaceable"><code>seqnum</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--seq-end=seqnum">¶</a></dt><dd><p>Wait only for events before the given sequence number.</p></dd><dt id="--exit-if-exists=file"><span class="term"><code class="option">--exit-if-exists=<em class="replaceable"><code>file</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--exit-if-exists=file">¶</a></dt><dd><p>Stop waiting if file exists.</p></dd><dt id="--quiet"><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#--quiet">¶</a></dt><dd><p>Do not print any output, like the remaining queue entries when reaching the timeout.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm259791521264"></a><h3 id="udevadm control command">udevadm control <em class="replaceable"><code>command</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20control%20command">¶</a></h3><p>Modify the internal state of the running udev daemon.</p><div class="variablelist"><dl class="variablelist"><dt id="--exit"><span class="term"><code class="option">--exit</code></span><a class="headerlink" title="Permalink to this term" href="#--exit">¶</a></dt><dd><p>Signal and wait for systemd-udevd to exit.</p></dd><dt id="--log-priority=value"><span class="term"><code class="option">--log-priority=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--log-priority=value">¶</a></dt><dd><p>Set the internal log level of systemd-udevd. Valid values are the numerical
+ and always return immediately.</p></dd><dt id="--seq-start=seqnum"><span class="term"><code class="option">--seq-start=<em class="replaceable"><code>seqnum</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--seq-start=seqnum">¶</a></dt><dd><p>Wait only for events after the given sequence number.</p></dd><dt id="--seq-end=seqnum"><span class="term"><code class="option">--seq-end=<em class="replaceable"><code>seqnum</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--seq-end=seqnum">¶</a></dt><dd><p>Wait only for events before the given sequence number.</p></dd><dt id="--exit-if-exists=file"><span class="term"><code class="option">--exit-if-exists=<em class="replaceable"><code>file</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--exit-if-exists=file">¶</a></dt><dd><p>Stop waiting if file exists.</p></dd><dt id="--quiet"><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="#--quiet">¶</a></dt><dd><p>Do not print any output, like the remaining queue entries when reaching the timeout.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm274703859344"></a><h3 id="udevadm control command">udevadm control <em class="replaceable"><code>command</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20control%20command">¶</a></h3><p>Modify the internal state of the running udev daemon.</p><div class="variablelist"><dl class="variablelist"><dt id="--exit"><span class="term"><code class="option">--exit</code></span><a class="headerlink" title="Permalink to this term" href="#--exit">¶</a></dt><dd><p>Signal and wait for systemd-udevd to exit.</p></dd><dt id="--log-priority=value"><span class="term"><code class="option">--log-priority=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--log-priority=value">¶</a></dt><dd><p>Set the internal log level of systemd-udevd. 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><dt id="--stop-exec-queue"><span class="term"><code class="option">--stop-exec-queue</code></span><a class="headerlink" title="Permalink to this term" href="#--stop-exec-queue">¶</a></dt><dd><p>Signal systemd-udevd to stop executing new events. Incoming events
will be queued.</p></dd><dt id="--start-exec-queue"><span class="term"><code class="option">--start-exec-queue</code></span><a class="headerlink" title="Permalink to this term" href="#--start-exec-queue">¶</a></dt><dd><p>Signal systemd-udevd to enable the execution of events.</p></dd><dt id="--reload"><span class="term"><code class="option">--reload</code></span><a class="headerlink" title="Permalink to this term" href="#--reload">¶</a></dt><dd><p>Signal systemd-udevd to reload the rules files and other databases like the kernel
module index. Reloading rules and databases does not apply any changes to already
existing devices; the new configuration will only be applied to new events.</p></dd><dt id="--property=KEY=value"><span class="term"><code class="option">--property=<em class="replaceable"><code>KEY</code></em>=<em class="replaceable"><code>value</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--property=KEY=value">¶</a></dt><dd><p>Set a global property for all events.</p></dd><dt id="--children-max=value"><span class="term"><code class="option">--children-max=</code><em class="replaceable"><code>value</code></em></span><a class="headerlink" title="Permalink to this term" href="#--children-max=value">¶</a></dt><dd><p>Set the maximum number of events, systemd-udevd will handle at the
- same time.</p></dd><dt id="--timeout=seconds"><span class="term"><code class="option">--timeout=</code><em class="replaceable"><code>seconds</code></em></span><a class="headerlink" title="Permalink to this term" href="#--timeout=seconds">¶</a></dt><dd><p>The maximum number of seconds to wait for a reply from systemd-udevd.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm259791501392"></a><h3 id="udevadm monitor [options]">udevadm monitor [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20monitor%20%5Boptions%5D">¶</a></h3><p>Listens to the kernel uevents and events sent out by a udev rule
+ same time.</p></dd><dt id="--timeout=seconds"><span class="term"><code class="option">--timeout=</code><em class="replaceable"><code>seconds</code></em></span><a class="headerlink" title="Permalink to this term" href="#--timeout=seconds">¶</a></dt><dd><p>The maximum number of seconds to wait for a reply from systemd-udevd.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm274702085920"></a><h3 id="udevadm monitor [options]">udevadm monitor [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20monitor%20%5Boptions%5D">¶</a></h3><p>Listens to the kernel uevents and events sent out by a udev rule
and prints the devpath of the event to the console. It can be used to analyze the
event timing, by comparing the timestamps of the kernel uevent and the udev event.
- </p><div class="variablelist"><dl class="variablelist"><dt id="--kernel"><span class="term"><code class="option">--kernel</code></span><a class="headerlink" title="Permalink to this term" href="#--kernel">¶</a></dt><dd><p>Print the kernel uevents.</p></dd><dt id="--udev"><span class="term"><code class="option">--udev</code></span><a class="headerlink" title="Permalink to this term" href="#--udev">¶</a></dt><dd><p>Print the udev event after the rule processing.</p></dd><dt id="--property"><span class="term"><code class="option">--property</code></span><a class="headerlink" title="Permalink to this term" href="#--property">¶</a></dt><dd><p>Also print the properties of the event.</p></dd><dt id="--subsystem-match=string[/string]"><span class="term"><code class="option">--subsystem-match=<em class="replaceable"><code>string[/string]</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-match=string%5B/string%5D">¶</a></dt><dd><p>Filter events by subsystem[/devtype]. Only udev events with a matching subsystem value will pass.</p></dd><dt id="--tag-match=string"><span class="term"><code class="option">--tag-match=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--tag-match=string">¶</a></dt><dd><p>Filter events by property. Only udev events with a given tag attached will pass.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm259791488752"></a><h3 id="udevadm hwdb [options]">udevadm hwdb [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20hwdb%20%5Boptions%5D">¶</a></h3><p>Maintain the hardware database index in <code class="filename">/etc/udev/hwdb.bin</code>.</p><div class="variablelist"><dl class="variablelist"><dt id="--update"><span class="term"><code class="option">--update</code></span><a class="headerlink" title="Permalink to this term" href="#--update">¶</a></dt><dd><p>Compile the hardware database information located in /usr/lib/udev/hwdb.d/,
+ </p><div class="variablelist"><dl class="variablelist"><dt id="--kernel"><span class="term"><code class="option">--kernel</code></span><a class="headerlink" title="Permalink to this term" href="#--kernel">¶</a></dt><dd><p>Print the kernel uevents.</p></dd><dt id="--udev"><span class="term"><code class="option">--udev</code></span><a class="headerlink" title="Permalink to this term" href="#--udev">¶</a></dt><dd><p>Print the udev event after the rule processing.</p></dd><dt id="--property"><span class="term"><code class="option">--property</code></span><a class="headerlink" title="Permalink to this term" href="#--property">¶</a></dt><dd><p>Also print the properties of the event.</p></dd><dt id="--subsystem-match=string[/string]"><span class="term"><code class="option">--subsystem-match=<em class="replaceable"><code>string[/string]</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem-match=string%5B/string%5D">¶</a></dt><dd><p>Filter events by subsystem[/devtype]. Only udev events with a matching subsystem value will pass.</p></dd><dt id="--tag-match=string"><span class="term"><code class="option">--tag-match=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--tag-match=string">¶</a></dt><dd><p>Filter events by property. Only udev events with a given tag attached will pass.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm274702072928"></a><h3 id="udevadm hwdb [options]">udevadm hwdb [<span class="optional">options</span>]<a class="headerlink" title="Permalink to this headline" href="#udevadm%20hwdb%20%5Boptions%5D">¶</a></h3><p>Maintain the hardware database index in <code class="filename">/etc/udev/hwdb.bin</code>.</p><div class="variablelist"><dl class="variablelist"><dt id="--update"><span class="term"><code class="option">--update</code></span><a class="headerlink" title="Permalink to this term" href="#--update">¶</a></dt><dd><p>Compile the hardware database information located in /usr/lib/udev/hwdb.d/,
/etc/udev/hwdb.d/ and store it in <code class="filename">/etc/udev/hwdb.bin</code>. This should be done after
any update to the source files; it will not be called automatically. The running
udev daemon will detect a new database on its own and does not need to be
notified about it.</p></dd><dt id="--test=string"><span class="term"><code class="option">--test=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--test=string">¶</a></dt><dd><p>Query the database with a modalias string, and print the
- retrieved properties.</p></dd><dt id="--root=string"><span class="term"><code class="option">--root=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--root=string">¶</a></dt><dd><p>Alternative root path in the filesystem for reading and writing files.</p></dd></dl></div></div><div class="refsect2"><a name="idm259791479824"></a><h3 id="udevadm test [options] devpath">udevadm test [<span class="optional">options</span>] <em class="replaceable"><code>devpath</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20test%20%5Boptions%5D%20devpath">¶</a></h3><p>Simulate a udev event run for the given device, and print debug output.</p><div class="variablelist"><dl class="variablelist"><dt id="--action=string"><span class="term"><code class="option">--action=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--action=string">¶</a></dt><dd><p>The action string.</p></dd><dt id="--subsystem=string"><span class="term"><code class="option">--subsystem=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem=string">¶</a></dt><dd><p>The subsystem string.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm259791472272"></a><h3 id="udevadm test-builtin [options] command devpath">udevadm test-builtin [<span class="optional">options</span>] <em class="replaceable"><code>command</code></em> <em class="replaceable"><code>devpath</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20test-builtin%20%5Boptions%5D%20command%20devpath">¶</a></h3><p>Run a built-in command for the given device, and print debug output.</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div></div><div class="refsect1"><a name="idm259791468048"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>
+ retrieved properties.</p></dd><dt id="--root=string"><span class="term"><code class="option">--root=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--root=string">¶</a></dt><dd><p>Alternative root path in the filesystem for reading and writing files.</p></dd></dl></div></div><div class="refsect2"><a name="idm274702063648"></a><h3 id="udevadm test [options] devpath">udevadm test [<span class="optional">options</span>] <em class="replaceable"><code>devpath</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20test%20%5Boptions%5D%20devpath">¶</a></h3><p>Simulate a udev event run for the given device, and print debug output.</p><div class="variablelist"><dl class="variablelist"><dt id="--action=string"><span class="term"><code class="option">--action=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--action=string">¶</a></dt><dd><p>The action string.</p></dd><dt id="--subsystem=string"><span class="term"><code class="option">--subsystem=<em class="replaceable"><code>string</code></em></code></span><a class="headerlink" title="Permalink to this term" href="#--subsystem=string">¶</a></dt><dd><p>The subsystem string.</p></dd><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div><div class="refsect2"><a name="idm274702055744"></a><h3 id="udevadm test-builtin [options] command devpath">udevadm test-builtin [<span class="optional">options</span>] <em class="replaceable"><code>command</code></em> <em class="replaceable"><code>devpath</code></em><a class="headerlink" title="Permalink to this headline" href="#udevadm%20test-builtin%20%5Boptions%5D%20command%20devpath">¶</a></h3><p>Run a built-in command for the given device, and print debug output.</p><div class="variablelist"><dl class="variablelist"><dt id="--help"><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="#--help">¶</a></dt><dd><p>Print help text.</p></dd></dl></div></div></div><div class="refsect1"><a name="idm274702051328"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p><a href="udev.html"><span class="citerefentry"><span class="refentrytitle">udev</span>(7)</span></a>
<a href="systemd-udevd.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-udevd.service</span>(8)</span></a></p></div></div></body></html>
diff --git a/man/vconsole.conf.5 b/man/vconsole.conf.5
new file mode 100644
index 0000000000..f602e8719f
--- /dev/null
+++ b/man/vconsole.conf.5
@@ -0,0 +1,89 @@
+'\" t
+.TH "VCONSOLE\&.CONF" "5" "" "systemd 208" "vconsole.conf"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+vconsole.conf \- Configuration file for the virtual console
+.SH "SYNOPSIS"
+.PP
+/etc/vconsole\&.conf
+.SH "DESCRIPTION"
+.PP
+The
+/etc/vconsole\&.conf
+file configures the virtual console, i\&.e\&. keyboard mapping and console font\&. It is applied at boot by
+\fBsystemd-vconsole-setup.service\fR(8)\&.
+.PP
+The basic file format of the
+vconsole\&.conf
+is a newline\-separated list of environment\-like shell\-compatible variable assignments\&. It is possible to source the configuration from shell scripts, however, beyond mere variable assignments no shell features are supported, allowing applications to read the file without implementing a shell compatible execution engine\&.
+.PP
+Note that the kernel command line options
+\fIvconsole\&.keymap=\fR,
+\fIvconsole\&.keymap\&.toggle=\fR,
+\fIvconsole\&.font=\fR,
+\fIvconsole\&.font\&.map=\fR,
+\fIvconsole\&.font\&.unimap=\fR
+may be used to override the console settings at boot\&.
+.PP
+Depending on the operating system other configuration files might be checked for configuration of the virtual console as well, however only as fallback\&.
+.SH "OPTIONS"
+.PP
+The following options are understood:
+.PP
+\fIKEYMAP=\fR, \fIKEYMAP_TOGGLE=\fR
+.RS 4
+Configures the key mapping table for the keyboard\&.
+\fIKEYMAP=\fR
+defaults to
+"us"
+if not set\&. The
+\fIKEYMAP_TOGGLE=\fR
+can be used to configure a second toggle keymap and is by default unset\&.
+.RE
+.PP
+\fIFONT=\fR, \fIFONT_MAP=\fR, \fIFONT_UNIMAP=\fR
+.RS 4
+Configures the console font, the console map and the unicode font map\&.
+.RE
+.SH "EXAMPLE"
+.PP
+\fBExample\ \&1.\ \&German keyboard and console\fR
+.PP
+/etc/vconsole\&.conf:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+KEYMAP=de\-latin1
+FONT=latarcyrheb\-sun16
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+\fBsystemd\fR(1),
+\fBsystemd-vconsole-setup.service\fR(8),
+\fBloadkeys\fR(1),
+\fBsetfont\fR(8),
+\fBlocale.conf\fR(5),
+\fBsystemd-localed.service\fR(8)
diff --git a/man/vconsole.conf.html b/man/vconsole.conf.html
index 4ae2cdfbb5..87a224bf97 100644
--- a/man/vconsole.conf.html
+++ b/man/vconsole.conf.html
@@ -19,7 +19,7 @@
<a href="systemd.directives.html">Directives </a>·
<a href="../python-systemd/index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
- <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 204</span><hr><div class="refentry"><a name="vconsole.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vconsole.conf — Configuration file for the virtual console</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/vconsole.conf</code></p></div><div class="refsect1"><a name="idm259768387248"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/vconsole.conf</code> file
+ <a href="../libudev/index.html">gudev </a><span style="float:right">systemd 208</span><hr><div class="refentry"><a name="vconsole.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vconsole.conf — Configuration file for the virtual console</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">/etc/vconsole.conf</code></p></div><div class="refsect1"><a name="idm274688251456"></a><h2 id="Description">Description<a class="headerlink" title="Permalink to this headline" href="#Description">¶</a></h2><p>The <code class="filename">/etc/vconsole.conf</code> file
configures the virtual console, i.e. keyboard mapping
and console font. It is applied at boot by
<a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a>.</p><p>The basic file format of the
@@ -39,18 +39,18 @@
to override the console settings at boot.</p><p>Depending on the operating system other
configuration files might be checked for configuration
of the virtual console as well, however only as
- fallback.</p></div><div class="refsect1"><a name="idm259764617840"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="KEYMAP="><span class="term"><code class="varname">KEYMAP=</code>, </span><span class="term"><code class="varname">KEYMAP_TOGGLE=</code></span><a class="headerlink" title="Permalink to this term" href="#KEYMAP=">¶</a></dt><dd><p>Configures the key
+ fallback.</p></div><div class="refsect1"><a name="idm274688243808"></a><h2 id="Options">Options<a class="headerlink" title="Permalink to this headline" href="#Options">¶</a></h2><p>The following options are understood:</p><div class="variablelist"><dl class="variablelist"><dt id="KEYMAP="><span class="term"><code class="varname">KEYMAP=</code>, </span><span class="term"><code class="varname">KEYMAP_TOGGLE=</code></span><a class="headerlink" title="Permalink to this term" href="#KEYMAP=">¶</a></dt><dd><p>Configures the key
mapping table for the
keyboard. <code class="varname">KEYMAP=</code>
- defaults to <code class="literal">us</code> if
+ defaults to "<code class="literal">us</code>" if
not set. The
<code class="varname">KEYMAP_TOGGLE=</code> can
be used to configure a second toggle
keymap and is by default
unset.</p></dd><dt id="FONT="><span class="term"><code class="varname">FONT=</code>, </span><span class="term"><code class="varname">FONT_MAP=</code>, </span><span class="term"><code class="varname">FONT_UNIMAP=</code></span><a class="headerlink" title="Permalink to this term" href="#FONT=">¶</a></dt><dd><p>Configures the console
font, the console map and the unicode
- font map.</p></dd></dl></div></div><div class="refsect1"><a name="idm259764609712"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm259764609040"></a><p class="title"><b>Example 1. German keyboard and console</b></p><div class="example-contents"><p><code class="filename">/etc/vconsole.conf</code>:</p><pre class="programlisting">KEYMAP=de-latin1
-FONT=latarcyrheb-sun16</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm259764606448"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
+ font map.</p></dd></dl></div></div><div class="refsect1"><a name="idm274692140304"></a><h2 id="Example">Example<a class="headerlink" title="Permalink to this headline" href="#Example">¶</a></h2><div class="example"><a name="idm274692139632"></a><p class="title"><b>Example 1. German keyboard and console</b></p><div class="example-contents"><p><code class="filename">/etc/vconsole.conf</code>:</p><pre class="programlisting">KEYMAP=de-latin1
+FONT=latarcyrheb-sun16</pre></div></div><br class="example-break"></div><div class="refsect1"><a name="idm274692137040"></a><h2 id="See Also">See Also<a class="headerlink" title="Permalink to this headline" href="#See%20Also">¶</a></h2><p>
<a href="systemd.html"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
<a href="systemd-vconsole-setup.service.html"><span class="citerefentry"><span class="refentrytitle">systemd-vconsole-setup.service</span>(8)</span></a>,
<a href="loadkeys.html"><span class="citerefentry"><span class="refentrytitle">loadkeys</span>(1)</span></a>,
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 0502c13023..b552029b82 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -5,12 +5,14 @@ src/core/dbus-manager.c
src/core/dbus-mount.c
src/core/dbus-path.c
src/core/dbus-service.c
+src/core/dbus-slice.c
src/core/dbus-snapshot.c
src/core/dbus-socket.c
src/core/dbus-swap.c
src/core/dbus-target.c
src/core/dbus-timer.c
src/core/dbus-unit.c
+src/core/dbus-scope.c
src/hostname/hostnamed.c
src/locale/localed.c
src/core/org.freedesktop.systemd1.policy.in
diff --git a/rules/60-keyboard.rules b/rules/60-keyboard.rules
new file mode 100644
index 0000000000..4e0f3663f6
--- /dev/null
+++ b/rules/60-keyboard.rules
@@ -0,0 +1,22 @@
+# do not edit this file, it will be overwritten on update
+
+ACTION!="add", GOTO="keyboard_end"
+KERNEL!="event*", GOTO="keyboard_end"
+ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
+
+# ignore all bluetooth devices
+SUBSYSTEMS=="bluetooth", GOTO="keyboard_end"
+
+# import key mapping for USB device
+SUBSYSTEMS=="usb", IMPORT{builtin}="hwdb --subsystem=usb --lookup-prefix=keyboard:", \
+ RUN{builtin}+="keyboard", GOTO="keyboard_end"
+
+# import key mapping for AT keyboard from DMI data
+DRIVERS=="atkbd", IMPORT{builtin}="hwdb 'keyboard:$attr{[dmi/id]modalias}'", \
+ RUN{builtin}+="keyboard", GOTO="keyboard_end"
+
+# import key mapping for platform input device
+KERNELS=="input*", IMPORT{builtin}="hwdb 'keyboard:name:$attr{name}:$attr{[dmi/id]modalias}'", \
+ RUN{builtin}+="keyboard", GOTO="keyboard_end"
+
+LABEL="keyboard_end"
diff --git a/rules/75-net-description.rules b/rules/75-net-description.rules
index fe9fca14db..7e62f8b26b 100644
--- a/rules/75-net-description.rules
+++ b/rules/75-net-description.rules
@@ -4,11 +4,11 @@ ACTION=="remove", GOTO="net_end"
SUBSYSTEM!="net", GOTO="net_end"
IMPORT{builtin}="net_id"
+
SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
SUBSYSTEMS=="usb", GOTO="net_end"
SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
-
-IMPORT{builtin}="hwdb"
+SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci"
LABEL="net_end"
diff --git a/rules/75-tty-description.rules b/rules/75-tty-description.rules
index 83083d93ea..11277b7d6f 100644
--- a/rules/75-tty-description.rules
+++ b/rules/75-tty-description.rules
@@ -7,7 +7,6 @@ SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=u
SUBSYSTEMS=="usb", GOTO="tty_end"
SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}"
-
-IMPORT{builtin}="hwdb"
+SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci"
LABEL="tty_end"
diff --git a/rules/80-drivers.rules b/rules/80-drivers.rules
index 50523e4333..0b22d73ce5 100644
--- a/rules/80-drivers.rules
+++ b/rules/80-drivers.rules
@@ -2,7 +2,7 @@
ACTION=="remove", GOTO="drivers_end"
-DRIVER!="?*", ENV{MODALIAS}=="?*", RUN{builtin}="kmod load $env{MODALIAS}"
+ENV{MODALIAS}=="?*", RUN{builtin}="kmod load $env{MODALIAS}"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}="kmod load tifm_sd"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}="kmod load tifm_ms"
SUBSYSTEM=="memstick", RUN{builtin}="kmod load ms_block mspro_block"
diff --git a/rules/80-net-name-slot.rules b/rules/80-net-name-slot.rules
index 15b5bc4107..c5f1b3885b 100644
--- a/rules/80-net-name-slot.rules
+++ b/rules/80-net-name-slot.rules
@@ -1,6 +1,6 @@
# do not edit this file, it will be overwritten on update
-ACTION=="remove", GOTO="net_name_slot_end"
+ACTION!="add", GOTO="net_name_slot_end"
SUBSYSTEM!="net", GOTO="net_name_slot_end"
NAME!="", GOTO="net_name_slot_end"
diff --git a/rules/99-systemd.rules b/rules/99-systemd.rules
index 2422a885d2..b4f803b848 100644
--- a/rules/99-systemd.rules
+++ b/rules/99-systemd.rules
@@ -49,7 +49,11 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:
# Apply sysctl variables to network devices (and only to those) as they appear.
-SUBSYSTEM=="net", KERNEL!="lo", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
+ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
+
+# Pull in backlight save/restore for all firmware backlight devices
+
+ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
# Asynchronously mount file systems implemented by these modules as
# soon as they are loaded.
diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
index d17bdd9a0a..bbb7d0c2c3 100644
--- a/rules/99-systemd.rules.in
+++ b/rules/99-systemd.rules.in
@@ -49,7 +49,11 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:
# Apply sysctl variables to network devices (and only to those) as they appear.
-SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
+ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sysctl --prefix=/proc/sys/net/ipv4/conf/$name --prefix=/proc/sys/net/ipv4/neigh/$name --prefix=/proc/sys/net/ipv6/conf/$name --prefix=/proc/sys/net/ipv6/neigh/$name"
+
+# Pull in backlight save/restore for all firmware backlight devices
+
+ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service"
# Asynchronously mount file systems implemented by these modules as
# soon as they are loaded.
diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl
index a57bffe15f..38ab1344f3 100644
--- a/shell-completion/bash/hostnamectl
+++ b/shell-completion/bash/hostnamectl
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
_hostnamectl() {
diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl
index 19362ae77b..3c40d57a98 100644
--- a/shell-completion/bash/journalctl
+++ b/shell-completion/bash/journalctl
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
__journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
@@ -37,18 +38,22 @@ __journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
_journalctl() {
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
- [STANDALONE]='-a --all --full
- -b --this-boot --disk-usage -f --follow --header
+ [STANDALONE]='-a --all --full --system --user
+ --disk-usage -f --follow --header
-h --help -l --local --new-id128 -m --merge --no-pager
--no-tail -q --quiet --setup-keys --this-boot --verify
--version --list-catalog --update-catalog'
- [ARG]='-D --directory -F --field -o --output -u --unit --user-unit'
+ [ARG]='-b --boot --this-boot -D --directory -F --field
+ -o --output -u --unit --user-unit'
[ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until
--verify-key'
)
if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
case $prev in
+ --boot|--this-boot|-b)
+ comps=$(journalctl -F '_BOOT_ID' 2>/dev/null)
+ ;;
--directory|-D)
comps=$(compgen -d -- "$cur")
compopt -o filenames
diff --git a/shell-completion/bash/kernel-install b/shell-completion/bash/kernel-install
new file mode 100644
index 0000000000..7cd2494cf7
--- /dev/null
+++ b/shell-completion/bash/kernel-install
@@ -0,0 +1,50 @@
+# kernel-install(8) completion -*- shell-script -*-
+#
+# This file is part of systemd.
+#
+# Copyright 2013 Kay Sievers
+# Copyright 2013 Harald Hoyer
+#
+# 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.
+#
+# 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.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+
+_kernel_install() {
+ local comps
+ local MACHINE_ID
+ local cur=${COMP_WORDS[COMP_CWORD]}
+
+ case $COMP_CWORD in
+ 1)
+ comps="add remove"
+ ;;
+ 2)
+ comps=$(cd /lib/modules; echo [0-9]*)
+ if [[ ${COMP_WORDS[1]} == "remove" ]] && [[ -f /etc/machine-id ]]; then
+ read MACHINE_ID < /etc/machine-id
+ if [[ $MACHINE_ID ]] && ( [[ -d /boot/$MACHINE_ID ]] || [[ -L /boot/$MACHINE_ID ]] ); then
+ comps=$(cd "/boot/$MACHINE_ID"; echo [0-9]*)
+ fi
+ fi
+ ;;
+ 3)
+ [[ "$cur" ]] || cur=/boot/vmlinuz-${COMP_WORDS[2]}
+ comps=$(compgen -f -- "$cur")
+ compopt -o filenames
+ ;;
+ esac
+
+ COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+ return 0
+}
+
+complete -F _kernel_install kernel-install
diff --git a/shell-completion/bash/localectl b/shell-completion/bash/localectl
index ef19f01461..bec9e78c64 100644
--- a/shell-completion/bash/localectl
+++ b/shell-completion/bash/localectl
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
_localectl() {
diff --git a/shell-completion/bash/loginctl b/shell-completion/bash/loginctl
index 1844085d49..3104b305fa 100644
--- a/shell-completion/bash/loginctl
+++ b/shell-completion/bash/loginctl
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
__get_all_sessions () { loginctl list-sessions | { while read -r a b; do printf "%s\n" "$a"; done; } ; }
diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl
index 191b8d13ec..e335ee871c 100644
--- a/shell-completion/bash/systemctl
+++ b/shell-completion/bash/systemctl
@@ -32,9 +32,10 @@ __systemd_properties() {
}
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
__filter_units_by_property () {
@@ -70,10 +71,10 @@ _systemctl () {
local i verb comps mode
local -A OPTS=(
- [STANDALONE]='--all -a --reverse --after --before --defaults --fail --ignore-dependencies --failed --force -f --full --global
+ [STANDALONE]='--all -a --reverse --after --before --defaults --fail --ignore-dependencies --failed --force -f --full -l --global
--help -h --no-ask-password --no-block --no-legend --no-pager --no-reload --no-wall
--quiet -q --privileged -P --system --user --version --runtime'
- [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --root'
+ [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --state --root'
)
if __contains_word "--user" ${COMP_WORDS[*]}; then
@@ -90,6 +91,11 @@ _systemctl () {
--type|-t)
comps='automount device mount path service snapshot socket swap target timer'
;;
+ --state)
+ comps='loaded not-found stub
+ active inactive
+ dead elapsed exited listening mounted plugged running waiting'
+ ;;
--kill-who)
comps='all control main'
;;
@@ -133,10 +139,11 @@ _systemctl () {
[ENVS]='set-environment unset-environment'
[STANDALONE]='daemon-reexec daemon-reload default dump
emergency exit halt hibernate hybrid-sleep kexec list-jobs
- list-units list-unit-files poweroff reboot rescue
- show-environment suspend'
+ list-sockets list-units list-unit-files poweroff reboot rescue
+ show-environment suspend get-default'
[NAME]='snapshot load'
[FILE]='link'
+ [TARGETS]='set-default'
)
for ((i=0; $i <= $COMP_CWORD; i++)); do
@@ -210,6 +217,9 @@ _systemctl () {
elif __contains_word "$verb" ${VERBS[FILE]}; then
comps=$( compgen -A file -- "$cur" )
compopt -o filenames
+ elif __contains_word "$verb" ${VERBS[TARGETS]}; then
+ comps=$( __systemctl $mode list-unit-files --type target --full --all \
+ | { while read -r a b; do echo " $a"; done; } )
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze
index 11276ef09c..5bd676866b 100644
--- a/shell-completion/bash/systemd-analyze
+++ b/shell-completion/bash/systemd-analyze
@@ -19,9 +19,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
_systemd_analyze() {
@@ -33,6 +34,7 @@ _systemd_analyze() {
[NO_OPTION]='time blame plot'
[CRITICAL_CHAIN]='critical-chain'
[DOT]='dot'
+ [LOG_LEVEL]='set-log-level'
)
_init_completion || return
@@ -67,6 +69,14 @@ _systemd_analyze() {
if [[ $cur = -* ]]; then
comps='--help --version --system --user --from-pattern --to-pattern --order --require'
fi
+
+ elif __contains_word "$verb" ${VERBS[LOG_LEVEL]}; then
+ if [[ $cur = -* ]]; then
+ comps='--help --version --system --user'
+ else
+ comps='debug info notice warning err crit alert emerg'
+ fi
+
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
diff --git a/shell-completion/bash/systemd-coredumpctl b/shell-completion/bash/systemd-coredumpctl
index 4bbece7347..805e84824e 100644
--- a/shell-completion/bash/systemd-coredumpctl
+++ b/shell-completion/bash/systemd-coredumpctl
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
__journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
diff --git a/shell-completion/bash/systemd-run b/shell-completion/bash/systemd-run
new file mode 100644
index 0000000000..ab55274233
--- /dev/null
+++ b/shell-completion/bash/systemd-run
@@ -0,0 +1,63 @@
+# systemd-run(1) completion -*- shell-script -*-
+#
+# This file is part of systemd.
+#
+# Copyright 2013 Zbigniew Jędrzejewski-Szmek
+#
+# 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.
+#
+# 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.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <http://www.gnu.org/licenses/>.
+
+__systemctl() {
+ local mode=$1; shift 1
+ systemctl $mode --full --no-legend "$@"
+}
+
+__get_slice_units () { __systemctl $1 list-units --all -t slice \
+ | { while read -r a b c d; do echo " $a"; done; }; }
+
+_systemd_run() {
+ local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
+ local OPTS='-h --help --version --user --scope --unit --description --slice -r --remain-after-exit --send-sighup'
+
+ local mode=--system
+ local i
+ for (( i=1; i <= COMP_CWORD; i++ )); do
+ if [[ ${COMP_WORDS[i]} != -* ]]; then
+ local root_command=${COMP_WORDS[i]}
+ _command_offset $i
+ return
+ fi
+
+ [[ ${COMP_WORDS[i]} == "--user" ]] && mode=--user
+
+ [[ $i -lt $COMP_CWORD && ${COMP_WORDS[i]} == @(--unit|--description|--slice) ]] && ((i++))
+ done
+
+ case "$prev" in
+ --unit|--description)
+ # argument required but no completions available
+ return
+ ;;
+ --slice)
+ local comps=$(__get_slice_units $mode)
+
+ COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+ return 0
+ ;;
+ esac
+
+ COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+ return 0
+}
+
+complete -F _systemd_run systemd-run
diff --git a/shell-completion/bash/timedatectl b/shell-completion/bash/timedatectl
index 2842b31069..c6a6545257 100644
--- a/shell-completion/bash/timedatectl
+++ b/shell-completion/bash/timedatectl
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
_timedatectl() {
diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm
index 123fb51633..8ad855060c 100644
--- a/shell-completion/bash/udevadm
+++ b/shell-completion/bash/udevadm
@@ -18,9 +18,10 @@
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
__get_all_sysdevs() {
@@ -33,68 +34,61 @@ _udevadm() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local OPTS='-h --help --version --debug'
- local -A VERBS=(
- [INFO]='info'
- [TRIGGER]='trigger'
- [SETTLE]='settle'
- [CONTROL]='control'
- [MONITOR]='monitor'
- [HWDB]='hwdb'
- [TESTBUILTIN]='test-builtin'
- [TEST]='test'
- )
+ local verbs=(info trigger settle control monitor hwdb test-builtin test)
- for ((i=0; $i <= $COMP_CWORD; i++)); do
- if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
+ for ((i=0; i <= COMP_CWORD; i++)); do
+ if __contains_word "${COMP_WORDS[i]}" "${verbs[@]}" &&
! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
verb=${COMP_WORDS[i]}
break
fi
done
- if [[ -z $verb && $cur = -* ]]; then
- COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+ if [[ -z $verb ]]; then
+ COMPREPLY=( $(compgen -W '${OPTS[*]} ${verbs[*]}' -- "$cur") )
return 0
fi
- if [[ -z $verb ]]; then
- comps=${VERBS[*]}
-
- elif __contains_word "$verb" ${VERBS[INFO]}; then
- if [[ $cur = -* ]]; then
- comps='--help --query= --path= --name= --root --attribute-walk --export-db --cleanup-db'
- else
- comps=$( __get_all_sysdevs )
- fi
-
- elif __contains_word "$verb" ${VERBS[TRIGGER]}; then
- comps='--help --verbose --dry-run --type= --action= --subsystem-match=
- --subsystem-nomatch= --attr-match= --attr-nomatch= --property-match=
- --tag-match= --sysname-match= --parent-match='
-
- elif __contains_word "$verb" ${VERBS[SETTLE]}; then
- comps='--help --timeout= --seq-start= --seq-end= --exit-if-exists= --quiet'
-
- elif __contains_word "$verb" ${VERBS[CONTROL]}; then
- comps='--help --exit --log-priority= --stop-exec-queue --start-exec-queue
- --reload --property= --children-max= --timeout='
-
- elif __contains_word "$verb" ${VERBS[MONITOR]}; then
- comps='--help --kernel --udev --property --subsystem-match= --tag-match='
-
- elif __contains_word "$verb" ${VERBS[HWDB]}; then
- comps='--help --update --test='
-
- elif __contains_word "$verb" ${VERBS[TEST]}; then
- if [[ $cur = -* ]]; then
- comps='--help --action='
- else
- comps=$( __get_all_sysdevs )
- fi
-
- elif __contains_word "$verb" ${VERBS[TESTBUILTIN]}; then
- comps='blkid btrfs hwdb input_id kmod net_id path_id usb_id uaccess'
- fi
+ case $verb in
+ 'info')
+ if [[ $cur = -* ]]; then
+ comps='--help --query= --path= --name= --root --attribute-walk --export-db --cleanup-db'
+ else
+ comps=$( __get_all_sysdevs )
+ fi
+ ;;
+ 'trigger')
+ comps='--help --verbose --dry-run --type= --action= --subsystem-match=
+ --subsystem-nomatch= --attr-match= --attr-nomatch= --property-match=
+ --tag-match= --sysname-match= --parent-match='
+ ;;
+ 'settle')
+ comps='--help --timeout= --seq-start= --seq-end= --exit-if-exists= --quiet'
+ ;;
+ 'control')
+ comps='--help --exit --log-priority= --stop-exec-queue --start-exec-queue
+ --reload --property= --children-max= --timeout='
+ ;;
+ 'monitor')
+ comps='--help --kernel --udev --property --subsystem-match= --tag-match='
+ ;;
+ 'hwdb')
+ comps='--help --update --test='
+ ;;
+ 'test')
+ if [[ $cur = -* ]]; then
+ comps='--help --action='
+ else
+ comps=$( __get_all_sysdevs )
+ fi
+ ;;
+ 'test-builtin')
+ comps='blkid btrfs hwdb input_id keyboard kmod net_id path_id usb_id uaccess'
+ ;;
+ *)
+ comps=${VERBS[*]}
+ ;;
+ esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
diff --git a/shell-completion/systemd-zsh-completion.zsh b/shell-completion/systemd-zsh-completion.zsh
deleted file mode 100644
index 411646ea59..0000000000
--- a/shell-completion/systemd-zsh-completion.zsh
+++ /dev/null
@@ -1,1052 +0,0 @@
-#compdef systemctl loginctl journalctl hostnamectl localectl timedatectl systemd-coredumpctl udevadm systemd-analyze systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-delta systemd-detect-virt systemd-inhibit systemd-machine-id-setup systemd-notify systemd-nspawn systemd-tmpfiles systemd-tty-ask-password-agent
-
-_ctls()
-{
- local curcontext="$curcontext" state lstate line
- case "$service" in
- systemctl)
- # -s for aggregated options like -aP
- _arguments -s \
- {-h,--help}'[Show help]' \
- '--version[Show package version]' \
- {-t,--type=}'[List only units of a particular type]:unit type:(automount device mount path service snapshot socket swap target timer)' \
- \*{-p,--property=}'[Show only properties by specific name]:unit property' \
- {-a,--all}'[Show all units/properties, including dead/empty ones]' \
- '--reverse[Show reverse dependencies]' \
- '--after[Show units ordered after]' \
- '--before[Show units ordered before]' \
- '--failed[Show only failed units]' \
- "--full[Don't ellipsize unit names on output]" \
- '--fail[When queueing a new job, fail if conflicting jobs are pending]' \
- '--ignore-dependencies[When queueing a new job, ignore all its dependencies]' \
- '--kill-who=[Who to send signal to]:killwho:(main control all)' \
- {-s,--signal=}'[Which signal to send]:signal:_signals' \
- {-H,--host=}'[Show information for remote host]:userathost:_hosts_or_user_at_host' \
- {-P,--privileged}'[Acquire privileges before execution]' \
- {-q,--quiet}'[Suppress output]' \
- '--no-block[Do not wait until operation finished]' \
- "--no-wall[Don't send wall message before halt/power-off/reboot]" \
- "--no-reload[When enabling/disabling unit files, don't reload daemon configuration]" \
- '--no-legend[Do not print a legend, i.e. the column headers and the footer with hints]' \
- '--no-pager[Do not pipe output into a pager]' \
- '--no-ask-password[Do not ask for system passwords]' \
- '--system[Connect to system manager]' \
- '--user[Connect to user service manager]' \
- '--global[Enable/disable unit files globally]' \
- {-f,--force}'[When enabling unit files, override existing symlinks. When shutting down, execute action immediately]' \
- '--root=[Enable unit files in the specified root directory]:directory:_directories' \
- '--runtime[Enable unit files only temporarily until next reboot]' \
- {-n,--lines=}'[Journal entries to show]:number of entries' \
- {-o,--output=}'[Change journal output mode]:modes:_outputmodes' \
- '*::systemctl command:_systemctl_command'
- ;;
- loginctl)
- _arguments -s \
- {-h,--help}'[Show help]' \
- '--version[Show package version]' \
- \*{-p,--property=}'[Show only properties by this name]:unit property' \
- {-a,--all}'[Show all properties, including empty ones]' \
- '--kill-who=[Who to send signal to]:killwho:(main control all)' \
- {-s,--signal=}'[Which signal to send]:signal:_signals' \
- '--no-ask-password[Do not ask for system passwords]' \
- {-H,--host=}'[Show information for remote host]:userathost:_hosts_or_user_at_host' \
- {-P,--privileged}'[Acquire privileges before execution]' \
- '--no-pager[Do not pipe output into a pager]' \
- '*::loginctl command:_loginctl_command'
- ;;
-
- hostnamectl)
- _arguments -s \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--transient[Only set transient hostname]' \
- '--static[Only set static hostname]' \
- '--pretty[Only set pretty hostname]' \
- '--no-ask-password[Do not prompt for password]' \
- {-H,--host=}'[Operate on remote host]:userathost:_hosts_or_user_at_host' \
- '*::hostnamectl commands:_hostnamectl_command'
- ;;
- journalctl)
- _arguments -s \
- '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
- '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
- {-c,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
- {-b,--this-boot}'[Show data only from current boot]' \
- {-u,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
- '--user-unit[Show data only from the specified user session unit]:units:_journal_fields _SYSTEMD_USER_UNIT' \
- {-p,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
- {-f,--follow}'[Follow journal]' \
- {-n,--lines=}'[Number of journal entries to show]:integer' \
- '--no-tail[Show all lines, even in follow mode]' \
- {-o,--output=}'[Change journal output mode]:output modes:_outputmodes' \
- '--full[Show long fields in full]' \
- {-a,--all}'[Show all fields, including long and unprintable]' \
- {-q,--quiet}"[Don't show privilege warning]" \
- '--no-pager[Do not pipe output into a pager]' \
- {-m,--merge}'[Show entries from all available journals]' \
- {-D,--directory=}'[Show journal files from directory]:directories:_directories' \
- '--interval=[Time interval for changing the FSS sealing key]:time interval' \
- '--verify-key=[Specify FSS verification key]:FSS key' \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--new-id128[Generate a new 128 Bit ID]' \
- '--header[Show journal header information]' \
- '--disk-usage[Show total disk usage]' \
- {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \
- '--setup-keys[Generate new FSS key pair]' \
- '--verify[Verify journal file consistency]' \
- '--list-catalog[List messages in catalog]' \
- '--update-catalog[Update binary catalog database]' \
- '*::default: _journal_none'
- ;;
- localectl)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- "--no-convert[Don't convert keyboard mappings]" \
- '--no-pager[Do not pipe output into a pager]' \
- '--no-ask-password[Do not prompt for password]' \
- {-H,--host=}'[Operate on remote host]:userathost:_hosts_or_user_at_host' \
- '*::localectl commands:_localectl_command'
- ;;
- systemd-coredumpctl)
- _arguments \
- {-o,--output=}'[Write output to FILE]:output file:_files' \
- '--no-pager[Do not pipe output into a pager]' \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '*::systemd-coredumpctl commands:_systemd-coredumpctl_command'
-
- ;;
- timedatectl)
- _arguments -s \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--adjust-system-clock[Adjust system clock when changing local RTC mode]' \
- '--no-pager[Do not pipe output into a pager]' \
- '--no-ask-password[Do not prompt for password]' \
- {-H,--host=}'[Operate on remote host]:userathost:_hosts_or_user_at_host' \
- '*::timedatectl commands:_timedatectl_command'
- ;;
- udevadm)
- _arguments \
- '--debug[Print debug messages to stderr]' \
- '--version[Print version number]' \
- '--help[Print help text]' \
- '*::udevadm commands:_udevadm_command'
- ;;
- systemd-analyze)
- _arguments \
- {-h,--help}'[Show help text.]' \
- '--user[Shows performance data of user sessions instead of the system manager.]' \
- '--order[When generating graph for dot, show only order]' \
- '--require[When generating graph for dot, show only requirement]' \
- '*::systemd-analyze commands:_systemd_analyze_command'
- ;;
- systemd-ask-password)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--icon=[Icon name]' \
- '--timeout=[Timeout in sec]' \
- '--no-tty[Ask question via agent even on TTY]' \
- '--accept-cached[Accept cached passwords]' \
- '--multiple[List multiple passwords if available]'
- ;;
- systemd-cat)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version.]' \
- {-t,--identifier=}'[Set syslog identifier.]' \
- {-p,--priority=}'[Set priority value.]:value:({0..7})' \
- '--level-prefix=[Control whether level prefix shall be parsed.]:boolean:(1 0)' \
- ':Message'
- ;;
- systemd-cgls)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--no-pager[Do not pipe output into a pager]' \
- {-a,--all}'[Show all groups, including empty]' \
- '-k[Include kernel threads in output]' \
- ':cgroups:(cpuset cpu cpuacct memory devices freezer net_cls blkio)'
- ;;
- systemd-cgtop)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Print version and exit]' \
- '(-c -m -i -t)-p[Order by path]' \
- '(-c -p -m -i)-t[Order by number of tasks]' \
- '(-m -p -i -t)-c[Order by CPU load]' \
- '(-c -p -i -t)-m[Order by memory load]' \
- '(-c -m -p -t)-i[Order by IO load]' \
- {-d,--delay=}'[Specify delay]' \
- {-n,--iterations=}'[Run for N iterations before exiting]' \
- {-b,--batch}'[Run in batch mode, accepting no input]' \
- '--depth=[Maximum traversal depth]'
- ;;
- systemd-delta)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--no-pager[Do not pipe output into a pager]' \
- '--diff=[Show a diff when overridden files differ]:boolean:(1 0)' \
- {-t,--type=}'[Only display a selected set of override types]:types:(masked equivalent redirected overridden unchanged)' \
- ':SUFFIX:(tmpfiles.d sysctl.d systemd/system)'
- ;;
- systemd-detect-virt)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- {-c,--container}'[Only detect whether we are run in a container]' \
- {-v,--vm}'[Only detect whether we are run in a VM]' \
- {-q,--quiet}"[Don't output anything, just set return value]"
- ;;
- systemd-inhibit)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--what=[Operations to inhibit]:options:(shutdown sleep idle handle-power-key handle-suspend-key handle-hibernate-key handle-lid-switch)' \
- '--who=[A descriptive string who is inhibiting]' \
- '--why=[A descriptive string why is being inhibited]' \
- '--mode=[One of block or delay]' \
- '--list[List active inhibitors]' \
- '*:commands:_systemd_inhibit_command'
- ;;
- systemd-machine-id-setup)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]'
- ;;
- systemd-notify)
- _arguments \
- {-h,--help}'[Show this help]' \
- '--version[Show package version]' \
- '--ready[Inform the init system about service start-up completion.]' \
- '--pid=[Inform the init system about the main PID of the daemon]' \
- '--status=[Send a free-form status string for the daemon to the init systemd]' \
- '--booted[Returns 0 if the system was booted up with systemd]' \
- '--readahead=[Controls disk read-ahead operations]:arguments:(cancel done noreply)'
- ;;
- systemd-nspawn)
- _arguments \
- {-h,--help}'[Show this help]' \
- {--directory=,-D}'[Directory to use as file system root for the namespace container. If omitted the current directory will be used.]:directories:_directories' \
- {--boot,-b}'[Automatically search for an init binary and invoke it instead of a shell or a user supplied program.]' \
- {--user=,-u}'[Run the command under specified user, create home directory and cd into it.]' \
- '--uuid=[Set the specified uuid for the container.]' \
- {--controllers=,-C}'[Makes the container appear in other hierarchies than the name=systemd:/ one. Takes a comma-separated list of controllers.]' \
- '--private-network[Turn off networking in the container. This makes all network interfaces unavailable in the container, with the exception of the loopback device.]' \
- '--read-only[Mount the root file system read only for the container.]' \
- '--capability=[List one or more additional capabilities to grant the container.]:capabilities:_systemd-nspawn' \
- "--link-journal=[Control whether the container's journal shall be made visible to the host system.]:options:(no, host, guest, auto)" \
- '-j[Equivalent to --link-journal=guest.]'
- ;;
- systemd-tmpfiles)
- _arguments \
- '--create[Create, set ownership/permissions based on the config files.]' \
- '--clean[Clean up all files and directories with an age parameter configured.]' \
- '--remove[All files and directories marked with r, R in the configuration files are removed.]' \
- '--prefix=[Only apply rules that apply to paths with the specified prefix.]' \
- '--help[Prints a short help text and exits.]' \
- '*::files:_files'
- ;;
- systemd-tty-ask-password-agent)
- _arguments \
- {-h,--help}'[Prints a short help text and exits.]' \
- '--version[Prints a short version string and exits.]' \
- '--list[Lists all currently pending system password requests.]' \
- '--query[Process all currently pending system password requests by querying the user on the calling TTY.]' \
- '--watch[Continuously process password requests.]' \
- '--wall[Forward password requests to wall(1).]' \
- '--plymouth[Ask question with plymouth(8).]' \
- '--console[Ask question on /dev/console.]'
- ;;
- *) _message 'eh?' ;;
- esac
-}
-
-_systemd-nspawn(){
- local -a _caps
- _caps=( CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH
- CAP_FOWNER CAP_FSETID CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE
- CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETGID CAP_SETFCAP CAP_SETPCAP
- CAP_SETUID CAP_SYS_ADMIN CAP_SYS_CHROOT CAP_SYS_NICE CAP_SYS_PTRACE CAP_SYS_TTY_CONFIG
- CAP_SYS_RESOURCE CAP_SYS_BOOT )
- _values -s , 'capabilities' "$_caps[@]"
-}
-
-_systemd_inhibit_command(){
- if (( CURRENT == 1 )); then
- compset -q
- _normal
- else
- local n=${words[(b:2:i)[^-]*]}
- if (( n <= CURRENT )); then
- compset -n $n
- _alternative \
- 'files:file:_files' \
- 'commands:command:_normal' && return 0
- fi
- _default
- fi
-
-}
-
-_systemd_analyze_command(){
- local -a _systemd_analyze_cmds
- # Descriptions taken from systemd-analyze --help.
- _systemd_analyze_cmds=(
- 'time:Print time spent in the kernel before reaching userspace'
- 'blame:Print list of running units ordered by time to init'
- 'critical-chain:Print a tree of the time critical chain of units'
- 'plot:Output SVG graphic showing service initialization'
- 'dot:Dump dependency graph (in dot(1) format)'
- )
-
- if (( CURRENT == 1 )); then
- _describe "options" _systemd_analyze_cmds
- else
- _message "no more options"
- fi
-}
-
-_hosts_or_user_at_host()
-{
- _alternative \
- 'users-hosts:: _user_at_host' \
- 'hosts:: _hosts'
-}
-
-_outputmodes() {
- local -a _output_opts
- _output_opts=(short short-monotonic verbose export json json-pretty json-see cat)
- _describe -t output 'output mode' _output_opts || compadd "$@"
-}
-
-
-(( $+functions[_systemctl_command] )) || _systemctl_command()
-{
- local -a _systemctl_cmds
- _systemctl_cmds=(
- "list-units:List units"
- "start:Start (activate) one or more units"
- "stop:Stop (deactivate) one or more units"
- "reload:Reload one or more units"
- "restart:Start or restart one or more units"
- "condrestart:Restart one or more units if active"
- "try-restart:Restart one or more units if active"
- "reload-or-restart:Reload one or more units if possible, otherwise start or restart"
- "force-reload:Reload one or more units if possible, otherwise restart if active"
- "hibernate:Hibernate the system"
- "hybrid-sleep:Hibernate and suspend the system"
- "reload-or-try-restart:Reload one or more units if possible, otherwise restart if active"
- "isolate:Start one unit and stop all others"
- "kill:Send signal to processes of a unit"
- "is-active:Check whether units are active"
- "is-failed:Check whether units are failed"
- "status:Show runtime status of one or more units"
- "show:Show properties of one or more units/jobs or the manager"
- "reset-failed:Reset failed state for all, one, or more units"
- "load:Load one or more units"
- "list-unit-files:List installed unit files"
- "enable:Enable one or more unit files"
- "disable:Disable one or more unit files"
- "reenable:Reenable one or more unit files"
- "preset:Enable/disable one or more unit files based on preset configuration"
- "help:Show documentation for specified units"
- "list-dependencies:Show unit dependency tree"
- "mask:Mask one or more units"
- "unmask:Unmask one or more units"
- "link:Link one or more units files into the search path"
- "is-enabled:Check whether unit files are enabled"
- "list-jobs:List jobs"
- "cancel:Cancel all, one, or more jobs"
- "dump:Dump server status"
- "snapshot:Create a snapshot"
- "delete:Remove one or more snapshots"
- "show-environment:Dump environment"
- "set-environment:Set one or more environment variables"
- "unset-environment:Unset one or more environment variables"
- "daemon-reload:Reload systemd manager configuration"
- "daemon-reexec:Reexecute systemd manager"
- "default:Enter system default mode"
- "rescue:Enter system rescue mode"
- "emergency:Enter system emergency mode"
- "halt:Shut down and halt the system"
- "suspend:Suspend the system"
- "poweroff:Shut down and power-off the system"
- "reboot:Shut down and reboot the system"
- "kexec:Shut down and reboot the system with kexec"
- "exit:Ask for user instance termination"
- )
-
- if (( CURRENT == 1 )); then
- _describe -t commands 'systemctl command' _systemctl_cmds || compadd "$@"
- else
- local curcontext="$curcontext"
-
- cmd="${${_systemctl_cmds[(r)$words[1]:*]%%:*}}"
- # Deal with any aliases
- case $cmd in
- condrestart) cmd="try-restart";;
- force-reload) cmd="reload-or-try-restart";;
- esac
-
- if (( $#cmd )); then
- curcontext="${curcontext%:*:*}:systemctl-${cmd}:"
-
- local update_policy
- zstyle -s ":completion:${curcontext}:" cache-policy update_policy
- if [[ -z "$update_policy" ]]; then
- zstyle ":completion:${curcontext}:" cache-policy _systemctl_caching_policy
- fi
-
- _call_function ret _systemctl_$cmd || _message 'no more arguments'
- else
- _message "unknown systemctl command: $words[1]"
- fi
- return ret
- fi
-}
-
-__systemctl()
-{
- local -a _modes
- _modes=("--user" "--system")
- systemctl ${words:*_modes} --full --no-legend --no-pager "$@"
-}
-
-
-# Fills the unit list
-_systemctl_all_units()
-{
- if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS ) &&
- ! _retrieve_cache SYS_ALL_UNITS;
- then
- _sys_all_units=( $(__systemctl list-units --all | { while read a b; do echo " $a"; done; }) )
- _store_cache SYS_ALL_UNITS _sys_all_units
- fi
-}
-
-# Fills the unit list including all file units
-_systemctl_really_all_units()
-{
- local -a all_unit_files;
- local -a really_all_units;
- if ( [[ ${+_sys_really_all_units} -eq 0 ]] || _cache_invalid SYS_REALLY_ALL_UNITS ) &&
- ! _retrieve_cache SYS_REALLY_ALL_UNITS;
- then
- all_unit_files=( $(__systemctl list-unit-files | { while read a b; do echo " $a"; done; }) )
- _systemctl_all_units
- really_all_units=($_sys_all_units $all_unit_files)
- _sys_really_all_units=(${(u)really_all_units})
- _store_cache SYS_REALLY_ALL_UNITS _sys_really_all_units
- fi
-}
-
-_filter_units_by_property() {
- local property=$1 value=$2 ; shift ; shift
- local -a units ; units=($*)
- local prop unit
- for ((i=1; $i <= ${#units[*]}; i++)); do
- # FIXME: "Failed to issue method call: Unknown unit" errors are ignored for
- # now (related to DBUS_ERROR_UNKNOWN_OBJECT). in the future, we need to
- # revert to calling 'systemctl show' once for all units, which is way
- # faster
- unit=${units[i]}
- prop=${(f)"$(_call_program units "$service show --no-pager --property="$property" ${unit} 2>/dev/null")"}
- if [[ "${prop}" = "$property=$value" ]]; then
- echo " ${unit}"
- fi
- done
-}
-
-_systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read a b; do echo " $a"; done; }) )}
-_systemctl_inactive_units(){_sys_inactive_units=($(__systemctl list-units --all | { while read a b c d; do [[ $c == "inactive" || $c == "failed" ]] && echo " $a"; done; }) )}
-_systemctl_failed_units() {_sys_failed_units=( $(__systemctl list-units --failed | { while read a b; do echo " $a"; done; }) )}
-_systemctl_enabled_units() {_sys_enabled_units=( $(__systemctl list-unit-files | { while read a b; do [[ $b == "enabled" ]] && echo " $a"; done; }) )}
-_systemctl_disabled_units(){_sys_disabled_units=($(__systemctl list-unit-files | { while read a b; do [[ $b == "disabled" ]] && echo " $a"; done; }) )}
-_systemctl_masked_units() {_sys_masked_units=( $(__systemctl list-unit-files | { while read a b; do [[ $b == "masked" ]] && echo " $a"; done; }) )}
-
-# Completion functions for ALL_UNITS
-for fun in is-active is-failed is-enabled status show mask preset help list-dependencies ; do
- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
- {
- _systemctl_really_all_units
- compadd "$@" -a - _sys_really_all_units
- }
-done
-
-# Completion functions for ENABLED_UNITS
-for fun in disable reenable ; do
- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
- {
- _systemctl_enabled_units
- _systemctl_disabled_units
- compadd "$@" -a - _sys_enabled_units _sys_disabled_units
- }
-done
-
-# Completion functions for DISABLED_UNITS
-(( $+functions[_systemctl_enable] )) || _systemctl_enable()
-{
- _systemctl_disabled_units
- compadd "$@" -a - _sys_disabled_units
-}
-
-# Completion functions for FAILED_UNITS
-(( $+functions[_systemctl_reset-failed] )) || _systemctl_reset-failed()
-{
- _systemctl_failed_units
- compadd "$@" -a - _sys_failed_units || _message "no failed unit found"
-}
-
-# Completion functions for STARTABLE_UNITS
-(( $+functions[_systemctl_start] )) || _systemctl_start()
-{
- _systemctl_inactive_units
- compadd "$@" -a - _sys_inactive_units
-}
-
-# Completion functions for STOPPABLE_UNITS
-for fun in stop kill try-restart condrestart ; do
- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
- {
- _systemctl_active_units
- compadd "$@" - $( _filter_units_by_property CanStop yes \
- ${_sys_active_units[*]} )
- }
-done
-
-# Completion functions for ISOLATABLE_UNITS
-(( $+functions[_systemctl_isolate] )) || _systemctl_isolate()
-{
- _systemctl_all_units
- compadd "$@" - $( _filter_units_by_property AllowIsolate yes \
- ${_sys_all_units[*]} )
-}
-
-# Completion functions for RELOADABLE_UNITS
-for fun in reload reload-or-try-restart force-reload ; do
- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
- {
- _systemctl_active_units
- compadd "$@" - $( _filter_units_by_property CanReload yes \
- ${_sys_active_units[*]} )
- }
-done
-
-# Completion functions for RESTARTABLE_UNITS
-for fun in restart reload-or-restart ; do
- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
- {
- _systemctl_all_units
- compadd "$@" - $( _filter_units_by_property CanStart yes \
- ${_sys_all_units[*]} | while read line; do \
- [[ "$line" =~ \.device$ ]] || echo " $line"; \
- done )
- }
-done
-
-# Completion functions for MASKED_UNITS
-(( $+functions[_systemctl_unmask] )) || _systemctl_unmask()
-{
- _systemctl_masked_units
- compadd "$@" -a - _sys_masked_units || _message "no masked unit found"
-}
-
-# Completion functions for JOBS
-(( $+functions[_systemctl_cancel] )) || _systemctl_cancel()
-{
- compadd "$@" - $(__systemctl list-jobs \
- | cut -d' ' -f1 2>/dev/null ) || _message "no job found"
-}
-
-# Completion functions for SNAPSHOTS
-(( $+functions[_systemctl_delete] )) || _systemctl_delete()
-{
- compadd "$@" - $(__systemctl list-units --type snapshot --all \
- | cut -d' ' -f1 2>/dev/null ) || _message "no snapshot found"
-}
-
-# Completion functions for ENVS
-for fun in set-environment unset-environment ; do
- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
- {
- local fun=$0 ; fun=${fun##_systemctl_}
- local suf
- if [[ "${fun}" = "set-environment" ]]; then
- suf='-S='
- fi
-
- compadd "$@" ${suf} - $(systemctl show-environment \
- | while read line; do echo " ${line%%\=}";done )
- }
-done
-
-(( $+functions[_systemctl_link] )) || _systemctl_link() { _files }
-
-# no systemctl completion for:
-# [STANDALONE]='daemon-reexec daemon-reload default dump
-# emergency exit halt kexec list-jobs list-units
-# list-unit-files poweroff reboot rescue show-environment'
-# [NAME]='snapshot load'
-
-_systemctl_caching_policy()
-{
- local _sysunits
- local -a oldcache
-
- # rebuild if cache is more than a day old
- oldcache=( "$1"(mh+1) )
- (( $#oldcache )) && return 0
-
- _sysunits=($(__systemctl --all | cut -d' ' -f1))
-
- if (( $#_sysunits )); then
- for unit in $_sysunits; do
- [[ "$unit" -nt "$1" ]] && return 0
- done
- fi
-
- return 1
-}
-
-_list_fields() {
- local -a journal_fields
- journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
- ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID}
- _{P,U,G}ID _COMM _EXE _CMDLINE
- _AUDIT_{SESSION,LOGINUID}
- _SYSTEMD_{CGROUP,SESSION,UNIT,OWNER_UID}
- _SYSTEMD_USER_UNIT
- _SELINUX_CONTEXT _SOURCE_REALTIME_TIMESTAMP
- _{BOOT,MACHINE}_ID _HOSTNAME _TRANSPORT
- _KERNEL_{DEVICE,SUBSYSTEM}
- _UDEV_{SYSNAME,DEVNODE,DEVLINK}
- __CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP)
- _describe 'possible fields' journal_fields
-}
-
-_journal_none() {
- local -a _commands _files
- _commands=( ${(f)"$(_call_program commands "$service" -F _EXE 2>/dev/null)"} )
- _alternative : \
- 'files:/dev files:_files -W /dev -P /dev/' \
- "commands:commands:($_commands[@])" \
- 'fields:fields:_list_fields'
-}
-
-_journal_fields() {
- local -a _fields cmd
- cmd=("journalctl" "-F ${@[-1]}" "2>/dev/null" )
- _fields=( ${(f)"$(_call_program fields $cmd[@])"} )
- typeset -U _fields
- _describe 'possible values' _fields
-}
-
-
-_loginctl_all_sessions(){_sys_all_sessions=($(loginctl list-sessions | { while read a b; do echo " $a"; done; }) )}
-_loginctl_all_users() {_sys_all_users=( $(loginctl list-users | { while read a b; do echo " $a"; done; }) )}
-_loginctl_all_seats() {_sys_all_seats=( $(loginctl list-seats | { while read a b; do echo " $a"; done; }) )}
-
-# Completion functions for SESSIONS
-for fun in session-status show-session activate lock-session unlock-session terminate-session kill-session ; do
- (( $+functions[_loginctl_$fun] )) || _loginctl_$fun()
- {
- _loginctl_all_sessions
- compadd "$@" -a - _sys_all_sessions
- }
-done
-
-# Completion functions for USERS
-for fun in user-status show-user enable-linger disable-linger terminate-user kill-user ; do
- (( $+functions[_loginctl_$fun] )) || _loginctl_$fun()
- {
- _loginctl_all_users
- compadd "$@" -a - _sys_all_users
- }
-done
-
-# Completion functions for SEATS
-(( $+functions[_loginctl_seats] )) || _loginctl_seats()
-{
- _loginctl_all_seats
- compadd "$@" -a - _sys_all_seats
-}
-for fun in seat-status show-seat terminate-seat ; do
- (( $+functions[_loginctl_$fun] )) || _loginctl_$fun()
- { _loginctl_seats }
-done
-
-# Completion functions for ATTACH
-(( $+functions[_loginctl_attach] )) || _loginctl_attach()
-{
- _loginctl_all_seats
-
- _arguments -w -C -S -s \
- ':seat:_loginctl_seats' \
- '*:device:_files'
-}
-
-# no loginctl completion for:
-# [STANDALONE]='list-sessions list-users list-seats flush-devices'
-
-(( $+functions[_loginctl_command] )) || _loginctl_command()
-{
- local -a _loginctl_cmds
- _loginctl_cmds=(
- "list-sessions:List sessions"
- "session-status:Show session status"
- "show-session:Show properties of one or more sessions"
- "activate:Activate a session"
- "lock-session:Screen lock one or more sessions"
- "unlock-session:Screen unlock one or more sessions"
- "terminate-session:Terminate one or more sessions"
- "kill-session:Send signal to processes of a session"
- "list-users:List users"
- "user-status:Show user status"
- "show-user:Show properties of one or more users"
- "enable-linger:Enable linger state of one or more users"
- "disable-linger:Disable linger state of one or more users"
- "terminate-user:Terminate all sessions of one or more users"
- "kill-user:Send signal to processes of a user"
- "list-seats:List seats"
- "seat-status:Show seat status"
- "show-seat:Show properties of one or more seats"
- "attach:Attach one or more devices to a seat"
- "flush-devices:Flush all device associations"
- "terminate-seat:Terminate all sessions on one or more seats"
- )
-
- if (( CURRENT == 1 )); then
- _describe -t commands 'loginctl command' _loginctl_cmds || compadd "$@"
- else
- local curcontext="$curcontext"
-
- cmd="${${_loginctl_cmds[(r)$words[1]:*]%%:*}}"
-
- if (( $#cmd )); then
- curcontext="${curcontext%:*:*}:loginctl-${cmd}:"
-
- _call_function ret _loginctl_$cmd || _message 'no more arguments'
- else
- _message "unknown loginctl command: $words[1]"
- fi
- return ret
- fi
-}
-
-_hostnamectl_command() {
- local -a _hostnamectl_cmds
- _hostnamectl_cmds=(
- "status:Show current hostname settings"
- "set-hostname:Set system hostname"
- "set-icon-name:Set icon name for host"
- )
- if (( CURRENT == 1 )); then
- _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@"
- else
- local curcontext="$curcontext"
- cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}"
- if (( $#cmd )); then
- [[ $cmd == status ]] && msg="no options" || msg="options for $cmd"
- _message "$msg"
- else
- _message "unknown hostnamectl command: $words[1]"
- fi
- fi
-}
-
-_localectl_set-locale() {
- local -a _confs _locales
- local expl suf
- _locales=( ${(f)"$(_call_program locales "$service" list-locales)"} )
- _confs=( ${${(f)"$(_call_program confs "locale 2>/dev/null")"}%\=*} )
- if [[ -prefix 1 *\= ]]; then
- local conf=${PREFIX%%\=*}
- compset -P1 '*='
- _wanted locales expl "locales configs" \
- _combination localeconfs confs=$conf locales "$@" -
- else
- compadd -S '=' $_confs
- fi
-}
-
-_localectl_set-keymap() {
- local -a _keymaps
- _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} )
- if (( CURRENT <= 3 )); then
- _describe keymaps _keymaps
- else
- _message "no more options"
- fi
-}
-
-_localectl_set-x11-keymap() {
- if (( $+commands[pkg-config] )); then
- local -a _file _layout _model _variant _options
- local _xorg_lst
- _xorg_lst=${"$($commands[pkg-config] xkeyboard-config --variable=xkb_base)"}
- _file=( ${(ps:\n\!:)"$(<$_xorg_lst/rules/xorg.lst)"} )
- _layout=( ${${${(M)${(f)_file[1]}:# *}# }%% *} )
- _model=( ${${${(M)${(f)_file[2]}:# *}# }%% *} )
- _variant=( ${${${(M)${(f)_file[3]}:# *}# }%% *} )
- _options=( ${${${(M)${(f)_file[4]}:# *}# }%% *} )
- #_layout=( ${(f)"$( echo $_file[1] | awk '/^ / {print $1}' )"} )
- #_model=( ${(f)"$(echo $_file[2] | awk '/^ / {print $1}')"} )
- #_variant=( ${(f)"$(echo $_file[3] | awk '/^ / {print $1}')"} )
- #_options=( ${(f)"$(echo ${_file[4]//:/\\:} | awk '/^ / {print $1}')"} )
-
- case $CURRENT in
- 2) _describe layouts _layout ;;
- 3) _describe models _model;;
- 4) _describe variants _variant;;
- 5) _describe options _options;;
- *) _message "no more options"
- esac
- fi
-}
-
-
-_localectl_command() {
- local -a _localectl_cmds
- _localectl_cmds=(
- 'status:Show current locale settings'
- 'set-locale:Set system locale'
- 'list-locales:Show known locales'
- 'set-keymap:Set virtual console keyboard mapping'
- 'list-keymaps:Show known virtual console keyboard mappings'
- 'set-x11-keymap:Set X11 keyboard mapping'
- )
- if (( CURRENT == 1 )); then
- _describe -t commands 'localectl command' _localectl_cmds
- else
- local curcontext="$curcontext"
- cmd="${${_localectl_cmds[(r)$words[1]:*]%%:*}}"
- if (( $+functions[_localectl_$cmd] )); then
- _localectl_$cmd
- else
- _message "no more options"
- fi
- fi
-}
-
-_timedatectl_set-timezone(){
- local -a _timezones
- _timezones=( ${(f)"$(_call_program timezones "${service}" list-timezones)"} )
- compadd "$_timezones[@]"
-}
-
-_timedatectl_set-time(){
- _message "YYYY-MM-DD HH:MM:SS"
-}
-
-_timedatectl_set-local-rtc(){
- local -a _options
- _options=(
- '0:Maintain RTC in universal time'
- '1:Maintain RTC in local time'
- )
- _describe options _options
-}
-
-_timedatectl_set-ntp(){
- local -a _options
- _options=(
- '0:Disable NTP based network time configuration'
- '1:Enable NTP based network time configuration'
- )
- _describe options _options
-}
-
-_timedatectl_command(){
- local -a _timedatectl_cmds
- _timedatectl_cmds=(
- 'status:Show current time settings'
- 'set-time:Set system time'
- 'set-timezone:Set system timezone'
- 'list-timezones:Show known timezones'
- 'set-local-rtc:Control whether RTC is in local time'
- 'set-ntp:Control whether NTP is enabled'
- )
- if (( CURRENT == 1 )); then
- _describe -t commands 'timedatectl command' _timedatectl_cmds
- else
- local curcontext="$curcontext"
- cmd="${${_timedatectl_cmds[(r)$words[1]:*]%%:*}}"
- if (( $#cmd )); then
- if (( $+functions[_timedatectl_$cmd] )); then
- _timedatectl_$cmd
- else
- _message "no more options"
- fi
- else
- _message "unknown timedatectl command: $words[1]"
- fi
- fi
-}
-_systemd-coredumpctl_command(){
- local -a _systemd_coredumpctl_cmds
- _systemd_coredumpctl_cmds=(
- 'list:List available coredumps'
- 'dump:Print coredump to std'
- )
- if (( CURRENT == 1 )); then
- _describe -t commands 'systemd-coredumpctl command' _systemd_coredumpctl_cmds
- else
- local curcontext="$curcontext"
- local -a _dumps
- cmd="${${_systemd_coredumpctl_cmds[(r)$words[1]:*]%%:*}}"
- if (( $#cmd )); then
- # user can set zstyle ':completion:*:*:systemd-coredumpctl:*' sort no for coredumps to be ordered by date, otherwise they get ordered by pid
- _dumps=( "${(foa)$(systemd-coredumpctl list | awk 'BEGIN{OFS=":"} /^\s/ {sub(/[[ \t]+/, ""); print $5,$0}' 2>/dev/null)}" )
- if [[ -n "$_dumps" ]]; then
- _describe -t pids 'coredumps' _dumps
- else
- _message "no coredumps"
- fi
- else
- _message "no more options"
- fi
-
- fi
-
-}
-
-_udevadm_info(){
- _arguments \
- '--query=[Query the database for specified type of device data. It needs the --path or --name to identify the specified device.]:type:(name symlink path property all)' \
- '--path=[The devpath of the device to query.]:sys files:_files -P /sys/ -W /sys' \
- '--name=[The name of the device node or a symlink to query]:device files:_files -P /dev/ -W /dev' \
- '--root[Print absolute paths in name or symlink query.]' \
- '--attribute-walk[Print all sysfs properties of the specified device that can be used in udev rules to match the specified device]' \
- '--export[Print output as key/value pairs.]' \
- '--export-prefix=[Add a prefix to the key name of exported values.]:prefix' \
- '--device-id-of-file=[Print major/minor numbers of the underlying device, where the file lives on.]:files:_udevadm_mounts' \
- '--export-db[Export the content of the udev database.]' \
- '--cleanup-db[Cleanup the udev database.]'
-}
-
-_udevadm_trigger(){
- _arguments \
- '--verbose[Print the list of devices which will be triggered.]' \
- '--dry-run[Do not actually trigger the event.]' \
- '--type=[Trigger a specific type of devices.]:types:(devices subsystems failed)' \
- '--action=[Type of event to be triggered.]:actions:(add change remove)' \
- '--subsystem-match=[Trigger events for devices which belong to a matching subsystem.]' \
- '--subsystem-nomatch=[Do not trigger events for devices which belong to a matching subsystem.]' \
- '--attr-match=attribute=[Trigger events for devices with a matching sysfs attribute.]' \
- '--attr-nomatch=attribute=[Do not trigger events for devices with a matching sysfs attribute.]' \
- '--property-match=[Trigger events for devices with a matching property value.]' \
- '--tag-match=property[Trigger events for devices with a matching tag.]' \
- '--sysname-match=[Trigger events for devices with a matching sys device name.]' \
- '--parent-match=[Trigger events for all children of a given device.]'
-}
-
-_udevadm_settle(){
- _arguments \
- '--timeout=[Maximum number of seconds to wait for the event queue to become empty.]' \
- '--seq-start=[Wait only for events after the given sequence number.]' \
- '--seq-end=[Wait only for events before the given sequence number.]' \
- '--exit-if-exists=[Stop waiting if file exists.]:files:_files' \
- '--quiet[Do not print any output, like the remaining queue entries when reaching the timeout.]' \
- '--help[Print help text.]'
-}
-
-_udevadm_control(){
- _arguments \
- '--exit[Signal and wait for systemd-udevd to exit.]' \
- '--log-priority=[Set the internal log level of systemd-udevd.]:priorities:(err info debug)' \
- '--stop-exec-queue[Signal systemd-udevd to stop executing new events. Incoming events will be queued.]' \
- '--start-exec-queue[Signal systemd-udevd to enable the execution of events.]' \
- '--reload[Signal systemd-udevd to reload the rules files and other databases like the kernel module index.]' \
- '--property=[Set a global property for all events.]' \
- '--children-max=[Set the maximum number of events.]' \
- '--timeout=[The maximum number of seconds to wait for a reply from systemd-udevd.]' \
- '--help[Print help text.]'
-}
-
-_udevadm_monitor(){
- _arguments \
- '--kernel[Print the kernel uevents.]' \
- '--udev[Print the udev event after the rule processing.]' \
- '--property[Also print the properties of the event.]' \
- '--subsystem-match=[Filter events by subsystem/\[devtype\].]' \
- '--tag-match=[Filter events by property.]' \
- '--help[Print help text.]'
-}
-
-_udevadm_test(){
- _arguments \
- '--action=[The action string.]:actions:(add change remove)' \
- '--subsystem=[The subsystem string.]' \
- '--help[Print help text.]' \
- '*::devpath:_files -P /sys/ -W /sys'
-}
-
-_udevadm_test-builtin(){
- if (( CURRENT == 2 )); then
- _arguments \
- '--help[Print help text]' \
- '*::builtins:(blkid btrfs hwdb input_id kmod path_id usb_id uaccess)'
- elif (( CURRENT == 3 )); then
- _arguments \
- '--help[Print help text]' \
- '*::syspath:_files -P /sys -W /sys'
- else
- _arguments \
- '--help[Print help text]'
- fi
-}
-
-_udevadm_mounts(){
- local dev_tmp dpath_tmp mp_tmp mline
-
- tmp=( "${(@f)$(< /etc/mtab)}" )
- dev_tmp=( "${(@)${(@)tmp%% *}:#none}" )
- mp_tmp=( "${(@)${(@)tmp#* }%% *}" )
-
- local MATCH
- mp_tmp=("${(@q)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}")
- dpath_tmp=( "${(@Mq)dev_tmp:#/*}" )
- dev_tmp=( "${(@q)dev_tmp:#/*}" )
-
- _alternative \
- 'device-paths: device path:compadd -a dpath_tmp' \
- 'directories:mount point:compadd -a mp_tmp'
-}
-
-
-_udevadm_command(){
- local -a _udevadm_cmds
- _udevadm_cmds=(
- 'info:query sysfs or the udev database'
- 'trigger:request events from the kernel'
- 'settle:wait for the event queue to finish'
- 'control:control the udev daemon'
- 'monitor:listen to kernel and udev events'
- 'test:test an event run'
- 'test-builtin:test a built-in command'
- )
-
- if ((CURRENT == 1)); then
- _describe -t commands 'udevadm commands' _udevadm_cmds
- else
- local curcontext="$curcontext"
- cmd="${${_udevadm_cmds[(r)$words[1]:*]%%:*}}"
- if (($#cmd)); then
- if (( $+functions[_udevadm_$cmd] )); then
- _udevadm_$cmd
- else
- _message "no options for $cmd"
- fi
- else
- _message "no more options"
- fi
- fi
-}
-
-_ctls "$@"
-
-#vim: set ft=zsh sw=4 ts=4 et
diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl
new file mode 100644
index 0000000000..45b9597897
--- /dev/null
+++ b/shell-completion/zsh/_hostnamectl
@@ -0,0 +1,32 @@
+#compdef hostnamectl
+
+_hostnamectl_command() {
+ local -a _hostnamectl_cmds
+ _hostnamectl_cmds=(
+ "status:Show current hostname settings"
+ "set-hostname:Set system hostname"
+ "set-icon-name:Set icon name for host"
+ )
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@"
+ else
+ local curcontext="$curcontext"
+ cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}"
+ if (( $#cmd )); then
+ [[ $cmd == status ]] && msg="no options" || msg="options for $cmd"
+ _message "$msg"
+ else
+ _message "unknown hostnamectl command: $words[1]"
+ fi
+ fi
+}
+
+_arguments -s \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--transient[Only set transient hostname]' \
+ '--static[Only set static hostname]' \
+ '--pretty[Only set pretty hostname]' \
+ '--no-ask-password[Do not prompt for password]' \
+ {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
+ '*::hostnamectl commands:_hostnamectl_command'
diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl
new file mode 100644
index 0000000000..73646b57f5
--- /dev/null
+++ b/shell-completion/zsh/_journalctl
@@ -0,0 +1,98 @@
+#compdef journalctl
+
+_outputmodes() {
+ local -a _output_opts
+ _output_opts=(short short-monotonic verbose export json json-pretty json-see cat)
+ _describe -t output 'output mode' _output_opts || compadd "$@"
+}
+
+_list_fields() {
+ local -a journal_fields
+ journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
+ ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID}
+ _{P,U,G}ID _COMM _EXE _CMDLINE
+ _AUDIT_{SESSION,LOGINUID}
+ _SYSTEMD_{CGROUP,SESSION,UNIT,OWNER_UID}
+ _SYSTEMD_USER_UNIT USER_UNIT
+ _SELINUX_CONTEXT _SOURCE_REALTIME_TIMESTAMP
+ _{BOOT,MACHINE}_ID _HOSTNAME _TRANSPORT
+ _KERNEL_{DEVICE,SUBSYSTEM}
+ _UDEV_{SYSNAME,DEVNODE,DEVLINK}
+ __CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP)
+ case $_jrnl_none in
+ yes) _values -s '=' 'possible fields' \
+ "${journal_fields[@]}:value:_journal_fields ${words[CURRENT]%%=*}" ;;
+ *) _describe 'possible fields' journal_fields ;;
+ esac
+}
+
+_journal_none() {
+ local -a _commands _files _jrnl_none
+ # Setting use-cache will slow this down considerably
+ _commands=( ${"$(_call_program commands "$service" -F _EXE 2>/dev/null)"} )
+ _jrnl_none='yes'
+ _alternative : \
+ 'files:/dev files:_files -W /dev -P /dev/' \
+ "commands:commands:($_commands[@])" \
+ 'fields:fields:_list_fields'
+}
+
+_journal_fields() {
+ local -a _fields cmd
+ cmd=("journalctl" "-F ${@[-1]}" "2>/dev/null" )
+ _fields=( ${(f)"$(_call_program fields $cmd[@])"} )
+ typeset -U _fields
+ _describe 'possible values' _fields
+}
+
+_journal_boots() {
+ local -a _bootid _previousboots
+ _bootid=( ${(fao)"$(_call_program bootid "$service -F _BOOT_ID")"} )
+ _previousboots=( -{1..${#_bootid}} )
+ _alternative : \
+ "offsets:boot offsets:(${_previousboots[1,-2]})" \
+ "bootid:boot ids:(${_bootid[@]})"
+}
+
+_arguments -s \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ {-l,--full}'[Show long fields in full]' \
+ {-a,--all}'[Show all fields, including long and unprintable]' \
+ {-f,--follow}'[Follow journal]' \
+ {-e,--pager-end}'[Jump to the end of the journal in the pager]' \
+ {-n+,--lines=}'[Number of journal entries to show]:integer' \
+ '--no-tail[Show all lines, even in follow mode]' \
+ {-r,--reverse}'[Reverse output]' \
+ {-o+,--output=}'[Change journal output mode]:output modes:_outputmodes' \
+ {-x,--catalog}'[Show explanatory texts with each log line]' \
+ {-q,--quiet}"[Don't show privilege warning]" \
+ {-m,--merge}'[Show entries from all available journals]' \
+ {-b+,--boot=}'[Show data only from the specified boot or offset]:boot id or offset:_journal_boots' \
+ {-k,--dmesg}'[Show only kernel messages, Implies -b]' \
+ {-u+,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
+ '--user-unit=[Show data only from the specified user session unit]:units:_journal_fields USER_UNIT' \
+ {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
+ {-c+,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \
+ '--after-cursor=[Start showing entries from the location in the journal after the cursor]:cursors:_journal_fields __CURSORS' \
+ '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+ '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \
+ {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \
+ '--system[Show system and kernel messages]' \
+ '--user[Show messages from user services]' \
+ {-D+,--directory=}'[Show journal files from directory]:directories:_directories' \
+ '--file=[Operate on specified journal files]:file:_files' \
+ '--root=[Operate on catalog hierarchy under specified directory]:directories:_directories' \
+ '--new-id128[Generate a new 128 Bit ID]' \
+ '--header[Show journal header information]' \
+ '--disk-usage[Show total disk usage]' \
+ '--list-catalog[List messages in catalog]' \
+ '--dump-catalog[Dump messages in catalog]' \
+ '--update-catalog[Update binary catalog database]' \
+ '--setup-keys[Generate new FSS key pair]' \
+ '--force[Force recreation of FSS keys]' \
+ '--interval=[Time interval for changing the FSS sealing key]:time interval' \
+ '--verify[Verify journal file consistency]' \
+ '--verify-key=[Specify FSS verification key]:FSS key' \
+ '*::default: _journal_none'
diff --git a/shell-completion/zsh/_kernel-install b/shell-completion/zsh/_kernel-install
new file mode 100644
index 0000000000..065518834c
--- /dev/null
+++ b/shell-completion/zsh/_kernel-install
@@ -0,0 +1,26 @@
+#compdef kernel-install
+
+_images(){
+ if [[ "$words[2]" == "remove" ]]; then
+ _message 'No more options'
+ else
+ _path_files -W /boot/ -P /boot/ -g "vmlinuz-*"
+ fi
+}
+
+_kernels(){
+ read _MACHINE_ID < /etc/machine-id
+ _kernel=( /lib/modules/[0-9]* )
+ if [[ "$cmd" == "remove" && -n "$_MACHINE_ID" ]]; then
+ _kernel=( /lib/modules/[0-9]* "/boot/$_MACHINE_ID"/[0-9]* )
+ fi
+ _kernel=( ${_kernel##*/} )
+ _describe "installed kernels" _kernel
+}
+
+_arguments \
+ '1::add or remove:(add remove)' \
+ '2::kernel versions:_kernels' \
+ '3::kernel images:_images'
+
+#vim: set ft=zsh sw=4 ts=4 et
diff --git a/shell-completion/zsh/_localectl b/shell-completion/zsh/_localectl
new file mode 100644
index 0000000000..3d76bb0c4d
--- /dev/null
+++ b/shell-completion/zsh/_localectl
@@ -0,0 +1,83 @@
+#compdef localectl
+
+_localectl_set-locale() {
+ local -a _confs _locales
+ local expl suf
+ _locales=( ${(f)"$(_call_program locales "$service" list-locales)"} )
+ _confs=( ${${(f)"$(_call_program confs "locale 2>/dev/null")"}%\=*} )
+ if [[ -prefix 1 *\= ]]; then
+ local conf=${PREFIX%%\=*}
+ compset -P1 '*='
+ _wanted locales expl "locales configs" \
+ _combination localeconfs confs=$conf locales "$@" -
+ else
+ compadd -S '=' $_confs
+ fi
+}
+
+_localectl_set-keymap() {
+ local -a _keymaps
+ _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} )
+ if (( CURRENT <= 3 )); then
+ _describe keymaps _keymaps
+ else
+ _message "no more options"
+ fi
+}
+
+_localectl_set-x11-keymap() {
+ if (( $+commands[pkg-config] )); then
+ local -a _file _layout _model _variant _options
+ local _xorg_lst
+ _xorg_lst=${"$($commands[pkg-config] xkeyboard-config --variable=xkb_base)"}
+ _file=( ${(ps:\n\!:)"$(<$_xorg_lst/rules/xorg.lst)"} )
+ _layout=( ${${${(M)${(f)_file[1]}:# *}# }%% *} )
+ _model=( ${${${(M)${(f)_file[2]}:# *}# }%% *} )
+ _variant=( ${${${(M)${(f)_file[3]}:# *}# }%% *} )
+ _options=( ${${${(M)${(f)_file[4]}:# *}# }%% *} )
+ #_layout=( ${(f)"$( echo $_file[1] | awk '/^ / {print $1}' )"} )
+ #_model=( ${(f)"$(echo $_file[2] | awk '/^ / {print $1}')"} )
+ #_variant=( ${(f)"$(echo $_file[3] | awk '/^ / {print $1}')"} )
+ #_options=( ${(f)"$(echo ${_file[4]//:/\\:} | awk '/^ / {print $1}')"} )
+
+ case $CURRENT in
+ 2) _describe layouts _layout ;;
+ 3) _describe models _model;;
+ 4) _describe variants _variant;;
+ 5) _describe options _options;;
+ *) _message "no more options"
+ esac
+ fi
+}
+
+_localectl_command() {
+ local -a _localectl_cmds
+ _localectl_cmds=(
+ 'status:Show current locale settings'
+ 'set-locale:Set system locale'
+ 'list-locales:Show known locales'
+ 'set-keymap:Set virtual console keyboard mapping'
+ 'list-keymaps:Show known virtual console keyboard mappings'
+ 'set-x11-keymap:Set X11 keyboard mapping'
+ )
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'localectl command' _localectl_cmds
+ else
+ local curcontext="$curcontext"
+ cmd="${${_localectl_cmds[(r)$words[1]:*]%%:*}}"
+ if (( $+functions[_localectl_$cmd] )); then
+ _localectl_$cmd
+ else
+ _message "no more options"
+ fi
+ fi
+}
+
+_arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ "--no-convert[Don't convert keyboard mappings]" \
+ '--no-pager[Do not pipe output into a pager]' \
+ '--no-ask-password[Do not prompt for password]' \
+ {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
+ '*::localectl commands:_localectl_command'
diff --git a/shell-completion/zsh/_loginctl b/shell-completion/zsh/_loginctl
new file mode 100644
index 0000000000..ebf6b3ae0a
--- /dev/null
+++ b/shell-completion/zsh/_loginctl
@@ -0,0 +1,106 @@
+#compdef loginctl
+
+_loginctl_all_sessions(){_sys_all_sessions=($(loginctl list-sessions | { while read a b; do echo " $a"; done; }) )}
+_loginctl_all_users() {_sys_all_users=( $(loginctl list-users | { while read a b; do echo " $a"; done; }) )}
+_loginctl_all_seats() {_sys_all_seats=( $(loginctl list-seats | { while read a b; do echo " $a"; done; }) )}
+
+# Completion functions for SESSIONS
+for fun in session-status show-session activate lock-session unlock-session terminate-session kill-session ; do
+ (( $+functions[_loginctl_$fun] )) || _loginctl_$fun()
+ {
+ _loginctl_all_sessions
+ compadd "$@" -a - _sys_all_sessions
+ }
+done
+
+# Completion functions for USERS
+for fun in user-status show-user enable-linger disable-linger terminate-user kill-user ; do
+ (( $+functions[_loginctl_$fun] )) || _loginctl_$fun()
+ {
+ _loginctl_all_users
+ compadd "$@" -a - _sys_all_users
+ }
+done
+
+# Completion functions for SEATS
+(( $+functions[_loginctl_seats] )) || _loginctl_seats()
+{
+ _loginctl_all_seats
+ compadd "$@" -a - _sys_all_seats
+}
+for fun in seat-status show-seat terminate-seat ; do
+ (( $+functions[_loginctl_$fun] )) || _loginctl_$fun()
+ { _loginctl_seats }
+done
+
+# Completion functions for ATTACH
+(( $+functions[_loginctl_attach] )) || _loginctl_attach()
+{
+ _loginctl_all_seats
+
+ _arguments -w -C -S -s \
+ ':seat:_loginctl_seats' \
+ '*:device:_files'
+}
+
+# no loginctl completion for:
+# [STANDALONE]='list-sessions list-users list-seats flush-devices'
+
+(( $+functions[_loginctl_command] )) || _loginctl_command()
+{
+ local -a _loginctl_cmds
+ _loginctl_cmds=(
+ "list-sessions:List sessions"
+ "session-status:Show session status"
+ "show-session:Show properties of one or more sessions"
+ "activate:Activate a session"
+ "lock-session:Screen lock one or more sessions"
+ "unlock-session:Screen unlock one or more sessions"
+ "terminate-session:Terminate one or more sessions"
+ "kill-session:Send signal to processes of a session"
+ "list-users:List users"
+ "user-status:Show user status"
+ "show-user:Show properties of one or more users"
+ "enable-linger:Enable linger state of one or more users"
+ "disable-linger:Disable linger state of one or more users"
+ "terminate-user:Terminate all sessions of one or more users"
+ "kill-user:Send signal to processes of a user"
+ "list-seats:List seats"
+ "seat-status:Show seat status"
+ "show-seat:Show properties of one or more seats"
+ "attach:Attach one or more devices to a seat"
+ "flush-devices:Flush all device associations"
+ "terminate-seat:Terminate all sessions on one or more seats"
+ )
+
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'loginctl command' _loginctl_cmds || compadd "$@"
+ else
+ local curcontext="$curcontext"
+
+ cmd="${${_loginctl_cmds[(r)$words[1]:*]%%:*}}"
+
+ if (( $#cmd )); then
+ curcontext="${curcontext%:*:*}:loginctl-${cmd}:"
+
+ _call_function ret _loginctl_$cmd || _message 'no more arguments'
+ else
+ _message "unknown loginctl command: $words[1]"
+ fi
+ return ret
+ fi
+}
+
+
+_arguments -s \
+ {-h,--help}'[Show help]' \
+ '--version[Show package version]' \
+ \*{-p+,--property=}'[Show only properties by this name]:unit property' \
+ {-a,--all}'[Show all properties, including empty ones]' \
+ '--kill-who=[Who to send signal to]:killwho:(main control all)' \
+ {-s+,--signal=}'[Which signal to send]:signal:_signals' \
+ '--no-ask-password[Do not ask for system passwords]' \
+ {-H+,--host=}'[Show information for remote host]:userathost:_sd_hosts_or_user_at_host' \
+ {-P,--privileged}'[Acquire privileges before execution]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ '*::loginctl command:_loginctl_command'
diff --git a/shell-completion/zsh/_machinectl b/shell-completion/zsh/_machinectl
new file mode 100644
index 0000000000..2e5e05cfcc
--- /dev/null
+++ b/shell-completion/zsh/_machinectl
@@ -0,0 +1,47 @@
+#compdef machinectl
+
+(( $+functions[_machinectl_command] )) || _machinectl_command()
+{
+ local -a _machinectl_cmds
+ _machinectl_cmds=(
+ "list:List currently running VMs/containers"
+ "status:Show VM/container status"
+ "show:Show properties of one or more VMs/containers"
+ "terminate:Terminate one or more VMs/containers"
+ "kill:Send signal to process or a VM/container"
+ )
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'machinectl command' _machinectl_cmds || compadd "$@"
+ else
+ local curcontext="$curcontext"
+ cmd="${${_machinectl_cmds[(r)$words[1]:*]%%:*}}"
+ if (( $#cmd )); then
+ case $cmd in
+ list) msg="no options" ;;
+ *)
+ _machines=( "${(foa)$(machinectl list | awk '{print $1}')}" )
+ if [[ -n "$_machines" ]]; then
+ _describe 'machines' _machines
+ else
+ _message 'no machines'
+ fi
+ esac
+ else
+ _message "no more options"
+ fi
+ fi
+}
+
+_arguments \
+ {-h,--help}'[Prints a short help text and exits.]' \
+ '--version[Prints a short version string and exits.]' \
+ \*{-p+,--property=}'[Limit output to specified property.]:property:(Name Id Timestamp TimestampMonotonic Service Scope Leader Class State RootDirectory)' \
+ {-a,--all}'[Show all proerties]' \
+ (-l,--full)'[Do not ellipsize cgroup members]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ '--no-ask-password[Do not ask for system passwords]' \
+ '--kill-who=[Who to send signal to]:killwho:(leader all)' \
+ {-s+,--signal=}'[Which signal to send]:signal:_signals' \
+ {-H+,--host=}'[Show information for remote host]:userathost:_sd_hosts_or_user_at_host' \
+ {-P,--privileged}'[Acquire privileges before execution]' \
+ '*::machinectl command:_machinectl_command'
diff --git a/shell-completion/zsh/_sd_hosts_or_user_at_host b/shell-completion/zsh/_sd_hosts_or_user_at_host
new file mode 100644
index 0000000000..282f7328e4
--- /dev/null
+++ b/shell-completion/zsh/_sd_hosts_or_user_at_host
@@ -0,0 +1,5 @@
+#autoload
+
+_alternative \
+ 'users-hosts:: _user_at_host' \
+ 'hosts:: _hosts'
diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl
new file mode 100644
index 0000000000..298e97ed61
--- /dev/null
+++ b/shell-completion/zsh/_systemctl
@@ -0,0 +1,347 @@
+#compdef systemctl
+
+(( $+functions[_systemctl_command] )) || _systemctl_command()
+{
+ local -a _systemctl_cmds
+ _systemctl_cmds=(
+ "list-sockets:List sockets"
+ "list-units:List units"
+ "start:Start (activate) one or more units"
+ "stop:Stop (deactivate) one or more units"
+ "reload:Reload one or more units"
+ "restart:Start or restart one or more units"
+ "condrestart:Restart one or more units if active"
+ "try-restart:Restart one or more units if active"
+ "reload-or-restart:Reload one or more units if possible, otherwise start or restart"
+ "force-reload:Reload one or more units if possible, otherwise restart if active"
+ "hibernate:Hibernate the system"
+ "hybrid-sleep:Hibernate and suspend the system"
+ "reload-or-try-restart:Reload one or more units if possible, otherwise restart if active"
+ "isolate:Start one unit and stop all others"
+ "kill:Send signal to processes of a unit"
+ "is-active:Check whether units are active"
+ "is-failed:Check whether units are failed"
+ "status:Show runtime status of one or more units"
+ "show:Show properties of one or more units/jobs or the manager"
+ "reset-failed:Reset failed state for all, one, or more units"
+ "load:Load one or more units"
+ "list-unit-files:List installed unit files"
+ "enable:Enable one or more unit files"
+ "disable:Disable one or more unit files"
+ "reenable:Reenable one or more unit files"
+ "preset:Enable/disable one or more unit files based on preset configuration"
+ "help:Show documentation for specified units"
+ "list-dependencies:Show unit dependency tree"
+ "mask:Mask one or more units"
+ "unmask:Unmask one or more units"
+ "link:Link one or more units files into the search path"
+ "is-enabled:Check whether unit files are enabled"
+ "list-jobs:List jobs"
+ "cancel:Cancel all, one, or more jobs"
+ "dump:Dump server status"
+ "snapshot:Create a snapshot"
+ "delete:Remove one or more snapshots"
+ "show-environment:Dump environment"
+ "set-environment:Set one or more environment variables"
+ "unset-environment:Unset one or more environment variables"
+ "daemon-reload:Reload systemd manager configuration"
+ "daemon-reexec:Reexecute systemd manager"
+ "default:Enter system default mode"
+ "rescue:Enter system rescue mode"
+ "emergency:Enter system emergency mode"
+ "halt:Shut down and halt the system"
+ "suspend:Suspend the system"
+ "poweroff:Shut down and power-off the system"
+ "reboot:Shut down and reboot the system"
+ "kexec:Shut down and reboot the system with kexec"
+ "exit:Ask for user instance termination"
+ )
+
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'systemctl command' _systemctl_cmds || compadd "$@"
+ else
+ local curcontext="$curcontext"
+
+ cmd="${${_systemctl_cmds[(r)$words[1]:*]%%:*}}"
+ # Deal with any aliases
+ case $cmd in
+ condrestart) cmd="try-restart";;
+ force-reload) cmd="reload-or-try-restart";;
+ esac
+
+ if (( $#cmd )); then
+ curcontext="${curcontext%:*:*}:systemctl-${cmd}:"
+
+ local update_policy
+ zstyle -s ":completion:${curcontext}:" cache-policy update_policy
+ if [[ -z "$update_policy" ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy _systemctl_caching_policy
+ fi
+
+ _call_function ret _systemctl_$cmd || _message 'no more arguments'
+ else
+ _message "unknown systemctl command: $words[1]"
+ fi
+ return ret
+ fi
+}
+
+__systemctl()
+{
+ local -a _modes
+ _modes=("--user" "--system")
+ systemctl ${words:*_modes} --full --no-legend --no-pager "$@"
+}
+
+
+# Fills the unit list
+_systemctl_all_units()
+{
+ if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS ) &&
+ ! _retrieve_cache SYS_ALL_UNITS;
+ then
+ _sys_all_units=( $(__systemctl list-units --all | { while read a b; do echo " $a"; done; }) )
+ _store_cache SYS_ALL_UNITS _sys_all_units
+ fi
+}
+
+# Fills the unit list including all file units
+_systemctl_really_all_units()
+{
+ local -a all_unit_files;
+ local -a really_all_units;
+ if ( [[ ${+_sys_really_all_units} -eq 0 ]] || _cache_invalid SYS_REALLY_ALL_UNITS ) &&
+ ! _retrieve_cache SYS_REALLY_ALL_UNITS;
+ then
+ all_unit_files=( $(__systemctl list-unit-files | { while read a b; do echo " $a"; done; }) )
+ _systemctl_all_units
+ really_all_units=($_sys_all_units $all_unit_files)
+ _sys_really_all_units=(${(u)really_all_units})
+ _store_cache SYS_REALLY_ALL_UNITS _sys_really_all_units
+ fi
+}
+
+_filter_units_by_property() {
+ local property=$1 value=$2 ; shift ; shift
+ local -a units ; units=($*)
+ local prop unit
+ for ((i=1; $i <= ${#units[*]}; i++)); do
+ # FIXME: "Failed to issue method call: Unknown unit" errors are ignored for
+ # now (related to DBUS_ERROR_UNKNOWN_OBJECT). in the future, we need to
+ # revert to calling 'systemctl show' once for all units, which is way
+ # faster
+ unit=${units[i]}
+ prop=${(f)"$(_call_program units "$service show --no-pager --property="$property" ${unit} 2>/dev/null")"}
+ if [[ "${prop}" = "$property=$value" ]]; then
+ echo " ${unit}"
+ fi
+ done
+}
+
+_systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read a b; do echo " $a"; done; }) )}
+_systemctl_inactive_units(){_sys_inactive_units=($(__systemctl list-units --all | { while read a b c d; do [[ $c == "inactive" || $c == "failed" ]] && echo " $a"; done; }) )}
+_systemctl_failed_units() {_sys_failed_units=( $(__systemctl list-units --failed | { while read a b; do echo " $a"; done; }) )}
+_systemctl_enabled_units() {_sys_enabled_units=( $(__systemctl list-unit-files | { while read a b; do [[ $b == "enabled" ]] && echo " $a"; done; }) )}
+_systemctl_disabled_units(){_sys_disabled_units=($(__systemctl list-unit-files | { while read a b; do [[ $b == "disabled" ]] && echo " $a"; done; }) )}
+_systemctl_masked_units() {_sys_masked_units=( $(__systemctl list-unit-files | { while read a b; do [[ $b == "masked" ]] && echo " $a"; done; }) )}
+
+# Completion functions for ALL_UNITS
+for fun in is-active is-failed is-enabled status show mask preset help list-dependencies ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+ _systemctl_really_all_units
+ compadd "$@" -a - _sys_really_all_units
+ }
+done
+
+# Completion functions for ENABLED_UNITS
+for fun in disable reenable ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+ _systemctl_enabled_units
+ _systemctl_disabled_units
+ compadd "$@" -a - _sys_enabled_units _sys_disabled_units
+ }
+done
+
+# Completion functions for DISABLED_UNITS
+(( $+functions[_systemctl_enable] )) || _systemctl_enable()
+{
+ _systemctl_disabled_units
+ compadd "$@" -a - _sys_disabled_units
+}
+
+# Completion functions for FAILED_UNITS
+(( $+functions[_systemctl_reset-failed] )) || _systemctl_reset-failed()
+{
+ _systemctl_failed_units
+ compadd "$@" -a - _sys_failed_units || _message "no failed unit found"
+}
+
+# Completion functions for STARTABLE_UNITS
+(( $+functions[_systemctl_start] )) || _systemctl_start()
+{
+ _systemctl_inactive_units
+ compadd "$@" -a - _sys_inactive_units
+}
+
+# Completion functions for STOPPABLE_UNITS
+for fun in stop kill try-restart condrestart ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+ _systemctl_active_units
+ compadd "$@" - $( _filter_units_by_property CanStop yes \
+ ${_sys_active_units[*]} )
+ }
+done
+
+# Completion functions for ISOLATABLE_UNITS
+(( $+functions[_systemctl_isolate] )) || _systemctl_isolate()
+{
+ _systemctl_all_units
+ compadd "$@" - $( _filter_units_by_property AllowIsolate yes \
+ ${_sys_all_units[*]} )
+}
+
+# Completion functions for RELOADABLE_UNITS
+for fun in reload reload-or-try-restart force-reload ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+ _systemctl_active_units
+ compadd "$@" - $( _filter_units_by_property CanReload yes \
+ ${_sys_active_units[*]} )
+ }
+done
+
+# Completion functions for RESTARTABLE_UNITS
+for fun in restart reload-or-restart ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+ _systemctl_all_units
+ compadd "$@" - $( _filter_units_by_property CanStart yes \
+ ${_sys_all_units[*]} | while read line; do \
+ [[ "$line" =~ \.device$ ]] || echo " $line"; \
+ done )
+ }
+done
+
+# Completion functions for MASKED_UNITS
+(( $+functions[_systemctl_unmask] )) || _systemctl_unmask()
+{
+ _systemctl_masked_units
+ compadd "$@" -a - _sys_masked_units || _message "no masked unit found"
+}
+
+# Completion functions for JOBS
+(( $+functions[_systemctl_cancel] )) || _systemctl_cancel()
+{
+ compadd "$@" - $(__systemctl list-jobs \
+ | cut -d' ' -f1 2>/dev/null ) || _message "no job found"
+}
+
+# Completion functions for SNAPSHOTS
+(( $+functions[_systemctl_delete] )) || _systemctl_delete()
+{
+ compadd "$@" - $(__systemctl list-units --type snapshot --all \
+ | cut -d' ' -f1 2>/dev/null ) || _message "no snapshot found"
+}
+
+# Completion functions for ENVS
+for fun in set-environment unset-environment ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+ local fun=$0 ; fun=${fun##_systemctl_}
+ local suf
+ if [[ "${fun}" = "set-environment" ]]; then
+ suf='-S='
+ fi
+
+ compadd "$@" ${suf} - $(systemctl show-environment \
+ | while read line; do echo " ${line%%\=}";done )
+ }
+done
+
+(( $+functions[_systemctl_link] )) || _systemctl_link() { _files }
+
+# no systemctl completion for:
+# [STANDALONE]='daemon-reexec daemon-reload default dump
+# emergency exit halt kexec list-jobs list-units
+# list-unit-files poweroff reboot rescue show-environment'
+# [NAME]='snapshot load'
+
+_systemctl_caching_policy()
+{
+ local _sysunits
+ local -a oldcache
+
+ # rebuild if cache is more than a day old
+ oldcache=( "$1"(mh+1) )
+ (( $#oldcache )) && return 0
+
+ _sysunits=($(__systemctl --all | cut -d' ' -f1))
+
+ if (( $#_sysunits )); then
+ for unit in $_sysunits; do
+ [[ "$unit" -nt "$1" ]] && return 0
+ done
+ fi
+
+ return 1
+}
+
+_outputmodes() {
+ local -a _output_opts
+ _output_opts=(short short-monotonic verbose export json json-pretty json-see cat)
+ _describe -t output 'output mode' _output_opts || compadd "$@"
+}
+
+_unit_states() {
+ local -a _states
+ _states=(loaded failed active inactive not-found listening running waiting plugged mounted exited dead masked)
+ _values -s , "${_states[@]}"
+}
+
+_unit_types() {
+ local -a _types
+ _types=(automount device mount path service snapshot socket swap target timer)
+ _values -s , "${_types[@]}"
+}
+
+_arguments -s \
+ {-h,--help}'[Show help]' \
+ '--version[Show package version]' \
+ {-t+,--type=}'[List only units of a particular type]:unit type:_unit_types' \
+ '--state=[Display units in the specifyied state]:unit state:_unit_states' \
+ \*{-p+,--property=}'[Show only properties by specific name]:unit property' \
+ {-a,--all}'[Show all units/properties, including dead/empty ones]' \
+ '--reverse[Show reverse dependencies]' \
+ '--after[Show units ordered after]' \
+ '--before[Show units ordered before]' \
+ '--failed[Show only failed units]' \
+ {-l,--full}"[Don't ellipsize unit names on output]" \
+ '--fail[When queueing a new job, fail if conflicting jobs are pending]' \
+ '--show-types[When showing sockets, show socket type]' \
+ '--irreversible[Mark transactions as irreversible]' \
+ '--ignore-dependencies[When queueing a new job, ignore all its dependencies]' \
+ {-i,--ignore-inhibitors}'[When executing a job, ignore jobs dependencies]' \
+ {-q,--quiet}'[Suppress output]' \
+ '--no-block[Do not wait until operation finished]' \
+ '--no-legend[Do not print a legend, i.e. the column headers and the footer with hints]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ '--system[Connect to system manager]' \
+ '--user[Connect to user service manager]' \
+ "--no-wall[Don't send wall message before halt/power-off/reboot]" \
+ '--global[Enable/disable unit files globally]' \
+ "--no-reload[When enabling/disabling unit files, don't reload daemon configuration]" \
+ '--no-ask-password[Do not ask for system passwords]' \
+ '--kill-who=[Who to send signal to]:killwho:(main control all)' \
+ {-s+,--signal=}'[Which signal to send]:signal:_signals' \
+ {-f,--force}'[When enabling unit files, override existing symlinks. When shutting down, execute action immediately]' \
+ '--root=[Enable unit files in the specified root directory]:directory:_directories' \
+ '--runtime[Enable unit files only temporarily until next reboot]' \
+ {-H+,--host=}'[Show information for remote host]:userathost:_sd_hosts_or_user_at_host' \
+ {-P,--privileged}'[Acquire privileges before execution]' \
+ {-n+,--lines=}'[Journal entries to show]:number of entries' \
+ {-o+,--output=}'[Change journal output mode]:modes:_outputmodes' \
+ '--plain[When used with list-dependencies, print output as a list]' \
+ '*::systemctl command:_systemctl_command'
diff --git a/shell-completion/zsh/_systemd b/shell-completion/zsh/_systemd
new file mode 100644
index 0000000000..06f03bd1e7
--- /dev/null
+++ b/shell-completion/zsh/_systemd
@@ -0,0 +1,83 @@
+#compdef systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-detect-virt systemd-machine-id-setup systemd-notify systemd-tty-ask-password-agent
+
+local curcontext="$curcontext" state lstate line
+case "$service" in
+ systemd-ask-password)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--icon=[Icon name]' \
+ '--timeout=[Timeout in sec]' \
+ '--no-tty[Ask question via agent even on TTY]' \
+ '--accept-cached[Accept cached passwords]' \
+ '--multiple[List multiple passwords if available]'
+ ;;
+ systemd-cat)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version.]' \
+ {-t+,--identifier=}'[Set syslog identifier.]' \
+ {-p+,--priority=}'[Set priority value.]:value:({0..7})' \
+ '--level-prefix=[Control whether level prefix shall be parsed.]:boolean:(1 0)' \
+ ':Message'
+ ;;
+ systemd-cgls)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ {-a,--all}'[Show all groups, including empty]' \
+ '-k[Include kernel threads in output]' \
+ ':cgroups:(cpuset cpu cpuacct memory devices freezer net_cls blkio)'
+ ;;
+ systemd-cgtop)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Print version and exit]' \
+ '(-c -m -i -t)-p[Order by path]' \
+ '(-c -p -m -i)-t[Order by number of tasks]' \
+ '(-m -p -i -t)-c[Order by CPU load]' \
+ '(-c -p -i -t)-m[Order by memory load]' \
+ '(-c -m -p -t)-i[Order by IO load]' \
+ {-d+,--delay=}'[Specify delay]' \
+ {-n+,--iterations=}'[Run for N iterations before exiting]' \
+ {-b,--batch}'[Run in batch mode, accepting no input]' \
+ '--depth=[Maximum traversal depth]'
+ ;;
+ systemd-detect-virt)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ {-c,--container}'[Only detect whether we are run in a container]' \
+ {-v,--vm}'[Only detect whether we are run in a VM]' \
+ {-q,--quiet}"[Don't output anything, just set return value]"
+ ;;
+ systemd-machine-id-setup)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]'
+ ;;
+ systemd-notify)
+ _arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--ready[Inform the init system about service start-up completion.]' \
+ '--pid=[Inform the init system about the main PID of the daemon]' \
+ '--status=[Send a free-form status string for the daemon to the init systemd]' \
+ '--booted[Returns 0 if the system was booted up with systemd]' \
+ '--readahead=[Controls disk read-ahead operations]:arguments:(cancel done noreply)'
+ ;;
+ systemd-tty-ask-password-agent)
+ _arguments \
+ {-h,--help}'[Prints a short help text and exits.]' \
+ '--version[Prints a short version string and exits.]' \
+ '--list[Lists all currently pending system password requests.]' \
+ '--query[Process all currently pending system password requests by querying the user on the calling TTY.]' \
+ '--watch[Continuously process password requests.]' \
+ '--wall[Forward password requests to wall(1).]' \
+ '--plymouth[Ask question with plymouth(8).]' \
+ '--console[Ask question on /dev/console.]'
+ ;;
+ *) _message 'eh?' ;;
+esac
+
+#vim: set ft=zsh sw=4 ts=4 et
diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze
new file mode 100644
index 0000000000..37c60f5b40
--- /dev/null
+++ b/shell-completion/zsh/_systemd-analyze
@@ -0,0 +1,43 @@
+#compdef systemd-analyze
+
+_systemd_analyze_set-log-level() {
+ local -a _levels
+ _levels=(debug info notice warning err crit alert emerg)
+ _describe -t level 'logging level' _levels || compadd "$@"
+}
+
+_systemd_analyze_command(){
+ local -a _systemd_analyze_cmds
+ # Descriptions taken from systemd-analyze --help.
+ _systemd_analyze_cmds=(
+ 'time:Print time spent in the kernel before reaching userspace'
+ 'blame:Print list of running units ordered by time to init'
+ 'critical-chain:Print a tree of the time critical chain of units'
+ 'plot:Output SVG graphic showing service initialization'
+ 'dot:Dump dependency graph (in dot(1) format)'
+ 'set-log-level:Set systemd log threshold'
+ )
+
+ if (( CURRENT == 1 )); then
+ _describe "options" _systemd_analyze_cmds
+ else
+ local curcontext="$curcontext"
+ cmd="${${_systemd_analyze_cmds[(r)$words[1]:*]%%:*}}"
+ if (( $#cmd )); then
+ if (( $+functions[_systemd_analyze_$cmd] )) && (( CURRENT == 2 )); then
+ _systemd_analyze_$cmd
+ else
+ _message "no more options"
+ fi
+ else
+ _message "unknown systemd-analyze command: $words[1]"
+ fi
+ fi
+}
+
+_arguments \
+ {-h,--help}'[Show help text.]' \
+ '--user[Shows performance data of user sessions instead of the system manager.]' \
+ '--order[When generating graph for dot, show only order]' \
+ '--require[When generating graph for dot, show only requirement]' \
+ '*::systemd-analyze commands:_systemd_analyze_command'
diff --git a/shell-completion/zsh/_systemd-coredumpctl b/shell-completion/zsh/_systemd-coredumpctl
new file mode 100644
index 0000000000..159e8ee0e2
--- /dev/null
+++ b/shell-completion/zsh/_systemd-coredumpctl
@@ -0,0 +1,36 @@
+#compdef systemd-coredumpctl
+
+_systemd-coredumpctl_command(){
+ local -a _systemd_coredumpctl_cmds
+ _systemd_coredumpctl_cmds=(
+ 'list:List available coredumps'
+ 'dump:Print coredump to stdout'
+ 'gdb:Start gdb on a coredump'
+ )
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'systemd-coredumpctl command' _systemd_coredumpctl_cmds
+ else
+ local curcontext="$curcontext"
+ local -a _dumps
+ cmd="${${_systemd_coredumpctl_cmds[(r)$words[1]:*]%%:*}}"
+ if (( $#cmd )); then
+ # user can set zstyle ':completion:*:*:systemd-coredumpctl:*' sort no for coredumps to be ordered by date, otherwise they get ordered by pid
+ _dumps=( "${(foa)$(systemd-coredumpctl list | awk 'BEGIN{OFS=":"} /^\s/ {sub(/[[ \t]+/, ""); print $5,$0}' 2>/dev/null)}" )
+ if [[ -n "$_dumps" ]]; then
+ _describe -t pids 'coredumps' _dumps
+ else
+ _message "no coredumps"
+ fi
+ else
+ _message "no more options"
+ fi
+ fi
+}
+
+_arguments \
+ {-o+,--output=}'[Write output to FILE]:output file:_files' \
+ {-F+,--field=}'[Show field in list output]:field' \
+ '--no-pager[Do not pipe output into a pager]' \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '*::systemd-coredumpctl commands:_systemd-coredumpctl_command'
diff --git a/shell-completion/zsh/_systemd-delta b/shell-completion/zsh/_systemd-delta
new file mode 100644
index 0000000000..757f1b66fb
--- /dev/null
+++ b/shell-completion/zsh/_systemd-delta
@@ -0,0 +1,15 @@
+#compdef systemd-delta
+
+_delta_type() {
+ local -a _delta_types
+ _delta_types=(masked equivalent redirected overridden unchanged)
+ _values -s , "${_delta_types[@]}"
+}
+
+_arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ '--diff=[Show a diff when overridden files differ]:boolean:(1 0)' \
+ {-t+,--type=}'[Only display a selected set of override types]:types:_delta_type' \
+ ':SUFFIX:(tmpfiles.d sysctl.d systemd/system)'
diff --git a/shell-completion/zsh/_systemd-inhibit b/shell-completion/zsh/_systemd-inhibit
new file mode 100644
index 0000000000..1ecb6dc7ee
--- /dev/null
+++ b/shell-completion/zsh/_systemd-inhibit
@@ -0,0 +1,33 @@
+#compdef systemd-inhibit
+
+_systemd_inhibit_command(){
+ if (( CURRENT == 1 )); then
+ compset -q
+ _normal
+ else
+ local n=${words[(b:2:i)[^-]*]}
+ if (( n <= CURRENT )); then
+ compset -n $n
+ _alternative \
+ 'files:file:_files' \
+ 'commands:command:_normal' && return 0
+ fi
+ _default
+ fi
+}
+
+_inhibit_what() {
+ local _inhibit
+ _inhibit=(shutdown sleep idle handle-power-key handle-suspend-key handle-hibernate-key handle-lid-switch)
+ _values -s : "${_inhibit[@]}"
+}
+
+_arguments \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--what=[Operations to inhibit]:options:_inhibit_what' \
+ '--who=[A descriptive string who is inhibiting]' \
+ '--why=[A descriptive string why is being inhibited]' \
+ '--mode=[One of block or delay]' \
+ '--list[List active inhibitors]' \
+ '*:commands:_systemd_inhibit_command'
diff --git a/shell-completion/zsh/_systemd-nspawn b/shell-completion/zsh/_systemd-nspawn
new file mode 100644
index 0000000000..a8c2411f2f
--- /dev/null
+++ b/shell-completion/zsh/_systemd-nspawn
@@ -0,0 +1,24 @@
+#compdef systemd-nspawn
+
+_nspawn-caps(){
+ local -a _caps
+ _caps=( CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH
+ CAP_FOWNER CAP_FSETID CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE
+ CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETGID CAP_SETFCAP CAP_SETPCAP
+ CAP_SETUID CAP_SYS_ADMIN CAP_SYS_CHROOT CAP_SYS_NICE CAP_SYS_PTRACE CAP_SYS_TTY_CONFIG
+ CAP_SYS_RESOURCE CAP_SYS_BOOT )
+ _values -s , 'capabilities' "$_caps[@]"
+}
+
+_arguments \
+ {-h,--help}'[Show this help]' \
+ {--directory=,-D+}'[Directory to use as file system root for the namespace container. If omitted the current directory will be used.]:directories:_directories' \
+ {--boot,-b+}'[Automatically search for an init binary and invoke it instead of a shell or a user supplied program.]' \
+ {--user=,-u+}'[Run the command under specified user, create home directory and cd into it.]' \
+ '--uuid=[Set the specified uuid for the container.]' \
+ {--controllers=,-C+}'[Makes the container appear in other hierarchies than the name=systemd:/ one. Takes a comma-separated list of controllers.]' \
+ '--private-network[Turn off networking in the container. This makes all network interfaces unavailable in the container, with the exception of the loopback device.]' \
+ '--read-only[Mount the root file system read only for the container.]' \
+ '--capability=[List one or more additional capabilities to grant the container.]:capabilities:_nspawn-caps' \
+ "--link-journal=[Control whether the container's journal shall be made visible to the host system.]:options:(no, host, guest, auto)" \
+ '-j[Equivalent to --link-journal=guest.]'
diff --git a/shell-completion/zsh/_systemd-tmpfiles b/shell-completion/zsh/_systemd-tmpfiles
new file mode 100644
index 0000000000..4913dedd2c
--- /dev/null
+++ b/shell-completion/zsh/_systemd-tmpfiles
@@ -0,0 +1,10 @@
+#compdef systemd-tmpfiles
+
+_arguments \
+ '--create[Create, set ownership/permissions based on the config files.]' \
+ '--clean[Clean up all files and directories with an age parameter configured.]' \
+ '--remove[All files and directories marked with r, R in the configuration files are removed.]' \
+ '--prefix=[Only apply rules that apply to paths with the specified prefix.]' \
+ '--exclude-prefix=[Ignore rules that apply to paths with the specified prefix.]' \
+ '--help[Prints a short help text and exits.]' \
+ '*::files:_files'
diff --git a/shell-completion/zsh/_timedatectl b/shell-completion/zsh/_timedatectl
new file mode 100644
index 0000000000..987c2de88d
--- /dev/null
+++ b/shell-completion/zsh/_timedatectl
@@ -0,0 +1,65 @@
+#compdef timedatectl
+
+_timedatectl_set-timezone(){
+ local -a _timezones
+ _timezones=( ${(f)"$(_call_program timezones "${service}" list-timezones)"} )
+ compadd "$_timezones[@]"
+}
+
+_timedatectl_set-time(){
+ _message "YYYY-MM-DD HH:MM:SS"
+}
+
+_timedatectl_set-local-rtc(){
+ local -a _options
+ _options=(
+ '0:Maintain RTC in universal time'
+ '1:Maintain RTC in local time'
+ )
+ _describe options _options
+}
+
+_timedatectl_set-ntp(){
+ local -a _options
+ _options=(
+ '0:Disable NTP based network time configuration'
+ '1:Enable NTP based network time configuration'
+ )
+ _describe options _options
+}
+
+_timedatectl_command(){
+ local -a _timedatectl_cmds
+ _timedatectl_cmds=(
+ 'status:Show current time settings'
+ 'set-time:Set system time'
+ 'set-timezone:Set system timezone'
+ 'list-timezones:Show known timezones'
+ 'set-local-rtc:Control whether RTC is in local time'
+ 'set-ntp:Control whether NTP is enabled'
+ )
+ if (( CURRENT == 1 )); then
+ _describe -t commands 'timedatectl command' _timedatectl_cmds
+ else
+ local curcontext="$curcontext"
+ cmd="${${_timedatectl_cmds[(r)$words[1]:*]%%:*}}"
+ if (( $#cmd )); then
+ if (( $+functions[_timedatectl_$cmd] )); then
+ _timedatectl_$cmd
+ else
+ _message "no more options"
+ fi
+ else
+ _message "unknown timedatectl command: $words[1]"
+ fi
+ fi
+}
+
+_arguments -s \
+ {-h,--help}'[Show this help]' \
+ '--version[Show package version]' \
+ '--adjust-system-clock[Adjust system clock when changing local RTC mode]' \
+ '--no-pager[Do not pipe output into a pager]' \
+ '--no-ask-password[Do not prompt for password]' \
+ {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
+ '*::timedatectl commands:_timedatectl_command'
diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm
new file mode 100644
index 0000000000..04e9f8dd8e
--- /dev/null
+++ b/shell-completion/zsh/_udevadm
@@ -0,0 +1,141 @@
+#compdef udevadm
+
+_udevadm_info(){
+ _arguments \
+ '--query=[Query the database for specified type of device data. It needs the --path or --name to identify the specified device.]:type:(name symlink path property all)' \
+ '--path=[The devpath of the device to query.]:sys files:_files -P /sys/ -W /sys' \
+ '--name=[The name of the device node or a symlink to query]:device files:_files -P /dev/ -W /dev' \
+ '--root[Print absolute paths in name or symlink query.]' \
+ '--attribute-walk[Print all sysfs properties of the specified device that can be used in udev rules to match the specified device]' \
+ '--export[Print output as key/value pairs.]' \
+ '--export-prefix=[Add a prefix to the key name of exported values.]:prefix' \
+ '--device-id-of-file=[Print major/minor numbers of the underlying device, where the file lives on.]:files:_udevadm_mounts' \
+ '--export-db[Export the content of the udev database.]' \
+ '--cleanup-db[Cleanup the udev database.]'
+}
+
+_udevadm_trigger(){
+ _arguments \
+ '--verbose[Print the list of devices which will be triggered.]' \
+ '--dry-run[Do not actually trigger the event.]' \
+ '--type=[Trigger a specific type of devices.]:types:(devices subsystems failed)' \
+ '--action=[Type of event to be triggered.]:actions:(add change remove)' \
+ '--subsystem-match=[Trigger events for devices which belong to a matching subsystem.]' \
+ '--subsystem-nomatch=[Do not trigger events for devices which belong to a matching subsystem.]' \
+ '--attr-match=attribute=[Trigger events for devices with a matching sysfs attribute.]' \
+ '--attr-nomatch=attribute=[Do not trigger events for devices with a matching sysfs attribute.]' \
+ '--property-match=[Trigger events for devices with a matching property value.]' \
+ '--tag-match=property[Trigger events for devices with a matching tag.]' \
+ '--sysname-match=[Trigger events for devices with a matching sys device name.]' \
+ '--parent-match=[Trigger events for all children of a given device.]'
+}
+
+_udevadm_settle(){
+ _arguments \
+ '--timeout=[Maximum number of seconds to wait for the event queue to become empty.]' \
+ '--seq-start=[Wait only for events after the given sequence number.]' \
+ '--seq-end=[Wait only for events before the given sequence number.]' \
+ '--exit-if-exists=[Stop waiting if file exists.]:files:_files' \
+ '--quiet[Do not print any output, like the remaining queue entries when reaching the timeout.]' \
+ '--help[Print help text.]'
+}
+
+_udevadm_control(){
+ _arguments \
+ '--exit[Signal and wait for systemd-udevd to exit.]' \
+ '--log-priority=[Set the internal log level of systemd-udevd.]:priorities:(err info debug)' \
+ '--stop-exec-queue[Signal systemd-udevd to stop executing new events. Incoming events will be queued.]' \
+ '--start-exec-queue[Signal systemd-udevd to enable the execution of events.]' \
+ '--reload[Signal systemd-udevd to reload the rules files and other databases like the kernel module index.]' \
+ '--property=[Set a global property for all events.]' \
+ '--children-max=[Set the maximum number of events.]' \
+ '--timeout=[The maximum number of seconds to wait for a reply from systemd-udevd.]' \
+ '--help[Print help text.]'
+}
+
+_udevadm_monitor(){
+ _arguments \
+ '--kernel[Print the kernel uevents.]' \
+ '--udev[Print the udev event after the rule processing.]' \
+ '--property[Also print the properties of the event.]' \
+ '--subsystem-match=[Filter events by subsystem/\[devtype\].]' \
+ '--tag-match=[Filter events by property.]' \
+ '--help[Print help text.]'
+}
+
+_udevadm_test(){
+ _arguments \
+ '--action=[The action string.]:actions:(add change remove)' \
+ '--subsystem=[The subsystem string.]' \
+ '--help[Print help text.]' \
+ '*::devpath:_files -P /sys/ -W /sys'
+}
+
+_udevadm_test-builtin(){
+ if (( CURRENT == 2 )); then
+ _arguments \
+ '--help[Print help text]' \
+ '*::builtins:(blkid btrfs hwdb input_id kmod path_id usb_id uaccess)'
+ elif (( CURRENT == 3 )); then
+ _arguments \
+ '--help[Print help text]' \
+ '*::syspath:_files -P /sys -W /sys'
+ else
+ _arguments \
+ '--help[Print help text]'
+ fi
+}
+
+_udevadm_mounts(){
+ local dev_tmp dpath_tmp mp_tmp mline
+
+ tmp=( "${(@f)$(< /etc/mtab)}" )
+ dev_tmp=( "${(@)${(@)tmp%% *}:#none}" )
+ mp_tmp=( "${(@)${(@)tmp#* }%% *}" )
+
+ local MATCH
+ mp_tmp=("${(@q)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}")
+ dpath_tmp=( "${(@Mq)dev_tmp:#/*}" )
+ dev_tmp=( "${(@q)dev_tmp:#/*}" )
+
+ _alternative \
+ 'device-paths: device path:compadd -a dpath_tmp' \
+ 'directories:mount point:compadd -a mp_tmp'
+}
+
+
+_udevadm_command(){
+ local -a _udevadm_cmds
+ _udevadm_cmds=(
+ 'info:query sysfs or the udev database'
+ 'trigger:request events from the kernel'
+ 'settle:wait for the event queue to finish'
+ 'control:control the udev daemon'
+ 'monitor:listen to kernel and udev events'
+ 'test:test an event run'
+ 'test-builtin:test a built-in command'
+ )
+
+ if ((CURRENT == 1)); then
+ _describe -t commands 'udevadm commands' _udevadm_cmds
+ else
+ local curcontext="$curcontext"
+ cmd="${${_udevadm_cmds[(r)$words[1]:*]%%:*}}"
+ if (($#cmd)); then
+ if (( $+functions[_udevadm_$cmd] )); then
+ _udevadm_$cmd
+ else
+ _message "no options for $cmd"
+ fi
+ else
+ _message "no more options"
+ fi
+ fi
+}
+
+
+_arguments \
+ '--debug[Print debug messages to stderr]' \
+ '--version[Print version number]' \
+ '--help[Print help text]' \
+ '*::udevadm commands:_udevadm_command'
diff --git a/src/activate/activate.c b/src/activate/activate.c
index 87526d47cc..83d25b13af 100644
--- a/src/activate/activate.c
+++ b/src/activate/activate.c
@@ -290,16 +290,15 @@ static int do_accept(const char* name, char **argv, char **envp, int fd) {
}
/* SIGCHLD handler. */
-static void sigchld_hdl(int sig, siginfo_t *t, void *data)
-{
+static void sigchld_hdl(int sig, siginfo_t *t, void *data) {
log_info("Child %d died with code %d", t->si_pid, t->si_status);
- /* Wait for a dead child. */
- waitpid(t->si_pid, NULL, 0);
+ /* Wait for a dead child. */
+ waitpid(t->si_pid, NULL, 0);
}
static int install_chld_handler(void) {
int r;
- struct sigaction act;
+ struct sigaction act;
zero(act);
act.sa_flags = SA_SIGINFO;
act.sa_sigaction = sigchld_hdl;
diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c
index bb86ec7da8..27d063c548 100644
--- a/src/analyze/systemd-analyze.c
+++ b/src/analyze/systemd-analyze.c
@@ -38,6 +38,7 @@
#include "unit-name.h"
#include "special.h"
#include "hashmap.h"
+#include "pager.h"
#define SCALE_X (0.1 / 1000.0) /* pixels per us */
#define SCALE_Y 20.0
@@ -67,8 +68,8 @@ static enum dot {
} arg_dot = DEP_ALL;
static char** arg_dot_from_patterns = NULL;
static char** arg_dot_to_patterns = NULL;
-
-usec_t arg_fuzz = 0;
+static usec_t arg_fuzz = 0;
+static bool arg_no_pager = false;
struct boot_times {
usec_t firmware_time;
@@ -78,7 +79,12 @@ struct boot_times {
usec_t initrd_time;
usec_t userspace_time;
usec_t finish_time;
+ usec_t generators_start_time;
+ usec_t generators_finish_time;
+ usec_t unitsload_start_time;
+ usec_t unitsload_finish_time;
};
+
struct unit_times {
char *name;
usec_t ixt;
@@ -88,6 +94,14 @@ struct unit_times {
usec_t time;
};
+static void pager_open_if_enabled(void) {
+
+ if (arg_no_pager)
+ return;
+
+ pager_open(false);
+}
+
static int bus_get_uint64_property(DBusConnection *bus, const char *path, const char *interface, const char *property, uint64_t *val) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
DBusMessageIter iter, sub;
@@ -303,7 +317,27 @@ static int acquire_boot_times(DBusConnection *bus, struct boot_times **bt) {
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"FinishTimestampMonotonic",
- &times.finish_time) < 0)
+ &times.finish_time) < 0 ||
+ bus_get_uint64_property(bus,
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "GeneratorsStartTimestampMonotonic",
+ &times.generators_start_time) < 0 ||
+ bus_get_uint64_property(bus,
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "GeneratorsFinishTimestampMonotonic",
+ &times.generators_finish_time) < 0 ||
+ bus_get_uint64_property(bus,
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "UnitsLoadStartTimestampMonotonic",
+ &times.unitsload_start_time) < 0 ||
+ bus_get_uint64_property(bus,
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "UnitsLoadFinishTimestampMonotonic",
+ &times.unitsload_finish_time) < 0)
return -EIO;
if (times.finish_time <= 0) {
@@ -459,7 +493,8 @@ static int analyze_plot(DBusConnection *bus) {
svg("<svg width=\"%.0fpx\" height=\"%.0fpx\" version=\"1.1\" "
"xmlns=\"http://www.w3.org/2000/svg\">\n\n",
- 80.0 + width, 150.0 + (m * SCALE_Y));
+ 80.0 + width, 150.0 + (m * SCALE_Y) +
+ 5 * SCALE_Y /* legend */);
/* write some basic info as a comment, including some help */
svg("<!-- This file is a systemd-analyze SVG file. It is best rendered in a -->\n"
@@ -480,23 +515,23 @@ static int analyze_plot(DBusConnection *bus) {
" rect.firmware { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
" rect.loader { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
" rect.userspace { fill: rgb(150,150,150); fill-opacity: 0.7; }\n"
+ " rect.generators { fill: rgb(102,204,255); fill-opacity: 0.7; }\n"
+ " rect.unitsload { fill: rgb( 82,184,255); fill-opacity: 0.7; }\n"
" rect.box { fill: rgb(240,240,240); stroke: rgb(192,192,192); }\n"
" line { stroke: rgb(64,64,64); stroke-width: 1; }\n"
"// line.sec1 { }\n"
" line.sec5 { stroke-width: 2; }\n"
" line.sec01 { stroke: rgb(224,224,224); stroke-width: 1; }\n"
- " text { font-family: Verdana, Helvetica; font-size: 10; }\n"
- " text.left { font-family: Verdana, Helvetica; font-size: 10; text-anchor: start; }\n"
- " text.right { font-family: Verdana, Helvetica; font-size: 10; text-anchor: end; }\n"
- " text.sec { font-size: 8; }\n"
+ " text { font-family: Verdana, Helvetica; font-size: 14px; }\n"
+ " text.left { font-family: Verdana, Helvetica; font-size: 14px; text-anchor: start; }\n"
+ " text.right { font-family: Verdana, Helvetica; font-size: 14px; text-anchor: end; }\n"
+ " text.sec { font-size: 10px; }\n"
" ]]>\n </style>\n</defs>\n\n");
svg("<text x=\"20\" y=\"50\">%s</text>", pretty_times);
svg("<text x=\"20\" y=\"30\">%s %s (%s %s) %s</text>",
isempty(osname) ? "Linux" : osname,
name.nodename, name.release, name.version, name.machine);
- svg("<text x=\"20\" y=\"%.0f\">Legend: Red = Activating; Pink = Active; Dark Pink = Deactivating</text>",
- 120.0 + (m *SCALE_Y));
svg("<g transform=\"translate(%.3f,100)\">\n", 20.0 + (SCALE_X * boot->firmware_time));
svg_graph_box(m, -boot->firmware_time, boot->finish_time);
@@ -521,8 +556,10 @@ static int analyze_plot(DBusConnection *bus) {
svg_text(true, boot->initrd_time, y, "initrd");
y++;
}
- svg_bar("userspace", boot->userspace_time, boot->finish_time, y);
- svg_text("left", boot->userspace_time, y, "userspace");
+ svg_bar("active", boot->userspace_time, boot->finish_time, y);
+ svg_bar("generators", boot->generators_start_time, boot->generators_finish_time, y);
+ svg_bar("unitsload", boot->unitsload_start_time, boot->unitsload_finish_time, y);
+ svg_text("left", boot->userspace_time, y, "systemd");
y++;
for (u = times; u < times + n; u++) {
@@ -544,6 +581,25 @@ static int analyze_plot(DBusConnection *bus) {
svg_text(b, u->ixt, y, "%s", u->name);
y++;
}
+
+ /* Legend */
+ y++;
+ svg_bar("activating", 0, 300000, y);
+ svg_text("right", 400000, y, "Activating");
+ y++;
+ svg_bar("active", 0, 300000, y);
+ svg_text("right", 400000, y, "Active");
+ y++;
+ svg_bar("deactivating", 0, 300000, y);
+ svg_text("right", 400000, y, "Deactivating");
+ y++;
+ svg_bar("generators", 0, 300000, y);
+ svg_text("right", 400000, y, "Generators");
+ y++;
+ svg_bar("unitsload", 0, 300000, y);
+ svg_text("right", 400000, y, "Loading unit files");
+ y++;
+
svg("</g>\n\n");
svg("</svg>");
@@ -553,7 +609,6 @@ static int analyze_plot(DBusConnection *bus) {
return 0;
}
-
static int list_dependencies_print(const char *name, unsigned int level, unsigned int branches,
bool last, struct unit_times *times, struct boot_times *boot) {
unsigned int i;
@@ -779,7 +834,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, unsigned
return 0;
}
-static int list_dependencies(DBusConnection *bus) {
+static int list_dependencies(DBusConnection *bus, const char *name) {
_cleanup_strv_free_ char **units = NULL;
char ts[FORMAT_TIMESPAN_MAX];
struct unit_times *times;
@@ -794,7 +849,7 @@ static int list_dependencies(DBusConnection *bus) {
assert(bus);
- path = unit_dbus_path_from_name(SPECIAL_DEFAULT_TARGET);
+ path = unit_dbus_path_from_name(name);
if (path == NULL)
return -EINVAL;
@@ -843,10 +898,10 @@ static int list_dependencies(DBusConnection *bus) {
printf("%s\n", id);
}
- return list_dependencies_one(bus, SPECIAL_DEFAULT_TARGET, 0, &units, 0);
+ return list_dependencies_one(bus, name, 0, &units, 0);
}
-static int analyze_critical_chain(DBusConnection *bus) {
+static int analyze_critical_chain(DBusConnection *bus, char *names[]) {
struct unit_times *times;
int n, r;
unsigned int i;
@@ -867,10 +922,17 @@ static int analyze_critical_chain(DBusConnection *bus) {
}
unit_times_hashmap = h;
+ pager_open_if_enabled();
+
puts("The time after the unit is active or started is printed after the \"@\" character.\n"
"The time the unit takes to start is printed after the \"+\" character.\n");
- list_dependencies(bus);
+ if (!strv_isempty(names)) {
+ char **name;
+ STRV_FOREACH(name, names)
+ list_dependencies(bus, *name);
+ } else
+ list_dependencies(bus, SPECIAL_DEFAULT_TARGET);
hashmap_free(h);
free_unit_times(times, (unsigned) n);
@@ -888,6 +950,8 @@ static int analyze_blame(DBusConnection *bus) {
qsort(times, n, sizeof(struct unit_times), compare_unit_time);
+ pager_open_if_enabled();
+
for (i = 0; i < (unsigned) n; i++) {
char ts[FORMAT_TIMESPAN_MAX];
@@ -1112,8 +1176,97 @@ static int dot(DBusConnection *bus, char* patterns[]) {
return 0;
}
-static void analyze_help(void)
-{
+static int dump(DBusConnection *bus, char **args) {
+ _cleanup_free_ DBusMessage *reply = NULL;
+ DBusError error;
+ int r;
+ const char *text;
+
+ dbus_error_init(&error);
+
+ if (!strv_isempty(args)) {
+ log_error("Too many arguments.");
+ return -E2BIG;
+ }
+
+ pager_open_if_enabled();
+
+ r = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "Dump",
+ &reply,
+ NULL,
+ DBUS_TYPE_INVALID);
+ if (r < 0)
+ return r;
+
+ if (!dbus_message_get_args(reply, &error,
+ DBUS_TYPE_STRING, &text,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse reply: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ return -EIO;
+ }
+
+ fputs(text, stdout);
+ return 0;
+}
+
+static int set_log_level(DBusConnection *bus, char **args) {
+ _cleanup_dbus_error_free_ DBusError error;
+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+ DBusMessageIter iter, sub;
+ const char* property = "LogLevel";
+ const char* interface = "org.freedesktop.systemd1.Manager";
+ const char* value;
+
+ assert(bus);
+ assert(args);
+
+ if (strv_length(args) != 1) {
+ log_error("This command expects one argument only.");
+ return -E2BIG;
+ }
+
+ value = args[0];
+ dbus_error_init(&error);
+
+ m = dbus_message_new_method_call("org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.DBus.Properties",
+ "Set");
+ if (!m)
+ return log_oom();
+
+ dbus_message_iter_init_append(m, &iter);
+
+ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &interface) ||
+ !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property) ||
+ !dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, "s", &sub))
+ return log_oom();
+
+ if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &value))
+ return log_oom();
+
+ if (!dbus_message_iter_close_container(&iter, &sub))
+ return log_oom();
+
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
+ if (!reply) {
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
+ return -EIO;
+ }
+
+ return 0;
+}
+
+static void analyze_help(void) {
+
+ pager_open_if_enabled();
+
printf("%s [OPTIONS...] {COMMAND} ...\n\n"
"Process systemd profiling information\n\n"
" -h --help Show this help\n"
@@ -1128,13 +1281,16 @@ static void analyze_help(void)
" --fuzz=TIMESPAN When printing the tree of the critical chain, print also\n"
" services, which finished TIMESPAN earlier, than the\n"
" latest in the branch. The unit of TIMESPAN is seconds\n"
- " unless specified with a different unit, i.e. 50ms\n\n"
+ " unless specified with a different unit, i.e. 50ms\n"
+ " --no-pager Do not pipe output into a pager\n\n"
"Commands:\n"
" time Print time spent in the kernel before reaching userspace\n"
" blame Print list of running units ordered by time to init\n"
" critical-chain Print a tree of the time critical chain of units\n"
" plot Output SVG graphic showing service initialization\n"
- " dot Dump dependency graph (in dot(1) format)\n\n",
+ " dot Output dependency graph in dot(1) format\n"
+ " set-log-level LEVEL Set logging threshold for systemd\n"
+ " dump Output state serialization of service manager\n",
program_invocation_short_name);
/* When updating this list, including descriptions, apply
@@ -1142,8 +1298,7 @@ static void analyze_help(void)
* shell-completion/systemd-zsh-completion.zsh too. */
}
-static int parse_argv(int argc, char *argv[])
-{
+static int parse_argv(int argc, char *argv[]) {
int r;
enum {
@@ -1154,20 +1309,22 @@ static int parse_argv(int argc, char *argv[])
ARG_SYSTEM,
ARG_DOT_FROM_PATTERN,
ARG_DOT_TO_PATTERN,
- ARG_FUZZ
+ ARG_FUZZ,
+ ARG_NO_PAGER
};
static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "version", no_argument, NULL, ARG_VERSION },
- { "order", no_argument, NULL, ARG_ORDER },
- { "require", no_argument, NULL, ARG_REQUIRE },
- { "user", no_argument, NULL, ARG_USER },
- { "system", no_argument, NULL, ARG_SYSTEM },
- { "from-pattern", required_argument, NULL, ARG_DOT_FROM_PATTERN},
- { "to-pattern", required_argument, NULL, ARG_DOT_TO_PATTERN },
- { "fuzz", required_argument, NULL, ARG_FUZZ },
- { NULL, 0, NULL, 0 }
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "order", no_argument, NULL, ARG_ORDER },
+ { "require", no_argument, NULL, ARG_REQUIRE },
+ { "user", no_argument, NULL, ARG_USER },
+ { "system", no_argument, NULL, ARG_SYSTEM },
+ { "from-pattern", required_argument, NULL, ARG_DOT_FROM_PATTERN },
+ { "to-pattern", required_argument, NULL, ARG_DOT_TO_PATTERN },
+ { "fuzz", required_argument, NULL, ARG_FUZZ },
+ { "no-pager", no_argument, NULL, ARG_NO_PAGER },
+ { NULL, 0, NULL, 0 }
};
assert(argc >= 0);
@@ -1218,6 +1375,10 @@ static int parse_argv(int argc, char *argv[])
return r;
break;
+ case ARG_NO_PAGER:
+ arg_no_pager = true;
+ break;
+
case -1:
return 1;
@@ -1240,31 +1401,39 @@ int main(int argc, char *argv[]) {
log_open();
r = parse_argv(argc, argv);
- if (r < 0)
- return EXIT_FAILURE;
- else if (r <= 0)
- return EXIT_SUCCESS;
+ if (r <= 0)
+ goto finish;
bus = dbus_bus_get(arg_scope == UNIT_FILE_SYSTEM ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, NULL);
- if (!bus)
- return EXIT_FAILURE;
+ if (!bus) {
+ r = -EIO;
+ goto finish;
+ }
if (!argv[optind] || streq(argv[optind], "time"))
r = analyze_time(bus);
else if (streq(argv[optind], "blame"))
r = analyze_blame(bus);
else if (streq(argv[optind], "critical-chain"))
- r = analyze_critical_chain(bus);
+ r = analyze_critical_chain(bus, argv+optind+1);
else if (streq(argv[optind], "plot"))
r = analyze_plot(bus);
else if (streq(argv[optind], "dot"))
r = dot(bus, argv+optind+1);
+ else if (streq(argv[optind], "dump"))
+ r = dump(bus, argv+optind+1);
+ else if (streq(argv[optind], "set-log-level"))
+ r = set_log_level(bus, argv+optind+1);
else
log_error("Unknown operation '%s'.", argv[optind]);
+ dbus_connection_unref(bus);
+
+finish:
+ pager_close();
+
strv_free(arg_dot_from_patterns);
strv_free(arg_dot_to_patterns);
- dbus_connection_unref(bus);
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
new file mode 100644
index 0000000000..9b2eada397
--- /dev/null
+++ b/src/backlight/backlight.c
@@ -0,0 +1,132 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <libudev.h>
+
+#include "util.h"
+#include "mkdir.h"
+#include "fileio.h"
+
+int main(int argc, char *argv[]) {
+ struct udev *udev = NULL;
+ struct udev_device *device = NULL;
+ _cleanup_free_ char *saved = NULL;
+ int r;
+
+ if (argc != 3) {
+ log_error("This program requires two arguments.");
+ return EXIT_FAILURE;
+ }
+
+ log_set_target(LOG_TARGET_AUTO);
+ log_parse_environment();
+ log_open();
+
+ umask(0022);
+
+ r = mkdir_p("/var/lib/systemd/backlight", 0755);
+ if (r < 0) {
+ log_error("Failed to create backlight directory: %s", strerror(-r));
+ goto finish;
+ }
+
+ udev = udev_new();
+ if (!udev) {
+ r = log_oom();
+ goto finish;
+ }
+
+ errno = 0;
+ device = udev_device_new_from_subsystem_sysname(udev, "backlight", argv[2]);
+ if (!device) {
+ if (errno != 0) {
+ log_error("Failed to get backlight device: %m");
+ r = -errno;
+ } else
+ r = log_oom();
+
+ goto finish;
+ }
+
+ if (!streq_ptr(udev_device_get_subsystem(device), "backlight")) {
+ log_error("Not a backlight device: %s", argv[2]);
+ r = -ENODEV;
+ goto finish;
+ }
+
+ saved = strappend("/var/lib/systemd/backlight/", udev_device_get_sysname(device));
+ if (!saved) {
+ r = log_oom();
+ goto finish;
+ }
+
+ if (streq(argv[1], "load")) {
+ _cleanup_free_ char *value = NULL;
+
+ r = read_one_line_file(saved, &value);
+ if (r < 0) {
+
+ if (r == -ENOENT) {
+ r = 0;
+ goto finish;
+ }
+
+ log_error("Failed to read %s: %s", saved, strerror(-r));
+ goto finish;
+ }
+
+ r = udev_device_set_sysattr_value(device, "brightness", value);
+ if (r < 0) {
+ log_error("Failed to write system attribute: %s", strerror(-r));
+ goto finish;
+ }
+
+ } else if (streq(argv[1], "save")) {
+ const char *value;
+
+ value = udev_device_get_sysattr_value(device, "brightness");
+ if (!value) {
+ log_error("Failed to read system attribute: %s", strerror(-r));
+ goto finish;
+ }
+
+ r = write_string_file(saved, value);
+ if (r < 0) {
+ log_error("Failed to write %s: %s", saved, strerror(-r));
+ goto finish;
+ }
+
+ } else {
+ log_error("Unknown verb %s.", argv[1]);
+ r = -EINVAL;
+ goto finish;
+ }
+
+finish:
+ if (device)
+ udev_device_unref(device);
+
+ if (udev)
+ udev_unref(udev);
+
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+
+}
diff --git a/src/boot/boot-efi.c b/src/boot/boot-efi.c
index 9960c4d742..33840b6864 100644
--- a/src/boot/boot-efi.c
+++ b/src/boot/boot-efi.c
@@ -174,7 +174,7 @@ int boot_info_query(struct boot_info *info) {
efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderFirmwareInfo", &info->fw_info);
efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderImageIdentifier", &info->loader_image_path);
tilt_slashes(info->loader_image_path);
- efi_get_loader_device_part_uuid(&info->loader_part_uuid);
+ efi_loader_get_device_part_uuid(&info->loader_part_uuid);
boot_loader_read_entries(info);
efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderEntrySelected", &loader_active);
diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c
index 8be5a27afa..14ccd3efe5 100644
--- a/src/bootchart/bootchart.c
+++ b/src/bootchart/bootchart.c
@@ -3,7 +3,7 @@
/***
This file is part of systemd.
- Copyright (C) 2009-2013 Intel Coproration
+ Copyright (C) 2009-2013 Intel Corporation
Authors:
Auke Kok <auke-jan.h.kok@intel.com>
diff --git a/src/bootchart/bootchart.h b/src/bootchart/bootchart.h
index d0273421de..968c38da26 100644
--- a/src/bootchart/bootchart.h
+++ b/src/bootchart/bootchart.h
@@ -5,7 +5,7 @@
/***
This file is part of systemd.
- Copyright (C) 2009-2013 Intel Coproration
+ Copyright (C) 2009-2013 Intel Corporation
Authors:
Auke Kok <auke-jan.h.kok@intel.com>
diff --git a/src/bootchart/store.c b/src/bootchart/store.c
index b2afb8d13b..f8c97c2324 100755..100644
--- a/src/bootchart/store.c
+++ b/src/bootchart/store.c
@@ -3,7 +3,7 @@
/***
This file is part of systemd.
- Copyright (C) 2009-2013 Intel Coproration
+ Copyright (C) 2009-2013 Intel Corporation
Authors:
Auke Kok <auke-jan.h.kok@intel.com>
diff --git a/src/bootchart/store.h b/src/bootchart/store.h
index 7c8ad284da..f211b6f53b 100644
--- a/src/bootchart/store.h
+++ b/src/bootchart/store.h
@@ -5,7 +5,7 @@
/***
This file is part of systemd.
- Copyright (C) 2009-2013 Intel Coproration
+ Copyright (C) 2009-2013 Intel Corporation
Authors:
Auke Kok <auke-jan.h.kok@intel.com>
diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c
index 859cf81c22..5eee2d1987 100644
--- a/src/bootchart/svg.c
+++ b/src/bootchart/svg.c
@@ -3,7 +3,7 @@
/***
This file is part of systemd.
- Copyright (C) 2009-2013 Intel Coproration
+ Copyright (C) 2009-2013 Intel Corporation
Authors:
Auke Kok <auke-jan.h.kok@intel.com>
diff --git a/src/bootchart/svg.h b/src/bootchart/svg.h
index e7369f5111..df3a7bf8ef 100644
--- a/src/bootchart/svg.h
+++ b/src/bootchart/svg.h
@@ -5,7 +5,7 @@
/***
This file is part of systemd.
- Copyright (C) 2009-2013 Intel Coproration
+ Copyright (C) 2009-2013 Intel Corporation
Authors:
Auke Kok <auke-jan.h.kok@intel.com>
diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c
index ef3e5672ab..c689b5c471 100644
--- a/src/cgls/cgls.c
+++ b/src/cgls/cgls.c
@@ -34,6 +34,7 @@
#include "pager.h"
#include "build.h"
#include "output-mode.h"
+#include "fileio.h"
static bool arg_no_pager = false;
static bool arg_kernel_threads = false;
@@ -49,7 +50,7 @@ static void help(void) {
" --version Show package version\n"
" --no-pager Do not pipe output into a pager\n"
" -a --all Show all groups, including empty\n"
- " --full Do not ellipsize output\n"
+ " -l --full Do not ellipsize output\n"
" -k Include kernel threads in output\n"
" -M --machine Show container\n",
program_invocation_short_name);
@@ -60,7 +61,6 @@ static int parse_argv(int argc, char *argv[]) {
enum {
ARG_NO_PAGER = 0x100,
ARG_VERSION,
- ARG_FULL,
};
static const struct option options[] = {
@@ -68,7 +68,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "version", no_argument, NULL, ARG_VERSION },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "all", no_argument, NULL, 'a' },
- { "full", no_argument, NULL, ARG_FULL },
+ { "full", no_argument, NULL, 'l' },
{ "machine", required_argument, NULL, 'M' },
{ NULL, 0, NULL, 0 }
};
@@ -78,7 +78,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 1);
assert(argv);
- while ((c = getopt_long(argc, argv, "hkaM:", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "hkalM:", options, NULL)) >= 0) {
switch (c) {
@@ -99,7 +99,7 @@ static int parse_argv(int argc, char *argv[]) {
arg_all = true;
break;
- case ARG_FULL:
+ case 'l':
arg_full = true;
break;
@@ -156,7 +156,9 @@ int main(int argc, char *argv[]) {
for (i = optind; i < argc; i++) {
int q;
- printf("%s:\n", argv[i]);
+
+ fprintf(stdout, "%s:\n", argv[i]);
+ fflush(stdout);
if (arg_machine)
root = strjoin("machine/", arg_machine, "/", argv[i], NULL);
@@ -185,9 +187,11 @@ int main(int argc, char *argv[]) {
r = show_cgroup_by_path(p, NULL, 0,
arg_kernel_threads, output_flags);
} else {
- if (arg_machine)
- r = cg_get_machine_path(arg_machine, &root);
- else
+ if (arg_machine) {
+ char *m;
+ m = strappenda("/run/systemd/machines/", arg_machine);
+ r = parse_env_file(m, NEWLINE, "CGROUP", &root, NULL);
+ } else
r = cg_get_root_path(&root);
if (r < 0) {
log_error("Failed to get %s path: %s",
diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c
index 7a6173e2a2..a47949a180 100644
--- a/src/cgroups-agent/cgroups-agent.c
+++ b/src/cgroups-agent/cgroups-agent.c
@@ -48,26 +48,19 @@ int main(int argc, char *argv[]) {
* this to avoid an activation loop when we start dbus when we
* are called when the dbus service is shut down. */
- if (!(bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error))) {
-#ifndef LEGACY
- dbus_error_free(&error);
-
- /* Retry with the pre v21 socket name, to ease upgrades */
- if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", &error))) {
-#endif
- log_error("Failed to get D-Bus connection: %s", bus_error_message(&error));
- goto finish;
- }
-#ifndef LEGACY
+ bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error);
+ if (!bus) {
+ log_warning("Failed to get D-Bus connection: %s", bus_error_message(&error));
+ goto finish;
}
-#endif
if (bus_check_peercred(bus) < 0) {
log_error("Bus owner not root.");
goto finish;
}
- if (!(m = dbus_message_new_signal("/org/freedesktop/systemd1/agent", "org.freedesktop.systemd1.Agent", "Released"))) {
+ m = dbus_message_new_signal("/org/freedesktop/systemd1/agent", "org.freedesktop.systemd1.Agent", "Released");
+ if (!m) {
log_error("Could not allocate signal message.");
goto finish;
}
diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index 1e21b0074d..cacf705a0a 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -134,7 +134,7 @@ static int process(const char *controller, const char *path, Hashmap *a, Hashmap
/* Regardless which controller, let's find the maximum number
* of processes in any of it */
- r = cg_enumerate_tasks(controller, path, &f);
+ r = cg_enumerate_processes(controller, path, &f);
if (r < 0)
return r;
@@ -824,9 +824,9 @@ int main(int argc, char *argv[]) {
case '?':
case 'h':
fprintf(stdout,
- "\t<" ON "P" OFF "> By path; <" ON "T" OFF "> By tasks; <" ON "C" OFF "> By CPU; <" ON "M" OFF "> By memory; <" ON "I" OFF "> By I/O\n"
+ "\t<" ON "p" OFF "> By path; <" ON "t" OFF "> By tasks; <" ON "c" OFF "> By CPU; <" ON "m" OFF "> By memory; <" ON "i" OFF "> By I/O\n"
"\t<" ON "+" OFF "> Increase delay; <" ON "-" OFF "> Decrease delay; <" ON "%%" OFF "> Toggle time\n"
- "\t<" ON "Q" OFF "> Quit; <" ON "SPACE" OFF "> Refresh");
+ "\t<" ON "q" OFF "> Quit; <" ON "SPACE" OFF "> Refresh");
fflush(stdout);
sleep(3);
break;
diff --git a/src/core/sync.c b/src/core/async.c
index 7e74b63071..af527bea4e 100644
--- a/src/core/sync.c
+++ b/src/core/async.c
@@ -22,14 +22,10 @@
#include <pthread.h>
#include <unistd.h>
-#include "sync.h"
+#include "async.h"
+#include "log.h"
-static void *sync_thread(void *p) {
- sync();
- return NULL;
-}
-
-int asynchronous_sync(void) {
+int asynchronous_job(void* (*func)(void *p), void *arg) {
pthread_attr_t a;
pthread_t t;
int r;
@@ -53,7 +49,7 @@ int asynchronous_sync(void) {
goto finish;
}
- r = pthread_create(&t, &a, sync_thread, NULL);
+ r = pthread_create(&t, &a, func, arg);
if (r != 0) {
r = -r;
goto finish;
@@ -63,3 +59,14 @@ finish:
pthread_attr_destroy(&a);
return r;
}
+
+static void *sync_thread(void *p) {
+ sync();
+ return NULL;
+}
+
+int asynchronous_sync(void) {
+ log_debug("Spawning new thread for sync");
+
+ return asynchronous_job(sync_thread, NULL);
+}
diff --git a/src/core/sync.h b/src/core/async.h
index eb26c88deb..6601b4dc4b 100644
--- a/src/core/sync.h
+++ b/src/core/async.h
@@ -21,4 +21,5 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+int asynchronous_job(void* (*func)(void *p), void *arg);
int asynchronous_sync(void);
diff --git a/src/core/automount.c b/src/core/automount.c
index a20d5340f2..d1379e0913 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -66,7 +66,7 @@ static void automount_init(Unit *u) {
UNIT(a)->ignore_on_isolate = true;
}
-static void repeat_unmout(const char *path) {
+static void repeat_unmount(const char *path) {
assert(path);
for (;;) {
@@ -100,7 +100,7 @@ static void unmount_autofs(Automount *a) {
if (a->where &&
(UNIT(a)->manager->exit_code != MANAGER_RELOAD &&
UNIT(a)->manager->exit_code != MANAGER_REEXECUTE))
- repeat_unmout(a->where);
+ repeat_unmount(a->where);
}
static void automount_done(Unit *u) {
@@ -117,42 +117,17 @@ static void automount_done(Unit *u) {
a->tokens = NULL;
}
-int automount_add_one_mount_link(Automount *a, Mount *m) {
+static int automount_add_mount_links(Automount *a) {
+ _cleanup_free_ char *parent = NULL;
int r;
assert(a);
- assert(m);
-
- if (UNIT(a)->load_state != UNIT_LOADED ||
- UNIT(m)->load_state != UNIT_LOADED)
- return 0;
-
- if (!path_startswith(a->where, m->where))
- return 0;
- if (path_equal(a->where, m->where))
- return 0;
-
- r = unit_add_two_dependencies(UNIT(a), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
+ r = path_get_parent(a->where, &parent);
if (r < 0)
return r;
- return 0;
-}
-
-static int automount_add_mount_links(Automount *a) {
- Unit *other;
- int r;
-
- assert(a);
-
- LIST_FOREACH(units_by_type, other, UNIT(a)->manager->units_by_type[UNIT_MOUNT]) {
- r = automount_add_one_mount_link(a, MOUNT(other));
- if (r < 0)
- return r;
- }
-
- return 0;
+ return unit_require_mounts_for(UNIT(a), parent);
}
static int automount_add_default_dependencies(Automount *a) {
@@ -575,7 +550,7 @@ fail:
close_nointr_nofail(ioctl_fd);
if (mounted)
- repeat_unmout(a->where);
+ repeat_unmount(a->where);
log_error_unit(UNIT(a)->id,
"Failed to initialize automounter: %s", strerror(-r));
diff --git a/src/core/automount.h b/src/core/automount.h
index 0c6b8a72e9..a7a25d34e0 100644
--- a/src/core/automount.h
+++ b/src/core/automount.h
@@ -62,8 +62,6 @@ extern const UnitVTable automount_vtable;
int automount_send_ready(Automount *a, int status);
-int automount_add_one_mount_link(Automount *a, Mount *m);
-
const char* automount_state_to_string(AutomountState i) _const_;
AutomountState automount_state_from_string(const char *s) _pure_;
diff --git a/src/core/bus-errors.h b/src/core/bus-errors.h
index 7a4084ea15..9368d68e80 100644
--- a/src/core/bus-errors.h
+++ b/src/core/bus-errors.h
@@ -40,3 +40,4 @@
#define BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC "org.freedesktop.systemd1.TransactionOrderIsCyclic"
#define BUS_ERROR_SHUTTING_DOWN "org.freedesktop.systemd1.ShuttingDown"
#define BUS_ERROR_NO_SUCH_PROCESS "org.freedesktop.systemd1.NoSuchProcess"
+#define BUS_ERROR_JOB_FAILED "org.freedesktop.systemd1.JobFailed"
diff --git a/src/core/cgroup-attr.c b/src/core/cgroup-attr.c
deleted file mode 100644
index 7e3e08eabb..0000000000
--- a/src/core/cgroup-attr.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
- This file is part of systemd.
-
- Copyright 2011 Lennart Poettering
-
- 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.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-#include "cgroup-attr.h"
-#include "cgroup-util.h"
-#include "list.h"
-#include "fileio.h"
-
-int cgroup_attribute_apply(CGroupAttribute *a, CGroupBonding *b) {
- _cleanup_free_ char *path = NULL, *v = NULL;
- int r;
-
- assert(a);
-
- b = cgroup_bonding_find_list(b, a->controller);
- if (!b)
- return 0;
-
- if (a->semantics && a->semantics->map_write) {
- r = a->semantics->map_write(a->semantics, a->value, &v);
- if (r < 0)
- return r;
- }
-
- r = cg_get_path(a->controller, b->path, a->name, &path);
- if (r < 0)
- return r;
-
- r = write_string_file(path, v ? v : a->value);
- if (r < 0)
- log_warning("Failed to write '%s' to %s: %s", v ? v : a->value, path, strerror(-r));
-
- return r;
-}
-
-int cgroup_attribute_apply_list(CGroupAttribute *first, CGroupBonding *b) {
- CGroupAttribute *a;
- int r = 0;
-
- LIST_FOREACH(by_unit, a, first) {
- int k;
-
- k = cgroup_attribute_apply(a, b);
- if (r == 0)
- r = k;
- }
-
- return r;
-}
-
-bool cgroup_attribute_matches(CGroupAttribute *a, const char *controller, const char *name) {
- assert(a);
-
- if (controller) {
- if (streq(a->controller, controller) && (!name || streq(a->name, name)))
- return true;
-
- } else if (!name)
- return true;
- else if (streq(a->name, name)) {
- size_t x, y;
- x = strlen(a->controller);
- y = strlen(name);
-
- if (y > x &&
- memcmp(a->controller, name, x) == 0 &&
- name[x] == '.')
- return true;
- }
-
- return false;
-}
-
-CGroupAttribute *cgroup_attribute_find_list(
- CGroupAttribute *first,
- const char *controller,
- const char *name) {
- CGroupAttribute *a;
-
- assert(name);
-
- LIST_FOREACH(by_unit, a, first)
- if (cgroup_attribute_matches(a, controller, name))
- return a;
-
- return NULL;
-}
-
-void cgroup_attribute_free(CGroupAttribute *a) {
- assert(a);
-
- if (a->unit)
- LIST_REMOVE(CGroupAttribute, by_unit, a->unit->cgroup_attributes, a);
-
- free(a->controller);
- free(a->name);
- free(a->value);
- free(a);
-}
-
-void cgroup_attribute_free_list(CGroupAttribute *first) {
- CGroupAttribute *a, *n;
-
- LIST_FOREACH_SAFE(by_unit, a, n, first)
- cgroup_attribute_free(a);
-}
-
-void cgroup_attribute_free_some(CGroupAttribute *first, const char *controller, const char *name) {
- CGroupAttribute *a, *n;
-
- LIST_FOREACH_SAFE(by_unit, a, n, first)
- if (cgroup_attribute_matches(a, controller, name))
- cgroup_attribute_free(a);
-}
diff --git a/src/core/cgroup-attr.h b/src/core/cgroup-attr.h
deleted file mode 100644
index 3a13b7c92d..0000000000
--- a/src/core/cgroup-attr.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-#pragma once
-
-/***
- This file is part of systemd.
-
- Copyright 2011 Lennart Poettering
-
- 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.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-typedef struct CGroupAttribute CGroupAttribute;
-
-#include "unit.h"
-#include "cgroup.h"
-#include "cgroup-semantics.h"
-
-struct CGroupAttribute {
- char *controller;
- char *name;
- char *value;
-
- Unit *unit;
-
- const CGroupSemantics *semantics;
-
- LIST_FIELDS(CGroupAttribute, by_unit);
-};
-
-int cgroup_attribute_apply(CGroupAttribute *a, CGroupBonding *b);
-int cgroup_attribute_apply_list(CGroupAttribute *first, CGroupBonding *b);
-
-bool cgroup_attribute_matches(CGroupAttribute *a, const char *controller, const char *name) _pure_;
-CGroupAttribute *cgroup_attribute_find_list(CGroupAttribute *first, const char *controller, const char *name) _pure_;
-
-void cgroup_attribute_free(CGroupAttribute *a);
-void cgroup_attribute_free_list(CGroupAttribute *first);
-void cgroup_attribute_free_some(CGroupAttribute *first, const char *controller, const char *name);
diff --git a/src/core/cgroup-semantics.c b/src/core/cgroup-semantics.c
deleted file mode 100644
index 82b02bbd78..0000000000
--- a/src/core/cgroup-semantics.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
- This file is part of systemd.
-
- Copyright 2013 Lennart Poettering
-
- 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.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-#include "util.h"
-#include "strv.h"
-#include "path-util.h"
-#include "cgroup-util.h"
-
-#include "cgroup-semantics.h"
-
-static int parse_cpu_shares(const CGroupSemantics *s, const char *value, char **ret) {
- unsigned long ul;
-
- assert(s);
- assert(value);
- assert(ret);
-
- if (safe_atolu(value, &ul) < 0 || ul < 1)
- return -EINVAL;
-
- if (asprintf(ret, "%lu", ul) < 0)
- return -ENOMEM;
-
- return 1;
-}
-
-static int parse_memory_limit(const CGroupSemantics *s, const char *value, char **ret) {
- off_t sz;
-
- assert(s);
- assert(value);
- assert(ret);
-
- if (parse_bytes(value, &sz) < 0 || sz <= 0)
- return -EINVAL;
-
- if (asprintf(ret, "%llu", (unsigned long long) sz) < 0)
- return -ENOMEM;
-
- return 1;
-}
-
-static int parse_device(const CGroupSemantics *s, const char *value, char **ret) {
- _cleanup_strv_free_ char **l = NULL;
- char *x;
- unsigned k;
-
- assert(s);
- assert(value);
- assert(ret);
-
- l = strv_split_quoted(value);
- if (!l)
- return -ENOMEM;
-
- k = strv_length(l);
- if (k < 1 || k > 2)
- return -EINVAL;
-
- if (!streq(l[0], "*") && !path_startswith(l[0], "/dev"))
- return -EINVAL;
-
- if (!isempty(l[1]) && !in_charset(l[1], "rwm"))
- return -EINVAL;
-
- x = strdup(value);
- if (!x)
- return -ENOMEM;
-
- *ret = x;
- return 1;
-}
-
-static int parse_blkio_weight(const CGroupSemantics *s, const char *value, char **ret) {
- _cleanup_strv_free_ char **l = NULL;
- unsigned long ul;
-
- assert(s);
- assert(value);
- assert(ret);
-
- l = strv_split_quoted(value);
- if (!l)
- return -ENOMEM;
-
- if (strv_length(l) != 1)
- return 0; /* Returning 0 will cause parse_blkio_weight_device() be tried instead */
-
- if (safe_atolu(l[0], &ul) < 0 || ul < 10 || ul > 1000)
- return -EINVAL;
-
- if (asprintf(ret, "%lu", ul) < 0)
- return -ENOMEM;
-
- return 1;
-}
-
-static int parse_blkio_weight_device(const CGroupSemantics *s, const char *value, char **ret) {
- _cleanup_strv_free_ char **l = NULL;
- unsigned long ul;
-
- assert(s);
- assert(value);
- assert(ret);
-
- l = strv_split_quoted(value);
- if (!l)
- return -ENOMEM;
-
- if (strv_length(l) != 2)
- return -EINVAL;
-
- if (!path_startswith(l[0], "/dev"))
- return -EINVAL;
-
- if (safe_atolu(l[1], &ul) < 0 || ul < 10 || ul > 1000)
- return -EINVAL;
-
- if (asprintf(ret, "%s %lu", l[0], ul) < 0)
- return -ENOMEM;
-
- return 1;
-}
-
-static int parse_blkio_bandwidth(const CGroupSemantics *s, const char *value, char **ret) {
- _cleanup_strv_free_ char **l = NULL;
- off_t bytes;
-
- assert(s);
- assert(value);
- assert(ret);
-
- l = strv_split_quoted(value);
- if (!l)
- return -ENOMEM;
-
- if (strv_length(l) != 2)
- return -EINVAL;
-
- if (!path_startswith(l[0], "/dev")) {
- return -EINVAL;
- }
-
- if (parse_bytes(l[1], &bytes) < 0 || bytes <= 0)
- return -EINVAL;
-
- if (asprintf(ret, "%s %llu", l[0], (unsigned long long) bytes) < 0)
- return -ENOMEM;
-
- return 0;
-}
-
-static int map_device(const CGroupSemantics *s, const char *value, char **ret) {
- _cleanup_strv_free_ char **l = NULL;
- unsigned k;
-
- assert(s);
- assert(value);
- assert(ret);
-
- l = strv_split_quoted(value);
- if (!l)
- return -ENOMEM;
-
- k = strv_length(l);
- if (k < 1 || k > 2)
- return -EINVAL;
-
- if (streq(l[0], "*")) {
-
- if (asprintf(ret, "a *:*%s%s",
- isempty(l[1]) ? "" : " ", strempty(l[1])) < 0)
- return -ENOMEM;
- } else {
- struct stat st;
-
- if (stat(l[0], &st) < 0) {
- log_warning("Couldn't stat device %s", l[0]);
- return -errno;
- }
-
- if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode)) {
- log_warning("%s is not a device.", l[0]);
- return -ENODEV;
- }
-
- if (asprintf(ret, "%c %u:%u%s%s",
- S_ISCHR(st.st_mode) ? 'c' : 'b',
- major(st.st_rdev), minor(st.st_rdev),
- isempty(l[1]) ? "" : " ", strempty(l[1])) < 0)
- return -ENOMEM;
- }
-
- return 0;
-}
-
-static int map_blkio(const CGroupSemantics *s, const char *value, char **ret) {
- _cleanup_strv_free_ char **l = NULL;
- struct stat st;
- dev_t d;
-
- assert(s);
- assert(value);
- assert(ret);
-
- l = strv_split_quoted(value);
- if (!l)
- return log_oom();
-
- if (strv_length(l) != 2)
- return -EINVAL;
-
- if (stat(l[0], &st) < 0) {
- log_warning("Couldn't stat device %s", l[0]);
- return -errno;
- }
-
- if (S_ISBLK(st.st_mode))
- d = st.st_rdev;
- else if (major(st.st_dev) != 0) {
- /* If this is not a device node then find the block
- * device this file is stored on */
- d = st.st_dev;
-
- /* If this is a partition, try to get the originating
- * block device */
- block_get_whole_disk(d, &d);
- } else {
- log_warning("%s is not a block device and file system block device cannot be determined or is not local.", l[0]);
- return -ENODEV;
- }
-
- if (asprintf(ret, "%u:%u %s", major(d), minor(d), l[1]) < 0)
- return -ENOMEM;
-
- return 0;
-}
-
-static const CGroupSemantics semantics[] = {
- { "cpu", "cpu.shares", "CPUShare", false, parse_cpu_shares, NULL, NULL },
- { "memory", "memory.soft_limit_in_bytes", "MemorySoftLimit", false, parse_memory_limit, NULL, NULL },
- { "memory", "memory.limit_in_bytes", "MemoryLimit", false, parse_memory_limit, NULL, NULL },
- { "devices", "devices.allow", "DeviceAllow", true, parse_device, map_device, NULL },
- { "devices", "devices.deny", "DeviceDeny", true, parse_device, map_device, NULL },
- { "blkio", "blkio.weight", "BlockIOWeight", false, parse_blkio_weight, NULL, NULL },
- { "blkio", "blkio.weight_device", "BlockIOWeight", true, parse_blkio_weight_device, map_blkio, NULL },
- { "blkio", "blkio.read_bps_device", "BlockIOReadBandwidth", true, parse_blkio_bandwidth, map_blkio, NULL },
- { "blkio", "blkio.write_bps_device", "BlockIOWriteBandwidth", true, parse_blkio_bandwidth, map_blkio, NULL }
-};
-
-int cgroup_semantics_find(
- const char *controller,
- const char *name,
- const char *value,
- char **ret,
- const CGroupSemantics **_s) {
-
- _cleanup_free_ char *c = NULL;
- unsigned i;
- int r;
-
- assert(name);
- assert(_s);
- assert(!value == !ret);
-
- if (!controller) {
- r = cg_controller_from_attr(name, &c);
- if (r < 0)
- return r;
-
- controller = c;
- }
-
- for (i = 0; i < ELEMENTSOF(semantics); i++) {
- const CGroupSemantics *s = semantics + i;
- bool matches_name, matches_pretty;
-
- if (controller && s->controller && !streq(s->controller, controller))
- continue;
-
- matches_name = s->name && streq(s->name, name);
- matches_pretty = s->pretty && streq(s->pretty, name);
-
- if (!matches_name && !matches_pretty)
- continue;
-
- if (value) {
- if (matches_pretty && s->map_pretty) {
-
- r = s->map_pretty(s, value, ret);
- if (r < 0)
- return r;
-
- if (r == 0)
- continue;
-
- } else {
- char *x;
-
- x = strdup(value);
- if (!x)
- return -ENOMEM;
-
- *ret = x;
- }
- }
-
- *_s = s;
- return 1;
- }
-
- *ret = NULL;
- *_s = NULL;
- return 0;
-}
diff --git a/src/core/cgroup-semantics.h b/src/core/cgroup-semantics.h
deleted file mode 100644
index 4f848f4bb7..0000000000
--- a/src/core/cgroup-semantics.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-#pragma once
-
-/***
- This file is part of systemd.
-
- Copyright 2011 Lennart Poettering
-
- 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.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-typedef struct CGroupSemantics CGroupSemantics;
-
-struct CGroupSemantics {
- const char *controller;
- const char *name;
- const char *pretty;
-
- bool multiple;
-
- /* This call is used for parsing the pretty value to the actual attribute value */
- int (*map_pretty)(const CGroupSemantics *semantics, const char *value, char **ret);
-
- /* Right before writing this attribute the attribute value is converted to a low-level value */
- int (*map_write)(const CGroupSemantics *semantics, const char *value, char **ret);
-
- /* If this attribute takes a list, this call can be used to reset the list to empty */
- int (*reset)(const CGroupSemantics *semantics, const char *group);
-};
-
-int cgroup_semantics_find(const char *controller, const char *name, const char *value, char **ret, const CGroupSemantics **semantics);
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index 83df0f3c9a..8bf4d896de 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -3,7 +3,7 @@
/***
This file is part of systemd.
- Copyright 2010 Lennart Poettering
+ Copyright 2013 Lennart Poettering
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
@@ -19,310 +19,578 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include <errno.h>
-#include <assert.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <sys/mount.h>
#include <fcntl.h>
-#include "cgroup.h"
-#include "cgroup-util.h"
-#include "log.h"
-#include "strv.h"
#include "path-util.h"
+#include "special.h"
+#include "cgroup-util.h"
+#include "cgroup.h"
-int cgroup_bonding_realize(CGroupBonding *b) {
- int r;
+void cgroup_context_init(CGroupContext *c) {
+ assert(c);
- assert(b);
- assert(b->path);
- assert(b->controller);
+ /* Initialize everything to the kernel defaults, assuming the
+ * structure is preinitialized to 0 */
- r = cg_create(b->controller, b->path, NULL);
- if (r < 0) {
- log_warning("Failed to create cgroup %s:%s: %s", b->controller, b->path, strerror(-r));
- return r;
- }
+ c->cpu_shares = 1024;
+ c->memory_limit = (uint64_t) -1;
+ c->blockio_weight = 1000;
+}
- b->realized = true;
+void cgroup_context_free_device_allow(CGroupContext *c, CGroupDeviceAllow *a) {
+ assert(c);
+ assert(a);
- return 0;
+ LIST_REMOVE(CGroupDeviceAllow, device_allow, c->device_allow, a);
+ free(a->path);
+ free(a);
}
-int cgroup_bonding_realize_list(CGroupBonding *first) {
- CGroupBonding *b;
- int r;
-
- LIST_FOREACH(by_unit, b, first)
- if ((r = cgroup_bonding_realize(b)) < 0 && b->essential)
- return r;
+void cgroup_context_free_blockio_device_weight(CGroupContext *c, CGroupBlockIODeviceWeight *w) {
+ assert(c);
+ assert(w);
- return 0;
+ LIST_REMOVE(CGroupBlockIODeviceWeight, device_weights, c->blockio_device_weights, w);
+ free(w->path);
+ free(w);
}
-void cgroup_bonding_free(CGroupBonding *b, bool trim) {
+void cgroup_context_free_blockio_device_bandwidth(CGroupContext *c, CGroupBlockIODeviceBandwidth *b) {
+ assert(c);
assert(b);
- if (b->unit) {
- CGroupBonding *f;
+ LIST_REMOVE(CGroupBlockIODeviceBandwidth, device_bandwidths, c->blockio_device_bandwidths, b);
+ free(b->path);
+ free(b);
+}
- LIST_REMOVE(CGroupBonding, by_unit, b->unit->cgroup_bondings, b);
+void cgroup_context_done(CGroupContext *c) {
+ assert(c);
- if (streq(b->controller, SYSTEMD_CGROUP_CONTROLLER)) {
- assert_se(f = hashmap_get(b->unit->manager->cgroup_bondings, b->path));
- LIST_REMOVE(CGroupBonding, by_path, f, b);
+ while (c->blockio_device_weights)
+ cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
- if (f)
- hashmap_replace(b->unit->manager->cgroup_bondings, b->path, f);
- else
- hashmap_remove(b->unit->manager->cgroup_bondings, b->path);
- }
- }
+ while (c->blockio_device_bandwidths)
+ cgroup_context_free_blockio_device_bandwidth(c, c->blockio_device_bandwidths);
- if (b->realized && b->ours && trim)
- cg_trim(b->controller, b->path, false);
+ while (c->device_allow)
+ cgroup_context_free_device_allow(c, c->device_allow);
+}
- free(b->controller);
- free(b->path);
- free(b);
+void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) {
+ CGroupBlockIODeviceBandwidth *b;
+ CGroupBlockIODeviceWeight *w;
+ CGroupDeviceAllow *a;
+
+ assert(c);
+ assert(f);
+
+ prefix = strempty(prefix);
+
+ fprintf(f,
+ "%sCPUAccounting=%s\n"
+ "%sBlockIOAccounting=%s\n"
+ "%sMemoryAccounting=%s\n"
+ "%sCPUShares=%lu\n"
+ "%sBlockIOWeight=%lu\n"
+ "%sMemoryLimit=%" PRIu64 "\n"
+ "%sDevicePolicy=%s\n",
+ prefix, yes_no(c->cpu_accounting),
+ prefix, yes_no(c->blockio_accounting),
+ prefix, yes_no(c->memory_accounting),
+ prefix, c->cpu_shares,
+ prefix, c->blockio_weight,
+ prefix, c->memory_limit,
+ prefix, cgroup_device_policy_to_string(c->device_policy));
+
+ LIST_FOREACH(device_allow, a, c->device_allow)
+ fprintf(f,
+ "%sDeviceAllow=%s %s%s%s\n",
+ prefix,
+ a->path,
+ a->r ? "r" : "", a->w ? "w" : "", a->m ? "m" : "");
+
+ LIST_FOREACH(device_weights, w, c->blockio_device_weights)
+ fprintf(f,
+ "%sBlockIODeviceWeight=%s %lu",
+ prefix,
+ w->path,
+ w->weight);
+
+ LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
+ char buf[FORMAT_BYTES_MAX];
+
+ fprintf(f,
+ "%s%s=%s %s\n",
+ prefix,
+ b->read ? "BlockIOReadBandwidth" : "BlockIOWriteBandwidth",
+ b->path,
+ format_bytes(buf, sizeof(buf), b->bandwidth));
+ }
}
-void cgroup_bonding_free_list(CGroupBonding *first, bool remove_or_trim) {
- CGroupBonding *b, *n;
+static int lookup_blkio_device(const char *p, dev_t *dev) {
+ struct stat st;
+ int r;
- LIST_FOREACH_SAFE(by_unit, b, n, first)
- cgroup_bonding_free(b, remove_or_trim);
-}
+ assert(p);
+ assert(dev);
-void cgroup_bonding_trim(CGroupBonding *b, bool delete_root) {
- assert(b);
+ r = stat(p, &st);
+ if (r < 0) {
+ log_warning("Couldn't stat device %s: %m", p);
+ return -errno;
+ }
- if (b->realized && b->ours)
- cg_trim(b->controller, b->path, delete_root);
-}
+ if (S_ISBLK(st.st_mode))
+ *dev = st.st_rdev;
+ else if (major(st.st_dev) != 0) {
+ /* If this is not a device node then find the block
+ * device this file is stored on */
+ *dev = st.st_dev;
-void cgroup_bonding_trim_list(CGroupBonding *first, bool delete_root) {
- CGroupBonding *b;
+ /* If this is a partition, try to get the originating
+ * block device */
+ block_get_whole_disk(*dev, dev);
+ } else {
+ log_warning("%s is not a block device and file system block device cannot be determined or is not local.", p);
+ return -ENODEV;
+ }
- LIST_FOREACH(by_unit, b, first)
- cgroup_bonding_trim(b, delete_root);
+ return 0;
}
-int cgroup_bonding_install(CGroupBonding *b, pid_t pid, const char *cgroup_suffix) {
- _cleanup_free_ char *p = NULL;
- const char *path;
+static int whitelist_device(const char *path, const char *node, const char *acc) {
+ char buf[2+DECIMAL_STR_MAX(dev_t)*2+2+4];
+ struct stat st;
int r;
- assert(b);
- assert(pid >= 0);
+ assert(path);
+ assert(acc);
- if (cgroup_suffix) {
- p = strjoin(b->path, "/", cgroup_suffix, NULL);
- if (!p)
- return -ENOMEM;
+ if (stat(node, &st) < 0) {
+ log_warning("Couldn't stat device %s", node);
+ return -errno;
+ }
- path = p;
- } else
- path = b->path;
+ if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode)) {
+ log_warning("%s is not a device.", node);
+ return -ENODEV;
+ }
+
+ sprintf(buf,
+ "%c %u:%u %s",
+ S_ISCHR(st.st_mode) ? 'c' : 'b',
+ major(st.st_rdev), minor(st.st_rdev),
+ acc);
- r = cg_create_and_attach(b->controller, path, pid);
+ r = cg_set_attribute("devices", path, "devices.allow", buf);
if (r < 0)
- return r;
+ log_warning("Failed to set devices.allow on %s: %s", path, strerror(-r));
- b->realized = true;
- return 0;
+ return r;
}
-int cgroup_bonding_install_list(CGroupBonding *first, pid_t pid, const char *cgroup_suffix) {
- CGroupBonding *b;
+void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const char *path) {
int r;
- LIST_FOREACH(by_unit, b, first) {
- r = cgroup_bonding_install(b, pid, cgroup_suffix);
- if (r < 0 && b->essential)
- return r;
+ assert(c);
+ assert(path);
+
+ if (mask == 0)
+ return;
+
+ if (mask & CGROUP_CPU) {
+ char buf[DECIMAL_STR_MAX(unsigned long) + 1];
+
+ sprintf(buf, "%lu\n", c->cpu_shares);
+ r = cg_set_attribute("cpu", path, "cpu.shares", buf);
+ if (r < 0)
+ log_warning("Failed to set cpu.shares on %s: %s", path, strerror(-r));
}
- return 0;
-}
+ if (mask & CGROUP_BLKIO) {
+ char buf[MAX3(DECIMAL_STR_MAX(unsigned long)+1,
+ DECIMAL_STR_MAX(dev_t)*2+2+DECIMAL_STR_MAX(unsigned long)*1,
+ DECIMAL_STR_MAX(dev_t)*2+2+DECIMAL_STR_MAX(uint64_t)+1)];
+ CGroupBlockIODeviceWeight *w;
+ CGroupBlockIODeviceBandwidth *b;
-int cgroup_bonding_migrate(CGroupBonding *b, CGroupBonding *list) {
- CGroupBonding *q;
- int ret = 0;
+ sprintf(buf, "%lu\n", c->blockio_weight);
+ r = cg_set_attribute("blkio", path, "blkio.weight", buf);
+ if (r < 0)
+ log_warning("Failed to set blkio.weight on %s: %s", path, strerror(-r));
- LIST_FOREACH(by_unit, q, list) {
- int r;
+ /* FIXME: no way to reset this list */
+ LIST_FOREACH(device_weights, w, c->blockio_device_weights) {
+ dev_t dev;
- if (q == b)
- continue;
+ r = lookup_blkio_device(w->path, &dev);
+ if (r < 0)
+ continue;
- if (!q->ours)
- continue;
+ sprintf(buf, "%u:%u %lu", major(dev), minor(dev), w->weight);
+ r = cg_set_attribute("blkio", path, "blkio.weight_device", buf);
+ if (r < 0)
+ log_error("Failed to set blkio.weight_device on %s: %s", path, strerror(-r));
+ }
+
+ /* FIXME: no way to reset this list */
+ LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
+ const char *a;
+ dev_t dev;
+
+ r = lookup_blkio_device(b->path, &dev);
+ if (r < 0)
+ continue;
+
+ a = b->read ? "blkio.throttle.read_bps_device" : "blkio.throttle.write_bps_device";
+
+ sprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), b->bandwidth);
+ r = cg_set_attribute("blkio", path, a, buf);
+ if (r < 0)
+ log_error("Failed to set %s on %s: %s", a, path, strerror(-r));
+ }
+ }
+
+ if (mask & CGROUP_MEMORY) {
+ if (c->memory_limit != (uint64_t) -1) {
+ char buf[DECIMAL_STR_MAX(uint64_t) + 1];
+
+ sprintf(buf, "%" PRIu64 "\n", c->memory_limit);
+ r = cg_set_attribute("memory", path, "memory.limit_in_bytes", buf);
+ } else
+ r = cg_set_attribute("memory", path, "memory.limit_in_bytes", "-1");
- r = cg_migrate_recursive(q->controller, q->path, b->controller, b->path, true, false);
- if (r < 0 && ret == 0)
- ret = r;
+ if (r < 0)
+ log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
}
- return ret;
+ if (mask & CGROUP_DEVICE) {
+ CGroupDeviceAllow *a;
+
+ if (c->device_allow || c->device_policy != CGROUP_AUTO)
+ r = cg_set_attribute("devices", path, "devices.deny", "a");
+ else
+ r = cg_set_attribute("devices", path, "devices.allow", "a");
+ if (r < 0)
+ log_error("Failed to reset devices.list on %s: %s", path, strerror(-r));
+
+ if (c->device_policy == CGROUP_CLOSED ||
+ (c->device_policy == CGROUP_AUTO && c->device_allow)) {
+ static const char auto_devices[] =
+ "/dev/null\0" "rw\0"
+ "/dev/zero\0" "rw\0"
+ "/dev/full\0" "rw\0"
+ "/dev/random\0" "rw\0"
+ "/dev/urandom\0" "rw\0";
+
+ const char *x, *y;
+
+ NULSTR_FOREACH_PAIR(x, y, auto_devices)
+ whitelist_device(path, x, y);
+ }
+
+ LIST_FOREACH(device_allow, a, c->device_allow) {
+ char acc[4];
+ unsigned k = 0;
+
+ if (a->r)
+ acc[k++] = 'r';
+ if (a->w)
+ acc[k++] = 'w';
+ if (a->m)
+ acc[k++] = 'm';
+
+ if (k == 0)
+ continue;
+
+ acc[k++] = 0;
+ whitelist_device(path, a->path, acc);
+ }
+ }
}
-int cgroup_bonding_migrate_to(CGroupBonding *b, const char *target, bool rem) {
- assert(b);
- assert(target);
+CGroupControllerMask cgroup_context_get_mask(CGroupContext *c) {
+ CGroupControllerMask mask = 0;
+
+ /* Figure out which controllers we need */
+
+ if (c->cpu_accounting || c->cpu_shares != 1024)
+ mask |= CGROUP_CPUACCT | CGROUP_CPU;
+
+ if (c->blockio_accounting ||
+ c->blockio_weight != 1000 ||
+ c->blockio_device_weights ||
+ c->blockio_device_bandwidths)
+ mask |= CGROUP_BLKIO;
+
+ if (c->memory_accounting ||
+ c->memory_limit != (uint64_t) -1)
+ mask |= CGROUP_MEMORY;
+
+ if (c->device_allow || c->device_policy != CGROUP_AUTO)
+ mask |= CGROUP_DEVICE;
- return cg_migrate_recursive(b->controller, b->path, b->controller, target, true, rem);
+ return mask;
}
-int cgroup_bonding_set_group_access(CGroupBonding *b, mode_t mode, uid_t uid, gid_t gid) {
- assert(b);
+static CGroupControllerMask unit_get_cgroup_mask(Unit *u) {
+ CGroupContext *c;
- if (!b->realized)
- return -EINVAL;
+ c = unit_get_cgroup_context(u);
+ if (!c)
+ return 0;
- return cg_set_group_access(b->controller, b->path, mode, uid, gid);
+ return cgroup_context_get_mask(c);
}
-int cgroup_bonding_set_group_access_list(CGroupBonding *first, mode_t mode, uid_t uid, gid_t gid) {
- CGroupBonding *b;
- int r;
+static CGroupControllerMask unit_get_members_mask(Unit *u) {
+ CGroupControllerMask mask = 0;
+ Unit *m;
+ Iterator i;
- LIST_FOREACH(by_unit, b, first) {
- r = cgroup_bonding_set_group_access(b, mode, uid, gid);
- if (r < 0)
- return r;
+ assert(u);
+
+ SET_FOREACH(m, u->dependencies[UNIT_BEFORE], i) {
+
+ if (UNIT_DEREF(m->slice) != u)
+ continue;
+
+ mask |= unit_get_cgroup_mask(m) | unit_get_members_mask(m);
}
- return 0;
+ return mask;
}
-int cgroup_bonding_set_task_access(CGroupBonding *b, mode_t mode, uid_t uid, gid_t gid, int sticky) {
- assert(b);
+static CGroupControllerMask unit_get_siblings_mask(Unit *u) {
+ assert(u);
- if (!b->realized)
- return -EINVAL;
+ if (!UNIT_ISSET(u->slice))
+ return 0;
- return cg_set_task_access(b->controller, b->path, mode, uid, gid, sticky);
+ /* Sibling propagation is only relevant for weight-based
+ * controllers, so let's mask out everything else */
+ return unit_get_members_mask(UNIT_DEREF(u->slice)) &
+ (CGROUP_CPU|CGROUP_BLKIO|CGROUP_CPUACCT);
}
-int cgroup_bonding_set_task_access_list(CGroupBonding *first, mode_t mode, uid_t uid, gid_t gid, int sticky) {
- CGroupBonding *b;
+static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) {
+ char *path = NULL;
int r;
+ bool is_in_hash = false;
+
+ assert(u);
+
+ path = unit_default_cgroup_path(u);
+ if (!path)
+ return -ENOMEM;
+
+ r = hashmap_put(u->manager->cgroup_unit, path, u);
+ if (r == 0)
+ is_in_hash = true;
+
+ if (r < 0) {
+ log_error("cgroup %s exists already: %s", path, strerror(-r));
+ free(path);
+ return r;
+ }
+
+ /* First, create our own group */
+ r = cg_create_everywhere(u->manager->cgroup_supported, mask, path);
+ if (r < 0)
+ log_error("Failed to create cgroup %s: %s", path, strerror(-r));
- LIST_FOREACH(by_unit, b, first) {
- r = cgroup_bonding_set_task_access(b, mode, uid, gid, sticky);
+ /* Then, possibly move things over */
+ if (u->cgroup_path) {
+ r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path);
if (r < 0)
- return r;
+ log_error("Failed to migrate cgroup %s: %s", path, strerror(-r));
}
+ if (!is_in_hash) {
+ /* And remember the new data */
+ free(u->cgroup_path);
+ u->cgroup_path = path;
+ }
+
+ u->cgroup_realized = true;
+ u->cgroup_mask = mask;
+
return 0;
}
-int cgroup_bonding_kill(CGroupBonding *b, int sig, bool sigcont, bool rem, Set *s, const char *cgroup_suffix) {
- char *p = NULL;
- const char *path;
- int r;
+static int unit_realize_cgroup_now(Unit *u) {
+ CGroupControllerMask mask;
- assert(b);
- assert(sig >= 0);
+ assert(u);
+
+ if (u->in_cgroup_queue) {
+ LIST_REMOVE(Unit, cgroup_queue, u->manager->cgroup_queue, u);
+ u->in_cgroup_queue = false;
+ }
+
+ mask = unit_get_cgroup_mask(u) | unit_get_members_mask(u) | unit_get_siblings_mask(u);
+ mask &= u->manager->cgroup_supported;
- /* Don't kill cgroups that aren't ours */
- if (!b->ours)
+ if (u->cgroup_realized &&
+ u->cgroup_mask == mask)
return 0;
- if (cgroup_suffix) {
- p = strjoin(b->path, "/", cgroup_suffix, NULL);
- if (!p)
- return -ENOMEM;
+ /* First, realize parents */
+ if (UNIT_ISSET(u->slice))
+ unit_realize_cgroup_now(UNIT_DEREF(u->slice));
- path = p;
- } else
- path = b->path;
+ /* And then do the real work */
+ return unit_create_cgroups(u, mask);
+}
- r = cg_kill_recursive(b->controller, path, sig, sigcont, true, rem, s);
- free(p);
+static void unit_add_to_cgroup_queue(Unit *u) {
- return r;
+ if (u->in_cgroup_queue)
+ return;
+
+ LIST_PREPEND(Unit, cgroup_queue, u->manager->cgroup_queue, u);
+ u->in_cgroup_queue = true;
}
-int cgroup_bonding_kill_list(CGroupBonding *first, int sig, bool sigcont, bool rem, Set *s, const char *cgroup_suffix) {
- CGroupBonding *b;
- Set *allocated_set = NULL;
- int ret = -EAGAIN, r;
+unsigned manager_dispatch_cgroup_queue(Manager *m) {
+ Unit *i;
+ unsigned n = 0;
- if (!first)
- return 0;
+ while ((i = m->cgroup_queue)) {
+ assert(i->in_cgroup_queue);
+
+ if (unit_realize_cgroup_now(i) >= 0)
+ cgroup_context_apply(unit_get_cgroup_context(i), i->cgroup_mask, i->cgroup_path);
+
+ n++;
+ }
+
+ return n;
+}
+
+static void unit_queue_siblings(Unit *u) {
+ Unit *slice;
+
+ /* This adds the siblings of the specified unit and the
+ * siblings of all parent units to the cgroup queue. (But
+ * neither the specified unit itself nor the parents.) */
- if (!s)
- if (!(s = allocated_set = set_new(trivial_hash_func, trivial_compare_func)))
- return -ENOMEM;
+ while ((slice = UNIT_DEREF(u->slice))) {
+ Iterator i;
+ Unit *m;
- LIST_FOREACH(by_unit, b, first) {
- r = cgroup_bonding_kill(b, sig, sigcont, rem, s, cgroup_suffix);
- if (r < 0) {
- if (r == -EAGAIN || r == -ESRCH)
+ SET_FOREACH(m, slice->dependencies[UNIT_BEFORE], i) {
+ if (m == u)
continue;
- ret = r;
- goto finish;
+ if (UNIT_DEREF(m->slice) != slice)
+ continue;
+
+ unit_add_to_cgroup_queue(m);
}
- if (ret < 0 || r > 0)
- ret = r;
+ u = slice;
}
+}
+
+int unit_realize_cgroup(Unit *u) {
+ CGroupContext *c;
+ int r;
+
+ assert(u);
+
+ c = unit_get_cgroup_context(u);
+ if (!c)
+ return 0;
-finish:
- if (allocated_set)
- set_free(allocated_set);
+ /* So, here's the deal: when realizing the cgroups for this
+ * unit, we need to first create all parents, but there's more
+ * actually: for the weight-based controllers we also need to
+ * make sure that all our siblings (i.e. units that are in the
+ * same slice as we are) have cgroup too. Otherwise things
+ * would become very uneven as each of their processes would
+ * get as much resources as all our group together. This call
+ * will synchronously create the parent cgroups, but will
+ * defer work on the siblings to the next event loop
+ * iteration. */
- return ret;
+ /* Add all sibling slices to the cgroup queue. */
+ unit_queue_siblings(u);
+
+ /* And realize this one now */
+ r = unit_realize_cgroup_now(u);
+
+ /* And apply the values */
+ if (r >= 0)
+ cgroup_context_apply(c, u->cgroup_mask, u->cgroup_path);
+
+ return r;
}
-/* Returns 1 if the group is empty, 0 if it is not, -EAGAIN if we
- * cannot know */
-int cgroup_bonding_is_empty(CGroupBonding *b) {
+void unit_destroy_cgroup(Unit *u) {
int r;
- assert(b);
+ assert(u);
- if ((r = cg_is_empty_recursive(b->controller, b->path, true)) < 0)
- return r;
+ if (!u->cgroup_path)
+ return;
+
+ r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE));
+ if (r < 0)
+ log_debug("Failed to destroy cgroup %s: %s", u->cgroup_path, strerror(-r));
+
+ hashmap_remove(u->manager->cgroup_unit, u->cgroup_path);
- /* If it is empty it is empty */
- if (r > 0)
- return 1;
+ free(u->cgroup_path);
+ u->cgroup_path = NULL;
+ u->cgroup_realized = false;
+ u->cgroup_mask = 0;
- /* It's not only us using this cgroup, so we just don't know */
- return b->ours ? 0 : -EAGAIN;
}
-int cgroup_bonding_is_empty_list(CGroupBonding *first) {
- CGroupBonding *b;
+pid_t unit_search_main_pid(Unit *u) {
+ _cleanup_fclose_ FILE *f = NULL;
+ pid_t pid = 0, npid, mypid;
- LIST_FOREACH(by_unit, b, first) {
- int r;
+ assert(u);
- if ((r = cgroup_bonding_is_empty(b)) < 0) {
- /* If this returned -EAGAIN, then we don't know if the
- * group is empty, so let's see if another group can
- * tell us */
+ if (!u->cgroup_path)
+ return 0;
- if (r != -EAGAIN)
- return r;
- } else
- return r;
+ if (cg_enumerate_processes(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, &f) < 0)
+ return 0;
+
+ mypid = getpid();
+ while (cg_read_pid(f, &npid) > 0) {
+ pid_t ppid;
+
+ if (npid == pid)
+ continue;
+
+ /* Ignore processes that aren't our kids */
+ if (get_parent_of_pid(npid, &ppid) >= 0 && ppid != mypid)
+ continue;
+
+ if (pid != 0) {
+ /* Dang, there's more than one daemonized PID
+ in this group, so we don't know what process
+ is the main process. */
+ pid = 0;
+ break;
+ }
+
+ pid = npid;
}
- return -EAGAIN;
+ return pid;
}
int manager_setup_cgroup(Manager *m) {
- _cleanup_free_ char *current = NULL, *path = NULL;
- char suffix_buffer[sizeof("/systemd-") + DECIMAL_STR_MAX(pid_t)];
- const char *suffix;
+ _cleanup_free_ char *path = NULL;
int r;
+ char *e, *a;
assert(m);
@@ -333,37 +601,30 @@ int manager_setup_cgroup(Manager *m) {
}
/* 1. Determine hierarchy */
- r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &current);
+ free(m->cgroup_root);
+ m->cgroup_root = NULL;
+
+ r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &m->cgroup_root);
if (r < 0) {
log_error("Cannot determine cgroup we are running in: %s", strerror(-r));
return r;
}
- if (m->running_as == SYSTEMD_SYSTEM)
- suffix = "/system";
- else {
- sprintf(suffix_buffer, "/systemd-%lu", (unsigned long) getpid());
- suffix = suffix_buffer;
+ /* Already in /system.slice? If so, let's cut this off again */
+ if (m->running_as == SYSTEMD_SYSTEM) {
+ e = endswith(m->cgroup_root, "/" SPECIAL_SYSTEM_SLICE);
+ if (e)
+ *e = 0;
}
- free(m->cgroup_hierarchy);
- if (endswith(current, suffix)) {
- /* We probably got reexecuted and can continue to use our root cgroup */
- m->cgroup_hierarchy = current;
- current = NULL;
- } else {
- /* We need a new root cgroup */
- if (streq(current, "/"))
- m->cgroup_hierarchy = strdup(suffix);
- else
- m->cgroup_hierarchy = strappend(current, suffix);
-
- if (!m->cgroup_hierarchy)
- return log_oom();
- }
+ /* And make sure to store away the root value without trailing
+ * slash, even for the root dir, so that we can easily prepend
+ * it everywhere. */
+ if (streq(m->cgroup_root, "/"))
+ m->cgroup_root[0] = 0;
/* 2. Show data */
- r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_hierarchy, NULL, &path);
+ r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, NULL, &path);
if (r < 0) {
log_error("Cannot find cgroup mount point: %s", strerror(-r));
return r;
@@ -382,8 +643,12 @@ int manager_setup_cgroup(Manager *m) {
log_debug("Release agent already installed.");
}
- /* 4. Realize the group */
- r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_hierarchy, 0);
+ /* 4. Realize the system slice and put us in there */
+ if (m->running_as == SYSTEMD_SYSTEM) {
+ a = strappenda(m->cgroup_root, "/" SPECIAL_SYSTEM_SLICE);
+ r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, a, 0);
+ } else
+ r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, 0);
if (r < 0) {
log_error("Failed to create root cgroup hierarchy: %s", strerror(-r));
return r;
@@ -399,16 +664,11 @@ int manager_setup_cgroup(Manager *m) {
return -errno;
}
- /* 6. Remove non-existing controllers from the default controllers list */
- cg_shorten_controllers(m->default_controllers);
+ /* 6. Figure out which controllers are supported */
+ m->cgroup_supported = cg_mask_supported();
- /* 7. Let's create the user and machine hierarchies
- * right-away, so that people can inotify on them, if they
- * wish, without this being racy. */
- if (m->running_as == SYSTEMD_SYSTEM) {
- cg_create(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_hierarchy, "../user");
- cg_create(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_hierarchy, "../machine");
- }
+ /* 7. Always enable hierarchial support if it exists... */
+ cg_set_attribute("memory", "/", "memory.use_hierarchy", "1");
return 0;
}
@@ -416,213 +676,88 @@ int manager_setup_cgroup(Manager *m) {
void manager_shutdown_cgroup(Manager *m, bool delete) {
assert(m);
- if (delete && m->cgroup_hierarchy)
- cg_delete(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_hierarchy);
+ /* We can't really delete the group, since we are in it. But
+ * let's trim it. */
+ if (delete && m->cgroup_root)
+ cg_trim(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, false);
if (m->pin_cgroupfs_fd >= 0) {
close_nointr_nofail(m->pin_cgroupfs_fd);
m->pin_cgroupfs_fd = -1;
}
- free(m->cgroup_hierarchy);
- m->cgroup_hierarchy = NULL;
+ free(m->cgroup_root);
+ m->cgroup_root = NULL;
}
-int cgroup_bonding_get(Manager *m, const char *cgroup, CGroupBonding **bonding) {
- CGroupBonding *b;
+Unit* manager_get_unit_by_cgroup(Manager *m, const char *cgroup) {
char *p;
+ Unit *u;
assert(m);
assert(cgroup);
- assert(bonding);
- b = hashmap_get(m->cgroup_bondings, cgroup);
- if (b) {
- *bonding = b;
- return 1;
- }
+ u = hashmap_get(m->cgroup_unit, cgroup);
+ if (u)
+ return u;
p = strdupa(cgroup);
- if (!p)
- return -ENOMEM;
-
for (;;) {
char *e;
e = strrchr(p, '/');
- if (e == p || !e) {
- *bonding = NULL;
- return 0;
- }
+ if (e == p || !e)
+ return NULL;
*e = 0;
- b = hashmap_get(m->cgroup_bondings, p);
- if (b) {
- *bonding = b;
- return 1;
- }
+ u = hashmap_get(m->cgroup_unit, p);
+ if (u)
+ return u;
}
}
-int cgroup_notify_empty(Manager *m, const char *group) {
- CGroupBonding *l, *b;
+Unit *manager_get_unit_by_pid(Manager *m, pid_t pid) {
+ _cleanup_free_ char *cgroup = NULL;
int r;
assert(m);
- assert(group);
-
- r = cgroup_bonding_get(m, group, &l);
- if (r <= 0)
- return r;
-
- LIST_FOREACH(by_path, b, l) {
- int t;
-
- if (!b->unit)
- continue;
-
- t = cgroup_bonding_is_empty_list(b);
- if (t < 0) {
-
- /* If we don't know, we don't know */
- if (t != -EAGAIN)
- log_warning("Failed to check whether cgroup is empty: %s", strerror(errno));
-
- continue;
- }
-
- if (t > 0) {
- /* If it is empty, let's delete it */
- cgroup_bonding_trim_list(b->unit->cgroup_bondings, true);
-
- if (UNIT_VTABLE(b->unit)->cgroup_notify_empty)
- UNIT_VTABLE(b->unit)->cgroup_notify_empty(b->unit);
- }
- }
-
- return 0;
-}
-
-Unit* cgroup_unit_by_pid(Manager *m, pid_t pid) {
- CGroupBonding *l, *b;
- char *group = NULL;
-
- assert(m);
if (pid <= 1)
return NULL;
- if (cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &group) < 0)
- return NULL;
-
- l = hashmap_get(m->cgroup_bondings, group);
-
- if (!l) {
- char *slash;
-
- while ((slash = strrchr(group, '/'))) {
- if (slash == group)
- break;
-
- *slash = 0;
-
- if ((l = hashmap_get(m->cgroup_bondings, group)))
- break;
- }
- }
-
- free(group);
-
- LIST_FOREACH(by_path, b, l) {
-
- if (!b->unit)
- continue;
-
- if (b->ours)
- return b->unit;
- }
-
- return NULL;
-}
-
-CGroupBonding *cgroup_bonding_find_list(CGroupBonding *first, const char *controller) {
- CGroupBonding *b;
-
- if (!controller)
- controller = SYSTEMD_CGROUP_CONTROLLER;
-
- LIST_FOREACH(by_unit, b, first)
- if (streq(b->controller, controller))
- return b;
-
- return NULL;
-}
-
-char *cgroup_bonding_to_string(CGroupBonding *b) {
- char *r;
-
- assert(b);
-
- if (asprintf(&r, "%s:%s", b->controller, b->path) < 0)
+ r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &cgroup);
+ if (r < 0)
return NULL;
- return r;
+ return manager_get_unit_by_cgroup(m, cgroup);
}
-pid_t cgroup_bonding_search_main_pid(CGroupBonding *b) {
- FILE *f;
- pid_t pid = 0, npid, mypid;
-
- assert(b);
-
- if (!b->ours)
- return 0;
-
- if (cg_enumerate_processes(b->controller, b->path, &f) < 0)
- return 0;
-
- mypid = getpid();
-
- while (cg_read_pid(f, &npid) > 0) {
- pid_t ppid;
+int manager_notify_cgroup_empty(Manager *m, const char *cgroup) {
+ Unit *u;
+ int r;
- if (npid == pid)
- continue;
+ assert(m);
+ assert(cgroup);
- /* Ignore processes that aren't our kids */
- if (get_parent_of_pid(npid, &ppid) >= 0 && ppid != mypid)
- continue;
+ u = manager_get_unit_by_cgroup(m, cgroup);
+ if (u) {
+ r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, true);
+ if (r > 0) {
+ if (UNIT_VTABLE(u)->notify_cgroup_empty)
+ UNIT_VTABLE(u)->notify_cgroup_empty(u);
- if (pid != 0) {
- /* Dang, there's more than one daemonized PID
- in this group, so we don't know what process
- is the main process. */
- pid = 0;
- break;
+ unit_add_to_gc_queue(u);
}
-
- pid = npid;
}
- fclose(f);
-
- return pid;
+ return 0;
}
-pid_t cgroup_bonding_search_main_pid_list(CGroupBonding *first) {
- CGroupBonding *b;
- pid_t pid;
-
- /* Try to find a main pid from this cgroup, but checking if
- * there's only one PID in the cgroup and returning it. Later
- * on we might want to add additional, smarter heuristics
- * here. */
+static const char* const cgroup_device_policy_table[_CGROUP_DEVICE_POLICY_MAX] = {
+ [CGROUP_AUTO] = "auto",
+ [CGROUP_CLOSED] = "closed",
+ [CGROUP_STRICT] = "strict",
+};
- LIST_FOREACH(by_unit, b, first)
- if ((pid = cgroup_bonding_search_main_pid(b)) != 0)
- return pid;
-
- return 0;
-
-}
+DEFINE_STRING_TABLE_LOOKUP(cgroup_device_policy, CGroupDevicePolicy);
diff --git a/src/core/cgroup.h b/src/core/cgroup.h
index 6555d89e37..0a079e909d 100644
--- a/src/core/cgroup.h
+++ b/src/core/cgroup.h
@@ -5,7 +5,7 @@
/***
This file is part of systemd.
- Copyright 2010 Lennart Poettering
+ Copyright 2013 Lennart Poettering
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
@@ -21,74 +21,95 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-typedef struct CGroupBonding CGroupBonding;
+#include "list.h"
-#include "unit.h"
+typedef struct CGroupContext CGroupContext;
+typedef struct CGroupDeviceAllow CGroupDeviceAllow;
+typedef struct CGroupBlockIODeviceWeight CGroupBlockIODeviceWeight;
+typedef struct CGroupBlockIODeviceBandwidth CGroupBlockIODeviceBandwidth;
-/* Binds a cgroup to a name */
-struct CGroupBonding {
- char *controller;
- char *path;
+typedef enum CGroupDevicePolicy {
- Unit *unit;
+ /* When devices listed, will allow those, plus built-in ones,
+ if none are listed will allow everything. */
+ CGROUP_AUTO,
- /* For the Unit::cgroup_bondings list */
- LIST_FIELDS(CGroupBonding, by_unit);
+ /* Everything forbidden, except built-in ones and listed ones. */
+ CGROUP_CLOSED,
- /* For the Manager::cgroup_bondings hashmap */
- LIST_FIELDS(CGroupBonding, by_path);
+ /* Everythings forbidden, except for the listed devices */
+ CGROUP_STRICT,
- /* When shutting down, remove cgroup? Are our own tasks the
- * only ones in this group?*/
- bool ours:1;
+ _CGROUP_DEVICE_POLICY_MAX,
+ _CGROUP_DEVICE_POLICY_INVALID = -1
+} CGroupDevicePolicy;
- /* If we cannot create this group, or add a process to it, is this fatal? */
- bool essential:1;
+struct CGroupDeviceAllow {
+ LIST_FIELDS(CGroupDeviceAllow, device_allow);
+ char *path;
+ bool r:1;
+ bool w:1;
+ bool m:1;
+};
- /* This cgroup is realized */
- bool realized:1;
+struct CGroupBlockIODeviceWeight {
+ LIST_FIELDS(CGroupBlockIODeviceWeight, device_weights);
+ char *path;
+ unsigned long weight;
};
-int cgroup_bonding_realize(CGroupBonding *b);
-int cgroup_bonding_realize_list(CGroupBonding *first);
+struct CGroupBlockIODeviceBandwidth {
+ LIST_FIELDS(CGroupBlockIODeviceBandwidth, device_bandwidths);
+ char *path;
+ uint64_t bandwidth;
+ bool read;
+};
-void cgroup_bonding_free(CGroupBonding *b, bool trim);
-void cgroup_bonding_free_list(CGroupBonding *first, bool trim);
+struct CGroupContext {
+ bool cpu_accounting;
+ bool blockio_accounting;
+ bool memory_accounting;
-int cgroup_bonding_install(CGroupBonding *b, pid_t pid, const char *suffix);
-int cgroup_bonding_install_list(CGroupBonding *first, pid_t pid, const char *suffix);
+ unsigned long cpu_shares;
-int cgroup_bonding_migrate(CGroupBonding *b, CGroupBonding *list);
-int cgroup_bonding_migrate_to(CGroupBonding *b, const char *target, bool rem);
+ unsigned long blockio_weight;
+ LIST_HEAD(CGroupBlockIODeviceWeight, blockio_device_weights);
+ LIST_HEAD(CGroupBlockIODeviceBandwidth, blockio_device_bandwidths);
-int cgroup_bonding_set_group_access(CGroupBonding *b, mode_t mode, uid_t uid, gid_t gid);
-int cgroup_bonding_set_group_access_list(CGroupBonding *b, mode_t mode, uid_t uid, gid_t gid);
+ uint64_t memory_limit;
-int cgroup_bonding_set_task_access(CGroupBonding *b, mode_t mode, uid_t uid, gid_t gid, int sticky);
-int cgroup_bonding_set_task_access_list(CGroupBonding *b, mode_t mode, uid_t uid, gid_t gid, int sticky);
+ CGroupDevicePolicy device_policy;
+ LIST_HEAD(CGroupDeviceAllow, device_allow);
+};
-int cgroup_bonding_kill(CGroupBonding *b, int sig, bool sigcont, bool rem, Set *s, const char *suffix);
-int cgroup_bonding_kill_list(CGroupBonding *first, int sig, bool sigcont, bool rem, Set *s, const char *suffix);
+#include "unit.h"
+#include "manager.h"
+#include "cgroup-util.h"
-void cgroup_bonding_trim(CGroupBonding *first, bool delete_root);
-void cgroup_bonding_trim_list(CGroupBonding *first, bool delete_root);
+void cgroup_context_init(CGroupContext *c);
+void cgroup_context_done(CGroupContext *c);
+void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix);
+void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const char *path);
+CGroupControllerMask cgroup_context_get_mask(CGroupContext *c);
-int cgroup_bonding_is_empty(CGroupBonding *b);
-int cgroup_bonding_is_empty_list(CGroupBonding *first);
+void cgroup_context_free_device_allow(CGroupContext *c, CGroupDeviceAllow *a);
+void cgroup_context_free_blockio_device_weight(CGroupContext *c, CGroupBlockIODeviceWeight *w);
+void cgroup_context_free_blockio_device_bandwidth(CGroupContext *c, CGroupBlockIODeviceBandwidth *b);
-CGroupBonding *cgroup_bonding_find_list(CGroupBonding *first, const char *controller) _pure_;
+int unit_realize_cgroup(Unit *u);
+void unit_destroy_cgroup(Unit *u);
-char *cgroup_bonding_to_string(CGroupBonding *b);
+int manager_setup_cgroup(Manager *m);
+void manager_shutdown_cgroup(Manager *m, bool delete);
-pid_t cgroup_bonding_search_main_pid(CGroupBonding *b);
-pid_t cgroup_bonding_search_main_pid_list(CGroupBonding *b);
+unsigned manager_dispatch_cgroup_queue(Manager *m);
-#include "manager.h"
+Unit *manager_get_unit_by_cgroup(Manager *m, const char *cgroup);
+Unit* manager_get_unit_by_pid(Manager *m, pid_t pid);
-int manager_setup_cgroup(Manager *m);
-void manager_shutdown_cgroup(Manager *m, bool delete);
+pid_t unit_search_main_pid(Unit *u);
-int cgroup_bonding_get(Manager *m, const char *cgroup, CGroupBonding **bonding);
-int cgroup_notify_empty(Manager *m, const char *group);
+int manager_notify_cgroup_empty(Manager *m, const char *group);
-Unit* cgroup_unit_by_pid(Manager *m, pid_t pid);
+const char* cgroup_device_policy_to_string(CGroupDevicePolicy i) _const_;
+CGroupDevicePolicy cgroup_device_policy_from_string(const char *s) _pure_;
diff --git a/src/core/condition.c b/src/core/condition.c
index 16cae6d23b..6c387450af 100644
--- a/src/core/condition.c
+++ b/src/core/condition.c
@@ -37,6 +37,7 @@
#include "virt.h"
#include "path-util.h"
#include "fileio.h"
+#include "unit.h"
Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
Condition *c;
@@ -157,15 +158,28 @@ static bool test_virtualization(const char *parameter) {
return v > 0 && streq(parameter, id);
}
+static bool test_apparmor_enabled(void) {
+ int r;
+ _cleanup_free_ char *p = NULL;
+
+ r = read_one_line_file("/sys/module/apparmor/parameters/enabled", &p);
+ if (r < 0)
+ return false;
+
+ return parse_boolean(p) > 0;
+}
+
static bool test_security(const char *parameter) {
#ifdef HAVE_SELINUX
if (streq(parameter, "selinux"))
return is_selinux_enabled() > 0;
#endif
- if (streq(parameter, "apparmor"))
- return access("/sys/kernel/security/apparmor/", F_OK) == 0;
- if (streq(parameter, "smack"))
- return access("/sys/fs/smackfs", F_OK) == 0;
+ if (streq(parameter, "apparmor"))
+ return test_apparmor_enabled();
+ if (streq(parameter, "ima"))
+ return access("/sys/kernel/security/ima/", F_OK) == 0;
+ if (streq(parameter, "smack"))
+ return access("/sys/fs/smackfs", F_OK) == 0;
return false;
}
@@ -236,7 +250,7 @@ static bool test_ac_power(const char *parameter) {
return (on_ac_power() != 0) == !!r;
}
-bool condition_test(Condition *c) {
+static bool condition_test(Condition *c) {
assert(c);
switch(c->type) {
@@ -320,7 +334,7 @@ bool condition_test(Condition *c) {
}
}
-bool condition_test_list(Condition *first) {
+bool condition_test_list(const char *unit, Condition *first) {
Condition *c;
int triggered = -1;
@@ -335,6 +349,16 @@ bool condition_test_list(Condition *first) {
bool b;
b = condition_test(c);
+ if (unit)
+ log_debug_unit(unit,
+ "%s=%s%s%s %s for %s.",
+ condition_type_to_string(c->type),
+ c->trigger ? "|" : "",
+ c->negate ? "!" : "",
+ c->parameter,
+ b ? "succeeded" : "failed",
+ unit);
+ c->state = b ? 1 : -1;
if (!c->trigger && !b)
return false;
@@ -354,12 +378,13 @@ void condition_dump(Condition *c, FILE *f, const char *prefix) {
prefix = "";
fprintf(f,
- "%s\t%s: %s%s%s\n",
+ "%s\t%s: %s%s%s %s\n",
prefix,
condition_type_to_string(c->type),
c->trigger ? "|" : "",
c->negate ? "!" : "",
- c->parameter);
+ c->parameter,
+ c->state < 0 ? "failed" : c->state > 0 ? "succeeded" : "untested");
}
void condition_dump_list(Condition *first, FILE *f, const char *prefix) {
@@ -378,9 +403,11 @@ static const char* const condition_type_table[_CONDITION_TYPE_MAX] = {
[CONDITION_PATH_IS_READ_WRITE] = "ConditionPathIsReadWrite",
[CONDITION_DIRECTORY_NOT_EMPTY] = "ConditionDirectoryNotEmpty",
[CONDITION_FILE_NOT_EMPTY] = "ConditionFileNotEmpty",
+ [CONDITION_FILE_IS_EXECUTABLE] = "ConditionFileIsExecutable",
[CONDITION_KERNEL_COMMAND_LINE] = "ConditionKernelCommandLine",
[CONDITION_VIRTUALIZATION] = "ConditionVirtualization",
[CONDITION_SECURITY] = "ConditionSecurity",
+ [CONDITION_CAPABILITY] = "ConditionCapability",
[CONDITION_HOST] = "ConditionHost",
[CONDITION_AC_POWER] = "ConditionACPower",
[CONDITION_NULL] = "ConditionNull"
diff --git a/src/core/condition.h b/src/core/condition.h
index 50ed955af9..1813b735a5 100644
--- a/src/core/condition.h
+++ b/src/core/condition.h
@@ -48,11 +48,14 @@ typedef enum ConditionType {
typedef struct Condition {
ConditionType type;
- char *parameter;
bool trigger:1;
bool negate:1;
+ char *parameter;
+
+ int state;
+
LIST_FIELDS(struct Condition, conditions);
} Condition;
@@ -60,8 +63,7 @@ Condition* condition_new(ConditionType type, const char *parameter, bool trigger
void condition_free(Condition *c);
void condition_free_list(Condition *c);
-bool condition_test(Condition *c);
-bool condition_test_list(Condition *c);
+bool condition_test_list(const char *unit, Condition *c);
void condition_dump(Condition *c, FILE *f, const char *prefix);
void condition_dump_list(Condition *c, FILE *f, const char *prefix);
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
new file mode 100644
index 0000000000..9ebcad9da6
--- /dev/null
+++ b/src/core/dbus-cgroup.c
@@ -0,0 +1,554 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <dbus/dbus.h>
+
+#include "path-util.h"
+#include "dbus-cgroup.h"
+
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_cgroup_append_device_policy, cgroup_device_policy, CGroupDevicePolicy);
+
+static int bus_cgroup_append_device_weights(DBusMessageIter *i, const char *property, void *data) {
+ DBusMessageIter sub, sub2;
+ CGroupContext *c = data;
+ CGroupBlockIODeviceWeight *w;
+
+ assert(i);
+ assert(property);
+ assert(c);
+
+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(st)", &sub))
+ return -ENOMEM;
+
+ LIST_FOREACH(device_weights, w, c->blockio_device_weights) {
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &w->path) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &w->weight) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return -ENOMEM;
+ }
+
+ if (!dbus_message_iter_close_container(i, &sub))
+ return -ENOMEM;
+
+ return 0;
+}
+
+static int bus_cgroup_append_device_bandwidths(DBusMessageIter *i, const char *property, void *data) {
+ DBusMessageIter sub, sub2;
+ CGroupContext *c = data;
+ CGroupBlockIODeviceBandwidth *b;
+
+ assert(i);
+ assert(property);
+ assert(c);
+
+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(st)", &sub))
+ return -ENOMEM;
+
+ LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
+
+ if (streq(property, "BlockIOReadBandwidth") != b->read)
+ continue;
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &b->path) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &b->bandwidth) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return -ENOMEM;
+ }
+
+ if (!dbus_message_iter_close_container(i, &sub))
+ return -ENOMEM;
+
+ return 0;
+}
+
+static int bus_cgroup_append_device_allow(DBusMessageIter *i, const char *property, void *data) {
+ DBusMessageIter sub, sub2;
+ CGroupContext *c = data;
+ CGroupDeviceAllow *a;
+
+ assert(i);
+ assert(property);
+ assert(c);
+
+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(ss)", &sub))
+ return -ENOMEM;
+
+ LIST_FOREACH(device_allow, a, c->device_allow) {
+ const char *rwm;
+ char buf[4];
+ unsigned k = 0;
+
+ if (a->r)
+ buf[k++] = 'r';
+ if (a->w)
+ buf[k++] = 'w';
+ if (a->m)
+ buf[k++] = 'm';
+
+ buf[k] = 0;
+ rwm = buf;
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &a->path) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &rwm) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return -ENOMEM;
+ }
+
+ if (!dbus_message_iter_close_container(i, &sub))
+ return -ENOMEM;
+
+ return 0;
+}
+
+const BusProperty bus_cgroup_context_properties[] = {
+ { "CPUAccounting", bus_property_append_bool, "b", offsetof(CGroupContext, cpu_accounting) },
+ { "CPUShares", bus_property_append_ul, "t", offsetof(CGroupContext, cpu_shares) },
+ { "BlockIOAccounting", bus_property_append_bool, "b", offsetof(CGroupContext, blockio_accounting) },
+ { "BlockIOWeight", bus_property_append_ul, "t", offsetof(CGroupContext, blockio_weight) },
+ { "BlockIODeviceWeight", bus_cgroup_append_device_weights, "a(st)", 0 },
+ { "BlockIOReadBandwidth", bus_cgroup_append_device_bandwidths, "a(st)", 0 },
+ { "BlockIOWriteBandwidth", bus_cgroup_append_device_bandwidths, "a(st)", 0 },
+ { "MemoryAccounting", bus_property_append_bool, "b", offsetof(CGroupContext, memory_accounting) },
+ { "MemoryLimit", bus_property_append_uint64, "t", offsetof(CGroupContext, memory_limit) },
+ { "DevicePolicy", bus_cgroup_append_device_policy, "s", offsetof(CGroupContext, device_policy) },
+ { "DeviceAllow", bus_cgroup_append_device_allow, "a(ss)", 0 },
+ {}
+};
+
+int bus_cgroup_set_property(
+ Unit *u,
+ CGroupContext *c,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ assert(name);
+ assert(u);
+ assert(c);
+ assert(i);
+
+ if (streq(name, "CPUAccounting")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ dbus_bool_t b;
+ dbus_message_iter_get_basic(i, &b);
+
+ c->cpu_accounting = b;
+ unit_write_drop_in_private(u, mode, name, b ? "CPUAccounting=yes" : "CPUAccounting=no");
+ }
+
+ return 1;
+
+ } else if (streq(name, "CPUShares")) {
+ uint64_t u64;
+ unsigned long ul;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(i, &u64);
+ ul = (unsigned long) u64;
+
+ if (u64 <= 0 || u64 != (uint64_t) ul)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ c->cpu_shares = ul;
+ unit_write_drop_in_private_format(u, mode, name, "CPUShares=%lu", ul);
+ }
+
+ return 1;
+
+ } else if (streq(name, "BlockIOAccounting")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ dbus_bool_t b;
+ dbus_message_iter_get_basic(i, &b);
+
+ c->blockio_accounting = b;
+ unit_write_drop_in_private(u, mode, name, b ? "BlockIOAccounting=yes" : "BlockIOAccounting=no");
+ }
+
+ return 1;
+
+ } else if (streq(name, "BlockIOWeight")) {
+ uint64_t u64;
+ unsigned long ul;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(i, &u64);
+ ul = (unsigned long) u64;
+
+ if (u64 < 10 || u64 > 1000)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ c->blockio_weight = ul;
+ unit_write_drop_in_private_format(u, mode, name, "BlockIOWeight=%lu", ul);
+ }
+
+ return 1;
+
+ } else if (streq(name, "BlockIOReadBandwidth") || streq(name, "BlockIOWriteBandwidth")) {
+ DBusMessageIter sub;
+ unsigned n = 0;
+ bool read = true;
+
+ if (streq(name, "BlockIOWriteBandwidth"))
+ read = false;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(i) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(i, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ DBusMessageIter sub2;
+ const char *path;
+ uint64_t u64;
+ CGroupBlockIODeviceBandwidth *a;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) < 0 ||
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT64, &u64, false) < 0)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ CGroupBlockIODeviceBandwidth *b;
+ bool exist = false;
+
+ LIST_FOREACH(device_bandwidths, b, c->blockio_device_bandwidths) {
+ if (path_equal(path, b->path) && read == b->read) {
+ a = b;
+ exist = true;
+ break;
+ }
+ }
+
+ if (!exist) {
+ a = new0(CGroupBlockIODeviceBandwidth, 1);
+ if (!a)
+ return -ENOMEM;
+
+ a->read = read;
+ a->path = strdup(path);
+ if (!a->path) {
+ free(a);
+ return -ENOMEM;
+ }
+ }
+
+ a->bandwidth = u64;
+
+ if (!exist)
+ LIST_PREPEND(CGroupBlockIODeviceBandwidth, device_bandwidths,
+ c->blockio_device_bandwidths, a);
+ }
+
+ n++;
+ dbus_message_iter_next(&sub);
+ }
+
+ if (mode != UNIT_CHECK) {
+ _cleanup_free_ char *buf = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ CGroupBlockIODeviceBandwidth *a;
+ CGroupBlockIODeviceBandwidth *next;
+ size_t size = 0;
+
+ if (n == 0) {
+ LIST_FOREACH_SAFE(device_bandwidths, a, next, c->blockio_device_bandwidths)
+ if (a->read == read)
+ cgroup_context_free_blockio_device_bandwidth(c, a);
+ }
+
+ f = open_memstream(&buf, &size);
+ if (!f)
+ return -ENOMEM;
+
+ if (read) {
+ fputs("BlockIOReadBandwidth=\n", f);
+ LIST_FOREACH(device_bandwidths, a, c->blockio_device_bandwidths)
+ if (a->read)
+ fprintf(f, "BlockIOReadBandwidth=%s %" PRIu64 "\n", a->path, a->bandwidth);
+ } else {
+ fputs("BlockIOWriteBandwidth=\n", f);
+ LIST_FOREACH(device_bandwidths, a, c->blockio_device_bandwidths)
+ if (!a->read)
+ fprintf(f, "BlockIOWriteBandwidth=%s %" PRIu64 "\n", a->path, a->bandwidth);
+ }
+
+ fflush(f);
+ unit_write_drop_in_private(u, mode, name, buf);
+ }
+
+ return 1;
+
+ } else if (streq(name, "BlockIODeviceWeight")) {
+ DBusMessageIter sub;
+ unsigned n = 0;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(i) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(i, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ DBusMessageIter sub2;
+ const char *path;
+ uint64_t u64;
+ unsigned long ul;
+ CGroupBlockIODeviceWeight *a;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) < 0 ||
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT64, &u64, false) < 0)
+ return -EINVAL;
+
+ ul = (unsigned long) u64;
+ if (ul < 10 || ul > 1000)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ CGroupBlockIODeviceWeight *b;
+ bool exist = false;
+
+ LIST_FOREACH(device_weights, b, c->blockio_device_weights) {
+ if (path_equal(b->path, path)) {
+ a = b;
+ exist = true;
+ break;
+ }
+ }
+
+ if (!exist) {
+ a = new0(CGroupBlockIODeviceWeight, 1);
+ if (!a)
+ return -ENOMEM;
+
+ a->path = strdup(path);
+ if (!a->path) {
+ free(a);
+ return -ENOMEM;
+ }
+ }
+
+ a->weight = ul;
+
+ if (!exist)
+ LIST_PREPEND(CGroupBlockIODeviceWeight, device_weights,
+ c->blockio_device_weights, a);
+ }
+
+ n++;
+ dbus_message_iter_next(&sub);
+ }
+
+ if (mode != UNIT_CHECK) {
+ _cleanup_free_ char *buf = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ CGroupBlockIODeviceWeight *a;
+ size_t size = 0;
+
+ if (n == 0) {
+ while (c->blockio_device_weights)
+ cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
+ }
+
+ f = open_memstream(&buf, &size);
+ if (!f)
+ return -ENOMEM;
+
+ fputs("BlockIODeviceWeight=\n", f);
+ LIST_FOREACH(device_weights, a, c->blockio_device_weights)
+ fprintf(f, "BlockIODeviceWeight=%s %lu\n", a->path, a->weight);
+
+ fflush(f);
+ unit_write_drop_in_private(u, mode, name, buf);
+ }
+
+ return 1;
+
+ } else if (streq(name, "MemoryAccounting")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ dbus_bool_t b;
+ dbus_message_iter_get_basic(i, &b);
+
+ c->memory_accounting = b;
+ unit_write_drop_in_private(u, mode, name, b ? "MemoryAccounting=yes" : "MemoryAccounting=no");
+ }
+
+ return 1;
+
+ } else if (streq(name, "MemoryLimit")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ uint64_t limit;
+ dbus_message_iter_get_basic(i, &limit);
+
+ c->memory_limit = limit;
+ unit_write_drop_in_private_format(u, mode, name, "%s=%" PRIu64, name, limit);
+ }
+
+ return 1;
+
+ } else if (streq(name, "DevicePolicy")) {
+ const char *policy;
+ CGroupDevicePolicy p;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(i, &policy);
+ p = cgroup_device_policy_from_string(policy);
+ if (p < 0)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ char *buf;
+
+ c->device_policy = p;
+
+ buf = strappenda("DevicePolicy=", policy);
+ unit_write_drop_in_private(u, mode, name, buf);
+ }
+
+ return 1;
+
+ } else if (streq(name, "DeviceAllow")) {
+ DBusMessageIter sub;
+ unsigned n = 0;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(i) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(i, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ DBusMessageIter sub2;
+ const char *path, *rwm;
+ CGroupDeviceAllow *a;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) < 0 ||
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &rwm, false) < 0)
+ return -EINVAL;
+
+ if (!path_startswith(path, "/dev")) {
+ dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "DeviceAllow= requires device node");
+ return -EINVAL;
+ }
+
+ if (isempty(rwm))
+ rwm = "rwm";
+
+ if (!in_charset(rwm, "rwm")) {
+ dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "DeviceAllow= requires combination of rwm flags");
+ return -EINVAL;
+ }
+
+ if (mode != UNIT_CHECK) {
+ CGroupDeviceAllow *b;
+ bool exist = false;
+
+ LIST_FOREACH(device_allow, b, c->device_allow) {
+ if (path_equal(b->path, path)) {
+ a = b;
+ exist = true;
+ break;
+ }
+ }
+
+ if (!exist) {
+ a = new0(CGroupDeviceAllow, 1);
+ if (!a)
+ return -ENOMEM;
+
+ a->path = strdup(path);
+ if (!a->path) {
+ free(a);
+ return -ENOMEM;
+ }
+ }
+
+ a->r = !!strchr(rwm, 'r');
+ a->w = !!strchr(rwm, 'w');
+ a->m = !!strchr(rwm, 'm');
+
+ if (!exist)
+ LIST_PREPEND(CGroupDeviceAllow, device_allow, c->device_allow, a);
+ }
+
+ n++;
+ dbus_message_iter_next(&sub);
+ }
+
+ if (mode != UNIT_CHECK) {
+ _cleanup_free_ char *buf = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ CGroupDeviceAllow *a;
+ size_t size = 0;
+
+ if (n == 0) {
+ while (c->device_allow)
+ cgroup_context_free_device_allow(c, c->device_allow);
+ }
+
+ f = open_memstream(&buf, &size);
+ if (!f)
+ return -ENOMEM;
+
+ fputs("DeviceAllow=\n", f);
+ LIST_FOREACH(device_allow, a, c->device_allow)
+ fprintf(f, "DeviceAllow=%s %s%s%s\n", a->path, a->r ? "r" : "", a->w ? "w" : "", a->m ? "m" : "");
+
+ fflush(f);
+ unit_write_drop_in_private(u, mode, name, buf);
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/src/core/dbus-cgroup.h b/src/core/dbus-cgroup.h
new file mode 100644
index 0000000000..e5ac4c3af7
--- /dev/null
+++ b/src/core/dbus-cgroup.h
@@ -0,0 +1,45 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <dbus/dbus.h>
+
+#include "manager.h"
+#include "dbus-common.h"
+#include "cgroup.h"
+
+#define BUS_CGROUP_CONTEXT_INTERFACE \
+ " <property name=\"CPUAccounting\" type=\"b\" access=\"read\"/>\n" \
+ " <property name=\"CPUShares\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"BlockIOAccounting\" type=\"b\" access=\"read\"/>\n" \
+ " <property name=\"BlockIOWeight\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"BlockIODeviceWeight\" type=\"a(st)\" access=\"read\"/>\n" \
+ " <property name=\"BlockIOReadBandwidth=\" type=\"a(st)\" access=\"read\"/>\n" \
+ " <property name=\"BlockIOWriteBandwidth=\" type=\"a(st)\" access=\"read\"/>\n" \
+ " <property name=\"MemoryAccounting\" type=\"b\" access=\"read\"/>\n" \
+ " <property name=\"MemoryLimit\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"DevicePolicy\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"DeviceAllow\" type=\"a(ss)\" access=\"read\"/>\n"
+
+extern const BusProperty bus_cgroup_context_properties[];
+
+int bus_cgroup_set_property(Unit *u, CGroupContext *c, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
index 2a8a0e1ac5..2402e8c34d 100644
--- a/src/core/dbus-execute.c
+++ b/src/core/dbus-execute.c
@@ -31,10 +31,10 @@
#include "syscall-list.h"
#include "fileio.h"
-DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_execute_append_input, exec_input, ExecInput);
-DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_execute_append_output, exec_output, ExecOutput);
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_execute_append_input, exec_input, ExecInput);
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_execute_append_output, exec_output, ExecOutput);
-int bus_execute_append_env_files(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_env_files(DBusMessageIter *i, const char *property, void *data) {
char **env_files = data, **j;
DBusMessageIter sub, sub2;
@@ -66,7 +66,7 @@ int bus_execute_append_env_files(DBusMessageIter *i, const char *property, void
return 0;
}
-int bus_execute_append_oom_score_adjust(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_oom_score_adjust(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
int32_t n;
@@ -77,12 +77,11 @@ int bus_execute_append_oom_score_adjust(DBusMessageIter *i, const char *property
if (c->oom_score_adjust_set)
n = c->oom_score_adjust;
else {
- char *t;
+ _cleanup_free_ char *t = NULL;
n = 0;
if (read_one_line_file("/proc/self/oom_score_adj", &t) >= 0) {
safe_atoi(t, &n);
- free(t);
}
}
@@ -92,7 +91,7 @@ int bus_execute_append_oom_score_adjust(DBusMessageIter *i, const char *property
return 0;
}
-int bus_execute_append_nice(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_nice(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
int32_t n;
@@ -111,7 +110,7 @@ int bus_execute_append_nice(DBusMessageIter *i, const char *property, void *data
return 0;
}
-int bus_execute_append_ioprio(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_ioprio(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
int32_t n;
@@ -130,7 +129,7 @@ int bus_execute_append_ioprio(DBusMessageIter *i, const char *property, void *da
return 0;
}
-int bus_execute_append_cpu_sched_policy(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_cpu_sched_policy(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
int32_t n;
@@ -149,7 +148,7 @@ int bus_execute_append_cpu_sched_policy(DBusMessageIter *i, const char *property
return 0;
}
-int bus_execute_append_cpu_sched_priority(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_cpu_sched_priority(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
int32_t n;
@@ -174,7 +173,7 @@ int bus_execute_append_cpu_sched_priority(DBusMessageIter *i, const char *proper
return 0;
}
-int bus_execute_append_affinity(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_affinity(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
dbus_bool_t b;
DBusMessageIter sub;
@@ -200,7 +199,7 @@ int bus_execute_append_affinity(DBusMessageIter *i, const char *property, void *
return 0;
}
-int bus_execute_append_timer_slack_nsec(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_timer_slack_nsec(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
uint64_t u;
@@ -219,7 +218,7 @@ int bus_execute_append_timer_slack_nsec(DBusMessageIter *i, const char *property
return 0;
}
-int bus_execute_append_capability_bs(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_capability_bs(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
uint64_t normal, inverted;
@@ -236,7 +235,7 @@ int bus_execute_append_capability_bs(DBusMessageIter *i, const char *property, v
return bus_property_append_uint64(i, property, &inverted);
}
-int bus_execute_append_capabilities(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_capabilities(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
char *t = NULL;
const char *s;
@@ -265,7 +264,7 @@ int bus_execute_append_capabilities(DBusMessageIter *i, const char *property, vo
return 0;
}
-int bus_execute_append_rlimits(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_rlimits(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
int r;
uint64_t u;
@@ -347,7 +346,7 @@ int bus_execute_append_command(DBusMessageIter *i, const char *property, void *d
return 0;
}
-int bus_execute_append_syscall_filter(DBusMessageIter *i, const char *property, void *data) {
+static int bus_execute_append_syscall_filter(DBusMessageIter *i, const char *property, void *data) {
ExecContext *c = data;
dbus_bool_t b;
DBusMessageIter sub;
@@ -430,10 +429,8 @@ const BusProperty bus_exec_context_properties[] = {
{ "PrivateNetwork", bus_property_append_bool, "b", offsetof(ExecContext, private_network) },
{ "SameProcessGroup", bus_property_append_bool, "b", offsetof(ExecContext, same_pgrp) },
{ "UtmpIdentifier", bus_property_append_string, "s", offsetof(ExecContext, utmp_id), true },
- { "ControlGroupModify", bus_property_append_bool, "b", offsetof(ExecContext, control_group_modify) },
- { "ControlGroupPersistent", bus_property_append_tristate_false, "b", offsetof(ExecContext, control_group_persistent) },
{ "IgnoreSIGPIPE", bus_property_append_bool, "b", offsetof(ExecContext, ignore_sigpipe) },
{ "NoNewPrivileges", bus_property_append_bool, "b", offsetof(ExecContext, no_new_privileges) },
{ "SystemCallFilter", bus_execute_append_syscall_filter, "au", 0 },
- { NULL, }
+ {}
};
diff --git a/src/core/dbus-execute.h b/src/core/dbus-execute.h
index 91d70e535f..79bf30838a 100644
--- a/src/core/dbus-execute.h
+++ b/src/core/dbus-execute.h
@@ -63,7 +63,7 @@
" <property name=\"CPUSchedulingPolicy\" type=\"i\" access=\"read\"/>\n" \
" <property name=\"CPUSchedulingPriority\" type=\"i\" access=\"read\"/>\n" \
" <property name=\"CPUAffinity\" type=\"ay\" access=\"read\"/>\n" \
- " <property name=\"TimerSlackNS\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"TimerSlackNSec\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"CPUSchedulingResetOnFork\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"NonBlocking\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"StandardInput\" type=\"s\" access=\"read\"/>\n" \
@@ -92,8 +92,6 @@
" <property name=\"PrivateNetwork\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"SameProcessGroup\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"UtmpIdentifier\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"ControlGroupModify\" type=\"b\" access=\"read\"/>\n" \
- " <property name=\"ControlGroupPersistent\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"IgnoreSIGPIPE\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"NoNewPrivileges\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"SystemCallFilter\" type=\"au\" access=\"read\"/>\n"
@@ -106,18 +104,4 @@ extern const BusProperty bus_exec_context_properties[];
#define BUS_EXEC_COMMAND_PROPERTY(name, command, indirect) \
{ name, bus_execute_append_command, "a(sasbttttuii)", (command), (indirect), NULL }
-int bus_execute_append_output(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_input(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_oom_score_adjust(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_nice(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_ioprio(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_cpu_sched_policy(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_cpu_sched_priority(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_affinity(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_timer_slack_nsec(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_capabilities(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_capability_bs(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_rlimits(DBusMessageIter *i, const char *property, void *data);
int bus_execute_append_command(DBusMessageIter *u, const char *property, void *data);
-int bus_execute_append_env_files(DBusMessageIter *i, const char *property, void *data);
-int bus_execute_append_syscall_filter(DBusMessageIter *i, const char *property, void *data);
diff --git a/src/core/dbus-job.c b/src/core/dbus-job.c
index 98ccfa62ec..4ab88d06c3 100644
--- a/src/core/dbus-job.c
+++ b/src/core/dbus-job.c
@@ -60,7 +60,7 @@ static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_job_append_type, job_type, JobType);
static int bus_job_append_unit(DBusMessageIter *i, const char *property, void *data) {
Job *j = data;
DBusMessageIter sub;
- char *p;
+ _cleanup_free_ char *p = NULL;
assert(i);
assert(property);
@@ -75,12 +75,9 @@ static int bus_job_append_unit(DBusMessageIter *i, const char *property, void *d
if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &j->unit->id) ||
!dbus_message_iter_append_basic(&sub, DBUS_TYPE_OBJECT_PATH, &p)) {
- free(p);
return -ENOMEM;
}
- free(p);
-
if (!dbus_message_iter_close_container(i, &sub))
return -ENOMEM;
@@ -136,7 +133,7 @@ static DBusHandlerResult bus_job_message_handler(DBusConnection *connection, DBu
/* Be nice to gdbus and return introspection data for our mid-level paths */
if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
- char *introspection = NULL;
+ _cleanup_free_ char *introspection = NULL;
FILE *f;
Iterator i;
size_t size;
@@ -169,7 +166,6 @@ static DBusHandlerResult bus_job_message_handler(DBusConnection *connection, DBu
if (ferror(f)) {
fclose(f);
- free(introspection);
goto oom;
}
@@ -179,12 +175,9 @@ static DBusHandlerResult bus_job_message_handler(DBusConnection *connection, DBu
goto oom;
if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection, DBUS_TYPE_INVALID)) {
- free(introspection);
goto oom;
}
- free(introspection);
-
if (!bus_maybe_send_reply(connection, message, reply))
goto oom;
@@ -261,55 +254,51 @@ static int job_send_message(Job *j, DBusMessage* (*new_message)(Job *j)) {
}
static DBusMessage* new_change_signal_message(Job *j) {
- DBusMessage *m = NULL;
- char *p = NULL;
+ _cleanup_free_ char *p = NULL;
+ DBusMessage *m;
p = job_dbus_path(j);
if (!p)
- goto oom;
+ return NULL;
if (j->sent_dbus_new_signal) {
/* Send a properties changed signal */
m = bus_properties_changed_new(p, "org.freedesktop.systemd1.Job", INVALIDATING_PROPERTIES);
if (!m)
- goto oom;
+ return NULL;
} else {
/* Send a new signal */
m = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "JobNew");
if (!m)
- goto oom;
+ return NULL;
if (!dbus_message_append_args(m,
DBUS_TYPE_UINT32, &j->id,
DBUS_TYPE_OBJECT_PATH, &p,
DBUS_TYPE_STRING, &j->unit->id,
- DBUS_TYPE_INVALID))
- goto oom;
+ DBUS_TYPE_INVALID)) {
+ dbus_message_unref(m);
+ return NULL;
+ }
}
return m;
-
-oom:
- if (m)
- dbus_message_unref(m);
- free(p);
- return NULL;
}
static DBusMessage* new_removed_signal_message(Job *j) {
- DBusMessage *m = NULL;
- char *p = NULL;
+ _cleanup_free_ char *p = NULL;
+ DBusMessage *m;
const char *r;
p = job_dbus_path(j);
if (!p)
- goto oom;
+ return NULL;
m = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "JobRemoved");
if (!m)
- goto oom;
+ return NULL;
r = job_result_to_string(j->result);
@@ -318,16 +307,12 @@ static DBusMessage* new_removed_signal_message(Job *j) {
DBUS_TYPE_OBJECT_PATH, &p,
DBUS_TYPE_STRING, &j->unit->id,
DBUS_TYPE_STRING, &r,
- DBUS_TYPE_INVALID))
- goto oom;
+ DBUS_TYPE_INVALID)) {
+ dbus_message_unref(m);
+ return NULL;
+ }
return m;
-
-oom:
- if (m)
- dbus_message_unref(m);
- free(p);
- return NULL;
}
void bus_job_send_change_signal(Job *j) {
diff --git a/src/core/dbus-kill.c b/src/core/dbus-kill.c
index 165f63074b..811adb1b5a 100644
--- a/src/core/dbus-kill.c
+++ b/src/core/dbus-kill.c
@@ -25,11 +25,83 @@
#include "dbus-kill.h"
#include "dbus-common.h"
-DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_kill_append_mode, kill_mode, KillMode);
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_kill_append_mode, kill_mode, KillMode);
const BusProperty bus_kill_context_properties[] = {
{ "KillMode", bus_kill_append_mode, "s", offsetof(KillContext, kill_mode) },
{ "KillSignal", bus_property_append_int, "i", offsetof(KillContext, kill_signal) },
{ "SendSIGKILL", bus_property_append_bool, "b", offsetof(KillContext, send_sigkill) },
- { NULL, }
+ { "SendSIGHUP", bus_property_append_bool, "b", offsetof(KillContext, send_sighup) },
+ {}
};
+
+int bus_kill_context_set_transient_property(
+ Unit *u,
+ KillContext *c,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ assert(u);
+ assert(c);
+ assert(name);
+ assert(i);
+
+ if (streq(name, "KillMode")) {
+ const char *m;
+ KillMode k;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(i, &m);
+
+ k = kill_mode_from_string(m);
+ if (k < 0)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ c->kill_mode = k;
+
+ unit_write_drop_in_private_format(u, mode, name, "KillMode=%s\n", kill_mode_to_string(k));
+ }
+
+ return 1;
+
+ } else if (streq(name, "SendSIGHUP")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ dbus_bool_t b;
+
+ dbus_message_iter_get_basic(i, &b);
+ c->send_sighup = b;
+
+ unit_write_drop_in_private_format(u, mode, name, "SendSIGHUP=%s\n", yes_no(b));
+ }
+
+ return 1;
+
+ } else if (streq(name, "SendSIGKILL")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ dbus_bool_t b;
+
+ dbus_message_iter_get_basic(i, &b);
+ c->send_sigkill = b;
+
+ unit_write_drop_in_private_format(u, mode, name, "SendSIGKILL=%s\n", yes_no(b));
+ }
+
+ return 1;
+
+ }
+
+ return 0;
+}
diff --git a/src/core/dbus-kill.h b/src/core/dbus-kill.h
index 238fbd36d6..7676d98e91 100644
--- a/src/core/dbus-kill.h
+++ b/src/core/dbus-kill.h
@@ -29,11 +29,9 @@
#define BUS_KILL_CONTEXT_INTERFACE \
" <property name=\"KillMode\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"KillSignal\" type=\"i\" access=\"read\"/>\n" \
- " <property name=\"SendSIGKILL\" type=\"b\" access=\"read\"/>\n"
-
-#define BUS_KILL_COMMAND_INTERFACE(name) \
- " <property name=\"" name "\" type=\"a(sasbttuii)\" access=\"read\"/>\n"
+ " <property name=\"SendSIGKILL\" type=\"b\" access=\"read\"/>\n" \
+ " <property name=\"SendSIGHUP\" type=\"b\" access=\"read\"/>\n"
extern const BusProperty bus_kill_context_properties[];
-int bus_kill_append_mode(DBusMessageIter *i, const char *property, void *data);
+int bus_kill_context_set_transient_property(Unit *u, KillContext *c, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index 56b02a1cf5..676a07ffa5 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -103,32 +103,6 @@
" <method name=\"ResetFailedUnit\">\n" \
" <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
" </method>\n" \
- " <method name=\"SetUnitControlGroup\">\n" \
- " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"group\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
- " </method>\n" \
- " <method name=\"UnsetUnitControlGroup\">\n" \
- " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"group\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"\n/>" \
- " </method>\n" \
- " <method name=\"GetUnitControlGroupAttribute\">\n" \
- " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"values\" type=\"as\" direction=\"out\"/>\n" \
- " </method>\n" \
- " <method name=\"SetUnitControlGroupAttribute\">\n" \
- " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"values\" type=\"as\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"\n/>" \
- " </method>\n" \
- " <method name=\"UnsetUnitControlGroupAttributes\">\n" \
- " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
- " </method>\n" \
" <method name=\"GetJob\">\n" \
" <arg name=\"id\" type=\"u\" direction=\"in\"/>\n" \
" <arg name=\"job\" type=\"o\" direction=\"out\"/>\n" \
@@ -178,8 +152,8 @@
" <arg name=\"unset\" type=\"as\" direction=\"in\"/>\n" \
" <arg name=\"set\" type=\"as\" direction=\"in\"/>\n" \
" </method>\n" \
- " <method name=\"ListUnitFiles\">\n" \
- " <arg name=\"files\" type=\"a(ss)\" direction=\"out\"/>\n" \
+ " <method name=\"ListUnitFiles\">\n" \
+ " <arg name=\"files\" type=\"a(ss)\" direction=\"out\"/>\n" \
" </method>\n" \
" <method name=\"GetUnitFileState\">\n" \
" <arg name=\"file\" type=\"s\" direction=\"in\"/>\n" \
@@ -227,6 +201,25 @@
" <arg name=\"files\" type=\"as\" direction=\"in\"/>\n" \
" <arg name=\"runtime\" type=\"b\" direction=\"in\"/>\n" \
" <arg name=\"changes\" type=\"a(sss)\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"SetDefaultTarget\">\n" \
+ " <arg name=\"files\" type=\"as\" direction=\"in\"/>\n" \
+ " <arg name=\"changes\" type=\"a(sss)\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"GetDefaultTarget\">\n" \
+ " <arg name=\"name\" type=\"s\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"SetUnitProperties\">\n" \
+ " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"runtime\" type=\"b\" direction=\"in\"/>\n" \
+ " <arg name=\"properties\" type=\"a(sv)\" direction=\"in\"/>\n" \
+ " </method>\n" \
+ " <method name=\"StartTransientUnit\">\n" \
+ " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"properties\" type=\"a(sv)\" direction=\"in\"/>\n" \
+ " <arg name=\"aux\" type=\"a(sa(sv))\" direction=\"in\"/>\n" \
+ " <arg name=\"job\" type=\"o\" direction=\"out\"/>\n" \
" </method>\n"
#define BUS_MANAGER_INTERFACE_SIGNALS \
@@ -257,7 +250,10 @@
" <arg name=\"userspace\" type=\"t\"/>\n" \
" <arg name=\"total\" type=\"t\"/>\n" \
" </signal>" \
- " <signal name=\"UnitFilesChanged\"/>\n"
+ " <signal name=\"UnitFilesChanged\"/>\n" \
+ " <signal name=\"Reloading\">\n" \
+ " <arg name=\"active\" type=\"b\"/>\n" \
+ " </signal>"
#define BUS_MANAGER_INTERFACE_PROPERTIES_GENERAL \
" <property name=\"Version\" type=\"s\" access=\"read\"/>\n" \
@@ -275,6 +271,14 @@
" <property name=\"UserspaceTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"FinishTimestamp\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"FinishTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"GeneratorsStartTimestamp\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"GeneratorsStartTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"GeneratorsFinishTimestamp\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"GeneratorsFinishTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"UnitsLoadStartTimestamp\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"UnitsLoadStartTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"UnitsLoadFinishTimestamp\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"UnitsLoadFinishTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"LogLevel\" type=\"s\" access=\"readwrite\"/>\n" \
" <property name=\"LogTarget\" type=\"s\" access=\"readwrite\"/>\n" \
" <property name=\"NNames\" type=\"u\" access=\"read\"/>\n" \
@@ -286,8 +290,6 @@
" <property name=\"ConfirmSpawn\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"ShowStatus\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"UnitPath\" type=\"as\" access=\"read\"/>\n" \
- " <property name=\"ControlGroupHierarchy\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"DefaultControllers\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"DefaultStandardOutput\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"DefaultStandardError\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"RuntimeWatchdogUSec\" type=\"t\" access=\"readwrite\"/>\n" \
@@ -384,7 +386,7 @@ static int bus_manager_set_log_target(DBusMessageIter *i, const char *property,
}
static int bus_manager_append_log_level(DBusMessageIter *i, const char *property, void *data) {
- char *t;
+ _cleanup_free_ char *t = NULL;
int r;
assert(i);
@@ -397,7 +399,6 @@ static int bus_manager_append_log_level(DBusMessageIter *i, const char *property
if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &t))
r = -ENOMEM;
- free(t);
return r;
}
@@ -580,6 +581,14 @@ static const BusProperty bus_manager_properties[] = {
{ "UserspaceTimestampMonotonic", bus_property_append_uint64, "t", offsetof(Manager, userspace_timestamp.monotonic) },
{ "FinishTimestamp", bus_property_append_uint64, "t", offsetof(Manager, finish_timestamp.realtime) },
{ "FinishTimestampMonotonic", bus_property_append_uint64, "t", offsetof(Manager, finish_timestamp.monotonic) },
+ { "GeneratorsStartTimestamp", bus_property_append_uint64, "t", offsetof(Manager, generators_start_timestamp.realtime) },
+ { "GeneratorsStartTimestampMonotonic", bus_property_append_uint64, "t", offsetof(Manager, generators_start_timestamp.monotonic) },
+ { "GeneratorsFinishTimestamp", bus_property_append_uint64, "t", offsetof(Manager, generators_finish_timestamp.realtime) },
+ { "GeneratorsFinishTimestampMonotonic", bus_property_append_uint64, "t", offsetof(Manager, generators_finish_timestamp.monotonic) },
+ { "UnitsLoadStartTimestamp", bus_property_append_uint64, "t", offsetof(Manager, unitsload_start_timestamp.realtime) },
+ { "UnitsLoadStartTimestampMonotonic", bus_property_append_uint64, "t", offsetof(Manager, unitsload_start_timestamp.monotonic) },
+ { "UnitsLoadFinishTimestamp", bus_property_append_uint64, "t", offsetof(Manager, unitsload_finish_timestamp.realtime) },
+ { "UnitsLoadFinishTimestampMonotonic", bus_property_append_uint64, "t", offsetof(Manager, unitsload_finish_timestamp.monotonic) },
{ "LogLevel", bus_manager_append_log_level, "s", 0, false, bus_manager_set_log_level },
{ "LogTarget", bus_manager_append_log_target, "s", 0, false, bus_manager_set_log_target },
{ "NNames", bus_manager_append_n_names, "u", 0 },
@@ -591,8 +600,6 @@ static const BusProperty bus_manager_properties[] = {
{ "ConfirmSpawn", bus_property_append_bool, "b", offsetof(Manager, confirm_spawn) },
{ "ShowStatus", bus_property_append_bool, "b", offsetof(Manager, show_status) },
{ "UnitPath", bus_property_append_strv, "as", offsetof(Manager, lookup_paths.unit_path), true },
- { "ControlGroupHierarchy", bus_property_append_string, "s", offsetof(Manager, cgroup_hierarchy), true },
- { "DefaultControllers", bus_property_append_strv, "as", offsetof(Manager, default_controllers), true },
{ "DefaultStandardOutput", bus_manager_append_exec_output, "s", offsetof(Manager, default_std_output) },
{ "DefaultStandardError", bus_manager_append_exec_output, "s", offsetof(Manager, default_std_error) },
{ "RuntimeWatchdogUSec", bus_property_append_usec, "t", offsetof(Manager, runtime_watchdog), false, bus_manager_set_runtime_watchdog_usec },
@@ -662,7 +669,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
DBUS_TYPE_INVALID))
return bus_send_error_reply(connection, message, &error, -EINVAL);
- u = cgroup_unit_by_pid(m, (pid_t) pid);
+ u = manager_get_unit_by_pid(m, (pid_t) pid);
if (!u) {
dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "No unit for PID %lu is loaded.", (unsigned long) pid);
return bus_send_error_reply(connection, message, &error, -ENOENT);
@@ -875,151 +882,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
if (!reply)
goto oom;
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "SetUnitControlGroup")) {
- const char *name;
- Unit *u;
- DBusMessageIter iter;
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- u = manager_get_unit(m, name);
- if (!u) {
- dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
- return bus_send_error_reply(connection, message, &error, -ENOENT);
- }
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
-
- r = bus_unit_cgroup_set(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "UnsetUnitControlGroup")) {
- const char *name;
- Unit *u;
- DBusMessageIter iter;
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- u = manager_get_unit(m, name);
- if (!u) {
- dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
- return bus_send_error_reply(connection, message, &error, -ENOENT);
- }
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "stop");
-
- r = bus_unit_cgroup_unset(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "SetUnitControlGroupAttribute")) {
- const char *name;
- Unit *u;
- DBusMessageIter iter;
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- u = manager_get_unit(m, name);
- if (!u) {
- dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
- return bus_send_error_reply(connection, message, &error, -ENOENT);
- }
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
-
- r = bus_unit_cgroup_attribute_set(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "UnsetUnitControlGroupAttribute")) {
- const char *name;
- Unit *u;
- DBusMessageIter iter;
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- u = manager_get_unit(m, name);
- if (!u) {
- dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
- return bus_send_error_reply(connection, message, &error, -ENOENT);
- }
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "stop");
-
- r = bus_unit_cgroup_attribute_unset(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "GetUnitControlGroupAttribute")) {
- const char *name;
- Unit *u;
- DBusMessageIter iter;
- _cleanup_strv_free_ char **list = NULL;
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- u = manager_get_unit(m, name);
- if (!u) {
- dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
- return bus_send_error_reply(connection, message, &error, -ENOENT);
- }
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "status");
-
- r = bus_unit_cgroup_attribute_get(u, &iter, &list);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- dbus_message_iter_init_append(reply, &iter);
- if (bus_append_strv_iter(&iter, list) < 0)
- goto oom;
-
} else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "ListUnits")) {
DBusMessageIter iter, sub;
Iterator i;
@@ -1170,17 +1032,9 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
SELINUX_ACCESS_CHECK(connection, message, "status");
- s = BUS_CONNECTION_SUBSCRIBED(m, connection);
- if (!s) {
- s = set_new(string_hash_func, string_compare_func);
- if (!s)
- goto oom;
-
- if (!dbus_connection_set_data(connection, m->subscribed_data_slot, s, NULL)) {
- set_free(s);
- goto oom;
- }
- }
+ s = bus_acquire_subscribed(m, connection);
+ if (!s)
+ goto oom;
client = strdup(bus_message_get_sender_with_fallback(message));
if (!client)
@@ -1309,7 +1163,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
goto oom;
} else if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
- char *introspection = NULL;
+ _cleanup_free_ char *introspection = NULL;
FILE *f;
Iterator i;
Unit *u;
@@ -1335,7 +1189,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
fputs(INTROSPECTION_BEGIN, f);
HASHMAP_FOREACH_KEY(u, k, m->units, i) {
- char *p;
+ _cleanup_free_ char *p = NULL;
if (k != u->id)
continue;
@@ -1343,12 +1197,10 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
p = bus_path_escape(k);
if (!p) {
fclose(f);
- free(introspection);
goto oom;
}
fprintf(f, "<node name=\"unit/%s\"/>", p);
- free(p);
}
HASHMAP_FOREACH(j, m->jobs, i)
@@ -1358,7 +1210,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
if (ferror(f)) {
fclose(f);
- free(introspection);
goto oom;
}
@@ -1368,12 +1219,8 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
goto oom;
if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection, DBUS_TYPE_INVALID)) {
- free(introspection);
goto oom;
}
-
- free(introspection);
-
} else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "Reload")) {
SELINUX_ACCESS_CHECK(connection, message, "reload");
@@ -1728,7 +1575,8 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "ReenableUnitFiles") ||
dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "LinkUnitFiles") ||
dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "PresetUnitFiles") ||
- dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "MaskUnitFiles")) {
+ dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "MaskUnitFiles") ||
+ dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "SetDefaultTarget")) {
char **l = NULL;
DBusMessageIter iter;
@@ -1771,6 +1619,8 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
carries_install_info = r;
} else if (streq(member, "MaskUnitFiles"))
r = unit_file_mask(scope, runtime, NULL, l, force, &changes, &n_changes);
+ else if (streq(member, "SetDefaultTarget"))
+ r = unit_file_set_default(scope, NULL, l[0], &changes, &n_changes);
else
assert_not_reached("Uh? Wrong method");
@@ -1838,6 +1688,111 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
if (!reply)
goto oom;
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "GetDefaultTarget")) {
+ UnitFileScope scope = m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER;
+ _cleanup_free_ char *default_target = NULL;
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ r = unit_file_get_default(scope, NULL, &default_target);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &default_target, DBUS_TYPE_INVALID)) {
+ goto oom;
+ }
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "SetUnitProperties")) {
+ DBusMessageIter iter;
+ dbus_bool_t runtime;
+ const char *name;
+ Unit *u;
+
+ if (!dbus_message_iter_init(message, &iter))
+ goto oom;
+
+ if (bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true) < 0 ||
+ bus_iter_get_basic_and_next(&iter, DBUS_TYPE_BOOLEAN, &runtime, true) < 0)
+ return bus_send_error_reply(connection, message, NULL, -EINVAL);
+
+ u = manager_get_unit(m, name);
+ if (!u) {
+ dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
+ return bus_send_error_reply(connection, message, &error, -ENOENT);
+ }
+
+ SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
+
+ r = bus_unit_set_properties(u, &iter, runtime ? UNIT_RUNTIME : UNIT_PERSISTENT, true, &error);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, &error, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "StartTransientUnit")) {
+ const char *name, *smode;
+ DBusMessageIter iter;
+ JobMode mode;
+ UnitType t;
+ Unit *u;
+
+ if (!dbus_message_iter_init(message, &iter))
+ goto oom;
+
+ if (bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &name, true) < 0 ||
+ bus_iter_get_basic_and_next(&iter, DBUS_TYPE_STRING, &smode, true) < 0)
+ return bus_send_error_reply(connection, message, NULL, -EINVAL);
+
+ t = unit_name_to_type(name);
+ if (t < 0)
+ return bus_send_error_reply(connection, message, NULL, -EINVAL);
+ if (!unit_vtable[t]->can_transient) {
+ dbus_set_error(&error, DBUS_ERROR_INVALID_ARGS, "Unit type %s does not support transient units.", unit_type_to_string(t));
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+ }
+
+ mode = job_mode_from_string(smode);
+ if (mode < 0) {
+ dbus_set_error(&error, BUS_ERROR_INVALID_JOB_MODE, "Job mode %s is invalid.", smode);
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+ }
+
+ r = manager_load_unit(m, name, NULL, NULL, &u);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, &error, r);
+
+ SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
+
+ if (u->load_state != UNIT_NOT_FOUND || set_size(u->dependencies[UNIT_REFERENCED_BY]) > 0) {
+ dbus_set_error(&error, BUS_ERROR_UNIT_EXISTS, "Unit %s already exists.", name);
+ return bus_send_error_reply(connection, message, &error, -EEXIST);
+ }
+
+ /* OK, the unit failed to load and is unreferenced,
+ * now let's fill in the transient data instead */
+ r = unit_make_transient(u);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, &error, r);
+
+ /* Set our properties */
+ r = bus_unit_set_properties(u, &iter, UNIT_RUNTIME, false, &error);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, &error, r);
+
+ /* And load this stub fully */
+ r = unit_load(u);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, &error, r);
+
+ manager_dispatch_load_queue(m);
+
+ /* Finally, start it */
+ return bus_unit_queue_job(connection, message, u, JOB_START, mode, false);
+
} else {
const BusBoundProperties bps[] = {
{ "org.freedesktop.systemd1.Manager", bus_systemd_properties, systemd_property_string },
diff --git a/src/core/dbus-mount.c b/src/core/dbus-mount.c
index 0fcceb500d..72e187063c 100644
--- a/src/core/dbus-mount.c
+++ b/src/core/dbus-mount.c
@@ -22,11 +22,12 @@
#include <errno.h>
#include "dbus-unit.h"
-#include "dbus-mount.h"
-#include "dbus-kill.h"
#include "dbus-execute.h"
+#include "dbus-kill.h"
+#include "dbus-cgroup.h"
#include "dbus-common.h"
#include "selinux-access.h"
+#include "dbus-mount.h"
#define BUS_MOUNT_INTERFACE \
" <interface name=\"org.freedesktop.systemd1.Mount\">\n" \
@@ -35,12 +36,13 @@
" <property name=\"Options\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Type\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"TimeoutUSec\" type=\"t\" access=\"read\"/>\n" \
+ BUS_UNIT_CGROUP_INTERFACE \
BUS_EXEC_COMMAND_INTERFACE("ExecMount") \
BUS_EXEC_COMMAND_INTERFACE("ExecUnmount") \
BUS_EXEC_COMMAND_INTERFACE("ExecRemount") \
BUS_EXEC_CONTEXT_INTERFACE \
BUS_KILL_CONTEXT_INTERFACE \
- BUS_UNIT_CGROUP_INTERFACE \
+ BUS_CGROUP_CONTEXT_INTERFACE \
" <property name=\"ControlPID\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"DirectoryMode\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"Result\" type=\"s\" access=\"read\"/>\n" \
@@ -156,11 +158,12 @@ DBusHandlerResult bus_mount_message_handler(Unit *u, DBusConnection *c, DBusMess
Mount *m = MOUNT(u);
const BusBoundProperties bps[] = {
- { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
- { "org.freedesktop.systemd1.Mount", bus_mount_properties, m },
- { "org.freedesktop.systemd1.Mount", bus_exec_context_properties, &m->exec_context },
- { "org.freedesktop.systemd1.Mount", bus_kill_context_properties, &m->kill_context },
- { "org.freedesktop.systemd1.Mount", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
+ { "org.freedesktop.systemd1.Mount", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Mount", bus_mount_properties, m },
+ { "org.freedesktop.systemd1.Mount", bus_exec_context_properties, &m->exec_context },
+ { "org.freedesktop.systemd1.Mount", bus_kill_context_properties, &m->kill_context },
+ { "org.freedesktop.systemd1.Mount", bus_cgroup_context_properties, &m->cgroup_context },
{ NULL, }
};
@@ -168,3 +171,31 @@ DBusHandlerResult bus_mount_message_handler(Unit *u, DBusConnection *c, DBusMess
return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps );
}
+
+int bus_mount_set_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ Mount *m = MOUNT(u);
+ int r;
+
+ assert(name);
+ assert(u);
+ assert(i);
+
+ r = bus_cgroup_set_property(u, &m->cgroup_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ return 0;
+}
+
+int bus_mount_commit_properties(Unit *u) {
+ assert(u);
+
+ unit_realize_cgroup(u);
+ return 0;
+}
diff --git a/src/core/dbus-mount.h b/src/core/dbus-mount.h
index 8597394373..f4ec8b1625 100644
--- a/src/core/dbus-mount.h
+++ b/src/core/dbus-mount.h
@@ -27,5 +27,8 @@
DBusHandlerResult bus_mount_message_handler(Unit *u, DBusConnection *c, DBusMessage *message);
+int bus_mount_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+int bus_mount_commit_properties(Unit *u);
+
extern const char bus_mount_interface[];
extern const char bus_mount_invalidating_properties[];
diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
new file mode 100644
index 0000000000..783a969fb3
--- /dev/null
+++ b/src/core/dbus-scope.c
@@ -0,0 +1,189 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+
+#include "dbus-unit.h"
+#include "dbus-common.h"
+#include "dbus-cgroup.h"
+#include "dbus-kill.h"
+#include "selinux-access.h"
+#include "dbus-scope.h"
+
+#define BUS_SCOPE_INTERFACE \
+ " <interface name=\"org.freedesktop.systemd1.Scope\">\n" \
+ BUS_UNIT_CGROUP_INTERFACE \
+ " <property name=\"TimeoutStopUSec\" type=\"t\" access=\"read\"/>\n" \
+ BUS_KILL_CONTEXT_INTERFACE \
+ BUS_CGROUP_CONTEXT_INTERFACE \
+ " <property name=\"Result\" type=\"s\" access=\"read\"/>\n" \
+ " </interface>\n"
+
+#define INTROSPECTION \
+ DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
+ "<node>\n" \
+ BUS_UNIT_INTERFACE \
+ BUS_SCOPE_INTERFACE \
+ BUS_PROPERTIES_INTERFACE \
+ BUS_PEER_INTERFACE \
+ BUS_INTROSPECTABLE_INTERFACE \
+ "</node>\n"
+
+#define INTERFACES_LIST \
+ BUS_UNIT_INTERFACES_LIST \
+ "org.freedesktop.systemd1.Scope\0"
+
+const char bus_scope_interface[] _introspect_("Scope") = BUS_SCOPE_INTERFACE;
+
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_scope_append_scope_result, scope_result, ScopeResult);
+
+static const BusProperty bus_scope_properties[] = {
+ { "TimeoutStopUSec", bus_property_append_usec, "t", offsetof(Scope, timeout_stop_usec) },
+ { "Result", bus_scope_append_scope_result, "s", offsetof(Scope, result) },
+ {}
+};
+
+DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
+ Scope *s = SCOPE(u);
+
+ const BusBoundProperties bps[] = {
+ { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
+ { "org.freedesktop.systemd1.Scope", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Scope", bus_scope_properties, s },
+ { "org.freedesktop.systemd1.Scope", bus_cgroup_context_properties, &s->cgroup_context },
+ { "org.freedesktop.systemd1.Scope", bus_kill_context_properties, &s->kill_context },
+ {}
+ };
+
+ SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status");
+
+ return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps);
+}
+
+static int bus_scope_set_transient_property(
+ Scope *s,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ int r;
+
+ assert(name);
+ assert(s);
+ assert(i);
+
+ if (streq(name, "PIDs")) {
+ DBusMessageIter sub;
+ unsigned n = 0;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(i) != DBUS_TYPE_UINT32)
+ return -EINVAL;
+
+ r = set_ensure_allocated(&s->pids, trivial_hash_func, trivial_compare_func);
+ if (r < 0)
+ return r;
+
+ dbus_message_iter_recurse(i, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_UINT32) {
+ uint32_t pid;
+
+ dbus_message_iter_get_basic(&sub, &pid);
+
+ if (pid <= 1)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ r = set_put(s->pids, LONG_TO_PTR(pid));
+ if (r < 0 && r != -EEXIST)
+ return r;
+ }
+
+ dbus_message_iter_next(&sub);
+ n++;
+ }
+
+ if (n <= 0)
+ return -EINVAL;
+
+ return 1;
+
+ } else if (streq(name, "TimeoutStopUSec")) {
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ uint64_t t;
+
+ dbus_message_iter_get_basic(i, &t);
+
+ s->timeout_stop_usec = t;
+
+ unit_write_drop_in_format(UNIT(s), mode, name, "[Scope]\nTimeoutStopSec=%lluus\n", (unsigned long long) t);
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
+int bus_scope_set_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ Scope *s = SCOPE(u);
+ int r;
+
+ assert(name);
+ assert(u);
+ assert(i);
+
+ r = bus_cgroup_set_property(u, &s->cgroup_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ if (u->load_state == UNIT_STUB) {
+ /* While we are created we still accept PIDs */
+
+ r = bus_scope_set_transient_property(s, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ r = bus_kill_context_set_transient_property(u, &s->kill_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+ }
+
+ return 0;
+}
+
+int bus_scope_commit_properties(Unit *u) {
+ assert(u);
+
+ unit_realize_cgroup(u);
+ return 0;
+}
diff --git a/src/core/dbus-scope.h b/src/core/dbus-scope.h
new file mode 100644
index 0000000000..e6836f13f0
--- /dev/null
+++ b/src/core/dbus-scope.h
@@ -0,0 +1,33 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <dbus/dbus.h>
+
+#include "unit.h"
+
+DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMessage *message);
+
+int bus_scope_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+int bus_scope_commit_properties(Unit *u);
+
+extern const char bus_scope_interface[];
diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
index e06a5dce97..696c4462fe 100644
--- a/src/core/dbus-service.c
+++ b/src/core/dbus-service.c
@@ -21,12 +21,15 @@
#include <errno.h>
+#include "strv.h"
+#include "path-util.h"
#include "dbus-unit.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
-#include "dbus-service.h"
+#include "dbus-cgroup.h"
#include "dbus-common.h"
#include "selinux-access.h"
+#include "dbus-service.h"
#define BUS_SERVICE_INTERFACE \
" <interface name=\"org.freedesktop.systemd1.Service\">\n" \
@@ -35,13 +38,15 @@
" <property name=\"PIDFile\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"NotifyAccess\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"RestartUSec\" type=\"t\" access=\"read\"/>\n" \
- " <property name=\"TimeoutUSec\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"TimeoutStartUSec\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"TimeoutStopUSec\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"WatchdogUSec\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"WatchdogTimestamp\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"WatchdogTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"StartLimitInterval\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"StartLimitBurst\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"StartLimitAction\" type=\"s\" access=\"readwrite\"/>\n" \
+ BUS_UNIT_CGROUP_INTERFACE \
BUS_EXEC_COMMAND_INTERFACE("ExecStartPre") \
BUS_EXEC_COMMAND_INTERFACE("ExecStart") \
BUS_EXEC_COMMAND_INTERFACE("ExecStartPost") \
@@ -50,7 +55,7 @@
BUS_EXEC_COMMAND_INTERFACE("ExecStopPost") \
BUS_EXEC_CONTEXT_INTERFACE \
BUS_KILL_CONTEXT_INTERFACE \
- BUS_UNIT_CGROUP_INTERFACE \
+ BUS_CGROUP_CONTEXT_INTERFACE \
" <property name=\"PermissionsStartOnly\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"RootDirectoryStartOnly\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"RemainAfterExit\" type=\"b\" access=\"read\"/>\n" \
@@ -103,12 +108,12 @@ static DEFINE_BUS_PROPERTY_SET_ENUM(bus_service_set_start_limit_action, start_li
static const BusProperty bus_exec_main_status_properties[] = {
{ "ExecMainStartTimestamp", bus_property_append_usec, "t", offsetof(ExecStatus, start_timestamp.realtime) },
{ "ExecMainStartTimestampMonotonic",bus_property_append_usec, "t", offsetof(ExecStatus, start_timestamp.monotonic) },
- { "ExecMainExitTimestamp", bus_property_append_usec, "t", offsetof(ExecStatus, start_timestamp.realtime) },
- { "ExecMainExitTimestampMonotonic", bus_property_append_usec, "t", offsetof(ExecStatus, start_timestamp.monotonic) },
+ { "ExecMainExitTimestamp", bus_property_append_usec, "t", offsetof(ExecStatus, exit_timestamp.realtime) },
+ { "ExecMainExitTimestampMonotonic", bus_property_append_usec, "t", offsetof(ExecStatus, exit_timestamp.monotonic) },
{ "ExecMainPID", bus_property_append_pid, "u", offsetof(ExecStatus, pid) },
{ "ExecMainCode", bus_property_append_int, "i", offsetof(ExecStatus, code) },
{ "ExecMainStatus", bus_property_append_int, "i", offsetof(ExecStatus, status) },
- { NULL, }
+ {}
};
static const BusProperty bus_service_properties[] = {
@@ -117,7 +122,6 @@ static const BusProperty bus_service_properties[] = {
{ "PIDFile", bus_property_append_string, "s", offsetof(Service, pid_file), true },
{ "NotifyAccess", bus_service_append_notify_access, "s", offsetof(Service, notify_access) },
{ "RestartUSec", bus_property_append_usec, "t", offsetof(Service, restart_usec) },
- { "TimeoutUSec", bus_property_append_usec, "t", offsetof(Service, timeout_start_usec) },
{ "TimeoutStartUSec", bus_property_append_usec, "t", offsetof(Service, timeout_start_usec) },
{ "TimeoutStopUSec", bus_property_append_usec, "t", offsetof(Service, timeout_stop_usec) },
{ "WatchdogUSec", bus_property_append_usec, "t", offsetof(Service, watchdog_usec) },
@@ -141,7 +145,7 @@ static const BusProperty bus_service_properties[] = {
{ "BusName", bus_property_append_string, "s", offsetof(Service, bus_name), true },
{ "StatusText", bus_property_append_string, "s", offsetof(Service, status_text), true },
{ "Result", bus_service_append_service_result,"s", offsetof(Service, result) },
- { NULL, }
+ {}
};
DBusHandlerResult bus_service_message_handler(Unit *u, DBusConnection *connection, DBusMessage *message) {
@@ -149,15 +153,184 @@ DBusHandlerResult bus_service_message_handler(Unit *u, DBusConnection *connectio
const BusBoundProperties bps[] = {
{ "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
+ { "org.freedesktop.systemd1.Service", bus_unit_cgroup_properties, u },
{ "org.freedesktop.systemd1.Service", bus_service_properties, s },
{ "org.freedesktop.systemd1.Service", bus_exec_context_properties, &s->exec_context },
{ "org.freedesktop.systemd1.Service", bus_kill_context_properties, &s->kill_context },
+ { "org.freedesktop.systemd1.Service", bus_cgroup_context_properties, &s->cgroup_context },
{ "org.freedesktop.systemd1.Service", bus_exec_main_status_properties, &s->main_exec_status },
- { "org.freedesktop.systemd1.Service", bus_unit_cgroup_properties, u },
- { NULL, }
+ {}
};
SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "status");
return bus_default_message_handler(connection, message, INTROSPECTION, INTERFACES_LIST, bps);
}
+
+static int bus_service_set_transient_property(
+ Service *s,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ int r;
+
+ assert(name);
+ assert(s);
+ assert(i);
+
+ if (streq(name, "RemainAfterExit")) {
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ dbus_bool_t b;
+
+ dbus_message_iter_get_basic(i, &b);
+
+ s->remain_after_exit = b;
+ unit_write_drop_in_private_format(UNIT(s), mode, name, "RemainAfterExit=%s\n", yes_no(b));
+ }
+
+ return 1;
+
+ } else if (streq(name, "ExecStart")) {
+ DBusMessageIter sub;
+ unsigned n = 0;
+
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(i) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(i, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ _cleanup_strv_free_ char **argv = NULL;
+ DBusMessageIter sub2;
+ dbus_bool_t ignore;
+ const char *path;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) < 0)
+ return -EINVAL;
+
+ if (!path_is_absolute(path)) {
+ dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "Path %s is not absolute.", path);
+ return -EINVAL;
+ }
+
+ r = bus_parse_strv_iter(&sub2, &argv);
+ if (r < 0)
+ return r;
+
+ dbus_message_iter_next(&sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_BOOLEAN, &ignore, false) < 0)
+ return -EINVAL;
+
+ if (mode != UNIT_CHECK) {
+ ExecCommand *c;
+
+ c = new0(ExecCommand, 1);
+ if (!c)
+ return -ENOMEM;
+
+ c->path = strdup(path);
+ if (!c->path) {
+ free(c);
+ return -ENOMEM;
+ }
+
+ c->argv = argv;
+ argv = NULL;
+
+ c->ignore = ignore;
+
+ path_kill_slashes(c->path);
+ exec_command_append_list(&s->exec_command[SERVICE_EXEC_START], c);
+ }
+
+ n++;
+ dbus_message_iter_next(&sub);
+ }
+
+ if (mode != UNIT_CHECK) {
+ _cleanup_free_ char *buf = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ ExecCommand *c;
+ size_t size = 0;
+
+ if (n == 0) {
+ exec_command_free_list(s->exec_command[SERVICE_EXEC_START]);
+ s->exec_command[SERVICE_EXEC_START] = NULL;
+ }
+
+ f = open_memstream(&buf, &size);
+ if (!f)
+ return -ENOMEM;
+
+ fputs("ExecStart=\n", f);
+
+ LIST_FOREACH(command, c, s->exec_command[SERVICE_EXEC_START]) {
+ _cleanup_free_ char *a;
+
+ a = strv_join_quoted(c->argv);
+ if (!a)
+ return -ENOMEM;
+
+ fprintf(f, "ExecStart=%s@%s %s\n",
+ c->ignore ? "-" : "",
+ c->path,
+ a);
+ }
+
+ fflush(f);
+ unit_write_drop_in_private(UNIT(s), mode, name, buf);
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
+int bus_service_set_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ Service *s = SERVICE(u);
+ int r;
+
+ assert(name);
+ assert(u);
+ assert(i);
+
+ r = bus_cgroup_set_property(u, &s->cgroup_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ if (u->transient && u->load_state == UNIT_STUB) {
+ /* This is a transient unit, let's load a little more */
+
+ r = bus_service_set_transient_property(s, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ r = bus_kill_context_set_transient_property(u, &s->kill_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+ }
+
+ return 0;
+}
+
+int bus_service_commit_properties(Unit *u) {
+ assert(u);
+
+ unit_realize_cgroup(u);
+ return 0;
+}
diff --git a/src/core/dbus-service.h b/src/core/dbus-service.h
index 143aed7ae5..9b9f13701c 100644
--- a/src/core/dbus-service.h
+++ b/src/core/dbus-service.h
@@ -27,5 +27,8 @@
DBusHandlerResult bus_service_message_handler(Unit *u, DBusConnection *c, DBusMessage *message);
+int bus_service_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+int bus_service_commit_properties(Unit *u);
+
extern const char bus_service_interface[];
extern const char bus_service_invalidating_properties[];
diff --git a/src/core/dbus-slice.c b/src/core/dbus-slice.c
new file mode 100644
index 0000000000..dac9fbdf5f
--- /dev/null
+++ b/src/core/dbus-slice.c
@@ -0,0 +1,93 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+
+#include "dbus-unit.h"
+#include "dbus-common.h"
+#include "dbus-cgroup.h"
+#include "selinux-access.h"
+#include "dbus-slice.h"
+
+#define BUS_SLICE_INTERFACE \
+ " <interface name=\"org.freedesktop.systemd1.Slice\">\n" \
+ BUS_UNIT_CGROUP_INTERFACE \
+ BUS_CGROUP_CONTEXT_INTERFACE \
+ " </interface>\n"
+
+#define INTROSPECTION \
+ DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
+ "<node>\n" \
+ BUS_UNIT_INTERFACE \
+ BUS_SLICE_INTERFACE \
+ BUS_PROPERTIES_INTERFACE \
+ BUS_PEER_INTERFACE \
+ BUS_INTROSPECTABLE_INTERFACE \
+ "</node>\n"
+
+#define INTERFACES_LIST \
+ BUS_UNIT_INTERFACES_LIST \
+ "org.freedesktop.systemd1.Slice\0"
+
+const char bus_slice_interface[] _introspect_("Slice") = BUS_SLICE_INTERFACE;
+
+DBusHandlerResult bus_slice_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
+ Slice *s = SLICE(u);
+
+ const BusBoundProperties bps[] = {
+ { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
+ { "org.freedesktop.systemd1.Slice", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Slice", bus_cgroup_context_properties, &s->cgroup_context },
+ {}
+ };
+
+ SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status");
+
+ return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps);
+}
+
+int bus_slice_set_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ Slice *s = SLICE(u);
+ int r;
+
+ assert(name);
+ assert(u);
+ assert(i);
+
+ r = bus_cgroup_set_property(u, &s->cgroup_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ return 0;
+}
+
+int bus_slice_commit_properties(Unit *u) {
+ assert(u);
+
+ unit_realize_cgroup(u);
+ return 0;
+}
diff --git a/src/core/dbus-slice.h b/src/core/dbus-slice.h
new file mode 100644
index 0000000000..c5ac473763
--- /dev/null
+++ b/src/core/dbus-slice.h
@@ -0,0 +1,33 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <dbus/dbus.h>
+
+#include "unit.h"
+
+DBusHandlerResult bus_slice_message_handler(Unit *u, DBusConnection *c, DBusMessage *message);
+
+int bus_slice_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+int bus_slice_commit_properties(Unit *u);
+
+extern const char bus_slice_interface[];
diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
index 77d98ea0fd..30c4b6302c 100644
--- a/src/core/dbus-socket.c
+++ b/src/core/dbus-socket.c
@@ -22,24 +22,26 @@
#include <errno.h>
#include "dbus-unit.h"
-#include "dbus-socket.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
+#include "dbus-cgroup.h"
#include "dbus-common.h"
#include "selinux-access.h"
+#include "dbus-socket.h"
#define BUS_SOCKET_INTERFACE \
" <interface name=\"org.freedesktop.systemd1.Socket\">\n" \
" <property name=\"BindIPv6Only\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"Backlog\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"TimeoutUSec\" type=\"t\" access=\"read\"/>\n" \
+ BUS_UNIT_CGROUP_INTERFACE \
BUS_EXEC_COMMAND_INTERFACE("ExecStartPre") \
BUS_EXEC_COMMAND_INTERFACE("ExecStartPost") \
BUS_EXEC_COMMAND_INTERFACE("ExecStopPre") \
BUS_EXEC_COMMAND_INTERFACE("ExecStopPost") \
BUS_EXEC_CONTEXT_INTERFACE \
BUS_KILL_CONTEXT_INTERFACE \
- BUS_UNIT_CGROUP_INTERFACE \
+ BUS_CGROUP_CONTEXT_INTERFACE \
" <property name=\"ControlPID\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"BindToDevice\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"DirectoryMode\" type=\"u\" access=\"read\"/>\n" \
@@ -65,6 +67,7 @@
" <property name=\"MessageQueueMessageSize\" type=\"x\" access=\"read\"/>\n" \
" <property name=\"Listen\" type=\"a(ss)\" access=\"read\"/>\n" \
" <property name=\"Result\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"ReusePort\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"SmackLabel\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"SmackLabelIPIn\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"SmackLabelIPOut\" type=\"s\" access=\"read\"/>\n" \
@@ -192,24 +195,54 @@ static const BusProperty bus_socket_properties[] = {
{ "MessageQueueMaxMessages", bus_property_append_long, "x", offsetof(Socket, mq_maxmsg) },
{ "MessageQueueMessageSize", bus_property_append_long, "x", offsetof(Socket, mq_msgsize) },
{ "Result", bus_socket_append_socket_result, "s", offsetof(Socket, result) },
+ { "ReusePort", bus_property_append_bool, "b", offsetof(Socket, reuseport) },
{ "SmackLabel", bus_property_append_string, "s", offsetof(Socket, smack), true },
{ "SmackLabelIPIn", bus_property_append_string, "s", offsetof(Socket, smack_ip_in), true },
{ "SmackLabelIPOut",bus_property_append_string, "s", offsetof(Socket, smack_ip_out), true },
- { NULL, }
+ {}
};
DBusHandlerResult bus_socket_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
Socket *s = SOCKET(u);
const BusBoundProperties bps[] = {
- { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
- { "org.freedesktop.systemd1.Socket", bus_socket_properties, s },
- { "org.freedesktop.systemd1.Socket", bus_exec_context_properties, &s->exec_context },
- { "org.freedesktop.systemd1.Socket", bus_kill_context_properties, &s->kill_context },
- { "org.freedesktop.systemd1.Socket", bus_unit_properties, u },
- { NULL, }
+ { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
+ { "org.freedesktop.systemd1.Socket", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Socket", bus_socket_properties, s },
+ { "org.freedesktop.systemd1.Socket", bus_exec_context_properties, &s->exec_context },
+ { "org.freedesktop.systemd1.Socket", bus_kill_context_properties, &s->kill_context },
+ { "org.freedesktop.systemd1.Socket", bus_cgroup_context_properties, &s->cgroup_context },
+ {}
};
SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status");
return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps);
}
+
+int bus_socket_set_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ Socket *s = SOCKET(u);
+ int r;
+
+ assert(name);
+ assert(u);
+ assert(i);
+
+ r = bus_cgroup_set_property(u, &s->cgroup_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ return 0;
+}
+
+int bus_socket_commit_properties(Unit *u) {
+ assert(u);
+
+ unit_realize_cgroup(u);
+ return 0;
+}
diff --git a/src/core/dbus-socket.h b/src/core/dbus-socket.h
index 5369b22e5e..eb035c1a94 100644
--- a/src/core/dbus-socket.h
+++ b/src/core/dbus-socket.h
@@ -27,5 +27,8 @@
DBusHandlerResult bus_socket_message_handler(Unit *u, DBusConnection *c, DBusMessage *message);
+int bus_socket_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+int bus_socket_commit_properties(Unit *u);
+
extern const char bus_socket_interface[];
extern const char bus_socket_invalidating_properties[];
diff --git a/src/core/dbus-swap.c b/src/core/dbus-swap.c
index 2e99fba7db..06edfdcde4 100644
--- a/src/core/dbus-swap.c
+++ b/src/core/dbus-swap.c
@@ -23,22 +23,24 @@
#include <errno.h>
#include "dbus-unit.h"
-#include "dbus-swap.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
+#include "dbus-cgroup.h"
#include "dbus-common.h"
#include "selinux-access.h"
+#include "dbus-swap.h"
#define BUS_SWAP_INTERFACE \
" <interface name=\"org.freedesktop.systemd1.Swap\">\n" \
" <property name=\"What\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Priority\" type=\"i\" access=\"read\"/>\n" \
" <property name=\"TimeoutUSec\" type=\"t\" access=\"read\"/>\n" \
+ BUS_UNIT_CGROUP_INTERFACE \
BUS_EXEC_COMMAND_INTERFACE("ExecActivate") \
BUS_EXEC_COMMAND_INTERFACE("ExecDeactivate") \
BUS_EXEC_CONTEXT_INTERFACE \
BUS_KILL_CONTEXT_INTERFACE \
- BUS_UNIT_CGROUP_INTERFACE \
+ BUS_CGROUP_CONTEXT_INTERFACE \
" <property name=\"ControlPID\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"Result\" type=\"s\" access=\"read\"/>\n" \
" </interface>\n"
@@ -93,6 +95,7 @@ static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_swap_append_swap_result, swap_result,
static const BusProperty bus_swap_properties[] = {
{ "What", bus_property_append_string, "s", offsetof(Swap, what), true },
{ "Priority", bus_swap_append_priority, "i", 0 },
+ { "TimeoutUSec",bus_property_append_usec, "t", offsetof(Swap, timeout_usec)},
BUS_EXEC_COMMAND_PROPERTY("ExecActivate", offsetof(Swap, exec_command[SWAP_EXEC_ACTIVATE]), false),
BUS_EXEC_COMMAND_PROPERTY("ExecDeactivate", offsetof(Swap, exec_command[SWAP_EXEC_DEACTIVATE]), false),
{ "ControlPID", bus_property_append_pid, "u", offsetof(Swap, control_pid) },
@@ -103,11 +106,12 @@ static const BusProperty bus_swap_properties[] = {
DBusHandlerResult bus_swap_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) {
Swap *s = SWAP(u);
const BusBoundProperties bps[] = {
- { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
- { "org.freedesktop.systemd1.Swap", bus_swap_properties, s },
- { "org.freedesktop.systemd1.Swap", bus_exec_context_properties, &s->exec_context },
- { "org.freedesktop.systemd1.Swap", bus_kill_context_properties, &s->kill_context },
- { "org.freedesktop.systemd1.Swap", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Unit", bus_unit_properties, u },
+ { "org.freedesktop.systemd1.Swap", bus_unit_cgroup_properties, u },
+ { "org.freedesktop.systemd1.Swap", bus_swap_properties, s },
+ { "org.freedesktop.systemd1.Swap", bus_exec_context_properties, &s->exec_context },
+ { "org.freedesktop.systemd1.Swap", bus_kill_context_properties, &s->kill_context },
+ { "org.freedesktop.systemd1.Swap", bus_cgroup_context_properties, &s->cgroup_context },
{ NULL, }
};
@@ -115,3 +119,31 @@ DBusHandlerResult bus_swap_message_handler(Unit *u, DBusConnection *c, DBusMessa
return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps);
}
+
+int bus_swap_set_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
+
+ Swap *s = SWAP(u);
+ int r;
+
+ assert(name);
+ assert(u);
+ assert(i);
+
+ r = bus_cgroup_set_property(u, &s->cgroup_context, name, i, mode, error);
+ if (r != 0)
+ return r;
+
+ return 0;
+}
+
+int bus_swap_commit_properties(Unit *u) {
+ assert(u);
+
+ unit_realize_cgroup(u);
+ return 0;
+}
diff --git a/src/core/dbus-swap.h b/src/core/dbus-swap.h
index 41fe4447ff..9b586a1ad2 100644
--- a/src/core/dbus-swap.h
+++ b/src/core/dbus-swap.h
@@ -28,5 +28,8 @@
DBusHandlerResult bus_swap_message_handler(Unit *u, DBusConnection *c, DBusMessage *message);
+int bus_swap_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+int bus_swap_commit_properties(Unit *u);
+
extern const char bus_swap_interface[];
extern const char bus_swap_invalidating_properties[];
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 575f8eb36a..2ea59b2913 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -81,6 +81,22 @@ static int bus_unit_append_following(DBusMessageIter *i, const char *property, v
return 0;
}
+static int bus_unit_append_slice(DBusMessageIter *i, const char *property, void *data) {
+ Unit *u = data;
+ const char *d;
+
+ assert(i);
+ assert(property);
+ assert(u);
+
+ d = strempty(unit_slice_name(u));
+
+ if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &d))
+ return -ENOMEM;
+
+ return 0;
+}
+
static int bus_unit_append_dependencies(DBusMessageIter *i, const char *property, void *data) {
Unit *u;
Iterator j;
@@ -279,101 +295,69 @@ static int bus_unit_append_job(DBusMessageIter *i, const char *property, void *d
return 0;
}
-static int bus_unit_append_default_cgroup(DBusMessageIter *i, const char *property, void *data) {
+static int bus_unit_append_need_daemon_reload(DBusMessageIter *i, const char *property, void *data) {
Unit *u = data;
- char *t;
- CGroupBonding *cgb;
- bool success;
+ dbus_bool_t b;
assert(i);
assert(property);
assert(u);
- cgb = unit_get_default_cgroup(u);
- if (cgb) {
- t = cgroup_bonding_to_string(cgb);
- if (!t)
- return -ENOMEM;
- } else
- t = (char*) "";
-
- success = dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &t);
-
- if (cgb)
- free(t);
-
- return success ? 0 : -ENOMEM;
-}
-
-static int bus_unit_append_cgroups(DBusMessageIter *i, const char *property, void *data) {
- Unit *u = data;
- CGroupBonding *cgb;
- DBusMessageIter sub;
-
- if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "s", &sub))
- return -ENOMEM;
-
- LIST_FOREACH(by_unit, cgb, u->cgroup_bondings) {
- _cleanup_free_ char *t = NULL;
- bool success;
-
- t = cgroup_bonding_to_string(cgb);
- if (!t)
- return -ENOMEM;
-
- success = dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &t);
- if (!success)
- return -ENOMEM;
- }
+ b = unit_need_daemon_reload(u);
- if (!dbus_message_iter_close_container(i, &sub))
+ if (!dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &b))
return -ENOMEM;
return 0;
}
-static int bus_unit_append_cgroup_attrs(DBusMessageIter *i, const char *property, void *data) {
- Unit *u = data;
- CGroupAttribute *a;
- DBusMessageIter sub, sub2;
-
- if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(sss)", &sub))
- return -ENOMEM;
+static int bus_property_append_condition(DBusMessageIter *i, const char *property, void *data) {
+ Condition **cp = data;
+ Condition *c;
+ const char *name, *param;
+ dbus_bool_t trigger, negate;
+ dbus_int32_t state;
+ DBusMessageIter sub;
- LIST_FOREACH(by_unit, a, u->cgroup_attributes) {
- _cleanup_free_ char *v = NULL;
- bool success;
+ assert(i);
+ assert(property);
+ assert(cp);
- if (a->semantics && a->semantics->map_write)
- a->semantics->map_write(a->semantics, a->value, &v);
+ c = *cp;
+ assert(c);
- success =
- dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) &&
- dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &a->controller) &&
- dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &a->name) &&
- dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, v ? &v : &a->value) &&
- dbus_message_iter_close_container(&sub, &sub2);
- if (!success)
- return -ENOMEM;
- }
+ name = condition_type_to_string(c->type);
+ param = c->parameter;
+ trigger = c->trigger;
+ negate = c->negate;
+ state = c->state;
- if (!dbus_message_iter_close_container(i, &sub))
+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_STRUCT, NULL, &sub) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &name) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_BOOLEAN, &trigger) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_BOOLEAN, &negate) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &param) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &state) ||
+ !dbus_message_iter_close_container(i, &sub))
return -ENOMEM;
return 0;
}
-static int bus_unit_append_need_daemon_reload(DBusMessageIter *i, const char *property, void *data) {
- Unit *u = data;
- dbus_bool_t b;
+static int bus_property_append_condition_list(DBusMessageIter *i, const char *property, void *data) {
+ Condition **first = data, *c;
+ DBusMessageIter sub;
assert(i);
- assert(property);
- assert(u);
+ assert(data);
- b = unit_need_daemon_reload(u);
+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(sbbsi)", &sub))
+ return -ENOMEM;
- if (!dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &b))
+ LIST_FOREACH(conditions, c, *first)
+ bus_property_append_condition(&sub, property, &c);
+
+ if (!dbus_message_iter_close_container(i, &sub))
return -ENOMEM;
return 0;
@@ -471,86 +455,21 @@ static DBusHandlerResult bus_unit_message_dispatch(Unit *u, DBusConnection *conn
reply = dbus_message_new_method_return(message);
if (!reply)
goto oom;
-
- } else if (streq_ptr(dbus_message_get_member(message), "SetControlGroup")) {
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Unit", "SetProperties")) {
DBusMessageIter iter;
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
+ dbus_bool_t runtime;
if (!dbus_message_iter_init(message, &iter))
goto oom;
- r = bus_unit_cgroup_set(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- } else if (streq_ptr(dbus_message_get_member(message), "UnsetControlGroup")) {
- DBusMessageIter iter;
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "stop");
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_unit_cgroup_unset(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
- } else if (streq_ptr(dbus_message_get_member(message), "GetControlGroupAttribute")) {
- DBusMessageIter iter;
- _cleanup_strv_free_ char **list = NULL;
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "status");
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_unit_cgroup_attribute_get(u, &iter, &list);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- dbus_message_iter_init_append(reply, &iter);
- if (bus_append_strv_iter(&iter, list) < 0)
- goto oom;
-
- } else if (streq_ptr(dbus_message_get_member(message), "SetControlGroupAttribute")) {
- DBusMessageIter iter;
+ if (bus_iter_get_basic_and_next(&iter, DBUS_TYPE_BOOLEAN, &runtime, true) < 0)
+ return bus_send_error_reply(connection, message, NULL, -EINVAL);
SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start");
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_unit_cgroup_attribute_set(u, &iter);
+ r = bus_unit_set_properties(u, &iter, runtime ? UNIT_RUNTIME : UNIT_PERSISTENT, true, &error);
if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
-
- reply = dbus_message_new_method_return(message);
- if (!reply)
- goto oom;
-
- } else if (streq_ptr(dbus_message_get_member(message), "UnsetControlGroupAttribute")) {
- DBusMessageIter iter;
-
- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "stop");
-
- if (!dbus_message_iter_init(message, &iter))
- goto oom;
-
- r = bus_unit_cgroup_attribute_unset(u, &iter);
- if (r < 0)
- return bus_send_error_reply(connection, message, NULL, r);
+ return bus_send_error_reply(connection, message, &error, r);
reply = dbus_message_new_method_return(message);
if (!reply)
@@ -701,8 +620,9 @@ const DBusObjectPathVTable bus_unit_vtable = {
};
void bus_unit_send_change_signal(Unit *u) {
- _cleanup_free_ char *p = NULL;
_cleanup_dbus_message_unref_ DBusMessage *m = NULL;
+ _cleanup_free_ char *p = NULL;
+ int r;
assert(u);
@@ -720,8 +640,10 @@ void bus_unit_send_change_signal(Unit *u) {
}
p = unit_dbus_path(u);
- if (!p)
- goto oom;
+ if (!p) {
+ log_oom();
+ return;
+ }
if (u->sent_dbus_new_signal) {
/* Send a properties changed signal. First for the
@@ -734,19 +656,26 @@ void bus_unit_send_change_signal(Unit *u) {
m = bus_properties_changed_new(p,
UNIT_VTABLE(u)->bus_interface,
UNIT_VTABLE(u)->bus_invalidating_properties);
- if (!m)
- goto oom;
+ if (!m) {
+ log_oom();
+ return;
+ }
- if (bus_broadcast(u->manager, m) < 0)
- goto oom;
+ r = bus_broadcast(u->manager, m);
+ if (r < 0) {
+ log_error("Failed to broadcast change message: %s", strerror(-r));
+ return;
+ }
dbus_message_unref(m);
}
m = bus_properties_changed_new(p, "org.freedesktop.systemd1.Unit",
INVALIDATING_PROPERTIES);
- if (!m)
- goto oom;
+ if (!m) {
+ log_oom();
+ return;
+ }
} else {
/* Send a new signal */
@@ -754,25 +683,27 @@ void bus_unit_send_change_signal(Unit *u) {
m = dbus_message_new_signal("/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"UnitNew");
- if (!m)
- goto oom;
+ if (!m) {
+ log_oom();
+ return;
+ }
if (!dbus_message_append_args(m,
DBUS_TYPE_STRING, &u->id,
DBUS_TYPE_OBJECT_PATH, &p,
- DBUS_TYPE_INVALID))
- goto oom;
+ DBUS_TYPE_INVALID)) {
+ log_oom();
+ return;
+ }
}
- if (bus_broadcast(u->manager, m) < 0)
- goto oom;
+ r = bus_broadcast(u->manager, m);
+ if (r < 0) {
+ log_error("Failed to broadcast UnitNew/PropertiesChanged message.");
+ return;
+ }
u->sent_dbus_new_signal = true;
-
- return;
-
-oom:
- log_oom();
}
void bus_unit_send_removed_signal(Unit *u) {
@@ -849,7 +780,7 @@ DBusHandlerResult bus_unit_queue_job(
(type == JOB_START || type == JOB_RESTART || type == JOB_TRY_RESTART) ? "start" :
type == JOB_STOP ? "stop" : "reload");
- if (type == JOB_STOP && u->load_state == UNIT_ERROR && unit_active_state(u) == UNIT_INACTIVE) {
+ if (type == JOB_STOP && (u->load_state == UNIT_NOT_FOUND || u->load_state == UNIT_ERROR) && unit_active_state(u) == UNIT_INACTIVE) {
dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s not loaded.", u->id);
return bus_send_error_reply(connection, message, &error, -EPERM);
}
@@ -897,428 +828,273 @@ oom:
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
-static int parse_mode(DBusMessageIter *iter, bool *runtime, bool next) {
- const char *mode;
- int r;
-
- assert(iter);
- assert(runtime);
-
- r = bus_iter_get_basic_and_next(iter, DBUS_TYPE_STRING, &mode, next);
- if (r < 0)
- return r;
-
- if (streq(mode, "runtime"))
- *runtime = true;
- else if (streq(mode, "persistent"))
- *runtime = false;
- else
- return -EINVAL;
-
- return 0;
-}
+static int bus_unit_set_transient_property(
+ Unit *u,
+ const char *name,
+ DBusMessageIter *i,
+ UnitSetPropertiesMode mode,
+ DBusError *error) {
-int bus_unit_cgroup_set(Unit *u, DBusMessageIter *iter) {
- _cleanup_free_ char *controller = NULL, *old_path = NULL, *new_path = NULL, *contents = NULL;
- const char *name;
- CGroupBonding *b;
- bool runtime;
int r;
assert(u);
- assert(iter);
+ assert(name);
+ assert(i);
- if (!unit_get_exec_context(u))
- return -EINVAL;
+ if (streq(name, "Description")) {
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING)
+ return -EINVAL;
- r = bus_iter_get_basic_and_next(iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return r;
+ if (mode != UNIT_CHECK) {
+ const char *description;
- r = parse_mode(iter, &runtime, false);
- if (r < 0)
- return r;
+ dbus_message_iter_get_basic(i, &description);
- r = cg_split_spec(name, &controller, &new_path);
- if (r < 0)
- return r;
+ r = unit_set_description(u, description);
+ if (r < 0)
+ return r;
- if (!new_path) {
- new_path = unit_default_cgroup_path(u);
- if (!new_path)
- return -ENOMEM;
- }
+ unit_write_drop_in_format(u, mode, name, "[Unit]\nDescription=%s\n", description);
+ }
- if (!controller || streq(controller, SYSTEMD_CGROUP_CONTROLLER))
- return -EINVAL;
+ return 1;
- b = cgroup_bonding_find_list(u->cgroup_bondings, controller);
- if (b) {
- if (streq(b->path, new_path))
- return 0;
+ } else if (streq(name, "Slice") && unit_get_cgroup_context(u)) {
+ const char *s;
- if (b->essential)
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING)
return -EINVAL;
- old_path = strdup(b->path);
- if (!old_path)
- return -ENOMEM;
- }
-
- r = unit_add_cgroup_from_text(u, name, true, &b);
- if (r < 0)
- return r;
- if (r > 0) {
- CGroupAttribute *a;
-
- /* Try to move things to the new place, and clean up the old place */
- cgroup_bonding_realize(b);
- cgroup_bonding_migrate(b, u->cgroup_bondings);
-
- if (old_path)
- cg_trim(controller, old_path, true);
-
- /* Apply the attributes to the new group */
- LIST_FOREACH(by_unit, a, u->cgroup_attributes)
- if (streq(a->controller, controller))
- cgroup_attribute_apply(a, b);
- }
-
- contents = strjoin("[", UNIT_VTABLE(u)->exec_section, "]\n"
- "ControlGroup=", name, "\n", NULL);
- if (!contents)
- return -ENOMEM;
-
- return unit_write_drop_in(u, runtime, controller, contents);
-}
+ dbus_message_iter_get_basic(i, &s);
-int bus_unit_cgroup_unset(Unit *u, DBusMessageIter *iter) {
- _cleanup_free_ char *controller = NULL, *path = NULL, *target = NULL;
- const char *name;
- CGroupAttribute *a, *n;
- CGroupBonding *b;
- bool runtime;
- int r;
+ if (isempty(s)) {
+ if (mode != UNIT_CHECK) {
+ unit_ref_unset(&u->slice);
+ unit_remove_drop_in(u, mode, name);
+ }
+ } else {
+ Unit *slice;
- assert(u);
- assert(iter);
+ r = manager_load_unit(u->manager, s, NULL, error, &slice);
+ if (r < 0)
+ return r;
- if (!unit_get_exec_context(u))
- return -EINVAL;
+ if (slice->type != UNIT_SLICE)
+ return -EINVAL;
- r = bus_iter_get_basic_and_next(iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return r;
+ if (mode != UNIT_CHECK) {
+ unit_ref_set(&u->slice, slice);
+ unit_write_drop_in_private_format(u, mode, name, "Slice=%s\n", s);
+ }
+ }
- r = parse_mode(iter, &runtime, false);
- if (r < 0)
- return r;
+ return 1;
+
+ } else if (streq(name, "Requires") ||
+ streq(name, "RequiresOverridable") ||
+ streq(name, "Requisite") ||
+ streq(name, "RequisiteOverridable") ||
+ streq(name, "Wants") ||
+ streq(name, "BindsTo") ||
+ streq(name, "Conflicts") ||
+ streq(name, "Before") ||
+ streq(name, "After") ||
+ streq(name, "OnFailure") ||
+ streq(name, "PropagatesReloadTo") ||
+ streq(name, "ReloadPropagatedFrom") ||
+ streq(name, "PartOf")) {
+
+ UnitDependency d;
+ DBusMessageIter sub;
+
+ d = unit_dependency_from_string(name);
+ if (d < 0)
+ return -EINVAL;
- r = cg_split_spec(name, &controller, &path);
- if (r < 0)
- return r;
+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(i) != DBUS_TYPE_STRING)
+ return -EINVAL;
- if (!controller || streq(controller, SYSTEMD_CGROUP_CONTROLLER))
- return -EINVAL;
+ dbus_message_iter_recurse(i, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRING) {
+ const char *other;
- b = cgroup_bonding_find_list(u->cgroup_bondings, controller);
- if (!b)
- return -ENOENT;
+ dbus_message_iter_get_basic(&sub, &other);
- if (path && !path_equal(path, b->path))
- return -ENOENT;
+ if (!unit_name_is_valid(other, false))
+ return -EINVAL;
- if (b->essential)
- return -EINVAL;
+ if (mode != UNIT_CHECK) {
+ _cleanup_free_ char *label = NULL;
- unit_remove_drop_in(u, runtime, controller);
+ r = unit_add_dependency_by_name(u, d, other, NULL, true);
+ if (r < 0)
+ return r;
- /* Try to migrate the old group away */
- if (cg_pid_get_path(controller, 0, &target) >= 0)
- cgroup_bonding_migrate_to(u->cgroup_bondings, target, false);
+ label = strjoin(name, "-", other, NULL);
+ if (!label)
+ return -ENOMEM;
- cgroup_bonding_free(b, true);
+ unit_write_drop_in_format(u, mode, label, "[Unit]\n%s=%s\n", name, other);
+ }
- /* Drop all attributes of this controller */
- LIST_FOREACH_SAFE(by_unit, a, n, u->cgroup_attributes) {
- if (!streq(a->controller, controller))
- continue;
+ dbus_message_iter_next(&sub);
+ }
- unit_remove_drop_in(u, runtime, a->name);
- cgroup_attribute_free(a);
+ return 1;
}
return 0;
}
-int bus_unit_cgroup_attribute_get(Unit *u, DBusMessageIter *iter, char ***_result) {
- _cleanup_free_ char *controller = NULL;
- CGroupAttribute *a;
- CGroupBonding *b;
- const char *name;
- char **l = NULL;
+int bus_unit_set_properties(
+ Unit *u,
+ DBusMessageIter *iter,
+ UnitSetPropertiesMode mode,
+ bool commit,
+ DBusError *error) {
+
+ bool for_real = false;
+ DBusMessageIter sub;
+ unsigned n = 0;
int r;
assert(u);
assert(iter);
- assert(_result);
- if (!unit_get_exec_context(u))
- return -EINVAL;
+ if (u->transient)
+ mode &= UNIT_RUNTIME;
- r = bus_iter_get_basic_and_next(iter, DBUS_TYPE_STRING, &name, false);
- if (r < 0)
- return r;
+ /* We iterate through the array twice. First run we just check
+ * if all passed data is valid, second run actually applies
+ * it. This is to implement transaction-like behaviour without
+ * actually providing full transactions. */
- r = cg_controller_from_attr(name, &controller);
- if (r < 0)
- return r;
-
- /* First attempt, read the value from the kernel */
- b = cgroup_bonding_find_list(u->cgroup_bondings, controller);
- if (b) {
- _cleanup_free_ char *p = NULL, *v = NULL;
-
- r = cg_get_path(b->controller, b->path, name, &p);
- if (r < 0)
- return r;
+ if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(iter) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
- r = read_full_file(p, &v, NULL);
- if (r >= 0) {
- /* Split on new lines */
- l = strv_split_newlines(v);
- if (!l)
- return -ENOMEM;
+ dbus_message_iter_recurse(iter, &sub);
+ for (;;) {
+ DBusMessageIter sub2, sub3;
+ const char *name;
- *_result = l;
- return 0;
+ if (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_INVALID) {
- }
- }
+ if (for_real || mode == UNIT_CHECK)
+ break;
- /* If that didn't work, read our cached value */
- LIST_FOREACH(by_unit, a, u->cgroup_attributes) {
-
- if (!cgroup_attribute_matches(a, controller, name))
+ /* Reached EOF. Let's try again, and this time for realz... */
+ dbus_message_iter_recurse(iter, &sub);
+ for_real = true;
continue;
-
- r = strv_extend(&l, a->value);
- if (r < 0) {
- strv_free(l);
- return r;
}
- }
-
- if (!l)
- return -ENOENT;
-
- *_result = l;
- return 0;
-}
-
-static int update_attribute_drop_in(Unit *u, bool runtime, const char *name) {
- _cleanup_free_ char *buf = NULL;
- CGroupAttribute *a;
- assert(u);
- assert(name);
-
- LIST_FOREACH(by_unit, a, u->cgroup_attributes) {
- if (!cgroup_attribute_matches(a, NULL, name))
- continue;
-
- if (!buf) {
- buf = strjoin("[", UNIT_VTABLE(u)->exec_section, "]\n"
- "ControlGroupAttribute=", a->name, " ", a->value, "\n", NULL);
-
- if (!buf)
- return -ENOMEM;
- } else {
- char *b;
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
- b = strjoin(buf,
- "ControlGroupAttribute=", a->name, " ", a->value, "\n", NULL);
+ dbus_message_iter_recurse(&sub, &sub2);
- if (!b)
- return -ENOMEM;
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &name, true) < 0 ||
+ dbus_message_iter_get_arg_type(&sub2) != DBUS_TYPE_VARIANT)
+ return -EINVAL;
- free(buf);
- buf = b;
+ if (!UNIT_VTABLE(u)->bus_set_property) {
+ dbus_set_error(error, DBUS_ERROR_PROPERTY_READ_ONLY, "Objects of this type do not support setting properties.");
+ return -ENOENT;
}
- }
-
- if (buf)
- return unit_write_drop_in(u, runtime, name, buf);
- else
- return unit_remove_drop_in(u, runtime, name);
-}
-
-int bus_unit_cgroup_attribute_set(Unit *u, DBusMessageIter *iter) {
- _cleanup_strv_free_ char **l = NULL;
- int r;
- bool runtime = false;
- char **value;
- const char *name;
-
- assert(u);
- assert(iter);
-
- if (!unit_get_exec_context(u))
- return -EINVAL;
-
- r = bus_iter_get_basic_and_next(iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return r;
-
- r = bus_parse_strv_iter(iter, &l);
- if (r < 0)
- return r;
-
- if (!dbus_message_iter_next(iter))
- return -EINVAL;
- r = parse_mode(iter, &runtime, false);
- if (r < 0)
- return r;
-
- STRV_FOREACH(value, l) {
- _cleanup_free_ char *v = NULL;
- CGroupAttribute *a;
- const CGroupSemantics *s;
-
- r = cgroup_semantics_find(NULL, name, *value, &v, &s);
+ dbus_message_iter_recurse(&sub2, &sub3);
+ r = UNIT_VTABLE(u)->bus_set_property(u, name, &sub3, for_real ? mode : UNIT_CHECK, error);
+ if (r == 0 && u->transient && u->load_state == UNIT_STUB)
+ r = bus_unit_set_transient_property(u, name, &sub3, for_real ? mode : UNIT_CHECK, error);
if (r < 0)
return r;
-
- if (s && !s->multiple && l[1])
- return -EINVAL;
-
- r = unit_add_cgroup_attribute(u, s, NULL, name, v ? v : *value, &a);
- if (r < 0)
- return r;
-
- if (r > 0) {
- CGroupBonding *b;
-
- b = cgroup_bonding_find_list(u->cgroup_bondings, a->controller);
- if (!b) {
- /* Doesn't exist yet? Then let's add it */
- r = unit_add_cgroup_from_text(u, a->controller, false, &b);
- if (r < 0)
- return r;
-
- if (r > 0) {
- cgroup_bonding_realize(b);
- cgroup_bonding_migrate(b, u->cgroup_bondings);
- }
- }
-
- /* Make it count */
- cgroup_attribute_apply(a, u->cgroup_bondings);
+ if (r == 0) {
+ dbus_set_error(error, DBUS_ERROR_PROPERTY_READ_ONLY, "Cannot set property %s, or unknown property.", name);
+ return -ENOENT;
}
- }
-
- r = update_attribute_drop_in(u, runtime, name);
- if (r < 0)
- return r;
-
- return 0;
-}
+ dbus_message_iter_next(&sub);
-int bus_unit_cgroup_attribute_unset(Unit *u, DBusMessageIter *iter) {
- const char *name;
- bool runtime;
- int r;
-
- assert(u);
- assert(iter);
-
- if (!unit_get_exec_context(u))
- return -EINVAL;
-
- r = bus_iter_get_basic_and_next(iter, DBUS_TYPE_STRING, &name, true);
- if (r < 0)
- return r;
-
- r = parse_mode(iter, &runtime, false);
- if (r < 0)
- return r;
+ n += for_real;
+ }
- cgroup_attribute_free_some(u->cgroup_attributes, NULL, name);
- update_attribute_drop_in(u, runtime, name);
+ if (commit && n > 0 && UNIT_VTABLE(u)->bus_commit_properties)
+ UNIT_VTABLE(u)->bus_commit_properties(u);
- return 0;
+ return n;
}
const BusProperty bus_unit_properties[] = {
- { "Id", bus_property_append_string, "s", offsetof(Unit, id), true },
- { "Names", bus_unit_append_names, "as", 0 },
- { "Following", bus_unit_append_following, "s", 0 },
- { "Requires", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRES]), true },
- { "RequiresOverridable", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRES_OVERRIDABLE]), true },
- { "Requisite", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUISITE]), true },
- { "RequisiteOverridable", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUISITE_OVERRIDABLE]), true },
- { "Wants", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_WANTS]), true },
- { "BindsTo", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_BINDS_TO]), true },
- { "PartOf", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_PART_OF]), true },
- { "RequiredBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRED_BY]), true },
- { "RequiredByOverridable",bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRED_BY_OVERRIDABLE]), true },
- { "WantedBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_WANTED_BY]), true },
- { "BoundBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_BOUND_BY]), true },
- { "ConsistsOf", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_CONSISTS_OF]), true },
- { "Conflicts", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_CONFLICTS]), true },
- { "ConflictedBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_CONFLICTED_BY]), true },
- { "Before", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_BEFORE]), true },
- { "After", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_AFTER]), true },
- { "OnFailure", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_ON_FAILURE]), true },
- { "Triggers", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_TRIGGERS]), true },
- { "TriggeredBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_TRIGGERED_BY]), true },
- { "PropagatesReloadTo", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_PROPAGATES_RELOAD_TO]), true },
- { "ReloadPropagatedFrom", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_RELOAD_PROPAGATED_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 },
- { "SubState", bus_unit_append_sub_state, "s", 0 },
- { "FragmentPath", bus_property_append_string, "s", offsetof(Unit, fragment_path), true },
- { "SourcePath", bus_property_append_string, "s", offsetof(Unit, source_path), true },
- { "DropInPaths", bus_property_append_strv, "as", offsetof(Unit, dropin_paths), true },
- { "UnitFileState", bus_unit_append_file_state, "s", 0 },
- { "InactiveExitTimestamp",bus_property_append_usec, "t", offsetof(Unit, inactive_exit_timestamp.realtime) },
- { "InactiveExitTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, inactive_exit_timestamp.monotonic) },
- { "ActiveEnterTimestamp", bus_property_append_usec, "t", offsetof(Unit, active_enter_timestamp.realtime) },
- { "ActiveEnterTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, active_enter_timestamp.monotonic) },
- { "ActiveExitTimestamp", bus_property_append_usec, "t", offsetof(Unit, active_exit_timestamp.realtime) },
- { "ActiveExitTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, active_exit_timestamp.monotonic) },
- { "InactiveEnterTimestamp", bus_property_append_usec, "t", offsetof(Unit, inactive_enter_timestamp.realtime) },
- { "InactiveEnterTimestampMonotonic",bus_property_append_usec, "t", offsetof(Unit, inactive_enter_timestamp.monotonic) },
- { "CanStart", bus_unit_append_can_start, "b", 0 },
- { "CanStop", bus_unit_append_can_stop, "b", 0 },
- { "CanReload", bus_unit_append_can_reload, "b", 0 },
- { "CanIsolate", bus_unit_append_can_isolate, "b", 0 },
- { "Job", bus_unit_append_job, "(uo)", 0 },
- { "StopWhenUnneeded", bus_property_append_bool, "b", offsetof(Unit, stop_when_unneeded) },
- { "RefuseManualStart", bus_property_append_bool, "b", offsetof(Unit, refuse_manual_start) },
- { "RefuseManualStop", bus_property_append_bool, "b", offsetof(Unit, refuse_manual_stop) },
- { "AllowIsolate", bus_property_append_bool, "b", offsetof(Unit, allow_isolate) },
- { "DefaultDependencies", bus_property_append_bool, "b", offsetof(Unit, default_dependencies) },
- { "OnFailureIsolate", bus_property_append_bool, "b", offsetof(Unit, on_failure_isolate) },
- { "IgnoreOnIsolate", bus_property_append_bool, "b", offsetof(Unit, ignore_on_isolate) },
- { "IgnoreOnSnapshot", bus_property_append_bool, "b", offsetof(Unit, ignore_on_snapshot) },
- { "NeedDaemonReload", bus_unit_append_need_daemon_reload, "b", 0 },
- { "JobTimeoutUSec", bus_property_append_usec, "t", offsetof(Unit, job_timeout) },
- { "ConditionTimestamp", bus_property_append_usec, "t", offsetof(Unit, condition_timestamp.realtime) },
- { "ConditionTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, condition_timestamp.monotonic) },
- { "ConditionResult", bus_property_append_bool, "b", offsetof(Unit, condition_result) },
- { "LoadError", bus_unit_append_load_error, "(ss)", 0 },
- { NULL, }
+ { "Id", bus_property_append_string, "s", offsetof(Unit, id), true },
+ { "Names", bus_unit_append_names, "as", 0 },
+ { "Following", bus_unit_append_following, "s", 0 },
+ { "Requires", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRES]), true },
+ { "RequiresOverridable", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRES_OVERRIDABLE]), true },
+ { "Requisite", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUISITE]), true },
+ { "RequisiteOverridable", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUISITE_OVERRIDABLE]), true },
+ { "Wants", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_WANTS]), true },
+ { "BindsTo", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_BINDS_TO]), true },
+ { "PartOf", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_PART_OF]), true },
+ { "RequiredBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRED_BY]), true },
+ { "RequiredByOverridable", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_REQUIRED_BY_OVERRIDABLE]), true },
+ { "WantedBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_WANTED_BY]), true },
+ { "BoundBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_BOUND_BY]), true },
+ { "ConsistsOf", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_CONSISTS_OF]), true },
+ { "Conflicts", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_CONFLICTS]), true },
+ { "ConflictedBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_CONFLICTED_BY]), true },
+ { "Before", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_BEFORE]), true },
+ { "After", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_AFTER]), true },
+ { "OnFailure", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_ON_FAILURE]), true },
+ { "Triggers", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_TRIGGERS]), true },
+ { "TriggeredBy", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_TRIGGERED_BY]), true },
+ { "PropagatesReloadTo", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_PROPAGATES_RELOAD_TO]), true },
+ { "ReloadPropagatedFrom", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_RELOAD_PROPAGATED_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 },
+ { "SubState", bus_unit_append_sub_state, "s", 0 },
+ { "FragmentPath", bus_property_append_string, "s", offsetof(Unit, fragment_path), true },
+ { "SourcePath", bus_property_append_string, "s", offsetof(Unit, source_path), true },
+ { "DropInPaths", bus_property_append_strv, "as", offsetof(Unit, dropin_paths), true },
+ { "UnitFileState", bus_unit_append_file_state, "s", 0 },
+ { "InactiveExitTimestamp", bus_property_append_usec, "t", offsetof(Unit, inactive_exit_timestamp.realtime) },
+ { "InactiveExitTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, inactive_exit_timestamp.monotonic) },
+ { "ActiveEnterTimestamp", bus_property_append_usec, "t", offsetof(Unit, active_enter_timestamp.realtime) },
+ { "ActiveEnterTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, active_enter_timestamp.monotonic) },
+ { "ActiveExitTimestamp", bus_property_append_usec, "t", offsetof(Unit, active_exit_timestamp.realtime) },
+ { "ActiveExitTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, active_exit_timestamp.monotonic) },
+ { "InactiveEnterTimestamp", bus_property_append_usec, "t", offsetof(Unit, inactive_enter_timestamp.realtime) },
+ { "InactiveEnterTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, inactive_enter_timestamp.monotonic) },
+ { "CanStart", bus_unit_append_can_start, "b", 0 },
+ { "CanStop", bus_unit_append_can_stop, "b", 0 },
+ { "CanReload", bus_unit_append_can_reload, "b", 0 },
+ { "CanIsolate", bus_unit_append_can_isolate, "b", 0 },
+ { "Job", bus_unit_append_job, "(uo)", 0 },
+ { "StopWhenUnneeded", bus_property_append_bool, "b", offsetof(Unit, stop_when_unneeded) },
+ { "RefuseManualStart", bus_property_append_bool, "b", offsetof(Unit, refuse_manual_start) },
+ { "RefuseManualStop", bus_property_append_bool, "b", offsetof(Unit, refuse_manual_stop) },
+ { "AllowIsolate", bus_property_append_bool, "b", offsetof(Unit, allow_isolate) },
+ { "DefaultDependencies", bus_property_append_bool, "b", offsetof(Unit, default_dependencies) },
+ { "OnFailureIsolate", bus_property_append_bool, "b", offsetof(Unit, on_failure_isolate) },
+ { "IgnoreOnIsolate", bus_property_append_bool, "b", offsetof(Unit, ignore_on_isolate) },
+ { "IgnoreOnSnapshot", bus_property_append_bool, "b", offsetof(Unit, ignore_on_snapshot) },
+ { "NeedDaemonReload", bus_unit_append_need_daemon_reload, "b", 0 },
+ { "JobTimeoutUSec", bus_property_append_usec, "t", offsetof(Unit, job_timeout) },
+ { "ConditionTimestamp", bus_property_append_usec, "t", offsetof(Unit, condition_timestamp.realtime) },
+ { "ConditionTimestampMonotonic", bus_property_append_usec, "t", offsetof(Unit, condition_timestamp.monotonic) },
+ { "ConditionResult", bus_property_append_bool, "b", offsetof(Unit, condition_result) },
+ { "Conditions", bus_property_append_condition_list, "a(sbbsi)", offsetof(Unit, conditions) },
+ { "LoadError", bus_unit_append_load_error, "(ss)", 0 },
+ { "Transient", bus_property_append_bool, "b", offsetof(Unit, transient) },
+ {}
};
const BusProperty bus_unit_cgroup_properties[] = {
- { "DefaultControlGroup", bus_unit_append_default_cgroup, "s", 0 },
- { "ControlGroups", bus_unit_append_cgroups, "as", 0 },
- { "ControlGroupAttributes", bus_unit_append_cgroup_attrs, "a(sss)", 0 },
- { NULL, }
+ { "Slice", bus_unit_append_slice, "s", 0 },
+ { "ControlGroup", bus_property_append_string, "s", offsetof(Unit, cgroup_path), true },
+ {}
};
diff --git a/src/core/dbus-unit.h b/src/core/dbus-unit.h
index acd1ddbe78..3064cd552a 100644
--- a/src/core/dbus-unit.h
+++ b/src/core/dbus-unit.h
@@ -61,6 +61,10 @@
" <arg name=\"signal\" type=\"i\" direction=\"in\"/>\n" \
" </method>\n" \
" <method name=\"ResetFailed\"/>\n" \
+ " <method name=\"SetProperties\">\n" \
+ " <arg name=\"runtime\" type=\"b\" direction=\"in\"/>\n" \
+ " <arg name=\"properties\" type=\"a(sv)\" direction=\"in\"/>\n" \
+ " </method>\n" \
" <property name=\"Id\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Names\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"Following\" type=\"s\" access=\"read\"/>\n" \
@@ -121,34 +125,14 @@
" <property name=\"ConditionTimestamp\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"ConditionTimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"ConditionResult\" type=\"b\" access=\"read\"/>\n" \
+ " <property name=\"Conditions\" type=\"a(sbbsi)\" access=\"read\"/>\n" \
" <property name=\"LoadError\" type=\"(ss)\" access=\"read\"/>\n" \
+ " <property name=\"Transient\" type=\"b\" access=\"read\"/>\n" \
" </interface>\n"
#define BUS_UNIT_CGROUP_INTERFACE \
- " <property name=\"DefaultControlGroup\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"ControlGroups\" type=\"as\" access=\"read\"/>\n" \
- " <property name=\"ControlGroupAttributes\" type=\"a(sss)\" access=\"read\"/>\n" \
- " <method name=\"SetControlGroup\">\n" \
- " <arg name=\"group\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
- " </method>\n" \
- " <method name=\"UnsetControlGroup\">\n" \
- " <arg name=\"group\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
- " </method>\n" \
- " <method name=\"GetControlGroupAttribute\">\n" \
- " <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"values\" type=\"as\" direction=\"out\"/>\n" \
- " </method>\n" \
- " <method name=\"SetControlGroupAttribute\">\n" \
- " <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"values\" type=\"as\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
- " </method>\n" \
- " <method name=\"UnsetControlGroupAttribute\">\n" \
- " <arg name=\"attribute\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"mode\" type=\"s\" direction=\"in\"/>\n" \
- " </method>\n"
+ " <property name=\"Slice\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"ControlGroup\" type=\"s\" access=\"read\"/>\n"
#define BUS_UNIT_INTERFACES_LIST \
BUS_GENERIC_INTERFACES_LIST \
@@ -160,19 +144,9 @@ extern const BusProperty bus_unit_cgroup_properties[];
void bus_unit_send_change_signal(Unit *u);
void bus_unit_send_removed_signal(Unit *u);
-DBusHandlerResult bus_unit_queue_job(
- DBusConnection *connection,
- DBusMessage *message,
- Unit *u,
- JobType type,
- JobMode mode,
- bool reload_if_possible);
-
-int bus_unit_cgroup_set(Unit *u, DBusMessageIter *iter);
-int bus_unit_cgroup_unset(Unit *u, DBusMessageIter *iter);
-int bus_unit_cgroup_attribute_get(Unit *u, DBusMessageIter *iter, char ***_result);
-int bus_unit_cgroup_attribute_set(Unit *u, DBusMessageIter *iter);
-int bus_unit_cgroup_attribute_unset(Unit *u, DBusMessageIter *iter);
+DBusHandlerResult bus_unit_queue_job(DBusConnection *connection, DBusMessage *message, Unit *u, JobType type, JobMode mode, bool reload_if_possible);
+
+int bus_unit_set_properties(Unit *u, DBusMessageIter *i, UnitSetPropertiesMode mode, bool commit, DBusError *error);
extern const DBusObjectPathVTable bus_unit_vtable;
diff --git a/src/core/dbus.c b/src/core/dbus.c
index 1272c938cf..aa3d93bf06 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -28,7 +28,6 @@
#include "dbus.h"
#include "log.h"
#include "strv.h"
-#include "cgroup.h"
#include "mkdir.h"
#include "missing.h"
#include "dbus-unit.h"
@@ -453,7 +452,7 @@ static DBusHandlerResult system_bus_message_filter(DBusConnection *connection, D
DBUS_TYPE_INVALID))
log_error("Failed to parse Released message: %s", bus_error_message(&error));
else
- cgroup_notify_empty(m, cgroup);
+ manager_notify_cgroup_empty(m, cgroup);
}
dbus_error_free(&error);
@@ -489,7 +488,7 @@ static DBusHandlerResult private_bus_message_filter(DBusConnection *connection,
DBUS_TYPE_INVALID))
log_error("Failed to parse Released message: %s", bus_error_message(&error));
else
- cgroup_notify_empty(m, cgroup);
+ manager_notify_cgroup_empty(m, cgroup);
/* Forward the message to the system bus, so that user
* instances are notified as well */
@@ -1136,19 +1135,19 @@ int bus_init(Manager *m, bool try_bus_connect) {
if (set_ensure_allocated(&m->bus_connections, trivial_hash_func, trivial_compare_func) < 0 ||
set_ensure_allocated(&m->bus_connections_for_dispatch, trivial_hash_func, trivial_compare_func) < 0)
- goto oom;
+ return log_oom();
if (m->name_data_slot < 0)
if (!dbus_pending_call_allocate_data_slot(&m->name_data_slot))
- goto oom;
+ return log_oom();
if (m->conn_data_slot < 0)
if (!dbus_pending_call_allocate_data_slot(&m->conn_data_slot))
- goto oom;
+ return log_oom();
if (m->subscribed_data_slot < 0)
if (!dbus_connection_allocate_data_slot(&m->subscribed_data_slot))
- goto oom;
+ return log_oom();
if (try_bus_connect) {
if ((r = bus_init_system(m)) < 0 ||
@@ -1156,16 +1155,14 @@ int bus_init(Manager *m, bool try_bus_connect) {
return r;
}
- if ((r = bus_init_private(m)) < 0)
+ r = bus_init_private(m);
+ if (r < 0)
return r;
return 0;
-oom:
- return log_oom();
}
static void shutdown_connection(Manager *m, DBusConnection *c) {
- Set *s;
Job *j;
Iterator i;
@@ -1181,15 +1178,7 @@ static void shutdown_connection(Manager *m, DBusConnection *c) {
set_remove(m->bus_connections, c);
set_remove(m->bus_connections_for_dispatch, c);
-
- if ((s = BUS_CONNECTION_SUBSCRIBED(m, c))) {
- char *t;
-
- while ((t = set_steal_first(s)))
- free(t);
-
- set_free(s);
- }
+ set_free_free(BUS_CONNECTION_SUBSCRIBED(m, c));
if (m->queued_message_connection == c) {
m->queued_message_connection = NULL;
@@ -1260,10 +1249,10 @@ void bus_done(Manager *m) {
set_free(m->bus_connections_for_dispatch);
if (m->name_data_slot >= 0)
- dbus_pending_call_free_data_slot(&m->name_data_slot);
+ dbus_pending_call_free_data_slot(&m->name_data_slot);
if (m->conn_data_slot >= 0)
- dbus_pending_call_free_data_slot(&m->conn_data_slot);
+ dbus_pending_call_free_data_slot(&m->conn_data_slot);
if (m->subscribed_data_slot >= 0)
dbus_connection_free_data_slot(&m->subscribed_data_slot);
@@ -1390,6 +1379,12 @@ bool bus_has_subscriber(Manager *m) {
assert(m);
+ /* If we are reloading then we might not have deserialized the
+ subscribers yet, hence let's assume that there are some */
+
+ if (m->n_reloading > 0)
+ return true;
+
SET_FOREACH(c, m->bus_connections_for_dispatch, i)
if (bus_connection_has_subscriber(m, c))
return true;
@@ -1456,7 +1451,7 @@ void bus_broadcast_finished(
usec_t userspace_usec,
usec_t total_usec) {
- DBusMessage *message;
+ _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
assert(m);
@@ -1476,16 +1471,106 @@ void bus_broadcast_finished(
DBUS_TYPE_UINT64, &total_usec,
DBUS_TYPE_INVALID)) {
log_oom();
- goto finish;
+ return;
}
if (bus_broadcast(m, message) < 0) {
log_oom();
- goto finish;
+ return;
}
+}
-finish:
- if (message)
- dbus_message_unref(message);
+void bus_broadcast_reloading(Manager *m, bool active) {
+
+ _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+ dbus_bool_t b = active;
+
+ assert(m);
+
+ message = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "Reloading");
+ if (!message) {
+ log_oom();
+ return;
+ }
+
+ assert_cc(sizeof(usec_t) == sizeof(uint64_t));
+ if (!dbus_message_append_args(message,
+ DBUS_TYPE_BOOLEAN, &b,
+ DBUS_TYPE_INVALID)) {
+ log_oom();
+ return;
+ }
+
+
+ if (bus_broadcast(m, message) < 0) {
+ log_oom();
+ return;
+ }
+}
+
+Set *bus_acquire_subscribed(Manager *m, DBusConnection *c) {
+ Set *s;
+
+ assert(m);
+ assert(c);
+
+ s = BUS_CONNECTION_SUBSCRIBED(m, c);
+ if (s)
+ return s;
+
+ s = set_new(string_hash_func, string_compare_func);
+ if (!s)
+ return NULL;
+
+ if (!dbus_connection_set_data(c, m->subscribed_data_slot, s, NULL)) {
+ set_free(s);
+ return NULL;
+ }
+
+ return s;
+}
+
+void bus_serialize(Manager *m, FILE *f) {
+ char *client;
+ Iterator i;
+ Set *s;
+
+ assert(m);
+ assert(f);
+
+ if (!m->api_bus)
+ return;
+
+ s = BUS_CONNECTION_SUBSCRIBED(m, m->api_bus);
+ SET_FOREACH(client, s, i)
+ fprintf(f, "subscribed=%s\n", client);
+}
+
+int bus_deserialize_item(Manager *m, const char *line) {
+ const char *e;
+ char *b;
+ Set *s;
+
+ assert(m);
+ assert(line);
+
+ if (!m->api_bus)
+ return 0;
+
+ e = startswith(line, "subscribed=");
+ if (!e)
+ return 0;
+
+ s = bus_acquire_subscribed(m, m->api_bus);
+ if (!s)
+ return -ENOMEM;
+
+ b = strdup(e);
+ if (!b)
+ return -ENOMEM;
+
+ set_consume(s, b);
+
+ return 1;
}
diff --git a/src/core/dbus.h b/src/core/dbus.h
index c7a058e198..6500cd7455 100644
--- a/src/core/dbus.h
+++ b/src/core/dbus.h
@@ -43,6 +43,12 @@ bool bus_connection_has_subscriber(Manager *m, DBusConnection *c);
int bus_fdset_add_all(Manager *m, FDSet *fds);
void bus_broadcast_finished(Manager *m, usec_t firmware_usec, usec_t loader_usec, usec_t kernel_usec, usec_t initrd_usec, usec_t userspace_usec, usec_t total_usec);
+void bus_broadcast_reloading(Manager *m, bool active);
+
+Set *bus_acquire_subscribed(Manager *m, DBusConnection *c);
+
+void bus_serialize(Manager *m, FILE *f);
+int bus_deserialize_item(Manager *m, const char *line);
#define BUS_CONNECTION_SUBSCRIBED(m, c) dbus_connection_get_data((c), (m)->subscribed_data_slot)
#define BUS_PENDING_CALL_NAME(m, p) dbus_pending_call_get_data((p), (m)->name_data_slot)
diff --git a/src/core/execute.c b/src/core/execute.c
index 3959ef9623..a53ef48ef8 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -55,7 +55,6 @@
#include "sd-messages.h"
#include "ioprio.h"
#include "securebits.h"
-#include "cgroup.h"
#include "namespace.h"
#include "tcpwrap.h"
#include "exit-status.h"
@@ -67,8 +66,11 @@
#include "syscall-list.h"
#include "env-util.h"
#include "fileio.h"
+#include "unit.h"
+#include "async.h"
#define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC)
+#define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC)
/* This assumes there is a 'tty' group */
#define TTY_MODE 0620
@@ -758,24 +760,30 @@ static int setup_pam(
* daemon. We do things this way to ensure that the main PID
* of the daemon is the one we initially fork()ed. */
- if ((pam_code = pam_start(name, user, &conv, &handle)) != PAM_SUCCESS) {
+ pam_code = pam_start(name, user, &conv, &handle);
+ if (pam_code != PAM_SUCCESS) {
handle = NULL;
goto fail;
}
- if (tty)
- if ((pam_code = pam_set_item(handle, PAM_TTY, tty)) != PAM_SUCCESS)
+ if (tty) {
+ pam_code = pam_set_item(handle, PAM_TTY, tty);
+ if (pam_code != PAM_SUCCESS)
goto fail;
+ }
- if ((pam_code = pam_acct_mgmt(handle, PAM_SILENT)) != PAM_SUCCESS)
+ pam_code = pam_acct_mgmt(handle, PAM_SILENT);
+ if (pam_code != PAM_SUCCESS)
goto fail;
- if ((pam_code = pam_open_session(handle, PAM_SILENT)) != PAM_SUCCESS)
+ pam_code = pam_open_session(handle, PAM_SILENT);
+ if (pam_code != PAM_SUCCESS)
goto fail;
close_session = true;
- if ((!(e = pam_getenvlist(handle)))) {
+ e = pam_getenvlist(handle);
+ if (!e) {
pam_code = PAM_BUF_ERR;
goto fail;
}
@@ -789,7 +797,8 @@ static int setup_pam(
parent_pid = getpid();
- if ((pam_pid = fork()) < 0)
+ pam_pid = fork();
+ if (pam_pid < 0)
goto fail;
if (pam_pid == 0) {
@@ -840,9 +849,11 @@ static int setup_pam(
}
/* If our parent died we'll end the session */
- if (getppid() != parent_pid)
- if ((pam_code = pam_close_session(handle, PAM_DATA_SILENT)) != PAM_SUCCESS)
+ if (getppid() != parent_pid) {
+ pam_code = pam_close_session(handle, PAM_DATA_SILENT);
+ if (pam_code != PAM_SUCCESS)
goto child_finish;
+ }
r = 0;
@@ -977,6 +988,35 @@ static int apply_seccomp(uint32_t *syscall_filter) {
return 0;
}
+static void do_idle_pipe_dance(int idle_pipe[4]) {
+ assert(idle_pipe);
+
+ if (idle_pipe[1] >= 0)
+ close_nointr_nofail(idle_pipe[1]);
+ if (idle_pipe[2] >= 0)
+ close_nointr_nofail(idle_pipe[2]);
+
+ if (idle_pipe[0] >= 0) {
+ int r;
+
+ r = fd_wait_for_event(idle_pipe[0], POLLHUP, IDLE_TIMEOUT_USEC);
+
+ if (idle_pipe[3] >= 0 && r == 0 /* timeout */) {
+ /* Signal systemd that we are bored and want to continue. */
+ write(idle_pipe[3], "x", 1);
+
+ /* Wait for systemd to react to the signal above. */
+ fd_wait_for_event(idle_pipe[0], POLLHUP, IDLE_TIMEOUT2_USEC);
+ }
+
+ close_nointr_nofail(idle_pipe[0]);
+
+ }
+
+ if (idle_pipe[3] >= 0)
+ close_nointr_nofail(idle_pipe[3]);
+}
+
int exec_spawn(ExecCommand *command,
char **argv,
ExecContext *context,
@@ -986,18 +1026,17 @@ int exec_spawn(ExecCommand *command,
bool apply_chroot,
bool apply_tty_stdin,
bool confirm_spawn,
- CGroupBonding *cgroup_bondings,
- CGroupAttribute *cgroup_attributes,
- const char *cgroup_suffix,
+ CGroupControllerMask cgroup_supported,
+ const char *cgroup_path,
const char *unit_id,
- int idle_pipe[2],
+ int idle_pipe[4],
pid_t *ret) {
+ _cleanup_strv_free_ char **files_env = NULL;
+ int socket_fd;
+ char *line;
pid_t pid;
int r;
- char *line;
- int socket_fd;
- _cleanup_strv_free_ char **files_env = NULL;
assert(command);
assert(context);
@@ -1042,17 +1081,6 @@ int exec_spawn(ExecCommand *command,
NULL);
free(line);
- r = cgroup_bonding_realize_list(cgroup_bondings);
- if (r < 0)
- return r;
-
- /* We must initialize the attributes in the parent, before we
- fork, because we really need them initialized before making
- the process a member of the group (which we do in both the
- child and the parent), and we cannot really apply them twice
- (due to 'append' style attributes) */
- cgroup_attribute_apply_list(cgroup_attributes, cgroup_bondings);
-
if (context->private_tmp && !context->tmp_dir && !context->var_tmp_dir) {
r = setup_tmpdirs(&context->tmp_dir, &context->var_tmp_dir);
if (r < 0)
@@ -1072,7 +1100,6 @@ int exec_spawn(ExecCommand *command,
_cleanup_strv_free_ char **our_env = NULL, **pam_env = NULL,
**final_env = NULL, **final_argv = NULL;
unsigned n_env = 0;
- bool set_access = false;
/* child */
@@ -1096,14 +1123,8 @@ int exec_spawn(ExecCommand *command,
goto fail_child;
}
- if (idle_pipe) {
- if (idle_pipe[1] >= 0)
- close_nointr_nofail(idle_pipe[1]);
- if (idle_pipe[0] >= 0) {
- fd_wait_for_event(idle_pipe[0], POLLHUP, IDLE_TIMEOUT_USEC);
- close_nointr_nofail(idle_pipe[0]);
- }
- }
+ if (idle_pipe)
+ do_idle_pipe_dance(idle_pipe);
/* Close sockets very early to make sure we don't
* block init reexecution because it cannot bind its
@@ -1185,8 +1206,8 @@ int exec_spawn(ExecCommand *command,
goto fail_child;
}
- if (cgroup_bondings) {
- err = cgroup_bonding_install_list(cgroup_bondings, 0, cgroup_suffix);
+ if (cgroup_path) {
+ err = cg_attach_everywhere(cgroup_supported, cgroup_path, 0);
if (err < 0) {
r = EXIT_CGROUP;
goto fail_child;
@@ -1269,37 +1290,24 @@ int exec_spawn(ExecCommand *command,
goto fail_child;
}
}
+ }
- if (cgroup_bondings && context->control_group_modify) {
- err = cgroup_bonding_set_group_access_list(cgroup_bondings, 0755, uid, gid);
- if (err >= 0)
- err = cgroup_bonding_set_task_access_list(
- cgroup_bondings,
- 0644,
- uid,
- gid,
- context->control_group_persistent);
- if (err < 0) {
- r = EXIT_CGROUP;
- goto fail_child;
- }
-
- set_access = true;
+#ifdef HAVE_PAM
+ if (cgroup_path && context->user && context->pam_name) {
+ err = cg_set_task_access(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, 0644, uid, gid);
+ if (err < 0) {
+ r = EXIT_CGROUP;
+ goto fail_child;
}
- }
- if (cgroup_bondings && !set_access && context->control_group_persistent >= 0) {
- err = cgroup_bonding_set_task_access_list(
- cgroup_bondings,
- (mode_t) -1,
- (uid_t) -1,
- (uid_t) -1,
- context->control_group_persistent);
+
+ err = cg_set_group_access(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, 0755, uid, gid);
if (err < 0) {
r = EXIT_CGROUP;
goto fail_child;
}
}
+#endif
if (apply_permissions) {
err = enforce_groups(context, username, gid);
@@ -1562,7 +1570,8 @@ int exec_spawn(ExecCommand *command,
* outside of the cgroup) and in the parent (so that we can be
* sure that when we kill the cgroup the process will be
* killed too). */
- cgroup_bonding_install_list(cgroup_bondings, pid, cgroup_suffix);
+ if (cgroup_path)
+ cg_attach(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, pid);
exec_status_start(&command->exec_status, pid);
@@ -1578,11 +1587,32 @@ void exec_context_init(ExecContext *c) {
c->cpu_sched_policy = SCHED_OTHER;
c->syslog_priority = LOG_DAEMON|LOG_INFO;
c->syslog_level_prefix = true;
- c->control_group_persistent = -1;
c->ignore_sigpipe = true;
c->timer_slack_nsec = (nsec_t) -1;
}
+static void *remove_tmpdir_thread(void *p) {
+ int r;
+ _cleanup_free_ char *dirp = p;
+ char *dir;
+
+ assert(dirp);
+
+ r = rm_rf_dangerous(dirp, false, true, false);
+ dir = dirname(dirp);
+ if (r < 0)
+ log_warning("Failed to remove content of temporary directory %s: %s",
+ dir, strerror(-r));
+ else {
+ r = rmdir(dir);
+ if (r < 0)
+ log_warning("Failed to remove temporary directory %s: %s",
+ dir, strerror(-r));
+ }
+
+ return NULL;
+}
+
void exec_context_tmp_dirs_done(ExecContext *c) {
char* dirs[] = {c->tmp_dir ? c->tmp_dir : c->var_tmp_dir,
c->tmp_dir ? c->var_tmp_dir : NULL,
@@ -1590,22 +1620,8 @@ void exec_context_tmp_dirs_done(ExecContext *c) {
char **dirp;
for(dirp = dirs; *dirp; dirp++) {
- char *dir;
- int r;
-
- r = rm_rf_dangerous(*dirp, false, true, false);
- dir = dirname(*dirp);
- if (r < 0)
- log_warning("Failed to remove content of temporary directory %s: %s",
- dir, strerror(-r));
- else {
- r = rmdir(dir);
- if (r < 0)
- log_warning("Failed to remove temporary directory %s: %s",
- dir, strerror(-r));
- }
-
- free(*dirp);
+ log_debug("Spawning thread to nuke %s", *dirp);
+ asynchronous_job(remove_tmpdir_thread, *dirp);
}
c->tmp_dir = c->var_tmp_dir = NULL;
@@ -1770,10 +1786,10 @@ int exec_context_load_environment(const ExecContext *c, char ***l) {
strv_free(r);
return k;
- }
+ }
/* Log invalid environment variables with filename */
- if (p)
- p = strv_env_clean_log(p, pglob.gl_pathv[n]);
+ if (p)
+ p = strv_env_clean_log(p, pglob.gl_pathv[n]);
if (r == NULL)
r = p;
@@ -1837,14 +1853,13 @@ static void strv_fprintf(FILE *f, char **l) {
}
void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) {
- char ** e;
+ char **e;
unsigned i;
assert(c);
assert(f);
- if (!prefix)
- prefix = "";
+ prefix = strempty(prefix);
fprintf(f,
"%sUMask: %04o\n"
@@ -1852,8 +1867,6 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) {
"%sRootDirectory: %s\n"
"%sNonBlocking: %s\n"
"%sPrivateTmp: %s\n"
- "%sControlGroupModify: %s\n"
- "%sControlGroupPersistent: %s\n"
"%sPrivateNetwork: %s\n"
"%sIgnoreSIGPIPE: %s\n",
prefix, c->umask,
@@ -1861,8 +1874,6 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) {
prefix, c->root_directory ? c->root_directory : "/",
prefix, yes_no(c->non_blocking),
prefix, yes_no(c->private_tmp),
- prefix, yes_no(c->control_group_modify),
- prefix, yes_no(c->control_group_persistent),
prefix, yes_no(c->private_network),
prefix, yes_no(c->ignore_sigpipe));
diff --git a/src/core/execute.h b/src/core/execute.h
index 15574dc97e..c1e9717dc8 100644
--- a/src/core/execute.h
+++ b/src/core/execute.h
@@ -33,14 +33,11 @@ typedef struct ExecContext ExecContext;
#include <stdio.h>
#include <sched.h>
-struct CGroupBonding;
-struct CGroupAttribute;
-
-typedef struct Unit Unit;
-
#include "list.h"
#include "util.h"
+typedef struct Unit Unit;
+
typedef enum ExecInput {
EXEC_INPUT_NULL,
EXEC_INPUT_TTY,
@@ -148,9 +145,6 @@ struct ExecContext {
bool no_new_privileges;
- bool control_group_modify;
- int control_group_persistent;
-
/* This is not exposed to the user but available
* internally. We need it to make sure that whenever we spawn
* /bin/mount it is run in the same process group as us so
@@ -166,6 +160,8 @@ struct ExecContext {
bool cpu_sched_set:1;
};
+#include "cgroup.h"
+
int exec_spawn(ExecCommand *command,
char **argv,
ExecContext *context,
@@ -175,9 +171,8 @@ int exec_spawn(ExecCommand *command,
bool apply_chroot,
bool apply_tty_stdin,
bool confirm_spawn,
- struct CGroupBonding *cgroup_bondings,
- struct CGroupAttribute *cgroup_attributes,
- const char *cgroup_suffix,
+ CGroupControllerMask cgroup_mask,
+ const char *cgroup_path,
const char *unit_id,
int pipe_fd[2],
pid_t *ret);
diff --git a/src/core/job.c b/src/core/job.c
index d304a16d06..bf1d956908 100644
--- a/src/core/job.c
+++ b/src/core/job.c
@@ -35,7 +35,7 @@
#include "log.h"
#include "dbus-job.h"
#include "special.h"
-#include "sync.h"
+#include "async.h"
#include "virt.h"
JobBusClient* job_bus_client_new(DBusConnection *connection, const char *name) {
@@ -1088,10 +1088,13 @@ void job_shutdown_magic(Job *j) {
* asynchronous sync() would cause their exit to be
* delayed. */
- if (!unit_has_name(j->unit, SPECIAL_SHUTDOWN_TARGET))
+ if (j->type != JOB_START)
return;
- if (j->type != JOB_START)
+ if (j->unit->manager->running_as != SYSTEMD_SYSTEM)
+ return;
+
+ if (!unit_has_name(j->unit, SPECIAL_SHUTDOWN_TARGET))
return;
if (detect_container(NULL) > 0)
diff --git a/src/core/kill.c b/src/core/kill.c
index 0775653f73..ea947c23ae 100644
--- a/src/core/kill.c
+++ b/src/core/kill.c
@@ -29,6 +29,7 @@ void kill_context_init(KillContext *c) {
c->kill_signal = SIGTERM;
c->send_sigkill = true;
+ c->send_sighup = false;
}
void kill_context_dump(KillContext *c, FILE *f, const char *prefix) {
@@ -40,10 +41,12 @@ void kill_context_dump(KillContext *c, FILE *f, const char *prefix) {
fprintf(f,
"%sKillMode: %s\n"
"%sKillSignal: SIG%s\n"
- "%sSendSIGKILL: %s\n",
+ "%sSendSIGKILL: %s\n"
+ "%sSendSIGHUP: %s\n",
prefix, kill_mode_to_string(c->kill_mode),
prefix, signal_to_string(c->kill_signal),
- prefix, yes_no(c->send_sigkill));
+ prefix, yes_no(c->send_sigkill),
+ prefix, yes_no(c->send_sighup));
}
static const char* const kill_mode_table[_KILL_MODE_MAX] = {
diff --git a/src/core/kill.h b/src/core/kill.h
index 71a0513e84..41773f07ae 100644
--- a/src/core/kill.h
+++ b/src/core/kill.h
@@ -41,6 +41,7 @@ struct KillContext {
KillMode kill_mode;
int kill_signal;
bool send_sigkill;
+ bool send_sighup;
};
typedef enum KillWho {
diff --git a/src/core/killall.c b/src/core/killall.c
index a0f57455fb..e395050107 100644
--- a/src/core/killall.c
+++ b/src/core/killall.c
@@ -33,7 +33,7 @@
static bool ignore_proc(pid_t pid) {
_cleanup_fclose_ FILE *f = NULL;
- char c;
+ char c, *p;
size_t count;
uid_t uid;
int r;
@@ -50,7 +50,8 @@ static bool ignore_proc(pid_t pid) {
if (uid != 0)
return false;
- f = fopen(procfs_file_alloca(pid, "cmdline"), "re");
+ p = procfs_file_alloca(pid, "cmdline");
+ f = fopen(p, "re");
if (!f)
return true; /* not really, but has the desired effect */
diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
index 4e1454ee6c..31fb7bcd3f 100644
--- a/src/core/load-fragment-gperf.gperf.m4
+++ b/src/core/load-fragment-gperf.gperf.m4
@@ -66,16 +66,6 @@ $1.LimitMSGQUEUE, config_parse_limit, RLIMIT_MSGQ
$1.LimitNICE, config_parse_limit, RLIMIT_NICE, offsetof($1, exec_context.rlimit)
$1.LimitRTPRIO, config_parse_limit, RLIMIT_RTPRIO, offsetof($1, exec_context.rlimit)
$1.LimitRTTIME, config_parse_limit, RLIMIT_RTTIME, offsetof($1, exec_context.rlimit)
-$1.ControlGroup, config_parse_unit_cgroup, 0, 0
-$1.ControlGroupAttribute, config_parse_unit_cgroup_attr, 0, 0
-$1.CPUShares, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.MemoryLimit, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.MemorySoftLimit, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.DeviceAllow, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.DeviceDeny, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.BlockIOWeight, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.BlockIOReadBandwidth, config_parse_unit_cgroup_attr_pretty, 0, 0
-$1.BlockIOWriteBandwidth, config_parse_unit_cgroup_attr_pretty, 0, 0
$1.ReadWriteDirectories, config_parse_path_strv, 0, offsetof($1, exec_context.read_write_dirs)
$1.ReadOnlyDirectories, config_parse_path_strv, 0, offsetof($1, exec_context.read_only_dirs)
$1.InaccessibleDirectories, config_parse_path_strv, 0, offsetof($1, exec_context.inaccessible_dirs)
@@ -85,15 +75,28 @@ $1.MountFlags, config_parse_exec_mount_flags, 0,
$1.TCPWrapName, config_parse_unit_string_printf, 0, offsetof($1, exec_context.tcpwrap_name)
$1.PAMName, config_parse_unit_string_printf, 0, offsetof($1, exec_context.pam_name)
$1.IgnoreSIGPIPE, config_parse_bool, 0, offsetof($1, exec_context.ignore_sigpipe)
-$1.UtmpIdentifier, config_parse_unit_string_printf, 0, offsetof($1, exec_context.utmp_id)
-$1.ControlGroupModify, config_parse_bool, 0, offsetof($1, exec_context.control_group_modify)
-$1.ControlGroupPersistent, config_parse_tristate, 0, offsetof($1, exec_context.control_group_persistent)'
+$1.UtmpIdentifier, config_parse_unit_string_printf, 0, offsetof($1, exec_context.utmp_id)'
)m4_dnl
m4_define(`KILL_CONTEXT_CONFIG_ITEMS',
`$1.SendSIGKILL, config_parse_bool, 0, offsetof($1, kill_context.send_sigkill)
+$1.SendSIGHUP, config_parse_bool, 0, offsetof($1, kill_context.send_sighup)
$1.KillMode, config_parse_kill_mode, 0, offsetof($1, kill_context.kill_mode)
$1.KillSignal, config_parse_kill_signal, 0, offsetof($1, kill_context.kill_signal)'
)m4_dnl
+m4_define(`CGROUP_CONTEXT_CONFIG_ITEMS',
+`$1.Slice, config_parse_unit_slice, 0, 0
+$1.CPUAccounting, config_parse_bool, 0, offsetof($1, cgroup_context.cpu_accounting)
+$1.CPUShares, config_parse_cpu_shares, 0, offsetof($1, cgroup_context)
+$1.MemoryAccounting, config_parse_bool, 0, offsetof($1, cgroup_context.memory_accounting)
+$1.MemoryLimit, config_parse_memory_limit, 0, offsetof($1, cgroup_context)
+$1.DeviceAllow, config_parse_device_allow, 0, offsetof($1, cgroup_context)
+$1.DevicePolicy, config_parse_device_policy, 0, offsetof($1, cgroup_context.device_policy)
+$1.BlockIOAccounting, config_parse_bool, 0, offsetof($1, cgroup_context.blockio_accounting)
+$1.BlockIOWeight, config_parse_blockio_weight, 0, offsetof($1, cgroup_context)
+$1.BlockIODeviceWeight, config_parse_blockio_device_weight, 0, offsetof($1, cgroup_context)
+$1.BlockIOReadBandwidth, config_parse_blockio_bandwidth, 0, offsetof($1, cgroup_context)
+$1.BlockIOWriteBandwidth, config_parse_blockio_bandwidth, 0, offsetof($1, cgroup_context)'
+)m4_dnl
Unit.Description, config_parse_unit_string_printf, 0, offsetof(Unit, description)
Unit.Documentation, config_parse_documentation, 0, offsetof(Unit, documentation)
Unit.SourcePath, config_parse_path, 0, offsetof(Unit, source_path)
@@ -113,7 +116,7 @@ Unit.PropagateReloadTo, config_parse_unit_deps, UNIT_PROPAG
Unit.ReloadPropagatedFrom, config_parse_unit_deps, UNIT_RELOAD_PROPAGATED_FROM, 0
Unit.PropagateReloadFrom, config_parse_unit_deps, UNIT_RELOAD_PROPAGATED_FROM, 0
Unit.PartOf, config_parse_unit_deps, UNIT_PART_OF, 0
-Unit.RequiresMountsFor, config_parse_unit_requires_mounts_for, 0, offsetof(Unit, requires_mounts_for)
+Unit.RequiresMountsFor, config_parse_unit_requires_mounts_for, 0, 0
Unit.StopWhenUnneeded, config_parse_bool, 0, offsetof(Unit, stop_when_unneeded)
Unit.RefuseManualStart, config_parse_bool, 0, offsetof(Unit, refuse_manual_start)
Unit.RefuseManualStop, config_parse_bool, 0, offsetof(Unit, refuse_manual_stop)
@@ -172,6 +175,7 @@ Service.NotifyAccess, config_parse_notify_access, 0,
Service.Sockets, config_parse_service_sockets, 0, 0
Service.FsckPassNo, config_parse_fsck_passno, 0, offsetof(Service, fsck_passno)
EXEC_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
+CGROUP_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
KILL_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
m4_dnl
Socket.ListenStream, config_parse_socket_listen, SOCKET_SOCKET, 0
@@ -214,6 +218,7 @@ Socket.SmackLabel, config_parse_string, 0,
Socket.SmackLabelIPIn, config_parse_string, 0, offsetof(Socket, smack_ip_in)
Socket.SmackLabelIPOut, config_parse_string, 0, offsetof(Socket, smack_ip_out)
EXEC_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl
+CGROUP_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl
KILL_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl
m4_dnl
Mount.What, config_parse_string, 0, offsetof(Mount, parameters_fragment.what)
@@ -224,6 +229,7 @@ Mount.FsckPassNo, config_parse_fsck_passno, 0,
Mount.TimeoutSec, config_parse_sec, 0, offsetof(Mount, timeout_usec)
Mount.DirectoryMode, config_parse_mode, 0, offsetof(Mount, directory_mode)
EXEC_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
+CGROUP_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
KILL_CONTEXT_CONFIG_ITEMS(Mount)m4_dnl
m4_dnl
Automount.Where, config_parse_path, 0, offsetof(Automount, where)
@@ -233,6 +239,7 @@ Swap.What, config_parse_path, 0,
Swap.Priority, config_parse_int, 0, offsetof(Swap, parameters_fragment.priority)
Swap.TimeoutSec, config_parse_sec, 0, offsetof(Swap, timeout_usec)
EXEC_CONTEXT_CONFIG_ITEMS(Swap)m4_dnl
+CGROUP_CONTEXT_CONFIG_ITEMS(Swap)m4_dnl
KILL_CONTEXT_CONFIG_ITEMS(Swap)m4_dnl
m4_dnl
Timer.OnCalendar, config_parse_timer, 0, 0
@@ -251,6 +258,12 @@ Path.DirectoryNotEmpty, config_parse_path_spec, 0,
Path.Unit, config_parse_trigger_unit, 0, 0
Path.MakeDirectory, config_parse_bool, 0, offsetof(Path, make_directory)
Path.DirectoryMode, config_parse_mode, 0, offsetof(Path, directory_mode)
+m4_dnl
+CGROUP_CONTEXT_CONFIG_ITEMS(Slice)m4_dnl
+m4_dnl
+CGROUP_CONTEXT_CONFIG_ITEMS(Scope)m4_dnl
+KILL_CONTEXT_CONFIG_ITEMS(Scope)m4_dnl
+Scope.TimeoutStopSec, config_parse_sec, 0, offsetof(Scope, timeout_stop_usec)
m4_dnl The [Install] section is ignored here.
Install.Alias, NULL, 0, 0
Install.WantedBy, NULL, 0, 0
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index e2015ed58f..44920d6449 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -51,6 +51,7 @@
#include "path-util.h"
#include "syscall-list.h"
#include "env-util.h"
+#include "cgroup.h"
#ifndef HAVE_SYSV_COMPAT
int config_parse_warn_compat(const char *unit,
@@ -98,9 +99,12 @@ int config_parse_unit_deps(const char* unit,
if (!t)
return log_oom();
- k = unit_name_printf(u, t);
- if (!k)
- return log_oom();
+ r = unit_name_printf(u, t, &k);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", strerror(-r));
+ continue;
+ }
r = unit_add_dependency_by_name(u, d, k, NULL, true);
if (r < 0)
@@ -123,16 +127,17 @@ int config_parse_unit_string_printf(const char *unit,
Unit *u = userdata;
_cleanup_free_ char *k = NULL;
+ int r;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(u);
- k = unit_full_printf(u, rvalue);
- if (!k)
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ r = unit_full_printf(u, rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
return config_parse_string(unit, filename, line, section, lvalue, ltype,
k ? k : rvalue, data, userdata);
@@ -150,16 +155,17 @@ int config_parse_unit_strv_printf(const char *unit,
Unit *u = userdata;
_cleanup_free_ char *k = NULL;
+ int r;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(u);
- k = unit_full_printf(u, rvalue);
- if (!k)
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ r = unit_full_printf(u, rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
return config_parse_strv(unit, filename, line, section, lvalue, ltype,
k ? k : rvalue, data, userdata);
@@ -177,16 +183,17 @@ int config_parse_unit_path_printf(const char *unit,
Unit *u = userdata;
_cleanup_free_ char *k = NULL;
+ int r;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(u);
- k = unit_full_printf(u, rvalue);
- if (!k)
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ r = unit_full_printf(u, rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
return config_parse_path(unit, filename, line, section, lvalue, ltype,
k ? k : rvalue, data, userdata);
@@ -204,6 +211,7 @@ int config_parse_socket_listen(const char *unit,
SocketPort *p, *tail;
Socket *s;
+ int r;
assert(filename);
assert(lvalue);
@@ -225,32 +233,31 @@ int config_parse_socket_listen(const char *unit,
if (ltype != SOCKET_SOCKET) {
p->type = ltype;
- p->path = unit_full_printf(UNIT(s), rvalue);
- if (!p->path) {
+ r = unit_full_printf(UNIT(s), rvalue, &p->path);
+ if (r < 0) {
p->path = strdup(rvalue);
if (!p->path) {
free(p);
return log_oom();
} else
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
}
path_kill_slashes(p->path);
} else if (streq(lvalue, "ListenNetlink")) {
_cleanup_free_ char *k = NULL;
- int r;
p->type = SOCKET_SOCKET;
- k = unit_full_printf(UNIT(s), rvalue);
- if (!k)
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ r = unit_full_printf(UNIT(s), rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
r = socket_address_parse_netlink(&p->address, k ? k : rvalue);
if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ log_syntax(unit, LOG_ERR, filename, line, -r,
"Failed to parse address value, ignoring: %s", rvalue);
free(p);
return 0;
@@ -258,17 +265,16 @@ int config_parse_socket_listen(const char *unit,
} else {
_cleanup_free_ char *k = NULL;
- int r;
p->type = SOCKET_SOCKET;
- k = unit_full_printf(UNIT(s), rvalue);
- if (!k)
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ r = unit_full_printf(UNIT(s), rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
r = socket_address_parse(&p->address, k ? k : rvalue);
if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ log_syntax(unit, LOG_ERR, filename, line, -r,
"Failed to parse address value, ignoring: %s", rvalue);
free(p);
return 0;
@@ -996,58 +1002,6 @@ int config_parse_limit(const char *unit,
return 0;
}
-int config_parse_unit_cgroup(const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Unit *u = userdata;
- char *w;
- size_t l;
- char *state;
-
- if (isempty(rvalue)) {
- /* An empty assignment resets the list */
- cgroup_bonding_free_list(u->cgroup_bondings, false);
- u->cgroup_bondings = NULL;
- return 0;
- }
-
- FOREACH_WORD_QUOTED(w, l, rvalue, state) {
- _cleanup_free_ char *t = NULL, *k = NULL, *ku = NULL;
- int r;
-
- t = strndup(w, l);
- if (!t)
- return log_oom();
-
- k = unit_full_printf(u, t);
- if (!k)
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to resolve unit specifiers on %s. Ignoring.",
- t);
-
- ku = cunescape(k ? k : t);
- if (!ku)
- return log_oom();
-
- r = unit_add_cgroup_from_text(u, ku, true, NULL);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, -r,
- "Failed to parse cgroup value %s, ignoring: %s",
- k, rvalue);
- return 0;
- }
- }
-
- return 0;
-}
-
#ifdef HAVE_SYSV_COMPAT
int config_parse_sysv_priority(const char *unit,
const char *filename,
@@ -1281,11 +1235,12 @@ int config_parse_trigger_unit(
return 0;
}
- p = unit_name_printf(u, rvalue);
- if (!p)
- return log_oom();
+ r = unit_name_printf(u, rvalue, &p);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", strerror(-r));
- type = unit_name_to_type(p);
+ type = unit_name_to_type(p ?: rvalue);
if (type < 0) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Unit type not valid, ignoring: %s", rvalue);
@@ -1298,10 +1253,10 @@ int config_parse_trigger_unit(
return 0;
}
- r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_TRIGGERS, p, NULL, true);
+ r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_TRIGGERS, p ?: rvalue, NULL, true);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, -r,
- "Failed to add trigger on %s, ignoring: %s", p, strerror(-r));
+ "Failed to add trigger on %s, ignoring: %s", p ?: rvalue, strerror(-r));
return 0;
}
@@ -1322,6 +1277,7 @@ int config_parse_path_spec(const char *unit,
PathSpec *s;
PathType b;
_cleanup_free_ char *k = NULL;
+ int r;
assert(filename);
assert(lvalue);
@@ -1341,13 +1297,13 @@ int config_parse_path_spec(const char *unit,
return 0;
}
- k = unit_full_printf(UNIT(p), rvalue);
- if (!k) {
+ r = unit_full_printf(UNIT(p), rvalue, &k);
+ if (r < 0) {
k = strdup(rvalue);
if (!k)
return log_oom();
else
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ log_syntax(unit, LOG_ERR, filename, line, -r,
"Failed to resolve unit specifiers on %s. Ignoring.",
rvalue);
}
@@ -1395,19 +1351,20 @@ int config_parse_socket_service(const char *unit,
dbus_error_init(&error);
- p = unit_name_printf(UNIT(s), rvalue);
- if (!p)
- return log_oom();
+ r = unit_name_printf(UNIT(s), rvalue, &p);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", rvalue);
- if (!endswith(p, ".service")) {
+ if (!endswith(p ?: rvalue, ".service")) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Unit must be of type service, ignoring: %s", rvalue);
return 0;
}
- r = manager_load_unit(UNIT(s)->manager, p, NULL, &error, &x);
+ r = manager_load_unit(UNIT(s)->manager, p ?: rvalue, NULL, &error, &x);
if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to load unit %s, ignoring: %s",
rvalue, bus_error(&error, r));
dbus_error_free(&error);
@@ -1446,23 +1403,24 @@ int config_parse_service_sockets(const char *unit,
if (!t)
return log_oom();
- k = unit_name_printf(UNIT(s), t);
- if (!k)
- return log_oom();
+ r = unit_name_printf(UNIT(s), t, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", strerror(-r));
- if (!endswith(k, ".socket")) {
+ if (!endswith(k ?: t, ".socket")) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Unit must be of type socket, ignoring: %s", k);
+ "Unit must be of type socket, ignoring: %s", k ?: t);
continue;
}
- r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_WANTS, UNIT_AFTER, k, NULL, true);
+ r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_WANTS, UNIT_AFTER, k ?: t, NULL, true);
if (r < 0)
log_syntax(unit, LOG_ERR, filename, line, -r,
"Failed to add dependency on %s, ignoring: %s",
- k, strerror(-r));
+ k ?: t, strerror(-r));
- r = unit_add_dependency_by_name(UNIT(s), UNIT_TRIGGERED_BY, k, NULL, true);
+ r = unit_add_dependency_by_name(UNIT(s), UNIT_TRIGGERED_BY, k ?: t, NULL, true);
if (r < 0)
return r;
}
@@ -1514,7 +1472,8 @@ int config_parse_unit_env_file(const char *unit,
char ***env = data;
Unit *u = userdata;
- _cleanup_free_ char *s = NULL;
+ _cleanup_free_ char *n = NULL;
+ const char *s;
int r;
assert(filename);
@@ -1529,10 +1488,12 @@ int config_parse_unit_env_file(const char *unit,
return 0;
}
- s = unit_full_printf(u, rvalue);
- if (!s)
- return log_oom();
+ r = unit_full_printf(u, rvalue, &n);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to resolve specifiers, ignoring: %s", rvalue);
+ s = n ?: rvalue;
if (!path_is_absolute(s[0] == '-' ? s + 1 : s)) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Path '%s' is not absolute, ignoring.", s);
@@ -1560,11 +1521,12 @@ int config_parse_environ(const char *unit,
char*** env = data, *w, *state;
size_t l;
_cleanup_free_ char *k = NULL;
+ int r;
assert(filename);
assert(lvalue);
assert(rvalue);
- assert(u);
+ assert(data);
if (isempty(rvalue)) {
/* Empty assignment resets the list */
@@ -1573,7 +1535,15 @@ int config_parse_environ(const char *unit,
return 0;
}
- k = unit_full_printf(u, rvalue);
+ if (u) {
+ r = unit_full_printf(u, rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", rvalue);
+ }
+
+ if (!k)
+ k = strdup(rvalue);
if (!k)
return log_oom();
@@ -1645,6 +1615,7 @@ int config_parse_unit_condition_path(const char *unit,
bool trigger, negate;
Condition *c;
_cleanup_free_ char *p = NULL;
+ int r;
assert(filename);
assert(lvalue);
@@ -1666,9 +1637,15 @@ int config_parse_unit_condition_path(const char *unit,
if (negate)
rvalue++;
- p = unit_full_printf(u, rvalue);
- if (!p)
- return log_oom();
+ r = unit_full_printf(u, rvalue, &p);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", rvalue);
+ if (!p) {
+ p = strdup(rvalue);
+ if (!p)
+ return log_oom();
+ }
if (!path_is_absolute(p)) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
@@ -1699,6 +1676,7 @@ int config_parse_unit_condition_string(const char *unit,
bool trigger, negate;
Condition *c;
_cleanup_free_ char *s = NULL;
+ int r;
assert(filename);
assert(lvalue);
@@ -1720,9 +1698,15 @@ int config_parse_unit_condition_string(const char *unit,
if (negate)
rvalue++;
- s = unit_full_printf(u, rvalue);
- if (!s)
- return log_oom();
+ r = unit_full_printf(u, rvalue, &s);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve specifiers, ignoring: %s", rvalue);
+ if (!s) {
+ s = strdup(rvalue);
+ if (!s)
+ return log_oom();
+ }
c = condition_new(cond, s, trigger, negate);
if (!c)
@@ -1789,139 +1773,52 @@ int config_parse_unit_condition_null(const char *unit,
DEFINE_CONFIG_PARSE_ENUM(config_parse_notify_access, notify_access, NotifyAccess, "Failed to parse notify access specifier");
DEFINE_CONFIG_PARSE_ENUM(config_parse_start_limit_action, start_limit_action, StartLimitAction, "Failed to parse start limit action specifier");
-int config_parse_unit_cgroup_attr(const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
+int config_parse_unit_requires_mounts_for(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
- Unit *u = data;
- size_t a, b;
- _cleanup_free_ char *n = NULL, *v = NULL;
- const CGroupSemantics *s;
- int r;
+ Unit *u = userdata;
+ char *state;
+ size_t l;
+ char *w;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
- if (isempty(rvalue)) {
- /* Empty assignment clears the list */
- cgroup_attribute_free_list(u->cgroup_attributes);
- u->cgroup_attributes = NULL;
- return 0;
- }
-
- a = strcspn(rvalue, WHITESPACE);
- b = strspn(rvalue + a, WHITESPACE);
- if (a <= 0 || b <= 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Failed to parse cgroup attribute value, ignoring: %s",
- rvalue);
- return 0;
- }
-
- n = strndup(rvalue, a);
- if (!n)
- return log_oom();
-
- r = cgroup_semantics_find(NULL, n, rvalue + a + b, &v, &s);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, -r,
- "Failed to parse cgroup attribute value, ignoring: %s",
- rvalue);
- return 0;
- }
-
- r = unit_add_cgroup_attribute(u, s, NULL, n, v ? v : rvalue + a + b, NULL);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, -r,
- "Failed to add cgroup attribute value, ignoring: %s", rvalue);
- return 0;
- }
-
- return 0;
-}
-
-int config_parse_unit_cgroup_attr_pretty(const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Unit *u = data;
- _cleanup_free_ char *v = NULL;
- const CGroupSemantics *s;
- int r;
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+ int r;
+ _cleanup_free_ char *n;
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
+ n = strndup(w, l);
+ if (!n)
+ return log_oom();
- r = cgroup_semantics_find(NULL, lvalue, rvalue, &v, &s);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, -r,
- "Failed to parse cgroup attribute value, ignoring: %s",
- rvalue);
- return 0;
- } else if (r == 0) {
- log_syntax(unit, LOG_ERR, filename, line, ENOTSUP,
- "Unknown or unsupported cgroup attribute %s, ignoring: %s",
- lvalue, rvalue);
- return 0;
- }
+ if (!utf8_is_valid(n)) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Path is not UTF-8 clean, ignoring assignment: %s", rvalue);
+ continue;
+ }
- r = unit_add_cgroup_attribute(u, s, NULL, NULL, v, NULL);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, -r,
- "Failed to add cgroup attribute value, ignoring: %s", rvalue);
- return 0;
+ r = unit_require_mounts_for(u, n);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to add required mount for, ignoring: %s", rvalue);
+ continue;
+ }
}
return 0;
}
-int config_parse_unit_requires_mounts_for(const char *unit,
- 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;
- bool empty_before;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- empty_before = !u->requires_mounts_for;
-
- r = config_parse_path_strv(unit, filename, line, section, lvalue, ltype,
- rvalue, data, userdata);
-
- /* Make it easy to find units with requires_mounts set */
- if (empty_before && u->requires_mounts_for)
- LIST_PREPEND(Unit, has_requires_mounts_for, u->manager->has_requires_mounts_for, u);
-
- return r;
-}
-
int config_parse_documentation(const char *unit,
const char *filename,
unsigned line,
@@ -2058,6 +1955,365 @@ int config_parse_syscall_filter(const char *unit,
return 0;
}
+int config_parse_unit_slice(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_free_ char *k = NULL;
+ Unit *u = userdata, *slice;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(u);
+
+ r = unit_name_printf(u, rvalue, &k);
+ if (r < 0)
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to resolve unit specifiers on %s. Ignoring.", rvalue);
+ if (!k) {
+ k = strdup(rvalue);
+ if (!k)
+ return log_oom();
+ }
+
+ r = manager_load_unit(u->manager, k, NULL, NULL, &slice);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, -r,
+ "Failed to load slice unit %s. Ignoring.", k);
+ return 0;
+ }
+
+ if (slice->type != UNIT_SLICE) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Slice unit %s is not a slice. Ignoring.", k);
+ return 0;
+ }
+
+ unit_ref_set(&u->slice, slice);
+ return 0;
+}
+
+DEFINE_CONFIG_PARSE_ENUM(config_parse_device_policy, cgroup_device_policy, CGroupDevicePolicy, "Failed to parse device policy");
+
+int config_parse_cpu_shares(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ CGroupContext *c = data;
+ unsigned long lu;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+
+ if (isempty(rvalue)) {
+ c->cpu_shares = 1024;
+ return 0;
+ }
+
+ r = safe_atolu(rvalue, &lu);
+ if (r < 0 || lu <= 0) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "CPU shares '%s' invalid. Ignoring.", rvalue);
+ return 0;
+ }
+
+ c->cpu_shares = lu;
+ return 0;
+}
+
+int config_parse_memory_limit(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ CGroupContext *c = data;
+ off_t bytes;
+ int r;
+
+ if (isempty(rvalue)) {
+ c->memory_limit = (uint64_t) -1;
+ return 0;
+ }
+
+ assert_cc(sizeof(uint64_t) == sizeof(off_t));
+
+ r = parse_bytes(rvalue, &bytes);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Memory limit '%s' invalid. Ignoring.", rvalue);
+ return 0;
+ }
+
+ c->memory_limit = (uint64_t) bytes;
+ return 0;
+}
+
+int config_parse_device_allow(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_free_ char *path = NULL;
+ CGroupContext *c = data;
+ CGroupDeviceAllow *a;
+ const char *m;
+ size_t n;
+
+ if (isempty(rvalue)) {
+ while (c->device_allow)
+ cgroup_context_free_device_allow(c, c->device_allow);
+
+ return 0;
+ }
+
+ n = strcspn(rvalue, WHITESPACE);
+ path = strndup(rvalue, n);
+ if (!path)
+ return log_oom();
+
+ if (!path_startswith(path, "/dev")) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Invalid device node path '%s'. Ignoring.", path);
+ return 0;
+ }
+
+ m = rvalue + n + strspn(rvalue + n, WHITESPACE);
+ if (isempty(m))
+ m = "rwm";
+
+ if (!in_charset(m, "rwm")) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Invalid device rights '%s'. Ignoring.", m);
+ return 0;
+ }
+
+ a = new0(CGroupDeviceAllow, 1);
+ if (!a)
+ return log_oom();
+
+ a->path = path;
+ path = NULL;
+ a->r = !!strchr(m, 'r');
+ a->w = !!strchr(m, 'w');
+ a->m = !!strchr(m, 'm');
+
+ LIST_PREPEND(CGroupDeviceAllow, device_allow, c->device_allow, a);
+ return 0;
+}
+
+int config_parse_blockio_weight(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ CGroupContext *c = data;
+ unsigned long lu;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+
+ if (isempty(rvalue)) {
+ c->blockio_weight = 1000;
+ return 0;
+ }
+
+ r = safe_atolu(rvalue, &lu);
+ if (r < 0 || lu < 10 || lu > 1000) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Block IO weight '%s' invalid. Ignoring.", rvalue);
+ return 0;
+ }
+
+ c->blockio_weight = lu;
+
+ return 0;
+}
+
+int config_parse_blockio_device_weight(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_free_ char *path = NULL;
+ CGroupBlockIODeviceWeight *w;
+ CGroupContext *c = data;
+ unsigned long lu;
+ const char *weight;
+ size_t n;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+
+ if (isempty(rvalue)) {
+ while (c->blockio_device_weights)
+ cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
+
+ return 0;
+ }
+
+ n = strcspn(rvalue, WHITESPACE);
+ weight = rvalue + n;
+ if (!*weight) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Expected block device and device weight. Ignoring.");
+ return 0;
+ }
+
+ path = strndup(rvalue, n);
+ if (!path)
+ return log_oom();
+
+ if (!path_startswith(path, "/dev")) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Invalid device node path '%s'. Ignoring.", path);
+ return 0;
+ }
+
+ weight += strspn(weight, WHITESPACE);
+ r = safe_atolu(weight, &lu);
+ if (r < 0 || lu < 10 || lu > 1000) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Block IO weight '%s' invalid. Ignoring.", rvalue);
+ return 0;
+ }
+
+
+ w = new0(CGroupBlockIODeviceWeight, 1);
+ if (!w)
+ return log_oom();
+
+ w->path = path;
+ path = NULL;
+
+ w->weight = lu;
+
+ LIST_PREPEND(CGroupBlockIODeviceWeight, device_weights, c->blockio_device_weights, w);
+ return 0;
+}
+
+int config_parse_blockio_bandwidth(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_free_ char *path = NULL;
+ CGroupBlockIODeviceBandwidth *b;
+ CGroupContext *c = data;
+ const char *bandwidth;
+ off_t bytes;
+ bool read;
+ size_t n;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+
+ read = streq("BlockIOReadBandwidth", lvalue);
+
+ if (isempty(rvalue)) {
+ CGroupBlockIODeviceBandwidth *next;
+
+ LIST_FOREACH_SAFE (device_bandwidths, b, next, c->blockio_device_bandwidths)
+ if (b->read == read)
+ cgroup_context_free_blockio_device_bandwidth(c, b);
+
+ return 0;
+ }
+
+ n = strcspn(rvalue, WHITESPACE);
+ bandwidth = rvalue + n;
+ bandwidth += strspn(bandwidth, WHITESPACE);
+
+ if (!*bandwidth) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Expected space separated pair of device node and bandwidth. Ignoring.");
+ return 0;
+ }
+
+ path = strndup(rvalue, n);
+ if (!path)
+ return log_oom();
+
+ if (!path_startswith(path, "/dev")) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Invalid device node path '%s'. Ignoring.", path);
+ return 0;
+ }
+
+ r = parse_bytes(bandwidth, &bytes);
+ if (r < 0 || bytes <= 0) {
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL,
+ "Block IO Bandwidth '%s' invalid. Ignoring.", rvalue);
+ return 0;
+ }
+
+ b = new0(CGroupBlockIODeviceBandwidth, 1);
+ if (!b)
+ return log_oom();
+
+ b->path = path;
+ path = NULL;
+ b->bandwidth = (uint64_t) bytes;
+ b->read = read;
+
+ LIST_PREPEND(CGroupBlockIODeviceBandwidth, device_bandwidths, c->blockio_device_bandwidths, b);
+
+ return 0;
+}
+
#define FOLLOW_MAX 8
static int open_follow(char **filename, FILE **_f, Set *names, char **_final) {
@@ -2267,14 +2523,14 @@ static int load_from_path(Unit *u, const char *path) {
if (null_or_empty(&st))
u->load_state = UNIT_MASKED;
else {
+ u->load_state = UNIT_LOADED;
+
/* Now, parse the file contents */
r = config_parse(u->id, filename, f, UNIT_VTABLE(u)->sections,
config_item_perf_lookup,
(void*) load_fragment_gperf_lookup, false, true, u);
if (r < 0)
goto finish;
-
- u->load_state = UNIT_LOADED;
}
free(u->fragment_path);
@@ -2417,7 +2673,6 @@ void unit_dump_config_items(FILE *f) {
{ config_parse_exec_secure_bits, "SECUREBITS" },
{ config_parse_bounding_set, "BOUNDINGSET" },
{ config_parse_limit, "LIMIT" },
- { config_parse_unit_cgroup, "CGROUP [...]" },
{ config_parse_unit_deps, "UNIT [...]" },
{ config_parse_exec, "PATH [ARGUMENT [...]]" },
{ config_parse_service_type, "SERVICETYPE" },
@@ -2446,6 +2701,24 @@ void unit_dump_config_items(FILE *f) {
{ config_parse_unit_condition_path, "CONDITION" },
{ config_parse_unit_condition_string, "CONDITION" },
{ config_parse_unit_condition_null, "CONDITION" },
+ { config_parse_unit_slice, "SLICE" },
+ { config_parse_documentation, "URL" },
+ { config_parse_service_timeout, "SECONDS" },
+ { config_parse_start_limit_action, "ACTION" },
+ { config_parse_set_status, "STATUS" },
+ { config_parse_service_sockets, "SOCKETS" },
+ { config_parse_fsck_passno, "PASSNO" },
+ { config_parse_environ, "ENVIRON" },
+ { config_parse_syscall_filter, "SYSCALL" },
+ { config_parse_cpu_shares, "SHARES" },
+ { config_parse_memory_limit, "LIMIT" },
+ { config_parse_device_allow, "DEVICE" },
+ { config_parse_device_policy, "POLICY" },
+ { config_parse_blockio_bandwidth, "BANDWIDTH" },
+ { config_parse_blockio_weight, "WEIGHT" },
+ { config_parse_blockio_device_weight, "DEVICEWEIGHT" },
+ { config_parse_long, "LONG" },
+ { config_parse_socket_service, "SERVICE" },
};
const char *prev = NULL;
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index ff7f22a6f0..90e5e3a5c9 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -55,7 +55,6 @@ int config_parse_exec_capabilities(const char *unit, const char *filename, unsig
int config_parse_exec_secure_bits(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_bounding_set(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_limit(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
-int config_parse_unit_cgroup(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_sysv_priority(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_fsck_passno(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_kill_signal(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
@@ -73,11 +72,17 @@ int config_parse_unit_condition_null(const char *unit, const char *filename, uns
int config_parse_kill_mode(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_notify_access(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_start_limit_action(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
-int config_parse_unit_cgroup_attr(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
-int config_parse_unit_cgroup_attr_pretty(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_requires_mounts_for(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_syscall_filter(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_environ(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_unit_slice(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_cpu_shares(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_memory_limit(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_device_policy(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_device_allow(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_blockio_weight(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_blockio_device_weight(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_blockio_bandwidth(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
/* gperf prototypes */
const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length);
diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
index d7113b9795..276deb9dc1 100644
--- a/src/core/locale-setup.c
+++ b/src/core/locale-setup.c
@@ -28,6 +28,8 @@
#include "macro.h"
#include "virt.h"
#include "fileio.h"
+#include "strv.h"
+#include "env-util.h"
enum {
/* We don't list LC_ALL here on purpose. People should be
@@ -67,7 +69,8 @@ static const char * const variable_names[_VARIABLE_MAX] = {
[VARIABLE_LC_IDENTIFICATION] = "LC_IDENTIFICATION"
};
-int locale_setup(void) {
+int locale_setup(char ***environment) {
+ char **add;
char *variables[_VARIABLE_MAX] = {};
int r = 0, i;
@@ -117,27 +120,44 @@ int locale_setup(void) {
log_warning("Failed to read /etc/locale.conf: %s", strerror(-r));
}
- if (!variables[VARIABLE_LANG]) {
- variables[VARIABLE_LANG] = strdup("C");
- if (!variables[VARIABLE_LANG]) {
+ add = NULL;
+ for (i = 0; i < _VARIABLE_MAX; i++) {
+ char *s;
+
+ if (!variables[i])
+ continue;
+
+ s = strjoin(variable_names[i], "=", variables[i], NULL);
+ if (!s) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ if (strv_push(&add, s) < 0) {
+ free(s);
r = -ENOMEM;
goto finish;
}
}
- for (i = 0; i < _VARIABLE_MAX; i++) {
- if (variables[i]) {
- if (setenv(variable_names[i], variables[i], 1) < 0) {
- r = -errno;
- goto finish;
- }
- } else
- unsetenv(variable_names[i]);
+ if (!strv_isempty(add)) {
+ char **e;
+
+ e = strv_env_merge(2, *environment, add);
+ if (!e) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ strv_free(*environment);
+ *environment = e;
}
r = 0;
finish:
+ strv_free(add);
+
for (i = 0; i < _VARIABLE_MAX; i++)
free(variables[i]);
diff --git a/src/core/locale-setup.h b/src/core/locale-setup.h
index 5a0f2f7888..62c654c37c 100644
--- a/src/core/locale-setup.h
+++ b/src/core/locale-setup.h
@@ -21,4 +21,4 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-int locale_setup(void);
+int locale_setup(char ***environment);
diff --git a/src/core/macros.systemd.in b/src/core/macros.systemd.in
index f77082c2db..89b48259ad 100644
--- a/src/core/macros.systemd.in
+++ b/src/core/macros.systemd.in
@@ -20,6 +20,7 @@
# RPM macros for packages installing systemd unit files
%_unitdir @systemunitdir@
+%_userunitdir @userunitdir@
%_presetdir @systempresetdir@
%_udevhwdbdir @udevhwdbdir@
%_udevrulesdir @udevrulesdir@
@@ -71,3 +72,7 @@ fi \
%journal_catalog_update() \
@rootbindir@/journalctl --update-catalog >/dev/null 2>&1 || : \
%{nil}
+
+%tmpfiles_create() \
+@rootbindir@/systemd-tmpfiles --create %{?*} >/dev/null 2>&1 || : \
+%{nil}
diff --git a/src/core/main.c b/src/core/main.c
index 7fc06bea05..fe291f8410 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -64,12 +64,10 @@
#endif
#include "hostname-setup.h"
#include "machine-id-setup.h"
-#include "locale-setup.h"
#include "selinux-setup.h"
#include "ima-setup.h"
#include "fileio.h"
#include "smack-setup.h"
-#include "efivars.h"
static enum {
ACTION_RUN,
@@ -89,12 +87,12 @@ static int arg_crash_chvt = -1;
static bool arg_confirm_spawn = false;
static bool arg_show_status = true;
static bool arg_switched_root = false;
-static char **arg_default_controllers = NULL;
static char ***arg_join_controllers = NULL;
static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
static usec_t arg_runtime_watchdog = 0;
static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
+static char **arg_default_environment = NULL;
static struct rlimit *arg_default_rlimit[RLIMIT_NLIMITS] = {};
static uint64_t arg_capability_bounding_set_drop = 0;
static nsec_t arg_timer_slack_nsec = (nsec_t) -1;
@@ -106,7 +104,10 @@ static void nop_handler(int sig) {
_noreturn_ static void crash(int sig) {
- if (!arg_dump_core)
+ if (getpid() != 1)
+ /* Pass this on immediately, if this is not PID 1 */
+ raise(sig);
+ else if (!arg_dump_core)
log_error("Caught <%s>, not dumping core.", signal_to_string(sig));
else {
struct sigaction sa = {
@@ -116,7 +117,7 @@ _noreturn_ static void crash(int sig) {
pid_t pid;
/* We want to wait for the core process, hence let's enable SIGCHLD */
- assert_se(sigaction(SIGCHLD, &sa, NULL) == 0);
+ sigaction(SIGCHLD, &sa, NULL);
pid = fork();
if (pid < 0)
@@ -128,7 +129,7 @@ _noreturn_ static void crash(int sig) {
/* Enable default signal handler for core dump */
zero(sa);
sa.sa_handler = SIG_DFL;
- assert_se(sigaction(sig, &sa, NULL) == 0);
+ sigaction(sig, &sa, NULL);
/* Don't limit the core dump size */
rl.rlim_cur = RLIM_INFINITY;
@@ -136,7 +137,7 @@ _noreturn_ static void crash(int sig) {
setrlimit(RLIMIT_CORE, &rl);
/* Just to be sure... */
- assert_se(chdir("/") == 0);
+ chdir("/");
/* Raise the signal again */
raise(sig);
@@ -347,32 +348,21 @@ static int parse_proc_cmdline_word(const char *word) {
arg_default_std_error = r;
} else if (startswith(word, "systemd.setenv=")) {
_cleanup_free_ char *cenv = NULL;
- char *eq;
- int r;
cenv = strdup(word + 15);
if (!cenv)
return -ENOMEM;
- eq = strchr(cenv, '=');
- if (!eq) {
- if (!env_name_is_valid(cenv))
- log_warning("Environment variable name '%s' is not valid. Ignoring.", cenv);
- else {
- r = unsetenv(cenv);
- if (r < 0)
- log_warning("Unsetting environment variable '%s' failed, ignoring: %m", cenv);
- }
- } else {
- if (!env_assignment_is_valid(cenv))
- log_warning("Environment variable assignment '%s' is not valid. Ignoring.", cenv);
- else {
- *eq = 0;
- r = setenv(cenv, eq + 1, 1);
- if (r < 0)
- log_warning("Setting environment variable '%s=%s' failed, ignoring: %m", cenv, eq + 1);
- }
- }
+ if (env_assignment_is_valid(cenv)) {
+ char **env;
+
+ env = strv_env_set(arg_default_environment, cenv);
+ if (env)
+ arg_default_environment = env;
+ else
+ log_warning("Setting environment variable '%s' failed, ignoring: %m", cenv);
+ } else
+ log_warning("Environment variable name '%s' is not valid. Ignoring.", cenv);
} else if (startswith(word, "systemd.") ||
(in_initrd() && startswith(word, "rd.systemd."))) {
@@ -411,7 +401,14 @@ static int parse_proc_cmdline_word(const char *word) {
} else if (streq(word, "quiet"))
arg_show_status = false;
- else if (!in_initrd()) {
+ else if (streq(word, "debug")) {
+ /* Log to kmsg, the journal socket will fill up before the
+ * journal is started and tools running during that time
+ * will block with every log message for for 60 seconds,
+ * before they give up. */
+ log_set_max_level(LOG_DEBUG);
+ log_set_target(LOG_TARGET_KMSG);
+ } else if (!in_initrd()) {
unsigned i;
/* SysV compatibility */
@@ -637,7 +634,6 @@ static int parse_config_file(void) {
{ "Manager", "ShowStatus", config_parse_bool, 0, &arg_show_status },
{ "Manager", "CrashChVT", config_parse_int, 0, &arg_crash_chvt },
{ "Manager", "CPUAffinity", config_parse_cpu_affinity2, 0, NULL },
- { "Manager", "DefaultControllers", config_parse_strv, 0, &arg_default_controllers },
{ "Manager", "DefaultStandardOutput", config_parse_output, 0, &arg_default_std_output },
{ "Manager", "DefaultStandardError", config_parse_output, 0, &arg_default_std_error },
{ "Manager", "JoinControllers", config_parse_join_controllers, 0, &arg_join_controllers },
@@ -645,6 +641,7 @@ static int parse_config_file(void) {
{ "Manager", "ShutdownWatchdogSec", config_parse_sec, 0, &arg_shutdown_watchdog },
{ "Manager", "CapabilityBoundingSet", config_parse_bounding_set, 0, &arg_capability_bounding_set_drop },
{ "Manager", "TimerSlackNSec", config_parse_nsec, 0, &arg_timer_slack_nsec },
+ { "Manager", "DefaultEnvironment", config_parse_environ, 0, &arg_default_environment },
{ "Manager", "DefaultLimitCPU", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_CPU]},
{ "Manager", "DefaultLimitFSIZE", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_FSIZE]},
{ "Manager", "DefaultLimitDATA", config_parse_limit, 0, &arg_default_rlimit[RLIMIT_DATA]},
@@ -1051,15 +1048,16 @@ static int prepare_reexecute(Manager *m, FILE **_f, FDSet **_fds, bool switching
assert(_f);
assert(_fds);
- /* Make sure nothing is really destructed when we shut down */
- m->n_reloading ++;
-
r = manager_open_serialization(m, &f);
if (r < 0) {
log_error("Failed to create serialization file: %s", strerror(-r));
goto fail;
}
+ /* Make sure nothing is really destructed when we shut down */
+ m->n_reloading ++;
+ bus_broadcast_reloading(m, true);
+
fds = fdset_new();
if (!fds) {
r = -ENOMEM;
@@ -1140,25 +1138,6 @@ static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
return 0;
}
-static struct dual_timestamp* parse_initrd_timestamp(struct dual_timestamp *t) {
- const char *e;
- unsigned long long a, b;
-
- assert(t);
-
- e = getenv("RD_TIMESTAMP");
- if (!e)
- return NULL;
-
- if (sscanf(e, "%llu %llu", &a, &b) != 2)
- return NULL;
-
- t->realtime = (usec_t) a;
- t->monotonic = (usec_t) b;
-
- return t;
-}
-
static void test_mtab(void) {
char *p;
@@ -1239,8 +1218,6 @@ int main(int argc, char *argv[]) {
dual_timestamp initrd_timestamp = { 0ULL, 0ULL };
dual_timestamp userspace_timestamp = { 0ULL, 0ULL };
dual_timestamp kernel_timestamp = { 0ULL, 0ULL };
- dual_timestamp firmware_timestamp = { 0ULL, 0ULL };
- dual_timestamp loader_timestamp = { 0ULL, 0ULL };
static char systemd[] = "systemd";
bool skip_setup = false;
int j;
@@ -1288,28 +1265,20 @@ int main(int argc, char *argv[]) {
log_show_color(isatty(STDERR_FILENO) > 0);
+ /* Disable the umask logic */
+ if (getpid() == 1)
+ umask(0);
+
if (getpid() == 1 && detect_container(NULL) <= 0) {
-#ifdef ENABLE_EFI
- efi_get_boot_timestamps(&userspace_timestamp, &firmware_timestamp, &loader_timestamp);
-#endif
+
/* Running outside of a container as PID 1 */
arg_running_as = SYSTEMD_SYSTEM;
make_null_stdio();
log_set_target(LOG_TARGET_KMSG);
log_open();
- if (in_initrd()) {
- char *rd_timestamp = NULL;
-
+ if (in_initrd())
initrd_timestamp = userspace_timestamp;
- asprintf(&rd_timestamp, "%llu %llu",
- (unsigned long long) initrd_timestamp.realtime,
- (unsigned long long) initrd_timestamp.monotonic);
- if (rd_timestamp) {
- setenv("RD_TIMESTAMP", rd_timestamp, 1);
- free(rd_timestamp);
- }
- }
if (!skip_setup) {
mount_setup_early();
@@ -1345,10 +1314,10 @@ int main(int argc, char *argv[]) {
*/
hwclock_reset_timezone();
- /* Tell the kernel our time zone */
+ /* Tell the kernel our timezone */
r = hwclock_set_timezone(NULL);
if (r < 0)
- log_error("Failed to set the kernel's time zone, ignoring: %s", strerror(-r));
+ log_error("Failed to set the kernel's timezone, ignoring: %s", strerror(-r));
}
}
@@ -1408,7 +1377,6 @@ int main(int argc, char *argv[]) {
/* Reset all signal handlers. */
assert_se(reset_all_signal_handlers() == 0);
- /* If we are init, we can block sigkill. Yay. */
ignore_signals(SIGNALS_IGNORE, -1);
if (parse_config_file() < 0)
@@ -1474,59 +1442,12 @@ int main(int argc, char *argv[]) {
if (serialization)
assert_se(fdset_remove(fds, fileno(serialization)) >= 0);
- /* Set up PATH unless it is already set */
- setenv("PATH",
-#ifdef HAVE_SPLIT_USR
- "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
-#else
- "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin",
-#endif
- arg_running_as == SYSTEMD_SYSTEM);
-
- if (arg_running_as == SYSTEMD_SYSTEM) {
- /* Parse the data passed to us. We leave this
- * variables set, but the manager later on will not
- * pass them on to our children. */
- if (!in_initrd())
- parse_initrd_timestamp(&initrd_timestamp);
-
- /* Unset some environment variables passed in from the
- * kernel that don't really make sense for us. */
- unsetenv("HOME");
- unsetenv("TERM");
-
- /* When we are invoked by a shell, these might be set,
- * but make little sense to pass on */
- unsetenv("PWD");
- unsetenv("SHLVL");
- unsetenv("_");
-
- /* When we are invoked by a chroot-like tool such as
- * nspawn, these might be set, but make little sense
- * to pass on */
- unsetenv("USER");
- unsetenv("LOGNAME");
-
- /* We suppress the socket activation env vars, as
- * we'll try to match *any* open fd to units if
- * possible. */
- unsetenv("LISTEN_FDS");
- unsetenv("LISTEN_PID");
-
- /* All other variables are left as is, so that clients
- * can still read them via /proc/1/environ */
- }
-
- /* Move out of the way, so that we won't block unmounts */
- assert_se(chdir("/") == 0);
-
- if (arg_running_as == SYSTEMD_SYSTEM) {
+ if (arg_running_as == SYSTEMD_SYSTEM)
/* Become a session leader if we aren't one yet. */
setsid();
- /* Disable the umask logic */
- umask(0);
- }
+ /* Move out of the way, so that we won't block unmounts */
+ assert_se(chdir("/") == 0);
/* Make sure D-Bus doesn't fiddle with the SIGPIPE handlers */
dbus_connection_set_change_sigpipe(FALSE);
@@ -1565,8 +1486,6 @@ int main(int argc, char *argv[]) {
log_debug(PACKAGE_STRING " running in user mode. (" SYSTEMD_FEATURES ")");
if (arg_running_as == SYSTEMD_SYSTEM && !skip_setup) {
- locale_setup();
-
if (arg_show_status || plymouth_running())
status_welcome();
@@ -1590,14 +1509,14 @@ int main(int argc, char *argv[]) {
log_error("Failed to adjust timer slack: %m");
if (arg_capability_bounding_set_drop) {
- r = capability_bounding_set_drop(arg_capability_bounding_set_drop, true);
+ r = capability_bounding_set_drop_usermode(arg_capability_bounding_set_drop);
if (r < 0) {
- log_error("Failed to drop capability bounding set: %s", strerror(-r));
+ log_error("Failed to drop capability bounding set of usermode helpers: %s", strerror(-r));
goto finish;
}
- r = capability_bounding_set_drop_usermode(arg_capability_bounding_set_drop);
+ r = capability_bounding_set_drop(arg_capability_bounding_set_drop, true);
if (r < 0) {
- log_error("Failed to drop capability bounding set of usermode helpers: %s", strerror(-r));
+ log_error("Failed to drop capability bounding set: %s", strerror(-r));
goto finish;
}
}
@@ -1614,7 +1533,7 @@ int main(int argc, char *argv[]) {
if (arg_running_as == SYSTEMD_SYSTEM)
bump_rlimit_nofile(&saved_rlimit_nofile);
- r = manager_new(arg_running_as, &m);
+ r = manager_new(arg_running_as, !!serialization, &m);
if (r < 0) {
log_error("Failed to allocate manager object: %s", strerror(-r));
goto finish;
@@ -1627,14 +1546,12 @@ int main(int argc, char *argv[]) {
m->shutdown_watchdog = arg_shutdown_watchdog;
m->userspace_timestamp = userspace_timestamp;
m->kernel_timestamp = kernel_timestamp;
- m->firmware_timestamp = firmware_timestamp;
- m->loader_timestamp = loader_timestamp;
m->initrd_timestamp = initrd_timestamp;
manager_set_default_rlimits(m, arg_default_rlimit);
- if (arg_default_controllers)
- manager_set_default_controllers(m, arg_default_controllers);
+ if (arg_default_environment)
+ manager_environment_add(m, arg_default_environment);
manager_set_show_status(m, arg_show_status);
@@ -1650,6 +1567,7 @@ int main(int argc, char *argv[]) {
/* This will close all file descriptors that were opened, but
* not claimed by any unit. */
fdset_free(fds);
+ fds = NULL;
if (serialization) {
fclose(serialization);
@@ -1669,7 +1587,7 @@ int main(int argc, char *argv[]) {
if (r < 0) {
log_error("Failed to load default target: %s", bus_error(&error, r));
dbus_error_free(&error);
- } else if (target->load_state == UNIT_ERROR)
+ } else if (target->load_state == UNIT_ERROR || target->load_state == UNIT_NOT_FOUND)
log_error("Failed to load default target: %s", strerror(-target->load_error));
else if (target->load_state == UNIT_MASKED)
log_error("Default target masked.");
@@ -1682,7 +1600,7 @@ int main(int argc, char *argv[]) {
log_error("Failed to load rescue target: %s", bus_error(&error, r));
dbus_error_free(&error);
goto finish;
- } else if (target->load_state == UNIT_ERROR) {
+ } else if (target->load_state == UNIT_ERROR || target->load_state == UNIT_NOT_FOUND) {
log_error("Failed to load rescue target: %s", strerror(-target->load_error));
goto finish;
} else if (target->load_state == UNIT_MASKED) {
@@ -1805,7 +1723,6 @@ finish:
free(arg_default_rlimit[j]);
free(arg_default_unit);
- strv_free(arg_default_controllers);
free_join_controllers();
dbus_shutdown();
@@ -1865,6 +1782,10 @@ finish:
args[i++] = sfd;
args[i++] = NULL;
+ /* do not pass along the environment we inherit from the kernel or initrd */
+ if (switch_root_dir)
+ clearenv();
+
assert(i <= args_size);
execv(args[0], (char* const*) args);
}
@@ -1946,6 +1867,12 @@ finish:
watchdog_close(true);
}
+ /* Avoid the creation of new processes forked by the
+ * kernel; at this point, we will not listen to the
+ * signals anyway */
+ if (detect_container(NULL) <= 0)
+ cg_uninstall_release_agent(SYSTEMD_CGROUP_CONTROLLER);
+
execve(SYSTEMD_SHUTDOWN_BINARY_PATH, (char **) command_line, env_block);
free(env_block);
log_error("Failed to execute shutdown binary, freezing: %m");
diff --git a/src/core/manager.c b/src/core/manager.c
index c7f8f20a70..58dacdc8b5 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -55,7 +55,7 @@
#include "util.h"
#include "mkdir.h"
#include "ratelimit.h"
-#include "cgroup.h"
+#include "locale-setup.h"
#include "mount-setup.h"
#include "unit-name.h"
#include "dbus-unit.h"
@@ -70,11 +70,9 @@
#include "cgroup-util.h"
#include "path-util.h"
#include "audit-fd.h"
+#include "boot-timestamps.h"
#include "env-util.h"
-/* As soon as 16 units are in our GC queue, make sure to run a gc sweep */
-#define GC_QUEUE_ENTRIES_MAX 16
-
/* As soon as 5s passed since a unit was added to our GC queue, make sure to run a gc sweep */
#define GC_QUEUE_USEC_MAX (10*USEC_PER_SEC)
@@ -276,6 +274,54 @@ static void manager_print_jobs_in_progress(Manager *m) {
m->jobs_in_progress_iteration++;
}
+static int manager_watch_idle_pipe(Manager *m) {
+ struct epoll_event ev = {
+ .events = EPOLLIN,
+ .data.ptr = &m->idle_pipe_watch,
+ };
+ int r;
+
+ if (m->idle_pipe_watch.type != WATCH_INVALID)
+ return 0;
+
+ if (m->idle_pipe[2] < 0)
+ return 0;
+
+ m->idle_pipe_watch.type = WATCH_IDLE_PIPE;
+ m->idle_pipe_watch.fd = m->idle_pipe[2];
+ if (m->idle_pipe_watch.fd < 0) {
+ log_error("Failed to create timerfd: %m");
+ r = -errno;
+ goto err;
+ }
+
+ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->idle_pipe_watch.fd, &ev) < 0) {
+ log_error("Failed to add idle_pipe fd to epoll: %m");
+ r = -errno;
+ goto err;
+ }
+
+ log_debug("Set up idle_pipe watch.");
+
+ return 0;
+
+err:
+ if (m->idle_pipe_watch.fd >= 0)
+ close_nointr_nofail(m->idle_pipe_watch.fd);
+ watch_init(&m->idle_pipe_watch);
+ return r;
+}
+
+static void manager_unwatch_idle_pipe(Manager *m) {
+ if (m->idle_pipe_watch.type != WATCH_IDLE_PIPE)
+ return;
+
+ assert_se(epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, m->idle_pipe_watch.fd, NULL) >= 0);
+ watch_init(&m->idle_pipe_watch);
+
+ log_debug("Closed idle_pipe watch.");
+}
+
static int manager_setup_time_change(Manager *m) {
struct epoll_event ev = {
.events = EPOLLIN,
@@ -409,25 +455,34 @@ static int manager_setup_signals(Manager *m) {
return 0;
}
-static void manager_strip_environment(Manager *m) {
+static int manager_default_environment(Manager *m) {
assert(m);
- /* Remove variables from the inherited set that are part of
- * the container interface:
- * http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface */
- strv_remove_prefix(m->environment, "container=");
- strv_remove_prefix(m->environment, "container_");
+ if (m->running_as == SYSTEMD_SYSTEM) {
+ /* The system manager always starts with a clean
+ * environment for its children. It does not import
+ * the kernel or the parents exported variables.
+ *
+ * The initial passed environ is untouched to keep
+ * /proc/self/environ valid; it is used for tagging
+ * the init process inside containers. */
+ m->environment = strv_new("PATH=" DEFAULT_PATH,
+ NULL);
+
+ /* Import locale variables LC_*= from configuration */
+ locale_setup(&m->environment);
+ } else
+ /* The user manager passes its own environment
+ * along to its children. */
+ m->environment = strv_copy(environ);
- /* Remove variables from the inherited set that are part of
- * the initrd interface:
- * http://www.freedesktop.org/wiki/Software/systemd/InitrdInterface */
- strv_remove_prefix(m->environment, "RD_");
+ if (!m->environment)
+ return -ENOMEM;
- /* Drop invalid entries */
- strv_env_clean(m->environment);
+ return 0;
}
-int manager_new(SystemdRunningAs running_as, Manager **_m) {
+int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) {
Manager *m;
int r = -ENOMEM;
@@ -439,11 +494,16 @@ int manager_new(SystemdRunningAs running_as, Manager **_m) {
if (!m)
return -ENOMEM;
+#ifdef ENABLE_EFI
+ if (detect_container(NULL) <= 0)
+ boot_timestamps(&m->userspace_timestamp, &m->firmware_timestamp, &m->loader_timestamp);
+#endif
+
m->running_as = running_as;
m->name_data_slot = m->conn_data_slot = m->subscribed_data_slot = -1;
m->exit_code = _MANAGER_EXIT_CODE_INVALID;
m->pin_cgroupfs_fd = -1;
- m->idle_pipe[0] = m->idle_pipe[1] = -1;
+ m->idle_pipe[0] = m->idle_pipe[1] = m->idle_pipe[2] = m->idle_pipe[3] = -1;
watch_init(&m->signal_watch);
watch_init(&m->mount_watch);
@@ -455,18 +515,10 @@ int manager_new(SystemdRunningAs running_as, Manager **_m) {
m->epoll_fd = m->dev_autofs_fd = -1;
m->current_job_id = 1; /* start as id #1, so that we can leave #0 around as "null-like" value */
- m->environment = strv_copy(environ);
- if (!m->environment)
+ r = manager_default_environment(m);
+ if (r < 0)
goto fail;
- manager_strip_environment(m);
-
- if (running_as == SYSTEMD_SYSTEM) {
- m->default_controllers = strv_new("cpu", NULL);
- if (!m->default_controllers)
- goto fail;
- }
-
if (!(m->units = hashmap_new(string_hash_func, string_compare_func)))
goto fail;
@@ -476,10 +528,12 @@ int manager_new(SystemdRunningAs running_as, Manager **_m) {
if (!(m->watch_pids = hashmap_new(trivial_hash_func, trivial_compare_func)))
goto fail;
- if (!(m->cgroup_bondings = hashmap_new(string_hash_func, string_compare_func)))
+ m->cgroup_unit = hashmap_new(string_hash_func, string_compare_func);
+ if (!m->cgroup_unit)
goto fail;
- if (!(m->watch_bus = hashmap_new(string_hash_func, string_compare_func)))
+ m->watch_bus = hashmap_new(string_hash_func, string_compare_func);
+ if (!m->watch_bus)
goto fail;
m->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
@@ -503,9 +557,13 @@ int manager_new(SystemdRunningAs running_as, Manager **_m) {
goto fail;
/* Try to connect to the busses, if possible. */
- r = bus_init(m, running_as != SYSTEMD_SYSTEM);
- if (r < 0)
- goto fail;
+ if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) ||
+ running_as == SYSTEMD_SYSTEM) {
+ r = bus_init(m, reexecuting || running_as != SYSTEMD_SYSTEM);
+ if (r < 0)
+ goto fail;
+ } else
+ log_debug("Skipping DBus session bus connection attempt - no DBUS_SESSION_BUS_ADDRESS set...");
m->taint_usr = dir_is_empty("/usr") > 0;
@@ -600,12 +658,7 @@ static unsigned manager_dispatch_gc_queue(Manager *m) {
assert(m);
- if ((m->n_in_gc_queue < GC_QUEUE_ENTRIES_MAX) &&
- (m->gc_queue_timestamp <= 0 ||
- (m->gc_queue_timestamp + GC_QUEUE_USEC_MAX) > now(CLOCK_MONOTONIC)))
- return 0;
-
- log_debug("Running GC...");
+ /* log_debug("Running GC..."); */
m->gc_marker += _GC_OFFSET_MAX;
if (m->gc_marker + _GC_OFFSET_MAX <= _GC_OFFSET_MAX)
@@ -632,7 +685,6 @@ static unsigned manager_dispatch_gc_queue(Manager *m) {
}
m->n_in_gc_queue = 0;
- m->gc_queue_timestamp = 0;
return n;
}
@@ -661,6 +713,11 @@ static void manager_clear_jobs_and_units(Manager *m) {
m->n_running_jobs = 0;
}
+static void close_idle_pipe(Manager *m) {
+ close_pipe(m->idle_pipe);
+ close_pipe(m->idle_pipe + 2);
+}
+
void manager_free(Manager *m) {
UnitType c;
int i;
@@ -702,12 +759,10 @@ void manager_free(Manager *m) {
lookup_paths_free(&m->lookup_paths);
strv_free(m->environment);
- strv_free(m->default_controllers);
-
- hashmap_free(m->cgroup_bondings);
+ hashmap_free(m->cgroup_unit);
set_free_free(m->unit_path_cache);
- close_pipe(m->idle_pipe);
+ close_idle_pipe(m);
free(m->switch_root);
free(m->switch_root_init);
@@ -715,6 +770,9 @@ void manager_free(Manager *m) {
for (i = 0; i < RLIMIT_NLIMITS; i++)
free(m->rlimit[i]);
+ assert(hashmap_isempty(m->units_requiring_mounts_for));
+ hashmap_free(m->units_requiring_mounts_for);
+
free(m);
}
@@ -727,9 +785,11 @@ int manager_enumerate(Manager *m) {
/* Let's ask every type to load all units from disk/kernel
* that it might know */
for (c = 0; c < _UNIT_TYPE_MAX; c++)
- if (unit_vtable[c]->enumerate)
- if ((q = unit_vtable[c]->enumerate(m)) < 0)
+ if (unit_vtable[c]->enumerate) {
+ q = unit_vtable[c]->enumerate(m);
+ if (q < 0)
r = q;
+ }
manager_dispatch_load_queue(m);
return r;
@@ -820,7 +880,9 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
assert(m);
+ dual_timestamp_get(&m->generators_start_timestamp);
manager_run_generators(m);
+ dual_timestamp_get(&m->generators_finish_timestamp);
r = lookup_paths_init(
&m->lookup_paths, m->running_as, true,
@@ -839,7 +901,9 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
m->n_reloading ++;
/* First, enumerate what we can from all config files */
+ dual_timestamp_get(&m->unitsload_start_timestamp);
r = manager_enumerate(m);
+ dual_timestamp_get(&m->unitsload_finish_timestamp);
/* Second, deserialize if there is something to deserialize */
if (serialization) {
@@ -866,6 +930,11 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
if (serialization) {
assert(m->n_reloading > 0);
m->n_reloading --;
+
+ /* Let's wait for the UnitNew/JobNew messages being
+ * sent, before we notify that the reload is
+ * finished */
+ m->send_reloading_done = true;
}
return r;
@@ -987,7 +1056,13 @@ unsigned manager_dispatch_load_queue(Manager *m) {
return n;
}
-int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DBusError *e, Unit **_ret) {
+int manager_load_unit_prepare(
+ Manager *m,
+ const char *name,
+ const char *path,
+ DBusError *e,
+ Unit **_ret) {
+
Unit *ret;
UnitType t;
int r;
@@ -1031,7 +1106,8 @@ int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DB
}
}
- if ((r = unit_add_name(ret, name)) < 0) {
+ r = unit_add_name(ret, name);
+ if (r < 0) {
unit_free(ret);
return r;
}
@@ -1046,7 +1122,13 @@ int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DB
return 0;
}
-int manager_load_unit(Manager *m, const char *name, const char *path, DBusError *e, Unit **_ret) {
+int manager_load_unit(
+ Manager *m,
+ const char *name,
+ const char *path,
+ DBusError *e,
+ Unit **_ret) {
+
int r;
assert(m);
@@ -1122,6 +1204,9 @@ unsigned manager_dispatch_run_queue(Manager *m) {
if (m->n_running_jobs > 0)
manager_watch_jobs_in_progress(m);
+ if (m->n_on_console > 0)
+ manager_watch_idle_pipe(m);
+
return n;
}
@@ -1152,6 +1237,13 @@ unsigned manager_dispatch_dbus_queue(Manager *m) {
}
m->dispatching_dbus_queue = false;
+
+ if (m->send_reloading_done) {
+ m->send_reloading_done = false;
+
+ bus_broadcast_reloading(m, false);
+ }
+
return n;
}
@@ -1205,7 +1297,7 @@ static int manager_process_notify_fd(Manager *m) {
u = hashmap_get(m->watch_pids, LONG_TO_PTR(ucred->pid));
if (!u) {
- u = cgroup_unit_by_pid(m, ucred->pid);
+ u = manager_get_unit_by_pid(m, ucred->pid);
if (!u) {
log_warning("Cannot find unit for notify message of PID %lu.", (unsigned long) ucred->pid);
continue;
@@ -1270,7 +1362,7 @@ static int manager_dispatch_sigchld(Manager *m) {
/* And now figure out the unit this belongs to */
u = hashmap_get(m->watch_pids, LONG_TO_PTR(si.si_pid));
if (!u)
- u = cgroup_unit_by_pid(m, si.si_pid);
+ u = manager_get_unit_by_pid(m, si.si_pid);
/* And now, we actually reap the zombie. */
if (waitid(P_PID, si.si_pid, &si, WEXITED) < 0) {
@@ -1372,7 +1464,7 @@ static int manager_process_signal_fd(Manager *m) {
case SIGINT:
if (m->running_as == SYSTEMD_SYSTEM) {
- manager_start_target(m, SPECIAL_CTRL_ALT_DEL_TARGET, JOB_REPLACE);
+ manager_start_target(m, SPECIAL_CTRL_ALT_DEL_TARGET, JOB_REPLACE_IRREVERSIBLY);
break;
}
@@ -1668,6 +1760,14 @@ static int process_event(Manager *m, struct epoll_event *ev) {
break;
}
+ case WATCH_IDLE_PIPE: {
+ m->no_console_output = true;
+
+ manager_unwatch_idle_pipe(m);
+ close_idle_pipe(m);
+ break;
+ }
+
default:
log_error("event type=%i", w->type);
assert_not_reached("Unknown epoll event type.");
@@ -1714,16 +1814,19 @@ int manager_loop(Manager *m) {
if (manager_dispatch_load_queue(m) > 0)
continue;
- if (manager_dispatch_run_queue(m) > 0)
+ if (manager_dispatch_gc_queue(m) > 0)
continue;
- if (bus_dispatch(m) > 0)
+ if (manager_dispatch_cleanup_queue(m) > 0)
continue;
- if (manager_dispatch_cleanup_queue(m) > 0)
+ if (manager_dispatch_cgroup_queue(m) > 0)
continue;
- if (manager_dispatch_gc_queue(m) > 0)
+ if (manager_dispatch_run_queue(m) > 0)
+ continue;
+
+ if (bus_dispatch(m) > 0)
continue;
if (manager_dispatch_dbus_queue(m) > 0)
@@ -1761,7 +1864,7 @@ int manager_loop(Manager *m) {
}
int manager_load_unit_from_dbus_path(Manager *m, const char *s, DBusError *e, Unit **_u) {
- char *n;
+ _cleanup_free_ char *n = NULL;
Unit *u;
int r;
@@ -1769,16 +1872,11 @@ int manager_load_unit_from_dbus_path(Manager *m, const char *s, DBusError *e, Un
assert(s);
assert(_u);
- if (!startswith(s, "/org/freedesktop/systemd1/unit/"))
- return -EINVAL;
-
- n = bus_path_unescape(s+31);
- if (!n)
- return -ENOMEM;
+ r = unit_name_from_dbus_path(s, &n);
+ if (r < 0)
+ return r;
r = manager_load_unit(m, n, NULL, e, &u);
- free(n);
-
if (r < 0)
return r;
@@ -2033,6 +2131,8 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) {
}
}
+ bus_serialize(m, f);
+
fputc('\n', f);
HASHMAP_FOREACH_KEY(u, t, m->units, i) {
@@ -2046,7 +2146,8 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) {
fputs(u->id, f);
fputc('\n', f);
- if ((r = unit_serialize(u, f, fds, !switching_root)) < 0) {
+ r = unit_serialize(u, f, fds, !switching_root);
+ if (r < 0) {
m->n_reloading --;
return r;
}
@@ -2151,7 +2252,7 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
strv_free(m->environment);
m->environment = e;
- } else
+ } else if (bus_deserialize_item(m, l) == 0)
log_debug("Unknown serialization item '%s'", l);
}
@@ -2226,6 +2327,7 @@ int manager_reload(Manager *m) {
return r;
m->n_reloading ++;
+ bus_broadcast_reloading(m, true);
fds = fdset_new();
if (!fds) {
@@ -2285,6 +2387,8 @@ int manager_reload(Manager *m) {
assert(m->n_reloading > 0);
m->n_reloading--;
+ m->send_reloading_done = true;
+
finish:
if (f)
fclose(f);
@@ -2357,7 +2461,8 @@ void manager_check_finished(Manager *m) {
}
/* Notify Type=idle units that we are done now */
- close_pipe(m->idle_pipe);
+ manager_unwatch_idle_pipe(m);
+ close_idle_pipe(m);
/* Turn off confirm spawn now */
m->confirm_spawn = false;
@@ -2559,19 +2664,16 @@ void manager_undo_generators(Manager *m) {
remove_generator_dir(m, &m->generator_unit_path_late);
}
-int manager_set_default_controllers(Manager *m, char **controllers) {
- char **l;
-
+int manager_environment_add(Manager *m, char **environment) {
+ char **e = NULL;
assert(m);
- l = strv_copy(controllers);
- if (!l)
+ e = strv_env_merge(2, m->environment, environment);
+ if (!e)
return -ENOMEM;
- strv_free(m->default_controllers);
- m->default_controllers = l;
-
- cg_shorten_controllers(m->default_controllers);
+ strv_free(m->environment);
+ m->environment = e;
return 0;
}
@@ -2638,6 +2740,9 @@ static bool manager_get_show_status(Manager *m) {
if (m->running_as != SYSTEMD_SYSTEM)
return false;
+ if (m->no_console_output)
+ return false;
+
if (m->show_status)
return true;
@@ -2666,6 +2771,41 @@ void manager_status_printf(Manager *m, bool ephemeral, const char *status, const
va_end(ap);
}
+int manager_get_unit_by_path(Manager *m, const char *path, const char *suffix, Unit **_found) {
+ _cleanup_free_ char *p = NULL;
+ Unit *found;
+
+ assert(m);
+ assert(path);
+ assert(suffix);
+ assert(_found);
+
+ p = unit_name_from_path(path, suffix);
+ if (!p)
+ return -ENOMEM;
+
+ found = manager_get_unit(m, p);
+ if (!found) {
+ *_found = NULL;
+ return 0;
+ }
+
+ *_found = found;
+ return 1;
+}
+
+Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path) {
+ char p[strlen(path)+1];
+
+ assert(m);
+ assert(path);
+
+ strcpy(p, path);
+ path_kill_slashes(p);
+
+ return hashmap_get(m->units_requiring_mounts_for, streq(p, "/") ? "" : p);
+}
+
void watch_init(Watch *w) {
assert(w);
diff --git a/src/core/manager.h b/src/core/manager.h
index bf833540ae..a3049b5e5b 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -27,6 +27,7 @@
#include <dbus/dbus.h>
#include "fdset.h"
+#include "cgroup-util.h"
/* Enforce upper limit how many names we allow */
#define MANAGER_MAX_NAMES 131072 /* 128K */
@@ -62,7 +63,8 @@ enum WatchType {
WATCH_DBUS_WATCH,
WATCH_DBUS_TIMEOUT,
WATCH_TIME_CHANGE,
- WATCH_JOBS_IN_PROGRESS
+ WATCH_JOBS_IN_PROGRESS,
+ WATCH_IDLE_PIPE,
};
struct Watch {
@@ -86,6 +88,7 @@ struct Watch {
#include "dbus.h"
#include "path-lookup.h"
#include "execute.h"
+#include "unit-name.h"
struct Manager {
/* Note that the set of units we know of is allowed to be
@@ -100,9 +103,6 @@ struct Manager {
* type we maintain a per type linked list */
LIST_HEAD(Unit, units_by_type[_UNIT_TYPE_MAX]);
- /* To optimize iteration of units that have requires_mounts_for set */
- LIST_HEAD(Unit, has_requires_mounts_for);
-
/* Units that need to be loaded */
LIST_HEAD(Unit, load_queue); /* this is actually more a stack than a queue, but uh. */
@@ -122,6 +122,9 @@ struct Manager {
/* Units to check when doing GC */
LIST_HEAD(Unit, gc_queue);
+ /* Units that should be realized */
+ LIST_HEAD(Unit, cgroup_queue);
+
Hashmap *watch_pids; /* pid => Unit object n:1 */
char *notify_socket;
@@ -130,6 +133,7 @@ struct Manager {
Watch signal_watch;
Watch time_change_watch;
Watch jobs_in_progress_watch;
+ Watch idle_pipe_watch;
int epoll_fd;
@@ -139,7 +143,6 @@ struct Manager {
Set *unit_path_cache;
char **environment;
- char **default_controllers;
usec_t runtime_watchdog;
usec_t shutdown_watchdog;
@@ -150,6 +153,10 @@ struct Manager {
dual_timestamp initrd_timestamp;
dual_timestamp userspace_timestamp;
dual_timestamp finish_timestamp;
+ dual_timestamp generators_start_timestamp;
+ dual_timestamp generators_finish_timestamp;
+ dual_timestamp unitsload_start_timestamp;
+ dual_timestamp unitsload_finish_timestamp;
char *generator_unit_path;
char *generator_unit_path_early;
@@ -187,6 +194,8 @@ struct Manager {
int32_t conn_data_slot;
int32_t subscribed_data_slot;
+ bool send_reloading_done;
+
uint32_t current_job_id;
uint32_t default_unit_job_id;
@@ -194,10 +203,10 @@ struct Manager {
int dev_autofs_fd;
/* Data specific to the cgroup subsystem */
- Hashmap *cgroup_bondings; /* path string => CGroupBonding object 1:n */
- char *cgroup_hierarchy;
+ Hashmap *cgroup_unit;
+ CGroupControllerMask cgroup_supported;
+ char *cgroup_root;
- usec_t gc_queue_timestamp;
int gc_marker;
unsigned n_in_gc_queue;
@@ -217,6 +226,7 @@ struct Manager {
bool show_status;
bool confirm_spawn;
+ bool no_console_output;
ExecOutput default_std_output, default_std_error;
@@ -234,13 +244,18 @@ struct Manager {
unsigned jobs_in_progress_iteration;
/* Type=idle pipes */
- int idle_pipe[2];
+ int idle_pipe[4];
char *switch_root;
char *switch_root_init;
+
+ /* This maps all possible path prefixes to the units needing
+ * them. It's a hashmap with a path string as key and a Set as
+ * value where Unit objects are contained. */
+ Hashmap *units_requiring_mounts_for;
};
-int manager_new(SystemdRunningAs running_as, Manager **m);
+int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **m);
void manager_free(Manager *m);
int manager_enumerate(Manager *m);
@@ -250,6 +265,8 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds);
Job *manager_get_job(Manager *m, uint32_t id);
Unit *manager_get_unit(Manager *m, const char *name);
+int manager_get_unit_by_path(Manager *m, const char *path, const char *suffix, Unit **_found);
+
int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DBusError *e, Unit **_ret);
@@ -268,7 +285,7 @@ unsigned manager_dispatch_load_queue(Manager *m);
unsigned manager_dispatch_run_queue(Manager *m);
unsigned manager_dispatch_dbus_queue(Manager *m);
-int manager_set_default_controllers(Manager *m, char **controllers);
+int manager_environment_add(Manager *m, char **environment);
int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
int manager_loop(Manager *m);
@@ -303,4 +320,6 @@ void manager_recheck_journal(Manager *m);
void manager_set_show_status(Manager *m, bool b);
void manager_status_printf(Manager *m, bool ephemeral, const char *status, const char *format, ...) _printf_attr_(4,5);
+Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path);
+
void watch_init(Watch *w);
diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
index 4629808a7a..4359f59908 100644
--- a/src/core/mount-setup.c
+++ b/src/core/mount-setup.c
@@ -350,14 +350,8 @@ static int nftw_cb(
};
int mount_setup(bool loaded_policy) {
-
- static const char relabel[] =
- "/run/initramfs/root-fsck\0"
- "/run/initramfs/shutdown\0";
-
int r;
unsigned i;
- const char *j;
for (i = 0; i < ELEMENTSOF(mount_table); i ++) {
r = mount_one(mount_table + i, true);
@@ -379,10 +373,6 @@ int mount_setup(bool loaded_policy) {
nftw("/dev", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
nftw("/run", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
- /* Explicitly relabel these */
- NULSTR_FOREACH(j, relabel)
- label_fix(j, true, false);
-
after_relabel = now(CLOCK_MONOTONIC);
log_info("Relabelled /dev and /run in %s.",
diff --git a/src/core/mount.c b/src/core/mount.c
index 10073b50be..3d46557fb1 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -82,6 +82,7 @@ static void mount_init(Unit *u) {
}
kill_context_init(&m->kill_context);
+ cgroup_context_init(&m->cgroup_context);
/* We need to make sure that /bin/mount is always called in
* the same process group as us, so that the autofs kernel
@@ -127,6 +128,7 @@ static void mount_done(Unit *u) {
mount_parameters_done(&m->parameters_proc_self_mountinfo);
mount_parameters_done(&m->parameters_fragment);
+ cgroup_context_done(&m->cgroup_context);
exec_context_done(&m->exec_context, manager_is_reloading_or_reexecuting(u->manager));
exec_command_done_array(m->exec_command, _MOUNT_EXEC_COMMAND_MAX);
m->control_command = NULL;
@@ -155,138 +157,58 @@ _pure_ static MountParameters* get_mount_parameters(Mount *m) {
}
static int mount_add_mount_links(Mount *m) {
- Unit *other;
- int r;
+ _cleanup_free_ char *parent = NULL;
MountParameters *pm;
-
- assert(m);
-
- pm = get_mount_parameters_fragment(m);
-
- /* Adds in links to other mount points that might lie below or
- * above us in the hierarchy */
-
- LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_MOUNT]) {
- Mount *n = MOUNT(other);
- MountParameters *pn;
-
- if (n == m)
- continue;
-
- if (UNIT(n)->load_state != UNIT_LOADED)
- continue;
-
- pn = get_mount_parameters_fragment(n);
-
- if (path_startswith(m->where, n->where)) {
-
- if ((r = unit_add_dependency(UNIT(m), UNIT_AFTER, UNIT(n), true)) < 0)
- return r;
-
- if (pn)
- if ((r = unit_add_dependency(UNIT(m), UNIT_REQUIRES, UNIT(n), true)) < 0)
- return r;
-
- } else if (path_startswith(n->where, m->where)) {
-
- if ((r = unit_add_dependency(UNIT(n), UNIT_AFTER, UNIT(m), true)) < 0)
- return r;
-
- if (pm)
- if ((r = unit_add_dependency(UNIT(n), UNIT_REQUIRES, UNIT(m), true)) < 0)
- return r;
-
- } else if (pm && pm->what && path_startswith(pm->what, n->where)) {
-
- if ((r = unit_add_dependency(UNIT(m), UNIT_AFTER, UNIT(n), true)) < 0)
- return r;
-
- if ((r = unit_add_dependency(UNIT(m), UNIT_REQUIRES, UNIT(n), true)) < 0)
- return r;
-
- } else if (pn && pn->what && path_startswith(pn->what, m->where)) {
-
- if ((r = unit_add_dependency(UNIT(n), UNIT_AFTER, UNIT(m), true)) < 0)
- return r;
-
- if ((r = unit_add_dependency(UNIT(n), UNIT_REQUIRES, UNIT(m), true)) < 0)
- return r;
- }
- }
-
- return 0;
-}
-
-static int mount_add_swap_links(Mount *m) {
Unit *other;
+ Iterator i;
+ Set *s;
int r;
assert(m);
- LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_SWAP]) {
- r = swap_add_one_mount_link(SWAP(other), m);
+ if (!path_equal(m->where, "/")) {
+ /* Adds in links to other mount points that might lie further
+ * up in the hierarchy */
+ r = path_get_parent(m->where, &parent);
if (r < 0)
return r;
- }
- return 0;
-}
-
-static int mount_add_path_links(Mount *m) {
- Unit *other;
- int r;
-
- assert(m);
-
- LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_PATH]) {
- r = path_add_one_mount_link(PATH(other), m);
+ r = unit_require_mounts_for(UNIT(m), parent);
if (r < 0)
return r;
}
- return 0;
-}
-
-static int mount_add_automount_links(Mount *m) {
- Unit *other;
- int r;
-
- assert(m);
-
- LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_AUTOMOUNT]) {
- r = automount_add_one_mount_link(AUTOMOUNT(other), m);
+ /* Adds in links to other mount points that might be needed
+ * for the source path (if this is a bind mount) to be
+ * available. */
+ pm = get_mount_parameters_fragment(m);
+ if (pm && path_is_absolute(pm->what)) {
+ r = unit_require_mounts_for(UNIT(m), pm->what);
if (r < 0)
return r;
}
- return 0;
-}
+ /* Adds in links to other units that use this path or paths
+ * further down in the hierarchy */
+ s = manager_get_units_requiring_mounts_for(UNIT(m)->manager, m->where);
+ SET_FOREACH(other, s, i) {
-static int mount_add_socket_links(Mount *m) {
- Unit *other;
- int r;
+ if (other->load_state != UNIT_LOADED)
+ continue;
- assert(m);
+ if (other == UNIT(m))
+ continue;
- LIST_FOREACH(units_by_type, other, UNIT(m)->manager->units_by_type[UNIT_SOCKET]) {
- r = socket_add_one_mount_link(SOCKET(other), m);
+ r = unit_add_dependency(other, UNIT_AFTER, UNIT(m), true);
if (r < 0)
return r;
- }
-
- return 0;
-}
-static int mount_add_requires_mounts_links(Mount *m) {
- Unit *other;
- int r;
-
- assert(m);
-
- LIST_FOREACH(has_requires_mounts_for, other, UNIT(m)->manager->has_requires_mounts_for) {
- r = unit_add_one_mount_link(other, m);
- if (r < 0)
- return r;
+ if (UNIT(m)->fragment_path) {
+ /* If we have fragment configuration, then make this dependency required */
+ r = unit_add_dependency(other, UNIT_REQUIRES, UNIT(m), true);
+ if (r < 0)
+ return r;
+ }
}
return 0;
@@ -336,6 +258,12 @@ static bool mount_is_bind(MountParameters *p) {
return false;
}
+static bool mount_is_auto(MountParameters *p) {
+ assert(p);
+
+ return !mount_test_option(p->options, "noauto");
+}
+
static bool needs_quota(MountParameters *p) {
assert(p);
@@ -354,6 +282,7 @@ static bool needs_quota(MountParameters *p) {
static int mount_add_device_links(Mount *m) {
MountParameters *p;
+ bool device_wants_mount = false;
int r;
assert(m);
@@ -374,7 +303,10 @@ static int mount_add_device_links(Mount *m) {
if (path_equal(m->where, "/"))
return 0;
- r = unit_add_node_link(UNIT(m), p->what, false);
+ if (mount_is_auto(p) && UNIT(m)->manager->running_as == SYSTEMD_SYSTEM)
+ device_wants_mount = true;
+
+ r = unit_add_node_link(UNIT(m), p->what, device_wants_mount);
if (r < 0)
return r;
@@ -435,6 +367,21 @@ static int mount_add_quota_links(Mount *m) {
return 0;
}
+static bool should_umount(Mount *m) {
+ MountParameters *p;
+
+ if (path_equal(m->where, "/") ||
+ path_equal(m->where, "/usr"))
+ return false;
+
+ p = get_mount_parameters(m);
+ if (p && mount_test_option(p->options, "x-initrd.mount") &&
+ !in_initrd())
+ return false;
+
+ return true;
+}
+
static int mount_add_default_dependencies(Mount *m) {
const char *after, *after2, *online;
MountParameters *p;
@@ -479,9 +426,11 @@ static int mount_add_default_dependencies(Mount *m) {
return r;
}
- r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
- if (r < 0)
- return r;
+ if (should_umount(m)) {
+ r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
+ if (r < 0)
+ return r;
+ }
return 0;
}
@@ -538,8 +487,9 @@ static int mount_fix_timeouts(Mount *m) {
}
static int mount_verify(Mount *m) {
+ _cleanup_free_ char *e = NULL;
bool b;
- char *e;
+
assert(m);
if (UNIT(m)->load_state != UNIT_LOADED)
@@ -548,12 +498,11 @@ static int mount_verify(Mount *m) {
if (!m->from_fragment && !m->from_proc_self_mountinfo)
return -ENOENT;
- if (!(e = unit_name_from_path(m->where, ".mount")))
+ e = unit_name_from_path(m->where, ".mount");
+ if (!e)
return -ENOMEM;
b = unit_has_name(UNIT(m), e);
- free(e);
-
if (!b) {
log_error_unit(UNIT(m)->id,
"%s's Where setting doesn't match unit name. Refusing.",
@@ -617,26 +566,6 @@ static int mount_add_extras(Mount *m) {
if (r < 0)
return r;
- r = mount_add_socket_links(m);
- if (r < 0)
- return r;
-
- r = mount_add_swap_links(m);
- if (r < 0)
- return r;
-
- r = mount_add_path_links(m);
- if (r < 0)
- return r;
-
- r = mount_add_requires_mounts_links(m);
- if (r < 0)
- return r;
-
- r = mount_add_automount_links(m);
- if (r < 0)
- return r;
-
r = mount_add_quota_links(m);
if (r < 0)
return r;
@@ -647,7 +576,7 @@ static int mount_add_extras(Mount *m) {
return r;
}
- r = unit_add_default_cgroups(u);
+ r = unit_add_default_slice(u);
if (r < 0)
return r;
@@ -820,9 +749,9 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) {
prefix, mount_state_to_string(m->state),
prefix, mount_result_to_string(m->result),
prefix, m->where,
- prefix, strna(p->what),
- prefix, strna(p->fstype),
- prefix, strna(p->options),
+ prefix, p ? strna(p->what) : "n/a",
+ prefix, p ? strna(p->fstype) : "n/a",
+ prefix, p ? strna(p->options) : "n/a",
prefix, yes_no(m->from_proc_self_mountinfo),
prefix, yes_no(m->from_fragment),
prefix, m->directory_mode);
@@ -844,28 +773,31 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) {
assert(c);
assert(_pid);
+ unit_realize_cgroup(UNIT(m));
+
r = unit_watch_timer(UNIT(m), CLOCK_MONOTONIC, true, m->timeout_usec, &m->timer_watch);
if (r < 0)
goto fail;
- if ((r = exec_spawn(c,
- NULL,
- &m->exec_context,
- NULL, 0,
- UNIT(m)->manager->environment,
- true,
- true,
- true,
- UNIT(m)->manager->confirm_spawn,
- UNIT(m)->cgroup_bondings,
- UNIT(m)->cgroup_attributes,
- NULL,
- UNIT(m)->id,
- NULL,
- &pid)) < 0)
+ r = exec_spawn(c,
+ NULL,
+ &m->exec_context,
+ NULL, 0,
+ UNIT(m)->manager->environment,
+ true,
+ true,
+ true,
+ UNIT(m)->manager->confirm_spawn,
+ UNIT(m)->manager->cgroup_supported,
+ UNIT(m)->cgroup_path,
+ UNIT(m)->id,
+ NULL,
+ &pid);
+ if (r < 0)
goto fail;
- if ((r = unit_watch_pid(UNIT(m), pid)) < 0)
+ r = unit_watch_pid(UNIT(m), pid);
+ if (r < 0)
/* FIXME: we need to do something here */
goto fail;
@@ -1538,9 +1470,11 @@ static int mount_add_one(
if (r < 0)
goto fail;
- r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
- if (r < 0)
- goto fail;
+ if (should_umount(MOUNT(u))) {
+ r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
+ if (r < 0)
+ goto fail;
+ }
unit_add_to_load_queue(u);
} else {
@@ -1555,7 +1489,7 @@ static int mount_add_one(
}
}
- if (u->load_state == UNIT_ERROR) {
+ if (u->load_state == UNIT_NOT_FOUND) {
u->load_state = UNIT_LOADED;
u->load_error = 0;
@@ -1616,79 +1550,56 @@ fail:
static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
int r = 0;
unsigned i;
- char *device, *path, *options, *options2, *fstype, *d, *p, *o;
assert(m);
rewind(m->proc_self_mountinfo);
for (i = 1;; i++) {
+ _cleanup_free_ char *device = NULL, *path = NULL, *options = NULL, *options2 = NULL, *fstype = NULL, *d = NULL, *p = NULL, *o = NULL;
int k;
- device = path = options = options2 = fstype = d = p = o = NULL;
-
- if ((k = fscanf(m->proc_self_mountinfo,
- "%*s " /* (1) mount id */
- "%*s " /* (2) parent id */
- "%*s " /* (3) major:minor */
- "%*s " /* (4) root */
- "%ms " /* (5) mount point */
- "%ms" /* (6) mount options */
- "%*[^-]" /* (7) optional fields */
- "- " /* (8) separator */
- "%ms " /* (9) file system type */
- "%ms" /* (10) mount source */
- "%ms" /* (11) mount options 2 */
- "%*[^\n]", /* some rubbish at the end */
- &path,
- &options,
- &fstype,
- &device,
- &options2)) != 5) {
-
- if (k == EOF)
- break;
-
+ k = fscanf(m->proc_self_mountinfo,
+ "%*s " /* (1) mount id */
+ "%*s " /* (2) parent id */
+ "%*s " /* (3) major:minor */
+ "%*s " /* (4) root */
+ "%ms " /* (5) mount point */
+ "%ms" /* (6) mount options */
+ "%*[^-]" /* (7) optional fields */
+ "- " /* (8) separator */
+ "%ms " /* (9) file system type */
+ "%ms" /* (10) mount source */
+ "%ms" /* (11) mount options 2 */
+ "%*[^\n]", /* some rubbish at the end */
+ &path,
+ &options,
+ &fstype,
+ &device,
+ &options2);
+
+ if (k == EOF)
+ break;
+
+ if (k != 5) {
log_warning("Failed to parse /proc/self/mountinfo:%u.", i);
- goto clean_up;
+ continue;
}
o = strjoin(options, ",", options2, NULL);
- if (!o) {
- r = -ENOMEM;
- goto finish;
- }
+ if (!o)
+ return log_oom();
- if (!(d = cunescape(device)) ||
- !(p = cunescape(path))) {
- r = -ENOMEM;
- goto finish;
- }
+ d = cunescape(device);
+ p = cunescape(path);
+ if (!d || !p)
+ return log_oom();
- if ((k = mount_add_one(m, d, p, o, fstype, 0, set_flags)) < 0)
+ k = mount_add_one(m, d, p, o, fstype, 0, set_flags);
+ if (k < 0)
r = k;
-
-clean_up:
- free(device);
- free(path);
- free(options);
- free(options2);
- free(fstype);
- free(d);
- free(p);
- free(o);
}
-finish:
- free(device);
- free(path);
- free(options);
- free(options2);
- free(fstype);
- free(d);
- free(p);
- free(o);
-
return r;
}
@@ -1872,8 +1783,9 @@ const UnitVTable mount_vtable = {
"Mount\0"
"Install\0",
+ .private_section = "Mount",
.exec_context_offset = offsetof(Mount, exec_context),
- .exec_section = "Mount",
+ .cgroup_context_offset = offsetof(Mount, cgroup_context),
.no_alias = true,
.no_instances = true,
@@ -1908,6 +1820,8 @@ const UnitVTable mount_vtable = {
.bus_interface = "org.freedesktop.systemd1.Mount",
.bus_message_handler = bus_mount_message_handler,
.bus_invalidating_properties = bus_mount_invalidating_properties,
+ .bus_set_property = bus_mount_set_property,
+ .bus_commit_properties = bus_mount_commit_properties,
.enumerate = mount_enumerate,
.shutdown = mount_shutdown,
diff --git a/src/core/mount.h b/src/core/mount.h
index bcc10ee0d4..7cd4320d94 100644
--- a/src/core/mount.h
+++ b/src/core/mount.h
@@ -25,6 +25,8 @@ typedef struct Mount Mount;
#include "unit.h"
#include "kill.h"
+#include "execute.h"
+#include "cgroup.h"
typedef enum MountState {
MOUNT_DEAD,
@@ -95,8 +97,10 @@ struct Mount {
usec_t timeout_usec;
ExecCommand exec_command[_MOUNT_EXEC_COMMAND_MAX];
+
ExecContext exec_context;
KillContext kill_context;
+ CGroupContext cgroup_context;
MountState state, deserialized_state;
diff --git a/src/core/namespace.c b/src/core/namespace.c
index 7e33d84156..16b132ba56 100644
--- a/src/core/namespace.c
+++ b/src/core/namespace.c
@@ -51,6 +51,7 @@ typedef struct BindMount {
const char *path;
MountMode mode;
bool done;
+ bool ignore;
} BindMount;
static int append_mounts(BindMount **p, char **strv, MountMode mode) {
@@ -58,6 +59,13 @@ static int append_mounts(BindMount **p, char **strv, MountMode mode) {
STRV_FOREACH(i, strv) {
+ (*p)->ignore = false;
+
+ if ((mode == INACCESSIBLE || mode == READONLY) && (*i)[0] == '-') {
+ (*p)->ignore = true;
+ (*i)++;
+ }
+
if (!path_is_absolute(*i))
return -EINVAL;
@@ -155,6 +163,8 @@ static int apply_mount(
r = mount(what, m->path, NULL, MS_BIND|MS_REC, NULL);
if (r >= 0)
log_debug("Successfully mounted %s to %s", what, m->path);
+ else if (m->ignore && errno == ENOENT)
+ r = 0;
return r;
}
@@ -168,7 +178,7 @@ static int make_read_only(BindMount *m) {
return 0;
r = mount(NULL, m->path, NULL, MS_BIND|MS_REMOUNT|MS_RDONLY|MS_REC, NULL);
- if (r < 0)
+ if (r < 0 && !(m->ignore && errno == ENOENT))
return -errno;
return 0;
diff --git a/src/core/org.freedesktop.systemd1.conf b/src/core/org.freedesktop.systemd1.conf
index a07a8e1ce3..a375dce0b0 100644
--- a/src/core/org.freedesktop.systemd1.conf
+++ b/src/core/org.freedesktop.systemd1.conf
@@ -86,6 +86,10 @@
send_interface="org.freedesktop.systemd1.Manager"
send_member="Dump"/>
+ <allow send_destination="org.freedesktop.systemd1"
+ send_interface="org.freedesktop.systemd1.Manager"
+ send_member="GetDefaultTarget"/>
+
<allow receive_sender="org.freedesktop.systemd1"/>
</policy>
diff --git a/src/core/path.c b/src/core/path.c
index 8a09deb4ff..99e2fedf29 100644
--- a/src/core/path.c
+++ b/src/core/path.c
@@ -241,10 +241,6 @@ static bool path_spec_check_good(PathSpec *s, bool initial) {
return good;
}
-static bool path_spec_startswith(PathSpec *s, const char *what) {
- return path_startswith(s->path, what);
-}
-
static void path_spec_mkdir(PathSpec *s, mode_t mode) {
int r;
@@ -301,38 +297,14 @@ static void path_done(Unit *u) {
path_free_specs(p);
}
-int path_add_one_mount_link(Path *p, Mount *m) {
+static int path_add_mount_links(Path *p) {
PathSpec *s;
int r;
assert(p);
- assert(m);
-
- if (UNIT(p)->load_state != UNIT_LOADED ||
- UNIT(m)->load_state != UNIT_LOADED)
- return 0;
LIST_FOREACH(spec, s, p->specs) {
- if (!path_spec_startswith(s, m->where))
- continue;
-
- r = unit_add_two_dependencies(UNIT(p), UNIT_AFTER, UNIT_REQUIRES,
- UNIT(m), true);
- if (r < 0)
- return r;
- }
-
- return 0;
-}
-
-static int path_add_mount_links(Path *p) {
- Unit *other;
- int r;
-
- assert(p);
-
- LIST_FOREACH(units_by_type, other, UNIT(p)->manager->units_by_type[UNIT_MOUNT]) {
- r = path_add_one_mount_link(p, MOUNT(other));
+ r = unit_require_mounts_for(UNIT(p), s->path);
if (r < 0)
return r;
}
diff --git a/src/core/path.h b/src/core/path.h
index 6adab5897d..dec3df7035 100644
--- a/src/core/path.h
+++ b/src/core/path.h
@@ -90,10 +90,6 @@ struct Path {
PathResult result;
};
-/* Called from the mount code figure out if a mount is a dependency of
- * any of the paths of this path object */
-int path_add_one_mount_link(Path *p, Mount *m);
-
void path_free_specs(Path *p);
extern const UnitVTable path_vtable;
diff --git a/src/core/scope.c b/src/core/scope.c
new file mode 100644
index 0000000000..50e5dbacb4
--- /dev/null
+++ b/src/core/scope.c
@@ -0,0 +1,482 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "unit.h"
+#include "scope.h"
+#include "load-fragment.h"
+#include "log.h"
+#include "dbus-scope.h"
+#include "special.h"
+#include "unit-name.h"
+#include "load-dropin.h"
+
+static const UnitActiveState state_translation_table[_SCOPE_STATE_MAX] = {
+ [SCOPE_DEAD] = UNIT_INACTIVE,
+ [SCOPE_RUNNING] = UNIT_ACTIVE,
+ [SCOPE_STOP_SIGTERM] = UNIT_DEACTIVATING,
+ [SCOPE_STOP_SIGKILL] = UNIT_DEACTIVATING,
+ [SCOPE_FAILED] = UNIT_FAILED
+};
+
+static void scope_init(Unit *u) {
+ Scope *s = SCOPE(u);
+
+ assert(u);
+ assert(u->load_state == UNIT_STUB);
+
+ s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
+
+ watch_init(&s->timer_watch);
+
+ cgroup_context_init(&s->cgroup_context);
+ kill_context_init(&s->kill_context);
+
+ UNIT(s)->ignore_on_isolate = true;
+ UNIT(s)->ignore_on_snapshot = true;
+}
+
+static void scope_done(Unit *u) {
+ Scope *s = SCOPE(u);
+
+ assert(u);
+
+ cgroup_context_done(&s->cgroup_context);
+
+ set_free(s->pids);
+ s->pids = NULL;
+
+ unit_unwatch_timer(u, &s->timer_watch);
+}
+
+static void scope_set_state(Scope *s, ScopeState state) {
+ ScopeState old_state;
+ assert(s);
+
+ old_state = s->state;
+ s->state = state;
+
+ if (state != SCOPE_STOP_SIGTERM &&
+ state != SCOPE_STOP_SIGKILL)
+ unit_unwatch_timer(UNIT(s), &s->timer_watch);
+
+ if (state != old_state)
+ log_debug("%s changed %s -> %s",
+ UNIT(s)->id,
+ scope_state_to_string(old_state),
+ scope_state_to_string(state));
+
+ unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], true);
+}
+
+static int scope_add_default_dependencies(Scope *s) {
+ int r;
+
+ assert(s);
+
+ /* Make sure scopes are unloaded on shutdown */
+ r = unit_add_two_dependencies_by_name(
+ UNIT(s),
+ UNIT_BEFORE, UNIT_CONFLICTS,
+ SPECIAL_SHUTDOWN_TARGET, NULL, true);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+static int scope_verify(Scope *s) {
+ assert(s);
+
+ if (UNIT(s)->load_state != UNIT_LOADED)
+ return 0;
+
+ if (set_size(s->pids) <= 0 && UNIT(s)->manager->n_reloading <= 0) {
+ log_error_unit(UNIT(s)->id, "Scope %s has no PIDs. Refusing.", UNIT(s)->id);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int scope_load(Unit *u) {
+ Scope *s = SCOPE(u);
+ int r;
+
+ assert(s);
+ assert(u->load_state == UNIT_STUB);
+
+ if (!u->transient && UNIT(s)->manager->n_reloading <= 0)
+ return -ENOENT;
+
+ u->load_state = UNIT_LOADED;
+
+ r = unit_load_dropin(u);
+ if (r < 0)
+ return r;
+
+ r = unit_add_default_slice(u);
+ if (r < 0)
+ return r;
+
+ if (u->default_dependencies) {
+ r = scope_add_default_dependencies(s);
+ if (r < 0)
+ return r;
+ }
+
+ return scope_verify(s);
+}
+
+static int scope_coldplug(Unit *u) {
+ Scope *s = SCOPE(u);
+ int r;
+
+ assert(s);
+ assert(s->state == SCOPE_DEAD);
+
+ if (s->deserialized_state != s->state) {
+
+ if ((s->deserialized_state == SCOPE_STOP_SIGKILL || s->deserialized_state == SCOPE_STOP_SIGTERM)
+ && s->timeout_stop_usec > 0) {
+ r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->timeout_stop_usec, &s->timer_watch);
+ if (r < 0)
+
+ return r;
+ }
+
+ scope_set_state(s, s->deserialized_state);
+ }
+
+ return 0;
+}
+
+static void scope_dump(Unit *u, FILE *f, const char *prefix) {
+ Scope *s = SCOPE(u);
+
+ assert(s);
+ assert(f);
+
+ fprintf(f,
+ "%sScope State: %s\n"
+ "%sResult: %s\n",
+ prefix, scope_state_to_string(s->state),
+ prefix, scope_result_to_string(s->result));
+
+ cgroup_context_dump(&s->cgroup_context, f, prefix);
+ kill_context_dump(&s->kill_context, f, prefix);
+}
+
+static void scope_enter_dead(Scope *s, ScopeResult f) {
+ assert(s);
+
+ if (f != SCOPE_SUCCESS)
+ s->result = f;
+
+ scope_set_state(s, s->result != SCOPE_SUCCESS ? SCOPE_FAILED : SCOPE_DEAD);
+}
+
+static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
+ int r;
+
+ assert(s);
+
+ if (f != SCOPE_SUCCESS)
+ s->result = f;
+
+ r = unit_kill_context(
+ UNIT(s),
+ &s->kill_context,
+ state != SCOPE_STOP_SIGTERM,
+ -1, -1, false);
+ if (r < 0)
+ goto fail;
+
+ if (r > 0) {
+ if (s->timeout_stop_usec > 0) {
+ r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->timeout_stop_usec, &s->timer_watch);
+ if (r < 0)
+ goto fail;
+ }
+
+ scope_set_state(s, state);
+ } else
+ scope_enter_dead(s, SCOPE_SUCCESS);
+
+ return;
+
+fail:
+ log_warning_unit(UNIT(s)->id,
+ "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
+
+ scope_enter_dead(s, SCOPE_FAILURE_RESOURCES);
+}
+
+static int scope_start(Unit *u) {
+ Scope *s = SCOPE(u);
+ int r;
+
+ assert(s);
+
+ if (s->state == SCOPE_FAILED)
+ return -EPERM;
+
+ if (s->state == SCOPE_STOP_SIGTERM ||
+ s->state == SCOPE_STOP_SIGKILL)
+ return -EAGAIN;
+
+ assert(s->state == SCOPE_DEAD);
+
+ if (!u->transient && UNIT(s)->manager->n_reloading <= 0)
+ return -ENOENT;
+
+ r = unit_realize_cgroup(u);
+ if (r < 0) {
+ log_error("Failed to realize cgroup: %s", strerror(-r));
+ return r;
+ }
+
+ r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, s->pids);
+ if (r < 0)
+ return r;
+
+ set_free(s->pids);
+ s->pids = NULL;
+
+ s->result = SCOPE_SUCCESS;
+
+ scope_set_state(s, SCOPE_RUNNING);
+ return 0;
+}
+
+static int scope_stop(Unit *u) {
+ Scope *s = SCOPE(u);
+
+ assert(s);
+ assert(s->state == SCOPE_RUNNING);
+
+ if (s->state == SCOPE_STOP_SIGTERM ||
+ s->state == SCOPE_STOP_SIGKILL)
+ return 0;
+
+ assert(s->state == SCOPE_RUNNING);
+
+ scope_enter_signal(s, SCOPE_STOP_SIGTERM, SCOPE_SUCCESS);
+ return 0;
+}
+
+static void scope_reset_failed(Unit *u) {
+ Scope *s = SCOPE(u);
+
+ assert(s);
+
+ if (s->state == SCOPE_FAILED)
+ scope_set_state(s, SCOPE_DEAD);
+
+ s->result = SCOPE_SUCCESS;
+}
+
+static int scope_kill(Unit *u, KillWho who, int signo, DBusError *error) {
+ return unit_kill_common(u, who, signo, -1, -1, error);
+}
+
+static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
+ Scope *s = SCOPE(u);
+
+ assert(s);
+ assert(f);
+ assert(fds);
+
+ unit_serialize_item(u, f, "state", scope_state_to_string(s->state));
+ return 0;
+}
+
+static int scope_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
+ Scope *s = SCOPE(u);
+
+ assert(u);
+ assert(key);
+ assert(value);
+ assert(fds);
+
+ if (streq(key, "state")) {
+ ScopeState state;
+
+ state = scope_state_from_string(value);
+ if (state < 0)
+ log_debug("Failed to parse state value %s", value);
+ else
+ s->deserialized_state = state;
+
+ } else
+ log_debug("Unknown serialization key '%s'", key);
+
+ return 0;
+}
+
+static bool scope_check_gc(Unit *u) {
+ Scope *s = SCOPE(u);
+ int r;
+
+ assert(s);
+
+ /* Never clean up scopes that still have a process around,
+ * even if the scope is formally dead. */
+
+ if (UNIT(s)->cgroup_path) {
+ r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
+ if (r <= 0)
+ return true;
+ }
+
+ return false;
+}
+
+static void scope_timer_event(Unit *u, uint64_t elapsed, Watch*w) {
+ Scope *s = SCOPE(u);
+
+ assert(s);
+ assert(elapsed == 1);
+ assert(w == &s->timer_watch);
+
+ switch (s->state) {
+
+ case SCOPE_STOP_SIGTERM:
+ if (s->kill_context.send_sigkill) {
+ log_warning_unit(u->id, "%s stopping timed out. Killing.", u->id);
+ scope_enter_signal(s, SCOPE_STOP_SIGKILL, SCOPE_FAILURE_TIMEOUT);
+ } else {
+ log_warning_unit(u->id, "%s stopping timed out. Skipping SIGKILL.", u->id);
+ scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT);
+ }
+
+ break;
+
+ case SCOPE_STOP_SIGKILL:
+ log_warning_unit(u->id, "%s still around after SIGKILL. Ignoring.", u->id);
+ scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT);
+ break;
+
+ default:
+ assert_not_reached("Timeout at wrong time.");
+ }
+}
+
+static void scope_notify_cgroup_empty_event(Unit *u) {
+ Scope *s = SCOPE(u);
+ assert(u);
+
+ log_debug_unit(u->id, "%s: cgroup is empty", u->id);
+
+ switch (s->state) {
+
+ case SCOPE_RUNNING:
+ case SCOPE_STOP_SIGTERM:
+ case SCOPE_STOP_SIGKILL:
+ scope_enter_dead(s, SCOPE_SUCCESS);
+
+ break;
+
+ default:
+ ;
+ }
+}
+
+_pure_ static UnitActiveState scope_active_state(Unit *u) {
+ assert(u);
+
+ return state_translation_table[SCOPE(u)->state];
+}
+
+_pure_ static const char *scope_sub_state_to_string(Unit *u) {
+ assert(u);
+
+ return scope_state_to_string(SCOPE(u)->state);
+}
+
+static const char* const scope_state_table[_SCOPE_STATE_MAX] = {
+ [SCOPE_DEAD] = "dead",
+ [SCOPE_RUNNING] = "running",
+ [SCOPE_STOP_SIGTERM] = "stop-sigterm",
+ [SCOPE_STOP_SIGKILL] = "stop-sigkill",
+ [SCOPE_FAILED] = "failed",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(scope_state, ScopeState);
+
+static const char* const scope_result_table[_SCOPE_RESULT_MAX] = {
+ [SCOPE_SUCCESS] = "success",
+ [SCOPE_FAILURE_RESOURCES] = "resources",
+ [SCOPE_FAILURE_TIMEOUT] = "timeout",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(scope_result, ScopeResult);
+
+const UnitVTable scope_vtable = {
+ .object_size = sizeof(Scope),
+ .sections =
+ "Unit\0"
+ "Scope\0"
+ "Install\0",
+
+ .private_section = "Scope",
+ .cgroup_context_offset = offsetof(Scope, cgroup_context),
+
+ .no_alias = true,
+ .no_instances = true,
+
+ .init = scope_init,
+ .load = scope_load,
+ .done = scope_done,
+
+ .coldplug = scope_coldplug,
+
+ .dump = scope_dump,
+
+ .start = scope_start,
+ .stop = scope_stop,
+
+ .kill = scope_kill,
+
+ .serialize = scope_serialize,
+ .deserialize_item = scope_deserialize_item,
+
+ .active_state = scope_active_state,
+ .sub_state_to_string = scope_sub_state_to_string,
+
+ .check_gc = scope_check_gc,
+
+ .timer_event = scope_timer_event,
+
+ .reset_failed = scope_reset_failed,
+
+ .notify_cgroup_empty = scope_notify_cgroup_empty_event,
+
+ .bus_interface = "org.freedesktop.systemd1.Scope",
+ .bus_message_handler = bus_scope_message_handler,
+ .bus_set_property = bus_scope_set_property,
+ .bus_commit_properties = bus_scope_commit_properties,
+
+ .can_transient = true
+};
diff --git a/src/core/scope.h b/src/core/scope.h
new file mode 100644
index 0000000000..2a3dcb73d7
--- /dev/null
+++ b/src/core/scope.h
@@ -0,0 +1,69 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+typedef struct Scope Scope;
+
+#include "unit.h"
+#include "kill.h"
+
+typedef enum ScopeState {
+ SCOPE_DEAD,
+ SCOPE_RUNNING,
+ SCOPE_STOP_SIGTERM,
+ SCOPE_STOP_SIGKILL,
+ SCOPE_FAILED,
+ _SCOPE_STATE_MAX,
+ _SCOPE_STATE_INVALID = -1
+} ScopeState;
+
+typedef enum ScopeResult {
+ SCOPE_SUCCESS,
+ SCOPE_FAILURE_RESOURCES,
+ SCOPE_FAILURE_TIMEOUT,
+ _SCOPE_RESULT_MAX,
+ _SCOPE_RESULT_INVALID = -1
+} ScopeResult;
+
+struct Scope {
+ Unit meta;
+
+ CGroupContext cgroup_context;
+ KillContext kill_context;
+
+ ScopeState state, deserialized_state;
+ ScopeResult result;
+
+ usec_t timeout_stop_usec;
+
+ Set *pids;
+
+ Watch timer_watch;
+};
+
+extern const UnitVTable scope_vtable;
+
+const char* scope_state_to_string(ScopeState i) _const_;
+ScopeState scope_state_from_string(const char *s) _pure_;
+
+const char* scope_result_to_string(ScopeResult i) _const_;
+ScopeResult scope_result_from_string(const char *s) _pure_;
diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
index 426aed07d2..0a3ee18bb9 100644
--- a/src/core/selinux-access.c
+++ b/src/core/selinux-access.c
@@ -6,16 +6,16 @@
Copyright 2012 Dan Walsh
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/>.
***/
diff --git a/src/core/selinux-access.h b/src/core/selinux-access.h
index 9183cbc9a6..2d7ac64c8f 100644
--- a/src/core/selinux-access.h
+++ b/src/core/selinux-access.h
@@ -8,16 +8,16 @@
Copyright 2012 Dan Walsh
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/>.
***/
diff --git a/src/core/service.c b/src/core/service.c
index 3617c24711..67920248d3 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -141,6 +141,7 @@ static void service_init(Unit *u) {
exec_context_init(&s->exec_context);
kill_context_init(&s->kill_context);
+ cgroup_context_init(&s->cgroup_context);
RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
@@ -190,6 +191,14 @@ static int service_set_main_pid(Service *s, pid_t pid) {
if (pid == getpid())
return -EINVAL;
+ if (s->main_pid == pid && s->main_pid_known)
+ return 0;
+
+ if (s->main_pid != pid) {
+ service_unwatch_main_pid(s);
+ exec_status_start(&s->main_exec_status, pid);
+ }
+
s->main_pid = pid;
s->main_pid_known = true;
@@ -202,8 +211,6 @@ static int service_set_main_pid(Service *s, pid_t pid) {
} else
s->main_pid_alien = false;
- exec_status_start(&s->main_exec_status, pid);
-
return 0;
}
@@ -220,7 +227,7 @@ static void service_close_socket_fd(Service *s) {
static void service_connection_unref(Service *s) {
assert(s);
- if (!UNIT_DEREF(s->accept_socket))
+ if (!UNIT_ISSET(s->accept_socket))
return;
socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
@@ -235,7 +242,7 @@ static void service_stop_watchdog(Service *s) {
s->watchdog_timestamp.monotonic = 0;
}
-static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart);
+static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
static void service_handle_watchdog(Service *s) {
usec_t offset;
@@ -249,7 +256,7 @@ static void service_handle_watchdog(Service *s) {
offset = now(CLOCK_MONOTONIC) - s->watchdog_timestamp.monotonic;
if (offset >= s->watchdog_usec) {
log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
- service_enter_dead(s, SERVICE_FAILURE_WATCHDOG, true);
+ service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_WATCHDOG);
return;
}
@@ -283,6 +290,7 @@ static void service_done(Unit *u) {
free(s->status_text);
s->status_text = NULL;
+ cgroup_context_done(&s->cgroup_context);
exec_context_done(&s->exec_context, manager_is_reloading_or_reexecuting(u->manager));
exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
s->control_command = NULL;
@@ -981,7 +989,7 @@ static int service_load_sysv_name(Service *s, const char *name) {
assert(s);
assert(name);
- /* For SysV services we strip the *.sh suffixes. */
+ /* For SysV services we strip the *.sh suffixes. */
if (endswith(name, ".sh.service"))
return -ENOENT;
@@ -1109,6 +1117,12 @@ static int service_verify(Service *s) {
return -EINVAL;
}
+ if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
+ log_error_unit(UNIT(s)->id,
+ "%s has Restart setting other than no, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
+ return -EINVAL;
+ }
+
if (s->type == SERVICE_DBUS && !s->bus_name) {
log_error_unit(UNIT(s)->id,
"%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
@@ -1191,27 +1205,32 @@ static int service_load(Unit *u) {
assert(s);
/* Load a .service file */
- if ((r = unit_load_fragment(u)) < 0)
+ r = unit_load_fragment(u);
+ if (r < 0)
return r;
#ifdef HAVE_SYSV_COMPAT
/* Load a classic init script as a fallback, if we couldn't find anything */
- if (u->load_state == UNIT_STUB)
- if ((r = service_load_sysv(s)) < 0)
+ if (u->load_state == UNIT_STUB) {
+ r = service_load_sysv(s);
+ if (r < 0)
return r;
+ }
#endif
/* Still nothing found? Then let's give up */
if (u->load_state == UNIT_STUB)
return -ENOENT;
- /* We were able to load something, then let's add in the
- * dropin directories. */
- if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
- return r;
-
/* This is a new unit? Then let's add in some extras */
if (u->load_state == UNIT_LOADED) {
+
+ /* We were able to load something, then let's add in
+ * the dropin directories. */
+ r = unit_load_dropin(u);
+ if (r < 0)
+ return r;
+
if (s->type == _SERVICE_TYPE_INVALID)
s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
@@ -1225,7 +1244,7 @@ static int service_load(Unit *u) {
if (r < 0)
return r;
- r = unit_add_default_cgroups(u);
+ r = unit_add_default_slice(u);
if (r < 0)
return r;
@@ -1453,7 +1472,7 @@ static int service_search_main_pid(Service *s) {
assert(s->main_pid <= 0);
- pid = cgroup_bonding_search_main_pid_list(UNIT(s)->cgroup_bondings);
+ pid = unit_search_main_pid(UNIT(s));
if (pid <= 0)
return -ENOENT;
@@ -1474,24 +1493,6 @@ static int service_search_main_pid(Service *s) {
return 0;
}
-static void service_notify_sockets_dead(Service *s, bool failed_permanent) {
- Iterator i;
- Unit *u;
-
- assert(s);
-
- /* Notifies all our sockets when we die */
-
- if (s->socket_fd >= 0)
- return;
-
- SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i)
- if (u->type == UNIT_SOCKET)
- socket_notify_service_dead(SOCKET(u), failed_permanent);
-
- return;
-}
-
static void service_set_state(Service *s, ServiceState state) {
ServiceState old_state;
const UnitActiveState *table;
@@ -1543,19 +1544,6 @@ static void service_set_state(Service *s, ServiceState state) {
s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
}
- if (state == SERVICE_FAILED)
- service_notify_sockets_dead(s, s->result == SERVICE_FAILURE_START_LIMIT);
-
- if (state == SERVICE_DEAD ||
- state == SERVICE_STOP ||
- state == SERVICE_STOP_SIGTERM ||
- state == SERVICE_STOP_SIGKILL ||
- state == SERVICE_STOP_POST ||
- state == SERVICE_FINAL_SIGTERM ||
- state == SERVICE_FINAL_SIGKILL ||
- state == SERVICE_AUTO_RESTART)
- service_notify_sockets_dead(s, false);
-
if (state != SERVICE_START_PRE &&
state != SERVICE_START &&
state != SERVICE_START_POST &&
@@ -1578,7 +1566,7 @@ static void service_set_state(Service *s, ServiceState state) {
/* For the inactive states unit_notify() will trim the cgroup,
* but for exit we have to do that ourselves... */
if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
- cgroup_bonding_trim_list(UNIT(s)->cgroup_bondings, true);
+ unit_destroy_cgroup(UNIT(s));
if (old_state != state)
log_debug_unit(UNIT(s)->id,
@@ -1610,6 +1598,7 @@ static int service_coldplug(Unit *u) {
s->deserialized_state == SERVICE_FINAL_SIGTERM ||
s->deserialized_state == SERVICE_FINAL_SIGKILL ||
s->deserialized_state == SERVICE_AUTO_RESTART) {
+
if (s->deserialized_state == SERVICE_AUTO_RESTART || s->timeout_start_usec > 0) {
usec_t k;
@@ -1747,11 +1736,14 @@ static int service_spawn(
unsigned n_fds = 0, n_env = 0;
_cleanup_strv_free_ char
**argv = NULL, **final_env = NULL, **our_env = NULL;
+ const char *path;
assert(s);
assert(c);
assert(_pid);
+ unit_realize_cgroup(UNIT(s));
+
if (pass_fds ||
s->exec_context.std_input == EXEC_INPUT_SOCKET ||
s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
@@ -1777,11 +1769,9 @@ static int service_spawn(
} else
unit_unwatch_timer(UNIT(s), &s->timer_watch);
- argv = unit_full_printf_strv(UNIT(s), c->argv);
- if (!argv) {
- r = -ENOMEM;
+ r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
+ if (r < 0)
goto fail;
- }
our_env = new0(char*, 5);
if (!our_env) {
@@ -1807,7 +1797,7 @@ static int service_spawn(
goto fail;
}
- if (s->meta.manager->running_as != SYSTEMD_SYSTEM)
+ if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
if (asprintf(our_env + n_env++, "MANAGERPID=%lu", (unsigned long) getpid()) < 0) {
r = -ENOMEM;
goto fail;
@@ -1819,6 +1809,12 @@ static int service_spawn(
goto fail;
}
+ if (is_control && UNIT(s)->cgroup_path) {
+ path = strappenda(UNIT(s)->cgroup_path, "/control");
+ cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
+ } else
+ path = UNIT(s)->cgroup_path;
+
r = exec_spawn(c,
argv,
&s->exec_context,
@@ -1828,9 +1824,8 @@ static int service_spawn(
apply_chroot,
apply_tty_stdin,
UNIT(s)->manager->confirm_spawn,
- UNIT(s)->cgroup_bondings,
- UNIT(s)->cgroup_attributes,
- is_control ? "control" : NULL,
+ UNIT(s)->manager->cgroup_supported,
+ path,
UNIT(s)->id,
s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
&pid);
@@ -1865,7 +1860,7 @@ static int main_pid_good(Service *s) {
/* If it's an alien child let's check if it is still
* alive ... */
- if (s->main_pid_alien)
+ if (s->main_pid_alien && s->main_pid > 0)
return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
/* .. otherwise assume we'll get a SIGCHLD for it,
@@ -1889,7 +1884,10 @@ static int cgroup_good(Service *s) {
assert(s);
- r = cgroup_bonding_is_empty_list(UNIT(s)->cgroup_bondings);
+ if (!UNIT(s)->cgroup_path)
+ return 0;
+
+ r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
if (r < 0)
return r;
@@ -1910,6 +1908,7 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
(s->restart == SERVICE_RESTART_ALWAYS ||
(s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
(s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
+ (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
(s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
s->result == SERVICE_FAILURE_CORE_DUMP))) &&
(s->result != SERVICE_FAILURE_EXIT_CODE ||
@@ -1930,6 +1929,12 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
/* we want fresh tmpdirs in case service is started again immediately */
exec_context_tmp_dirs_done(&s->exec_context);
+ /* Try to delete the pid file. At this point it will be
+ * out-of-date, and some software might be confused by it, so
+ * let's remove it. */
+ if (s->pid_file)
+ unlink_noerrno(s->pid_file);
+
return;
fail:
@@ -1939,8 +1944,6 @@ fail:
service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
}
-static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
-
static void service_enter_stop_post(Service *s, ServiceResult f) {
int r;
assert(s);
@@ -1970,7 +1973,7 @@ static void service_enter_stop_post(Service *s, ServiceResult f) {
service_set_state(s, SERVICE_STOP_POST);
} else
- service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
+ service_enter_dead(s, SERVICE_SUCCESS, true);
return;
@@ -2121,25 +2124,33 @@ fail:
service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
}
+static void service_kill_control_processes(Service *s) {
+ char *p;
+
+ if (!UNIT(s)->cgroup_path)
+ return;
+
+ p = strappenda(UNIT(s)->cgroup_path, "/control");
+ cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
+}
+
static void service_enter_start(Service *s) {
+ ExecCommand *c;
pid_t pid;
int r;
- ExecCommand *c;
assert(s);
assert(s->exec_command[SERVICE_EXEC_START]);
assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
- if (s->type == SERVICE_FORKING)
- service_unwatch_control_pid(s);
- else
- service_unwatch_main_pid(s);
+ service_unwatch_control_pid(s);
+ service_unwatch_main_pid(s);
/* We want to ensure that nobody leaks processes from
* START_PRE here, so let's go on a killing spree, People
* should not spawn long running processes from START_PRE. */
- cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, true, NULL, "control");
+ service_kill_control_processes(s);
if (s->type == SERVICE_FORKING) {
s->control_command_id = SERVICE_EXEC_START;
@@ -2215,11 +2226,9 @@ static void service_enter_start_pre(Service *s) {
s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
if (s->control_command) {
-
/* Before we start anything, let's clear up what might
* be left from previous runs. */
- cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL,
- true,true, NULL, "control");
+ service_kill_control_processes(s);
s->control_command_id = SERVICE_EXEC_START_PRE;
@@ -2691,8 +2700,10 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
if (parse_pid(value, &pid) < 0)
log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
- else
- service_set_main_pid(s, (pid_t) pid);
+ else {
+ service_set_main_pid(s, pid);
+ unit_watch_pid(UNIT(s), pid);
+ }
} else if (streq(key, "main-pid-known")) {
int b;
@@ -3043,7 +3054,6 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
}
} else if (s->control_pid == pid) {
-
s->control_pid = 0;
if (s->control_command) {
@@ -3064,8 +3074,7 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
/* Immediately get rid of the cgroup, so that the
* kernel doesn't delay the cgroup empty messages for
* the service cgroup any longer than necessary */
- cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL,
- true, true, NULL, "control");
+ service_kill_control_processes(s);
if (s->control_command &&
s->control_command->command_next &&
@@ -3294,13 +3303,12 @@ static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) {
}
}
-static void service_cgroup_notify_event(Unit *u) {
+static void service_notify_cgroup_empty_event(Unit *u) {
Service *s = SERVICE(u);
assert(u);
- log_debug_unit(u->id,
- "%s: cgroup is empty", u->id);
+ log_debug_unit(u->id, "%s: cgroup is empty", u->id);
switch (s->state) {
@@ -3387,6 +3395,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
log_debug_unit(u->id,
"%s: got %s", u->id, e);
service_set_main_pid(s, pid);
+ unit_watch_pid(UNIT(s), pid);
}
}
@@ -3683,8 +3692,10 @@ static void service_bus_query_pid_done(
(s->state == SERVICE_START ||
s->state == SERVICE_START_POST ||
s->state == SERVICE_RUNNING ||
- s->state == SERVICE_RELOAD))
+ s->state == SERVICE_RELOAD)){
service_set_main_pid(s, pid);
+ unit_watch_pid(UNIT(s), pid);
+ }
}
int service_set_socket_fd(Service *s, int fd, Socket *sock) {
@@ -3729,6 +3740,7 @@ static void service_reset_failed(Unit *u) {
static int service_kill(Unit *u, KillWho who, int signo, DBusError *error) {
Service *s = SERVICE(u);
+
return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
}
@@ -3756,6 +3768,7 @@ static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
[SERVICE_RESTART_NO] = "no",
[SERVICE_RESTART_ON_SUCCESS] = "on-success",
[SERVICE_RESTART_ON_FAILURE] = "on-failure",
+ [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
[SERVICE_RESTART_ON_ABORT] = "on-abort",
[SERVICE_RESTART_ALWAYS] = "always"
};
@@ -3821,8 +3834,9 @@ const UnitVTable service_vtable = {
"Service\0"
"Install\0",
+ .private_section = "Service",
.exec_context_offset = offsetof(Service, exec_context),
- .exec_section = "Service",
+ .cgroup_context_offset = offsetof(Service, cgroup_context),
.init = service_init,
.done = service_done,
@@ -3855,7 +3869,7 @@ const UnitVTable service_vtable = {
.reset_failed = service_reset_failed,
- .cgroup_notify_empty = service_cgroup_notify_event,
+ .notify_cgroup_empty = service_notify_cgroup_empty_event,
.notify_message = service_notify_message,
.bus_name_owner_change = service_bus_name_owner_change,
@@ -3864,6 +3878,10 @@ const UnitVTable service_vtable = {
.bus_interface = "org.freedesktop.systemd1.Service",
.bus_message_handler = bus_service_message_handler,
.bus_invalidating_properties = bus_service_invalidating_properties,
+ .bus_set_property = bus_service_set_property,
+ .bus_commit_properties = bus_service_commit_properties,
+
+ .can_transient = true,
#ifdef HAVE_SYSV_COMPAT
.enumerate = service_enumerate,
diff --git a/src/core/service.h b/src/core/service.h
index 703d3faa45..ce5b5e04ab 100644
--- a/src/core/service.h
+++ b/src/core/service.h
@@ -54,6 +54,7 @@ typedef enum ServiceRestart {
SERVICE_RESTART_NO,
SERVICE_RESTART_ON_SUCCESS,
SERVICE_RESTART_ON_FAILURE,
+ SERVICE_RESTART_ON_WATCHDOG,
SERVICE_RESTART_ON_ABORT,
SERVICE_RESTART_ALWAYS,
_SERVICE_RESTART_MAX,
@@ -135,6 +136,7 @@ struct Service {
ExecContext exec_context;
KillContext kill_context;
+ CGroupContext cgroup_context;
ServiceState state, deserialized_state;
diff --git a/src/core/shutdown.c b/src/core/shutdown.c
index 2db761de36..4709746de4 100644
--- a/src/core/shutdown.c
+++ b/src/core/shutdown.c
@@ -39,6 +39,7 @@
#include "missing.h"
#include "log.h"
+#include "fileio.h"
#include "umount.h"
#include "util.h"
#include "mkdir.h"
@@ -130,12 +131,27 @@ static int pivot_to_new_root(void) {
}
int main(int argc, char *argv[]) {
+ _cleanup_free_ char *line = NULL;
int cmd, r;
unsigned retries;
bool need_umount = true, need_swapoff = true, need_loop_detach = true, need_dm_detach = true;
bool in_container, use_watchdog = false;
char *arguments[3];
+ /* suppress shutdown status output if 'quiet' is used */
+ r = read_one_line_file("/proc/cmdline", &line);
+ if (r >= 0) {
+ char *w, *state;
+ size_t l;
+
+ FOREACH_WORD_QUOTED(w, l, line, state) {
+ if (l == 5 && memcmp(w, "quiet", 5) == 0) {
+ log_set_max_level(LOG_WARNING);
+ break;
+ }
+ }
+ }
+
log_parse_environment();
log_set_target(LOG_TARGET_CONSOLE); /* syslog will die if not gone yet */
log_open();
@@ -302,7 +318,7 @@ int main(int argc, char *argv[]) {
log_warning("kexec failed. Falling back to normal reboot.");
} else {
/* Child */
- const char *args[3] = { "/sbin/kexec", "-e", NULL };
+ const char *args[3] = { KEXEC, "-e", NULL };
execv(args[0], (char * const *) args);
return EXIT_FAILURE;
}
diff --git a/src/core/slice.c b/src/core/slice.c
new file mode 100644
index 0000000000..40d416e35e
--- /dev/null
+++ b/src/core/slice.c
@@ -0,0 +1,322 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include "unit.h"
+#include "slice.h"
+#include "load-fragment.h"
+#include "log.h"
+#include "dbus-slice.h"
+#include "special.h"
+#include "unit-name.h"
+
+static const UnitActiveState state_translation_table[_SLICE_STATE_MAX] = {
+ [SLICE_DEAD] = UNIT_INACTIVE,
+ [SLICE_ACTIVE] = UNIT_ACTIVE
+};
+
+static void slice_init(Unit *u) {
+ Slice *s = SLICE(u);
+
+ assert(u);
+ assert(u->load_state == UNIT_STUB);
+
+ cgroup_context_init(&s->cgroup_context);
+}
+
+static void slice_done(Unit *u) {
+ Slice *s = SLICE(u);
+
+ assert(u);
+
+ cgroup_context_done(&s->cgroup_context);
+}
+
+static void slice_set_state(Slice *t, SliceState state) {
+ SliceState old_state;
+ assert(t);
+
+ old_state = t->state;
+ t->state = state;
+
+ if (state != old_state)
+ log_debug("%s changed %s -> %s",
+ UNIT(t)->id,
+ slice_state_to_string(old_state),
+ slice_state_to_string(state));
+
+ unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], true);
+}
+
+static int slice_add_parent_slice(Slice *s) {
+ char *a, *dash;
+ Unit *parent;
+ int r;
+
+ assert(s);
+
+ if (UNIT_ISSET(UNIT(s)->slice))
+ return 0;
+
+ if (unit_has_name(UNIT(s), SPECIAL_ROOT_SLICE))
+ return 0;
+
+ a = strdupa(UNIT(s)->id);
+ dash = strrchr(a, '-');
+ if (dash)
+ strcpy(dash, ".slice");
+ else
+ a = (char*) SPECIAL_ROOT_SLICE;
+
+ r = manager_load_unit(UNIT(s)->manager, a, NULL, NULL, &parent);
+ if (r < 0)
+ return r;
+
+ unit_ref_set(&UNIT(s)->slice, parent);
+ return 0;
+}
+
+static int slice_add_default_dependencies(Slice *s) {
+ int r;
+
+ assert(s);
+
+ /* Make sure slices are unloaded on shutdown */
+ r = unit_add_two_dependencies_by_name(
+ UNIT(s),
+ UNIT_BEFORE, UNIT_CONFLICTS,
+ SPECIAL_SHUTDOWN_TARGET, NULL, true);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+static int slice_verify(Slice *s) {
+ assert(s);
+
+ if (UNIT(s)->load_state != UNIT_LOADED)
+ return 0;
+
+ if (UNIT_DEREF(UNIT(s)->slice)) {
+ char *a, *dash;
+
+ a = strdupa(UNIT(s)->id);
+ dash = strrchr(a, '-');
+ if (dash)
+ strcpy(dash, ".slice");
+ else
+ a = (char*) SPECIAL_ROOT_SLICE;
+
+ if (!unit_has_name(UNIT_DEREF(UNIT(s)->slice), a)) {
+ log_error_unit(UNIT(s)->id,
+ "%s located outside its parent slice. Refusing.", UNIT(s)->id);
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+static int slice_load(Unit *u) {
+ Slice *s = SLICE(u);
+ int r;
+
+ assert(s);
+
+ r = unit_load_fragment_and_dropin_optional(u);
+ if (r < 0)
+ return r;
+
+ /* This is a new unit? Then let's add in some extras */
+ if (u->load_state == UNIT_LOADED) {
+
+ r = slice_add_parent_slice(s);
+ if (r < 0)
+ return r;
+
+ if (u->default_dependencies) {
+ r = slice_add_default_dependencies(s);
+ if (r < 0)
+ return r;
+ }
+ }
+
+ return slice_verify(s);
+}
+
+static int slice_coldplug(Unit *u) {
+ Slice *t = SLICE(u);
+
+ assert(t);
+ assert(t->state == SLICE_DEAD);
+
+ if (t->deserialized_state != t->state)
+ slice_set_state(t, t->deserialized_state);
+
+ return 0;
+}
+
+static void slice_dump(Unit *u, FILE *f, const char *prefix) {
+ Slice *t = SLICE(u);
+
+ assert(t);
+ assert(f);
+
+ fprintf(f,
+ "%sSlice State: %s\n",
+ prefix, slice_state_to_string(t->state));
+
+ cgroup_context_dump(&t->cgroup_context, f, prefix);
+}
+
+static int slice_start(Unit *u) {
+ Slice *t = SLICE(u);
+
+ assert(t);
+ assert(t->state == SLICE_DEAD);
+
+ unit_realize_cgroup(u);
+
+ slice_set_state(t, SLICE_ACTIVE);
+ return 0;
+}
+
+static int slice_stop(Unit *u) {
+ Slice *t = SLICE(u);
+
+ assert(t);
+ assert(t->state == SLICE_ACTIVE);
+
+ /* We do not need to destroy the cgroup explicitly,
+ * unit_notify() will do that for us anyway. */
+
+ slice_set_state(t, SLICE_DEAD);
+ return 0;
+}
+
+static int slice_kill(Unit *u, KillWho who, int signo, DBusError *error) {
+ return unit_kill_common(u, who, signo, -1, -1, error);
+}
+
+static int slice_serialize(Unit *u, FILE *f, FDSet *fds) {
+ Slice *s = SLICE(u);
+
+ assert(s);
+ assert(f);
+ assert(fds);
+
+ unit_serialize_item(u, f, "state", slice_state_to_string(s->state));
+ return 0;
+}
+
+static int slice_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
+ Slice *s = SLICE(u);
+
+ assert(u);
+ assert(key);
+ assert(value);
+ assert(fds);
+
+ if (streq(key, "state")) {
+ SliceState state;
+
+ state = slice_state_from_string(value);
+ if (state < 0)
+ log_debug("Failed to parse state value %s", value);
+ else
+ s->deserialized_state = state;
+
+ } else
+ log_debug("Unknown serialization key '%s'", key);
+
+ return 0;
+}
+
+_pure_ static UnitActiveState slice_active_state(Unit *u) {
+ assert(u);
+
+ return state_translation_table[SLICE(u)->state];
+}
+
+_pure_ static const char *slice_sub_state_to_string(Unit *u) {
+ assert(u);
+
+ return slice_state_to_string(SLICE(u)->state);
+}
+
+static const char* const slice_state_table[_SLICE_STATE_MAX] = {
+ [SLICE_DEAD] = "dead",
+ [SLICE_ACTIVE] = "active"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(slice_state, SliceState);
+
+const UnitVTable slice_vtable = {
+ .object_size = sizeof(Slice),
+ .sections =
+ "Unit\0"
+ "Slice\0"
+ "Install\0",
+
+ .private_section = "Slice",
+ .cgroup_context_offset = offsetof(Slice, cgroup_context),
+
+ .no_alias = true,
+ .no_instances = true,
+
+ .init = slice_init,
+ .load = slice_load,
+ .done = slice_done,
+
+ .coldplug = slice_coldplug,
+
+ .dump = slice_dump,
+
+ .start = slice_start,
+ .stop = slice_stop,
+
+ .kill = slice_kill,
+
+ .serialize = slice_serialize,
+ .deserialize_item = slice_deserialize_item,
+
+ .active_state = slice_active_state,
+ .sub_state_to_string = slice_sub_state_to_string,
+
+ .bus_interface = "org.freedesktop.systemd1.Slice",
+ .bus_message_handler = bus_slice_message_handler,
+ .bus_set_property = bus_slice_set_property,
+ .bus_commit_properties = bus_slice_commit_properties,
+
+ .status_message_formats = {
+ .finished_start_job = {
+ [JOB_DONE] = "Created slice %s.",
+ [JOB_DEPENDENCY] = "Dependency failed for %s.",
+ },
+ .finished_stop_job = {
+ [JOB_DONE] = "Removed slice %s.",
+ },
+ },
+};
diff --git a/src/core/slice.h b/src/core/slice.h
new file mode 100644
index 0000000000..ad0c63902b
--- /dev/null
+++ b/src/core/slice.h
@@ -0,0 +1,46 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+typedef struct Slice Slice;
+
+#include "unit.h"
+
+typedef enum SliceState {
+ SLICE_DEAD,
+ SLICE_ACTIVE,
+ _SLICE_STATE_MAX,
+ _SLICE_STATE_INVALID = -1
+} SliceState;
+
+struct Slice {
+ Unit meta;
+
+ SliceState state, deserialized_state;
+
+ CGroupContext cgroup_context;
+};
+
+extern const UnitVTable slice_vtable;
+
+const char* slice_state_to_string(SliceState i) _const_;
+SliceState slice_state_from_string(const char *s) _pure_;
diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c
index 73eeb04190..1434dea7c1 100644
--- a/src/core/smack-setup.c
+++ b/src/core/smack-setup.c
@@ -40,7 +40,9 @@
#include "label.h"
#define SMACK_CONFIG "/etc/smack/accesses.d/"
-#define CIPSO_CONFIG "/etc/smack/cipso/"
+#define CIPSO_CONFIG "/etc/smack/cipso.d/"
+
+#ifdef HAVE_SMACK
static int write_rules(const char* dstpath, const char* srcdir) {
_cleanup_fclose_ FILE *dst = NULL;
@@ -111,8 +113,12 @@ static int write_rules(const char* dstpath, const char* srcdir) {
return r;
}
+#endif
int smack_setup(void) {
+
+#ifdef HAVE_SMACK
+
int r;
r = write_rules("/sys/fs/smackfs/load2", SMACK_CONFIG);
@@ -148,4 +154,8 @@ int smack_setup(void) {
strerror(abs(r)));
return 0;
}
+
+#endif
+
+ return 0;
}
diff --git a/src/core/snapshot.c b/src/core/snapshot.c
index a63eccd8de..d11239dff3 100644
--- a/src/core/snapshot.c
+++ b/src/core/snapshot.c
@@ -40,6 +40,7 @@ static void snapshot_init(Unit *u) {
UNIT(s)->ignore_on_isolate = true;
UNIT(s)->ignore_on_snapshot = true;
+ UNIT(s)->allow_isolate = true;
}
static void snapshot_set_state(Snapshot *s, SnapshotState state) {
@@ -66,7 +67,7 @@ static int snapshot_load(Unit *u) {
/* Make sure that only snapshots created via snapshot_create()
* can be loaded */
- if (!s->by_snapshot_create && UNIT(s)->manager->n_reloading <= 0)
+ if (!u->transient && UNIT(s)->manager->n_reloading <= 0)
return -ENOENT;
u->load_state = UNIT_LOADED;
@@ -151,21 +152,24 @@ static int snapshot_deserialize_item(Unit *u, const char *key, const char *value
if (streq(key, "state")) {
SnapshotState state;
- if ((state = snapshot_state_from_string(value)) < 0)
+ state = snapshot_state_from_string(value);
+ if (state < 0)
log_debug("Failed to parse state value %s", value);
else
s->deserialized_state = state;
} else if (streq(key, "cleanup")) {
- if ((r = parse_boolean(value)) < 0)
+ r = parse_boolean(value);
+ if (r < 0)
log_debug("Failed to parse cleanup value %s", value);
else
s->cleanup = r;
} else if (streq(key, "wants")) {
- if ((r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, value, NULL, true)) < 0)
+ r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, value, NULL, true);
+ if (r < 0)
return r;
} else
log_debug("Unknown serialization key '%s'", key);
@@ -186,9 +190,9 @@ _pure_ static const char *snapshot_sub_state_to_string(Unit *u) {
}
int snapshot_create(Manager *m, const char *name, bool cleanup, DBusError *e, Snapshot **_s) {
- Iterator i;
+ _cleanup_free_ char *n = NULL;
Unit *other, *u = NULL;
- char *n = NULL;
+ Iterator i;
int r;
const char *k;
@@ -217,28 +221,28 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, DBusError *e, Sn
if (asprintf(&n, "snapshot-%u.snapshot", ++ m->n_snapshots) < 0)
return -ENOMEM;
- if (!manager_get_unit(m, n))
+ if (!manager_get_unit(m, n)) {
+ name = n;
break;
+ }
free(n);
+ n = NULL;
}
-
- name = n;
}
r = manager_load_unit_prepare(m, name, NULL, e, &u);
- free(n);
-
if (r < 0)
goto fail;
- SNAPSHOT(u)->by_snapshot_create = true;
+ u->transient = true;
manager_dispatch_load_queue(m);
assert(u->load_state == UNIT_LOADED);
HASHMAP_FOREACH_KEY(other, k, m->units, i) {
- if (other->ignore_on_snapshot)
+ if (other->ignore_on_snapshot ||
+ other->transient)
continue;
if (k != other->id)
@@ -251,12 +255,12 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, DBusError *e, Sn
if (!UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other)))
continue;
- if ((r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_WANTS, other, true)) < 0)
+ r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_WANTS, other, true);
+ if (r < 0)
goto fail;
}
SNAPSHOT(u)->cleanup = cleanup;
- u->allow_isolate = true;
*_s = SNAPSHOT(u);
return 0;
diff --git a/src/core/snapshot.h b/src/core/snapshot.h
index 56f87cff4d..2675b1b242 100644
--- a/src/core/snapshot.h
+++ b/src/core/snapshot.h
@@ -38,7 +38,6 @@ struct Snapshot {
SnapshotState state, deserialized_state;
bool cleanup;
- bool by_snapshot_create:1;
};
extern const UnitVTable snapshot_vtable;
diff --git a/src/core/socket.c b/src/core/socket.c
index 1b08f0a5fd..6c0ac1a898 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -88,6 +88,7 @@ static void socket_init(Unit *u) {
s->exec_context.std_output = u->manager->default_std_output;
s->exec_context.std_error = u->manager->default_std_error;
kill_context_init(&s->kill_context);
+ cgroup_context_init(&s->cgroup_context);
s->control_command_id = _SOCKET_EXEC_COMMAND_INVALID;
}
@@ -128,6 +129,8 @@ static void socket_done(Unit *u) {
socket_free_ports(s);
exec_context_done(&s->exec_context, manager_is_reloading_or_reexecuting(u->manager));
+ cgroup_context_init(&s->cgroup_context);
+
exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
s->control_command = NULL;
@@ -255,53 +258,24 @@ static int socket_verify(Socket *s) {
return 0;
}
-static bool socket_needs_mount(Socket *s, const char *prefix) {
+static int socket_add_mount_links(Socket *s) {
SocketPort *p;
-
- assert(s);
-
- LIST_FOREACH(port, p, s->ports) {
-
- if (p->type == SOCKET_SOCKET) {
- if (socket_address_needs_mount(&p->address, prefix))
- return true;
- } else if (p->type == SOCKET_FIFO || p->type == SOCKET_SPECIAL) {
- if (path_startswith(p->path, prefix))
- return true;
- }
- }
-
- return false;
-}
-
-int socket_add_one_mount_link(Socket *s, Mount *m) {
int r;
assert(s);
- assert(m);
- if (UNIT(s)->load_state != UNIT_LOADED ||
- UNIT(m)->load_state != UNIT_LOADED)
- return 0;
-
- if (!socket_needs_mount(s, m->where))
- return 0;
-
- r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
- if (r < 0)
- return r;
-
- return 0;
-}
+ LIST_FOREACH(port, p, s->ports) {
+ const char *path = NULL;
-static int socket_add_mount_links(Socket *s) {
- Unit *other;
- int r;
+ if (p->type == SOCKET_SOCKET)
+ path = socket_address_get_path(&p->address);
+ else if (p->type == SOCKET_FIFO || p->type == SOCKET_SPECIAL)
+ path = p->path;
- assert(s);
+ if (!path)
+ continue;
- LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT]) {
- r = socket_add_one_mount_link(s, MOUNT(other));
+ r = unit_require_mounts_for(UNIT(s), path);
if (r < 0)
return r;
}
@@ -395,7 +369,8 @@ static int socket_load(Unit *u) {
if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0)
return r;
- if ((r = unit_add_default_cgroups(u)) < 0)
+ r = unit_add_default_slice(u);
+ if (r < 0)
return r;
if (UNIT(s)->default_dependencies)
@@ -532,6 +507,11 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
"%sMessageQueueMessageSize: %li\n",
prefix, s->mq_msgsize);
+ if (s->reuseport)
+ fprintf(f,
+ "%sReusePort: %s\n",
+ prefix, yes_no(s->reuseport));
+
if (s->smack)
fprintf(f,
"%sSmackLabel: %s\n",
@@ -788,7 +768,13 @@ static void socket_apply_socket_options(Socket *s, int fd) {
if (setsockopt(fd, SOL_TCP, TCP_CONGESTION, s->tcp_congestion, strlen(s->tcp_congestion)+1) < 0)
log_warning_unit(UNIT(s)->id, "TCP_CONGESTION failed: %m");
-#ifdef HAVE_XATTR
+ if (s->reuseport) {
+ int b = s->reuseport;
+ if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)))
+ log_warning_unit(UNIT(s)->id, "SO_REUSEPORT failed: %m");
+ }
+
+#ifdef HAVE_SMACK
if (s->smack_ip_in)
if (fsetxattr(fd, "security.SMACK64IPIN", s->smack_ip_in, strlen(s->smack_ip_in), 0) < 0)
log_error_unit(UNIT(s)->id,
@@ -810,7 +796,7 @@ static void socket_apply_fifo_options(Socket *s, int fd) {
log_warning_unit(UNIT(s)->id,
"F_SETPIPE_SZ: %m");
-#ifdef HAVE_XATTR
+#ifdef HAVE_SMACK
if (s->smack)
if (fsetxattr(fd, "security.SMACK64", s->smack, strlen(s->smack), 0) < 0)
log_error_unit(UNIT(s)->id,
@@ -1000,7 +986,7 @@ static int socket_open_fds(Socket *s) {
if ((r = socket_instantiate_service(s)) < 0)
return r;
- if (UNIT_DEREF(s->service) &&
+ if (UNIT_ISSET(s->service) &&
SERVICE(UNIT_DEREF(s->service))->exec_command[SERVICE_EXEC_START]) {
r = label_get_create_label_from_exe(SERVICE(UNIT_DEREF(s->service))->exec_command[SERVICE_EXEC_START]->path, &label);
@@ -1205,15 +1191,15 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
assert(c);
assert(_pid);
+ unit_realize_cgroup(UNIT(s));
+
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->timeout_usec, &s->timer_watch);
if (r < 0)
goto fail;
- argv = unit_full_printf_strv(UNIT(s), c->argv);
- if (!argv) {
- r = -ENOMEM;
+ r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
+ if (r < 0)
goto fail;
- }
r = exec_spawn(c,
argv,
@@ -1224,9 +1210,8 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
true,
true,
UNIT(s)->manager->confirm_spawn,
- UNIT(s)->cgroup_bondings,
- UNIT(s)->cgroup_attributes,
- NULL,
+ UNIT(s)->manager->cgroup_supported,
+ UNIT(s)->cgroup_path,
UNIT(s)->id,
NULL,
&pid);
@@ -1628,7 +1613,7 @@ static int socket_start(Unit *u) {
return 0;
/* Cannot run this without the service being around */
- if (UNIT_DEREF(s->service)) {
+ if (UNIT_ISSET(s->service)) {
Service *service;
service = SERVICE(UNIT_DEREF(s->service));
@@ -2261,7 +2246,7 @@ int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds) {
return 0;
}
-void socket_notify_service_dead(Socket *s, bool failed_permanent) {
+static void socket_notify_service_dead(Socket *s, bool failed_permanent) {
assert(s);
/* The service is dead. Dang!
@@ -2306,6 +2291,41 @@ static void socket_reset_failed(Unit *u) {
s->result = SOCKET_SUCCESS;
}
+static void socket_trigger_notify(Unit *u, Unit *other) {
+ Socket *s = SOCKET(u);
+ Service *se = SERVICE(other);
+
+ assert(u);
+ assert(other);
+
+ /* Don't propagate state changes from the service if we are
+ already down or accepting connections */
+ if ((s->state != SOCKET_RUNNING &&
+ s->state != SOCKET_LISTENING) ||
+ s->accept)
+ return;
+
+ if (other->load_state != UNIT_LOADED ||
+ other->type != UNIT_SERVICE)
+ return;
+
+ if (se->state == SERVICE_FAILED)
+ socket_notify_service_dead(s, se->result == SERVICE_FAILURE_START_LIMIT);
+
+ if (se->state == SERVICE_DEAD ||
+ se->state == SERVICE_STOP ||
+ se->state == SERVICE_STOP_SIGTERM ||
+ se->state == SERVICE_STOP_SIGKILL ||
+ se->state == SERVICE_STOP_POST ||
+ se->state == SERVICE_FINAL_SIGTERM ||
+ se->state == SERVICE_FINAL_SIGKILL ||
+ se->state == SERVICE_AUTO_RESTART)
+ socket_notify_service_dead(s, false);
+
+ if (se->state == SERVICE_RUNNING)
+ socket_set_state(s, SOCKET_RUNNING);
+}
+
static int socket_kill(Unit *u, KillWho who, int signo, DBusError *error) {
return unit_kill_common(u, who, signo, -1, SOCKET(u)->control_pid, error);
}
@@ -2356,8 +2376,9 @@ const UnitVTable socket_vtable = {
"Socket\0"
"Install\0",
+ .private_section = "Socket",
.exec_context_offset = offsetof(Socket, exec_context),
- .exec_section = "Socket",
+ .cgroup_context_offset = offsetof(Socket, cgroup_context),
.init = socket_init,
.done = socket_done,
@@ -2385,11 +2406,15 @@ const UnitVTable socket_vtable = {
.sigchld_event = socket_sigchld_event,
.timer_event = socket_timer_event,
+ .trigger_notify = socket_trigger_notify,
+
.reset_failed = socket_reset_failed,
.bus_interface = "org.freedesktop.systemd1.Socket",
.bus_message_handler = bus_socket_message_handler,
.bus_invalidating_properties = bus_socket_invalidating_properties,
+ .bus_set_property = bus_socket_set_property,
+ .bus_commit_properties = bus_socket_commit_properties,
.status_message_formats = {
/*.starting_stopping = {
diff --git a/src/core/socket.h b/src/core/socket.h
index 9d48cde0a6..3d7eadc9fe 100644
--- a/src/core/socket.h
+++ b/src/core/socket.h
@@ -102,6 +102,7 @@ struct Socket {
ExecCommand* exec_command[_SOCKET_EXEC_COMMAND_MAX];
ExecContext exec_context;
KillContext kill_context;
+ CGroupContext cgroup_context;
/* For Accept=no sockets refers to the one service we'll
activate. For Accept=yes sockets is either NULL, or filled
@@ -143,6 +144,7 @@ struct Socket {
size_t pipe_size;
char *bind_to_device;
char *tcp_congestion;
+ bool reuseport;
long mq_maxmsg;
long mq_msgsize;
@@ -154,13 +156,6 @@ struct Socket {
/* Called from the service code when collecting fds */
int socket_collect_fds(Socket *s, int **fds, unsigned *n_fds);
-/* Called from the service when it shut down */
-void socket_notify_service_dead(Socket *s, bool failed_permanent);
-
-/* Called from the mount code figure out if a mount is a dependency of
- * any of the sockets of this socket */
-int socket_add_one_mount_link(Socket *s, Mount *m);
-
/* Called from the service code when a per-connection service ended */
void socket_connection_unref(Socket *s);
diff --git a/src/core/special.h b/src/core/special.h
index a9b50bce05..6d252e7baa 100644
--- a/src/core/special.h
+++ b/src/core/special.h
@@ -113,3 +113,9 @@
#define SPECIAL_RUNLEVEL3_TARGET "runlevel3.target"
#define SPECIAL_RUNLEVEL4_TARGET "runlevel4.target"
#define SPECIAL_RUNLEVEL5_TARGET "runlevel5.target"
+
+/* Where we add all our system units, users and machines by default */
+#define SPECIAL_SYSTEM_SLICE "system.slice"
+#define SPECIAL_USER_SLICE "user.slice"
+#define SPECIAL_MACHINE_SLICE "machine.slice"
+#define SPECIAL_ROOT_SLICE "-.slice"
diff --git a/src/core/swap.c b/src/core/swap.c
index d503fe20df..a68ab7cdf8 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -92,6 +92,7 @@ static void swap_init(Unit *u) {
s->exec_context.std_output = u->manager->default_std_output;
s->exec_context.std_error = u->manager->default_std_error;
kill_context_init(&s->kill_context);
+ cgroup_context_init(&s->cgroup_context);
s->parameters_proc_swaps.priority = s->parameters_fragment.priority = -1;
@@ -129,47 +130,13 @@ static void swap_done(Unit *u) {
exec_command_done_array(s->exec_command, _SWAP_EXEC_COMMAND_MAX);
s->control_command = NULL;
+ cgroup_context_done(&s->cgroup_context);
+
swap_unwatch_control_pid(s);
unit_unwatch_timer(u, &s->timer_watch);
}
-int swap_add_one_mount_link(Swap *s, Mount *m) {
- int r;
-
- assert(s);
- assert(m);
-
- if (UNIT(s)->load_state != UNIT_LOADED ||
- UNIT(m)->load_state != UNIT_LOADED)
- return 0;
-
- if (is_device_path(s->what))
- return 0;
-
- if (!path_startswith(s->what, m->where))
- return 0;
-
- r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
- if (r < 0)
- return r;
-
- return 0;
-}
-
-static int swap_add_mount_links(Swap *s) {
- Unit *other;
- int r;
-
- assert(s);
-
- LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_MOUNT])
- if ((r = swap_add_one_mount_link(s, MOUNT(other))) < 0)
- return r;
-
- return 0;
-}
-
static int swap_add_device_links(Swap *s) {
SwapParameters *p;
@@ -184,8 +151,7 @@ static int swap_add_device_links(Swap *s) {
return 0;
if (is_device_path(s->what))
- return unit_add_node_link(UNIT(s), s->what,
- !p->noauto && p->nofail &&
+ return unit_add_node_link(UNIT(s), s->what, !p->noauto &&
UNIT(s)->manager->running_as == SYSTEMD_SYSTEM);
else
/* File based swap devices need to be ordered after
@@ -195,6 +161,7 @@ static int swap_add_device_links(Swap *s) {
}
static int swap_add_default_dependencies(Swap *s) {
+ bool nofail = false, noauto = false;
int r;
assert(s);
@@ -209,6 +176,24 @@ static int swap_add_default_dependencies(Swap *s) {
if (r < 0)
return r;
+ if (s->from_fragment) {
+ SwapParameters *p = &s->parameters_fragment;
+
+ nofail = p->nofail;
+ noauto = p->noauto;
+ }
+
+ if (!noauto) {
+ if (nofail)
+ r = unit_add_dependency_by_name_inverse(UNIT(s),
+ UNIT_WANTS, SPECIAL_SWAP_TARGET, NULL, true);
+ else
+ r = unit_add_two_dependencies_by_name_inverse(UNIT(s),
+ UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
+ if (r < 0)
+ return r;
+ }
+
return 0;
}
@@ -279,15 +264,15 @@ static int swap_load(Unit *u) {
if ((r = unit_set_description(u, s->what)) < 0)
return r;
- r = swap_add_device_links(s);
+ r = unit_require_mounts_for(UNIT(s), s->what);
if (r < 0)
return r;
- r = swap_add_mount_links(s);
+ r = swap_add_device_links(s);
if (r < 0)
return r;
- r = unit_add_default_cgroups(u);
+ r = unit_add_default_slice(u);
if (r < 0)
return r;
@@ -589,6 +574,8 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) {
assert(c);
assert(_pid);
+ unit_realize_cgroup(UNIT(s));
+
r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->timeout_usec, &s->timer_watch);
if (r < 0)
goto fail;
@@ -602,9 +589,8 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) {
true,
true,
UNIT(s)->manager->confirm_spawn,
- UNIT(s)->cgroup_bondings,
- UNIT(s)->cgroup_attributes,
- NULL,
+ UNIT(s)->manager->cgroup_supported,
+ UNIT(s)->cgroup_path,
UNIT(s)->id,
NULL,
&pid);
@@ -1052,7 +1038,7 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) {
(void) fscanf(m->proc_swaps, "%*s %*s %*s %*s %*s\n");
for (i = 1;; i++) {
- char *dev = NULL, *d;
+ _cleanup_free_ char *dev = NULL, *d = NULL;
int prio = 0, k;
k = fscanf(m->proc_swaps,
@@ -1067,19 +1053,14 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) {
break;
log_warning("Failed to parse /proc/swaps:%u", i);
- free(dev);
continue;
}
d = cunescape(dev);
- free(dev);
-
if (!d)
return -ENOMEM;
k = swap_process_new_swap(m, d, prio, set_flags);
- free(d);
-
if (k < 0)
r = k;
}
@@ -1323,8 +1304,9 @@ const UnitVTable swap_vtable = {
"Swap\0"
"Install\0",
+ .private_section = "Swap",
.exec_context_offset = offsetof(Swap, exec_context),
- .exec_section = "Swap",
+ .cgroup_context_offset = offsetof(Swap, cgroup_context),
.no_alias = true,
.no_instances = true,
@@ -1358,6 +1340,8 @@ const UnitVTable swap_vtable = {
.bus_interface = "org.freedesktop.systemd1.Swap",
.bus_message_handler = bus_swap_message_handler,
.bus_invalidating_properties = bus_swap_invalidating_properties,
+ .bus_set_property = bus_swap_set_property,
+ .bus_commit_properties = bus_swap_commit_properties,
.following = swap_following,
.following_set = swap_following_set,
diff --git a/src/core/swap.h b/src/core/swap.h
index 121889d1d5..dd89535895 100644
--- a/src/core/swap.h
+++ b/src/core/swap.h
@@ -88,6 +88,7 @@ struct Swap {
ExecCommand exec_command[_SWAP_EXEC_COMMAND_MAX];
ExecContext exec_context;
KillContext kill_context;
+ CGroupContext cgroup_context;
SwapState state, deserialized_state;
@@ -106,8 +107,6 @@ struct Swap {
extern const UnitVTable swap_vtable;
-int swap_add_one_mount_link(Swap *s, Mount *m);
-
int swap_dispatch_reload(Manager *m);
int swap_fd_event(Manager *m, int events);
diff --git a/src/core/system.conf b/src/core/system.conf
index 508e0f5fa4..7b03c8782b 100644
--- a/src/core/system.conf
+++ b/src/core/system.conf
@@ -17,14 +17,14 @@
#ShowStatus=yes
#CrashChVT=1
#CPUAffinity=1 2
-#DefaultControllers=cpu
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
-#JoinControllers=cpu,cpuacct,cpuset net_cls,net_prio
+#JoinControllers=cpu,cpuacct net_cls,net_prio
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
#CapabilityBoundingSet=
#TimerSlackNSec=
+#DefaultEnvironment=
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
diff --git a/src/core/systemd.pc.in b/src/core/systemd.pc.in
index 2f49d5df52..de0f6494e9 100644
--- a/src/core/systemd.pc.in
+++ b/src/core/systemd.pc.in
@@ -16,6 +16,9 @@ systemdsystemconfdir=@pkgsysconfdir@/system
systemduserconfdir=@pkgsysconfdir@/user
systemdsystemunitpath=${systemdsystemconfdir}:/etc/systemd/system:/run/systemd/system:/usr/local/lib/systemd/system:${systemdsystemunitdir}:/usr/lib/systemd/system:/lib/systemd/system
systemduserunitpath=${systemduserconfdir}:/etc/systemd/user:/run/systemd/user:/usr/local/lib/systemd/user:/usr/local/share/systemd/user:${systemduserunitdir}:/usr/lib/systemd/user:/usr/share/systemd/user
+systemdsystemgeneratordir=@systemgeneratordir@
+systemdusergeneratordir=@usergeneratordir@
+catalogdir=@catalogdir@
Name: systemd
Description: systemd System and Service Manager
diff --git a/src/core/transaction.c b/src/core/transaction.c
index fa97b69755..203070fa26 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -344,7 +344,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
assert(!j->transaction_prev);
/* Does a recursive sweep through the ordering graph, looking
- * for a cycle. If we find cycle we try to break it. */
+ * for a cycle. If we find a cycle we try to break it. */
/* Have we seen this before? */
if (j->generation == generation) {
@@ -371,7 +371,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
/* logging for j not k here here to provide consistent narrative */
log_info_unit(j->unit->id,
- "Walked on cycle path to %s/%s",
+ "Found dependency on %s/%s",
k->unit->id, job_type_to_string(k->type));
if (!delete &&
@@ -733,8 +733,11 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e
* feature for cosmetics, not actually useful for
* anything beyond that. */
- if (m->idle_pipe[0] < 0 && m->idle_pipe[1] < 0)
+ if (m->idle_pipe[0] < 0 && m->idle_pipe[1] < 0 &&
+ m->idle_pipe[2] < 0 && m->idle_pipe[3] < 0) {
pipe2(m->idle_pipe, O_NONBLOCK|O_CLOEXEC);
+ pipe2(m->idle_pipe + 2, O_NONBLOCK|O_CLOEXEC);
+ }
}
return 0;
@@ -851,6 +854,7 @@ int transaction_add_job_and_dependencies(
if (unit->load_state != UNIT_LOADED &&
unit->load_state != UNIT_ERROR &&
+ unit->load_state != UNIT_NOT_FOUND &&
unit->load_state != UNIT_MASKED) {
dbus_set_error(e, BUS_ERROR_LOAD_FAILED, "Unit %s is not loaded properly.", unit->id);
return -EINVAL;
@@ -866,6 +870,14 @@ int transaction_add_job_and_dependencies(
return -EINVAL;
}
+ if (type != JOB_STOP && unit->load_state == UNIT_NOT_FOUND) {
+ dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
+ "Unit %s failed to load: %s.",
+ unit->id,
+ strerror(-unit->load_error));
+ return -EINVAL;
+ }
+
if (type != JOB_STOP && unit->load_state == UNIT_MASKED) {
dbus_set_error(e, BUS_ERROR_MASKED, "Unit %s is masked.", unit->id);
return -EADDRNOTAVAIL;
diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c
index 85a05b872a..1a29a986e9 100644
--- a/src/core/unit-printf.c
+++ b/src/core/unit-printf.c
@@ -27,99 +27,161 @@
#include "unit-name.h"
#include "unit-printf.h"
#include "macro.h"
+#include "cgroup-util.h"
+#include "special.h"
-static char *specifier_prefix_and_instance(char specifier, void *data, void *userdata) {
+static int specifier_prefix_and_instance(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
+ char *n;
+
assert(u);
- return unit_name_to_prefix_and_instance(u->id);
+ n = unit_name_to_prefix_and_instance(u->id);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-static char *specifier_prefix(char specifier, void *data, void *userdata) {
+static int specifier_prefix(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
+ char *n;
+
assert(u);
- return unit_name_to_prefix(u->id);
+ n = unit_name_to_prefix(u->id);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-static char *specifier_prefix_unescaped(char specifier, void *data, void *userdata) {
+static int specifier_prefix_unescaped(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
- char *p, *r;
+ _cleanup_free_ char *p = NULL;
+ char *n;
assert(u);
p = unit_name_to_prefix(u->id);
if (!p)
- return NULL;
+ return -ENOMEM;
- r = unit_name_unescape(p);
- free(p);
+ n = unit_name_unescape(p);
+ if (!n)
+ return -ENOMEM;
- return r;
+ *ret = n;
+ return 0;
}
-static char *specifier_instance_unescaped(char specifier, void *data, void *userdata) {
+static int specifier_instance_unescaped(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
+ char *n;
+
assert(u);
if (u->instance)
- return unit_name_unescape(u->instance);
+ n = unit_name_unescape(u->instance);
+ else
+ n = strdup("");
+
+ if (!n)
+ return -ENOMEM;
- return strdup("");
+ *ret = n;
+ return 0;
}
-static char *specifier_filename(char specifier, void *data, void *userdata) {
+static int specifier_filename(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
+ char *n;
+
assert(u);
if (u->instance)
- return unit_name_path_unescape(u->instance);
+ n = unit_name_path_unescape(u->instance);
+ else
+ n = unit_name_to_path(u->id);
- return unit_name_to_path(u->id);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-static char *specifier_cgroup(char specifier, void *data, void *userdata) {
+static int specifier_cgroup(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
+ char *n;
+
assert(u);
- return unit_default_cgroup_path(u);
+ n = unit_default_cgroup_path(u);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-static char *specifier_cgroup_root(char specifier, void *data, void *userdata) {
+static int specifier_cgroup_root(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
- char *p;
+ const char *slice;
+ char *n;
+ int r;
+
assert(u);
- if (specifier == 'r')
- return strdup(u->manager->cgroup_hierarchy);
+ slice = unit_slice_name(u);
+ if (specifier == 'R' || !slice)
+ n = strdup(u->manager->cgroup_root);
+ else {
+ _cleanup_free_ char *p = NULL;
- if (path_get_parent(u->manager->cgroup_hierarchy, &p) < 0)
- return strdup("");
+ r = cg_slice_to_path(slice, &p);
+ if (r < 0)
+ return r;
- if (streq(p, "/")) {
- free(p);
- return strdup("");
+ n = strjoin(u->manager->cgroup_root, "/", p, NULL);
+ if (!n)
+ return -ENOMEM;
}
- return p;
+ *ret = n;
+ return 0;
}
-static char *specifier_runtime(char specifier, void *data, void *userdata) {
+static int specifier_runtime(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
+ char *n = NULL;
+
assert(u);
if (u->manager->running_as == SYSTEMD_USER) {
const char *e;
e = getenv("XDG_RUNTIME_DIR");
- if (e)
- return strdup(e);
+ if (e) {
+ n = strdup(e);
+ if (!n)
+ return -ENOMEM;
+ }
+ }
+
+ if (!n) {
+ n = strdup("/run");
+ if (!n)
+ return -ENOMEM;
}
- return strdup("/run");
+ *ret = n;
+ return 0;
}
-static char *specifier_user_name(char specifier, void *data, void *userdata) {
+static int specifier_user_name(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
ExecContext *c;
int r;
@@ -141,26 +203,31 @@ static char *specifier_user_name(char specifier, void *data, void *userdata) {
/* fish username from passwd */
r = get_user_creds(&username, &uid, NULL, NULL, NULL);
if (r < 0)
- return NULL;
+ return r;
switch (specifier) {
case 'U':
if (asprintf(&printed, "%d", uid) < 0)
- return NULL;
+ return -ENOMEM;
break;
case 'u':
printed = strdup(username);
break;
}
- return printed;
+ if (!printed)
+ return -ENOMEM;
+
+ *ret = printed;
+ return 0;
}
-static char *specifier_user_home(char specifier, void *data, void *userdata) {
+static int specifier_user_home(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
ExecContext *c;
int r;
const char *username, *home;
+ char *n;
assert(u);
@@ -172,25 +239,31 @@ static char *specifier_user_home(char specifier, void *data, void *userdata) {
r = get_home_dir(&h);
if (r < 0)
- return NULL;
+ return r;
- return h;
+ *ret = h;
+ return 0;
}
username = c->user;
r = get_user_creds(&username, NULL, NULL, &home, NULL);
if (r < 0)
- return NULL;
+ return r;
+
+ n = strdup(home);
+ if (!n)
+ return -ENOMEM;
- return strdup(home);
+ *ret = n;
+ return 0;
}
-static char *specifier_user_shell(char specifier, void *data, void *userdata) {
+static int specifier_user_shell(char specifier, void *data, void *userdata, char **ret) {
Unit *u = userdata;
ExecContext *c;
int r;
const char *username, *shell;
- char *ret;
+ char *n;
assert(u);
@@ -203,27 +276,18 @@ static char *specifier_user_shell(char specifier, void *data, void *userdata) {
/* return /bin/sh for root, otherwise the value from passwd */
r = get_user_creds(&username, NULL, NULL, NULL, &shell);
- if (r < 0) {
- log_warning_unit(u->id,
- "Failed to determine shell: %s",
- strerror(-r));
- return NULL;
- }
-
- if (!path_is_absolute(shell)) {
- log_warning_unit(u->id,
- "Shell %s is not absolute, ignoring.",
- shell);
- }
+ if (r < 0)
+ return r;
- ret = strdup(shell);
- if (!ret)
- log_oom();
+ n = strdup(shell);
+ if (!n)
+ return -ENOMEM;
- return ret;
+ *ret = n;
+ return 0;
}
-char *unit_name_printf(Unit *u, const char* format) {
+int unit_name_printf(Unit *u, const char* format, char **ret) {
/*
* This will use the passed string as format string and
@@ -245,19 +309,20 @@ char *unit_name_printf(Unit *u, const char* format) {
assert(u);
assert(format);
+ assert(ret);
- return specifier_printf(format, table, u);
+ return specifier_printf(format, table, u, ret);
}
-char *unit_full_printf(Unit *u, const char *format) {
+int unit_full_printf(Unit *u, const char *format, char **ret) {
/* This is similar to unit_name_printf() but also supports
* unescaping. Also, adds a couple of additional codes:
*
* %f the the instance if set, otherwise the id
* %c cgroup path of unit
- * %r root cgroup path of this systemd instance (e.g. "/user/lennart/shared/systemd-4711")
- * %R parent of root cgroup path (e.g. "/usr/lennart/shared")
+ * %r where units in this slice are place in the cgroup tree
+ * %R the root of this systemd's instance tree
* %t the runtime directory to place sockets in (e.g. "/run" or $XDG_RUNTIME_DIR)
* %U the UID of the configured user or running user
* %u the username of the configured user or running user
@@ -266,6 +331,7 @@ char *unit_full_printf(Unit *u, const char *format) {
* %m the machine ID of the running system
* %H the host name of the running system
* %b the boot ID of the running system
+ * %v `uname -r` of the running system
*/
const Specifier table[] = {
@@ -289,17 +355,21 @@ char *unit_full_printf(Unit *u, const char *format) {
{ 'm', specifier_machine_id, NULL },
{ 'H', specifier_host_name, NULL },
{ 'b', specifier_boot_id, NULL },
- { 0, NULL, NULL }
+ { 'v', specifier_kernel_release, NULL },
+ {}
};
+ assert(u);
assert(format);
+ assert(ret);
- return specifier_printf(format, table, u);
+ return specifier_printf(format, table, u, ret);
}
-char **unit_full_printf_strv(Unit *u, char **l) {
+int unit_full_printf_strv(Unit *u, char **l, char ***ret) {
size_t n;
char **r, **i, **j;
+ int q;
/* Applies unit_full_printf to every entry in l */
@@ -308,22 +378,22 @@ char **unit_full_printf_strv(Unit *u, char **l) {
n = strv_length(l);
r = new(char*, n+1);
if (!r)
- return NULL;
+ return -ENOMEM;
for (i = l, j = r; *i; i++, j++) {
- *j = unit_full_printf(u, *i);
- if (!*j)
+ q = unit_full_printf(u, *i, j);
+ if (q < 0)
goto fail;
}
*j = NULL;
- return r;
+ *ret = r;
+ return 0;
fail:
for (j--; j >= r; j--)
free(*j);
free(r);
-
- return NULL;
+ return q;
}
diff --git a/src/core/unit-printf.h b/src/core/unit-printf.h
index d2f4ccd178..51acad63e9 100644
--- a/src/core/unit-printf.h
+++ b/src/core/unit-printf.h
@@ -23,6 +23,6 @@
#include "unit.h"
-char *unit_name_printf(Unit *u, const char* text);
-char *unit_full_printf(Unit *u, const char *text);
-char **unit_full_printf_strv(Unit *u, char **l);
+int unit_name_printf(Unit *u, const char* text, char **ret);
+int unit_full_printf(Unit *u, const char *text, char **ret);
+int unit_full_printf_strv(Unit *u, char **l, char ***ret);
diff --git a/src/core/unit.c b/src/core/unit.c
index 9b36b225fa..4b9771076a 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -44,7 +44,6 @@
#include "special.h"
#include "cgroup-util.h"
#include "missing.h"
-#include "cgroup-attr.h"
#include "mkdir.h"
#include "label.h"
#include "fileio-label.h"
@@ -60,7 +59,9 @@ const UnitVTable * const unit_vtable[_UNIT_TYPE_MAX] = {
[UNIT_AUTOMOUNT] = &automount_vtable,
[UNIT_SNAPSHOT] = &snapshot_vtable,
[UNIT_SWAP] = &swap_vtable,
- [UNIT_PATH] = &path_vtable
+ [UNIT_PATH] = &path_vtable,
+ [UNIT_SLICE] = &slice_vtable,
+ [UNIT_SCOPE] = &scope_vtable
};
Unit *unit_new(Manager *m, size_t size) {
@@ -188,7 +189,8 @@ fail:
}
int unit_choose_id(Unit *u, const char *name) {
- char *s, *t = NULL, *i;
+ char *s, *i;
+ _cleanup_free_ char *t = NULL;
int r;
assert(u);
@@ -207,7 +209,6 @@ int unit_choose_id(Unit *u, const char *name) {
/* Selects one of the names of this unit as the id */
s = set_get(u->names, (char*) name);
- free(t);
if (!s)
return -ENOENT;
@@ -230,8 +231,13 @@ int unit_set_description(Unit *u, const char *description) {
assert(u);
- if (!(s = strdup(description)))
- return -ENOMEM;
+ if (isempty(description))
+ s = NULL;
+ else {
+ s = strdup(description);
+ if (!s)
+ return -ENOMEM;
+ }
free(u->description);
u->description = s;
@@ -305,9 +311,6 @@ void unit_add_to_gc_queue(Unit *u) {
u->in_gc_queue = true;
u->manager->n_in_gc_queue ++;
-
- if (u->manager->gc_queue_timestamp <= 0)
- u->manager->gc_queue_timestamp = now(CLOCK_MONOTONIC);
}
void unit_add_to_dbus_queue(Unit *u) {
@@ -348,6 +351,57 @@ static void bidi_set_free(Unit *u, Set *s) {
set_free(s);
}
+static void unit_remove_transient(Unit *u) {
+ char **i;
+
+ assert(u);
+
+ if (!u->transient)
+ return;
+
+ if (u->fragment_path)
+ unlink(u->fragment_path);
+
+ STRV_FOREACH(i, u->dropin_paths) {
+ _cleanup_free_ char *p = NULL;
+ int r;
+
+ unlink(*i);
+
+ r = path_get_parent(*i, &p);
+ if (r >= 0)
+ rmdir(p);
+ }
+}
+
+static void unit_free_requires_mounts_for(Unit *u) {
+ char **j;
+
+ STRV_FOREACH(j, u->requires_mounts_for) {
+ char s[strlen(*j) + 1];
+
+ PATH_FOREACH_PREFIX_MORE(s, *j) {
+ char *y;
+ Set *x;
+
+ x = hashmap_get2(u->manager->units_requiring_mounts_for, s, (void**) &y);
+ if (!x)
+ continue;
+
+ set_remove(x, u);
+
+ if (set_isempty(x)) {
+ hashmap_remove(u->manager->units_requiring_mounts_for, y);
+ free(y);
+ set_free(x);
+ }
+ }
+ }
+
+ strv_free(u->requires_mounts_for);
+ u->requires_mounts_for = NULL;
+}
+
void unit_free(Unit *u) {
UnitDependency d;
Iterator i;
@@ -355,12 +409,17 @@ void unit_free(Unit *u) {
assert(u);
+ if (u->manager->n_reloading <= 0)
+ unit_remove_transient(u);
+
bus_unit_send_removed_signal(u);
if (u->load_state != UNIT_STUB)
if (UNIT_VTABLE(u)->done)
UNIT_VTABLE(u)->done(u);
+ unit_free_requires_mounts_for(u);
+
SET_FOREACH(t, u->names, i)
hashmap_remove_value(u->manager->units, t, u);
@@ -379,11 +438,6 @@ void unit_free(Unit *u) {
for (d = 0; d < _UNIT_DEPENDENCY_MAX; d++)
bidi_set_free(u, u->dependencies[d]);
- if (u->requires_mounts_for) {
- LIST_REMOVE(Unit, has_requires_mounts_for, u->manager->has_requires_mounts_for, u);
- strv_free(u->requires_mounts_for);
- }
-
if (u->type != _UNIT_TYPE_INVALID)
LIST_REMOVE(Unit, units_by_type, u->manager->units_by_type[u->type], u);
@@ -401,8 +455,13 @@ void unit_free(Unit *u) {
u->manager->n_in_gc_queue--;
}
- cgroup_bonding_free_list(u->cgroup_bondings, u->manager->n_reloading <= 0);
- cgroup_attribute_free_list(u->cgroup_attributes);
+ if (u->in_cgroup_queue)
+ LIST_REMOVE(Unit, cgroup_queue, u->manager->cgroup_queue, u);
+
+ if (u->cgroup_path) {
+ hashmap_remove(u->manager->cgroup_unit, u->cgroup_path);
+ free(u->cgroup_path);
+ }
free(u->description);
strv_free(u->documentation);
@@ -415,6 +474,8 @@ void unit_free(Unit *u) {
condition_free_list(u->conditions);
+ unit_ref_unset(&u->slice);
+
while (u->refs)
unit_ref_unset(u->refs);
@@ -521,7 +582,7 @@ int unit_merge(Unit *u, Unit *other) {
return -EINVAL;
if (other->load_state != UNIT_STUB &&
- other->load_state != UNIT_ERROR)
+ other->load_state != UNIT_NOT_FOUND)
return -EEXIST;
if (other->job)
@@ -562,7 +623,7 @@ int unit_merge(Unit *u, Unit *other) {
int unit_merge_by_name(Unit *u, const char *name) {
Unit *other;
int r;
- char *s = NULL;
+ _cleanup_free_ char *s = NULL;
assert(u);
assert(name);
@@ -577,12 +638,12 @@ int unit_merge_by_name(Unit *u, const char *name) {
name = s;
}
- if (!(other = manager_get_unit(u->manager, name)))
+ other = manager_get_unit(u->manager, name);
+ if (!other)
r = unit_add_name(u, name);
else
r = unit_merge(u, other);
- free(s);
return r;
}
@@ -640,7 +701,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
char *t, **j;
UnitDependency d;
Iterator i;
- char *p2;
+ _cleanup_free_ char *p2 = NULL;
const char *prefix2;
char
timestamp1[FORMAT_TIMESTAMP_MAX],
@@ -669,7 +730,12 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
"%s\tActive Exit Timestamp: %s\n"
"%s\tInactive Enter Timestamp: %s\n"
"%s\tGC Check Good: %s\n"
- "%s\tNeed Daemon Reload: %s\n",
+ "%s\tNeed Daemon Reload: %s\n"
+ "%s\tTransient: %s\n"
+ "%s\tSlice: %s\n"
+ "%s\tCGroup: %s\n"
+ "%s\tCGroup realized: %s\n"
+ "%s\tCGroup mask: 0x%x\n",
prefix, u->id,
prefix, unit_description(u),
prefix, strna(u->instance),
@@ -680,7 +746,12 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
prefix, strna(format_timestamp(timestamp3, sizeof(timestamp3), u->active_exit_timestamp.realtime)),
prefix, strna(format_timestamp(timestamp4, sizeof(timestamp4), u->inactive_enter_timestamp.realtime)),
prefix, yes_no(unit_check_gc(u)),
- prefix, yes_no(unit_need_daemon_reload(u)));
+ prefix, yes_no(unit_need_daemon_reload(u)),
+ prefix, yes_no(u->transient),
+ prefix, strna(unit_slice_name(u)),
+ prefix, strna(u->cgroup_path),
+ prefix, yes_no(u->cgroup_realized),
+ prefix, u->cgroup_mask);
SET_FOREACH(t, u->names, i)
fprintf(f, "%s\tName: %s\n", prefix, t);
@@ -730,8 +801,6 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
}
if (u->load_state == UNIT_LOADED) {
- CGroupBonding *b;
- CGroupAttribute *a;
fprintf(f,
"%s\tStopWhenUnneeded: %s\n"
@@ -749,20 +818,6 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
prefix, yes_no(u->ignore_on_isolate),
prefix, yes_no(u->ignore_on_snapshot));
- LIST_FOREACH(by_unit, b, u->cgroup_bondings)
- fprintf(f, "%s\tControlGroup: %s:%s\n",
- prefix, b->controller, b->path);
-
- LIST_FOREACH(by_unit, a, u->cgroup_attributes) {
- _cleanup_free_ char *v = NULL;
-
- if (a->semantics && a->semantics->map_write)
- a->semantics->map_write(a->semantics, a->value, &v);
-
- fprintf(f, "%s\tControlGroupAttribute: %s %s \"%s\"\n",
- prefix, a->controller, a->name, v ? v : a->value);
- }
-
if (UNIT_VTABLE(u)->dump)
UNIT_VTABLE(u)->dump(u, f, prefix2);
@@ -780,7 +835,6 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
if (u->nop_job)
job_dump(u->nop_job, f, prefix2);
- free(p2);
}
/* Common implementation for multiple backends */
@@ -790,14 +844,16 @@ int unit_load_fragment_and_dropin(Unit *u) {
assert(u);
/* Load a .service file */
- if ((r = unit_load_fragment(u)) < 0)
+ r = unit_load_fragment(u);
+ if (r < 0)
return r;
if (u->load_state == UNIT_STUB)
return -ENOENT;
/* Load drop-in directory data */
- if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
+ r = unit_load_dropin(unit_follow_merge(u));
+ if (r < 0)
return r;
return 0;
@@ -813,14 +869,16 @@ int unit_load_fragment_and_dropin_optional(Unit *u) {
* something can be loaded or not doesn't matter. */
/* Load a .service file */
- if ((r = unit_load_fragment(u)) < 0)
+ r = unit_load_fragment(u);
+ if (r < 0)
return r;
if (u->load_state == UNIT_STUB)
u->load_state = UNIT_LOADED;
/* Load drop-in directory data */
- if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
+ r = unit_load_dropin(unit_follow_merge(u));
+ if (r < 0)
return r;
return 0;
@@ -853,6 +911,7 @@ int unit_add_default_target_dependency(Unit *u, Unit *target) {
}
static int unit_add_default_dependencies(Unit *u) {
+
static const UnitDependency deps[] = {
UNIT_REQUIRED_BY,
UNIT_REQUIRED_BY_OVERRIDABLE,
@@ -868,9 +927,21 @@ static int unit_add_default_dependencies(Unit *u) {
assert(u);
for (k = 0; k < ELEMENTSOF(deps); k++)
- SET_FOREACH(target, u->dependencies[deps[k]], i)
- if ((r = unit_add_default_target_dependency(u, target)) < 0)
+ SET_FOREACH(target, u->dependencies[deps[k]], i) {
+ r = unit_add_default_target_dependency(u, target);
+ if (r < 0)
return r;
+ }
+
+ if (u->default_dependencies && unit_get_cgroup_context(u)) {
+ if (UNIT_ISSET(u->slice))
+ r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_WANTS, UNIT_DEREF(u->slice), true);
+ else
+ r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, SPECIAL_ROOT_SLICE, NULL, true);
+
+ if (r < 0)
+ return r;
+ }
return 0;
}
@@ -891,34 +962,38 @@ int unit_load(Unit *u) {
if (u->load_state != UNIT_STUB)
return 0;
- if (UNIT_VTABLE(u)->load)
- if ((r = UNIT_VTABLE(u)->load(u)) < 0)
+ if (UNIT_VTABLE(u)->load) {
+ r = UNIT_VTABLE(u)->load(u);
+ if (r < 0)
goto fail;
+ }
if (u->load_state == UNIT_STUB) {
r = -ENOENT;
goto fail;
}
- if (u->load_state == UNIT_LOADED &&
- u->default_dependencies)
- if ((r = unit_add_default_dependencies(u)) < 0)
- goto fail;
-
if (u->load_state == UNIT_LOADED) {
+
+ if (u->default_dependencies) {
+ r = unit_add_default_dependencies(u);
+ if (r < 0)
+ goto fail;
+ }
+
r = unit_add_mount_links(u);
if (r < 0)
- return r;
- }
+ goto fail;
- if (u->on_failure_isolate &&
- set_size(u->dependencies[UNIT_ON_FAILURE]) > 1) {
+ if (u->on_failure_isolate &&
+ set_size(u->dependencies[UNIT_ON_FAILURE]) > 1) {
- log_error_unit(u->id,
- "More than one OnFailure= dependencies specified for %s but OnFailureIsolate= enabled. Refusing.", u->id);
+ log_error_unit(u->id,
+ "More than one OnFailure= dependencies specified for %s but OnFailureIsolate= enabled. Refusing.", u->id);
- r = -EINVAL;
- goto fail;
+ r = -EINVAL;
+ goto fail;
+ }
}
assert((u->load_state != UNIT_MERGED) == !u->merged_into);
@@ -929,7 +1004,7 @@ int unit_load(Unit *u) {
return 0;
fail:
- u->load_state = UNIT_ERROR;
+ u->load_state = u->load_state == UNIT_STUB ? UNIT_NOT_FOUND : UNIT_ERROR;
u->load_error = r;
unit_add_to_dbus_queue(u);
unit_add_to_gc_queue(u);
@@ -944,7 +1019,7 @@ bool unit_condition_test(Unit *u) {
assert(u);
dual_timestamp_get(&u->condition_timestamp);
- u->condition_result = condition_test_list(u->conditions);
+ u->condition_result = condition_test_list(u->id, u->conditions);
return u->condition_result;
}
@@ -1073,7 +1148,8 @@ int unit_start(Unit *u) {
}
/* Forward to the main object, if we aren't it. */
- if ((following = unit_following(u))) {
+ following = unit_following(u);
+ if (following) {
log_debug_unit(u->id, "Redirecting start request from %s to %s.",
u->id, following->id);
return unit_start(following);
@@ -1368,15 +1444,19 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
}
if (UNIT_IS_INACTIVE_OR_FAILED(ns))
- cgroup_bonding_trim_list(u->cgroup_bondings, true);
+ unit_destroy_cgroup(u);
if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) {
ExecContext *ec = unit_get_exec_context(u);
if (ec && exec_context_may_touch_console(ec)) {
- if (UNIT_IS_INACTIVE_OR_FAILED(ns))
- m->n_on_console--;
- else
- m->n_on_console++;
+ if (UNIT_IS_INACTIVE_OR_FAILED(ns)) {
+ m->n_on_console --;
+
+ if (m->n_on_console == 0)
+ /* unset no_console_output flag, since the console is free */
+ m->no_console_output = 0;
+ } else
+ m->n_on_console ++;
}
}
@@ -1857,7 +1937,7 @@ int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name, con
int unit_add_two_dependencies_by_name(Unit *u, UnitDependency d, UnitDependency e, const char *name, const char *path, bool add_reference) {
Unit *other;
int r;
- char *s;
+ _cleanup_free_ char *s = NULL;
assert(u);
assert(name || path);
@@ -1866,19 +1946,17 @@ int unit_add_two_dependencies_by_name(Unit *u, UnitDependency d, UnitDependency
return -ENOMEM;
if ((r = manager_load_unit(u->manager, name, path, NULL, &other)) < 0)
- goto finish;
+ return r;
r = unit_add_two_dependencies(u, d, e, other, add_reference);
-finish:
- free(s);
return r;
}
int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *name, const char *path, bool add_reference) {
Unit *other;
int r;
- char *s;
+ _cleanup_free_ char *s = NULL;
assert(u);
assert(name || path);
@@ -1887,19 +1965,17 @@ int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *n
return -ENOMEM;
if ((r = manager_load_unit(u->manager, name, path, NULL, &other)) < 0)
- goto finish;
+ return r;
r = unit_add_dependency(other, d, u, add_reference);
-finish:
- free(s);
return r;
}
int unit_add_two_dependencies_by_name_inverse(Unit *u, UnitDependency d, UnitDependency e, const char *name, const char *path, bool add_reference) {
Unit *other;
int r;
- char *s;
+ _cleanup_free_ char *s = NULL;
assert(u);
assert(name || path);
@@ -1908,13 +1984,11 @@ int unit_add_two_dependencies_by_name_inverse(Unit *u, UnitDependency d, UnitDep
return -ENOMEM;
if ((r = manager_load_unit(u->manager, name, path, NULL, &other)) < 0)
- goto finish;
+ return r;
if ((r = unit_add_two_dependencies(other, d, e, u, add_reference)) < 0)
- goto finish;
+ return r;
-finish:
- free(s);
return r;
}
@@ -1938,351 +2012,91 @@ char *unit_dbus_path(Unit *u) {
return unit_dbus_path_from_name(u->id);
}
-static int unit_add_cgroup(Unit *u, CGroupBonding *b) {
+char *unit_default_cgroup_path(Unit *u) {
+ _cleanup_free_ char *escaped = NULL, *slice = NULL;
int r;
assert(u);
- assert(b);
-
- assert(b->path);
- if (!b->controller) {
- b->controller = strdup(SYSTEMD_CGROUP_CONTROLLER);
- if (!b->controller)
- return log_oom();
-
- b->ours = true;
- }
+ if (unit_has_name(u, SPECIAL_ROOT_SLICE))
+ return strdup(u->manager->cgroup_root);
- /* Ensure this hasn't been added yet */
- assert(!b->unit);
-
- if (streq(b->controller, SYSTEMD_CGROUP_CONTROLLER)) {
- CGroupBonding *l;
-
- l = hashmap_get(u->manager->cgroup_bondings, b->path);
- LIST_PREPEND(CGroupBonding, by_path, l, b);
-
- r = hashmap_replace(u->manager->cgroup_bondings, b->path, l);
- if (r < 0) {
- LIST_REMOVE(CGroupBonding, by_path, l, b);
- return r;
- }
+ if (UNIT_ISSET(u->slice) && !unit_has_name(UNIT_DEREF(u->slice), SPECIAL_ROOT_SLICE)) {
+ r = cg_slice_to_path(UNIT_DEREF(u->slice)->id, &slice);
+ if (r < 0)
+ return NULL;
}
- LIST_PREPEND(CGroupBonding, by_unit, u->cgroup_bondings, b);
- b->unit = u;
-
- return 0;
-}
-
-char *unit_default_cgroup_path(Unit *u) {
- _cleanup_free_ char *escaped_instance = NULL;
-
- assert(u);
-
- escaped_instance = cg_escape(u->id);
- if (!escaped_instance)
+ escaped = cg_escape(u->id);
+ if (!escaped)
return NULL;
- if (u->instance) {
- _cleanup_free_ char *t = NULL, *escaped_template = NULL;
-
- t = unit_name_template(u->id);
- if (!t)
- return NULL;
-
- escaped_template = cg_escape(t);
- if (!escaped_template)
- return NULL;
-
- return strjoin(u->manager->cgroup_hierarchy, "/", escaped_template, "/", escaped_instance, NULL);
- } else
- return strjoin(u->manager->cgroup_hierarchy, "/", escaped_instance, NULL);
+ if (slice)
+ return strjoin(u->manager->cgroup_root, "/", slice, "/", escaped, NULL);
+ else
+ return strjoin(u->manager->cgroup_root, "/", escaped, NULL);
}
-int unit_add_cgroup_from_text(Unit *u, const char *name, bool overwrite, CGroupBonding **ret) {
- char *controller = NULL, *path = NULL;
- CGroupBonding *b = NULL;
- bool ours = false;
+int unit_add_default_slice(Unit *u) {
+ _cleanup_free_ char *b = NULL;
+ const char *slice_name;
+ Unit *slice;
int r;
assert(u);
- assert(name);
-
- r = cg_split_spec(name, &controller, &path);
- if (r < 0)
- return r;
-
- if (!path) {
- path = unit_default_cgroup_path(u);
- ours = true;
- }
-
- if (!controller) {
- controller = strdup("systemd");
- ours = true;
- }
-
- if (!path || !controller) {
- free(path);
- free(controller);
- return log_oom();
- }
- if (streq(controller, "systemd")) {
- /* Within the systemd unit hierarchy we do not allow changes. */
- if (path_startswith(path, "/system")) {
- log_warning_unit(u->id, "Manipulating the systemd:/system cgroup hierarchy is not permitted.");
- free(path);
- free(controller);
- return -EPERM;
- }
- }
-
- b = cgroup_bonding_find_list(u->cgroup_bondings, controller);
- if (b) {
- if (streq(path, b->path)) {
- free(path);
- free(controller);
-
- if (ret)
- *ret = b;
- return 0;
- }
-
- if (overwrite && !b->essential) {
- free(controller);
-
- free(b->path);
- b->path = path;
-
- b->ours = ours;
- b->realized = false;
-
- if (ret)
- *ret = b;
-
- return 1;
- }
-
- r = -EEXIST;
- b = NULL;
- goto fail;
- }
-
- b = new0(CGroupBonding, 1);
- if (!b) {
- r = -ENOMEM;
- goto fail;
- }
-
- b->controller = controller;
- b->path = path;
- b->ours = ours;
- b->essential = streq(controller, SYSTEMD_CGROUP_CONTROLLER);
-
- r = unit_add_cgroup(u, b);
- if (r < 0)
- goto fail;
-
- if (ret)
- *ret = b;
-
- return 1;
-
-fail:
- free(path);
- free(controller);
- free(b);
-
- return r;
-}
-
-static int unit_add_one_default_cgroup(Unit *u, const char *controller) {
- CGroupBonding *b = NULL;
- int r = -ENOMEM;
-
- assert(u);
-
- if (controller && !cg_controller_is_valid(controller, true))
- return -EINVAL;
-
- if (!controller)
- controller = SYSTEMD_CGROUP_CONTROLLER;
-
- if (cgroup_bonding_find_list(u->cgroup_bondings, controller))
+ if (UNIT_ISSET(u->slice))
return 0;
- b = new0(CGroupBonding, 1);
- if (!b)
- return -ENOMEM;
-
- b->controller = strdup(controller);
- if (!b->controller)
- goto fail;
-
- b->path = unit_default_cgroup_path(u);
- if (!b->path)
- goto fail;
-
- b->ours = true;
- b->essential = streq(controller, SYSTEMD_CGROUP_CONTROLLER);
-
- r = unit_add_cgroup(u, b);
- if (r < 0)
- goto fail;
+ if (!unit_get_cgroup_context(u))
+ return 0;
- return 1;
+ if (u->instance) {
+ _cleanup_free_ char *prefix = NULL, *escaped = NULL;
-fail:
- free(b->path);
- free(b->controller);
- free(b);
+ /* Implicitly place all instantiated units in their
+ * own per-template slice */
- return r;
-}
-
-int unit_add_default_cgroups(Unit *u) {
- CGroupAttribute *a;
- char **c;
- int r;
+ prefix = unit_name_to_prefix(u->id);
+ if (!prefix)
+ return -ENOMEM;
- assert(u);
+ /* The prefix is already escaped, but it might include
+ * "-" which has a special meaning for slice units,
+ * hence escape it here extra. */
+ escaped = strreplace(prefix, "-", "\\x2d");
+ if (!escaped)
+ return -ENOMEM;
- /* Adds in the default cgroups, if they weren't specified
- * otherwise. */
+ if (u->manager->running_as == SYSTEMD_SYSTEM)
+ b = strjoin("system-", escaped, ".slice", NULL);
+ else
+ b = strappend(escaped, ".slice");
+ if (!b)
+ return -ENOMEM;
- if (!u->manager->cgroup_hierarchy)
- return 0;
+ slice_name = b;
+ } else
+ slice_name =
+ u->manager->running_as == SYSTEMD_SYSTEM
+ ? SPECIAL_SYSTEM_SLICE
+ : SPECIAL_ROOT_SLICE;
- r = unit_add_one_default_cgroup(u, NULL);
+ r = manager_load_unit(u->manager, slice_name, NULL, NULL, &slice);
if (r < 0)
return r;
- STRV_FOREACH(c, u->manager->default_controllers)
- unit_add_one_default_cgroup(u, *c);
-
- LIST_FOREACH(by_unit, a, u->cgroup_attributes)
- unit_add_one_default_cgroup(u, a->controller);
-
+ unit_ref_set(&u->slice, slice);
return 0;
}
-CGroupBonding* unit_get_default_cgroup(Unit *u) {
- assert(u);
-
- return cgroup_bonding_find_list(u->cgroup_bondings, NULL);
-}
-
-int unit_add_cgroup_attribute(
- Unit *u,
- const CGroupSemantics *semantics,
- const char *controller,
- const char *name,
- const char *value,
- CGroupAttribute **ret) {
-
- _cleanup_free_ char *c = NULL;
- CGroupAttribute *a;
- int r;
-
+const char *unit_slice_name(Unit *u) {
assert(u);
- assert(value);
-
- if (semantics) {
- /* Semantics always take precedence */
- if (semantics->name)
- name = semantics->name;
-
- if (semantics->controller)
- controller = semantics->controller;
- }
-
- if (!name)
- return -EINVAL;
-
- if (!controller) {
- r = cg_controller_from_attr(name, &c);
- if (r < 0)
- return -EINVAL;
-
- controller = c;
- }
-
- if (!controller ||
- streq(controller, SYSTEMD_CGROUP_CONTROLLER) ||
- streq(controller, "systemd"))
- return -EINVAL;
-
- if (!filename_is_safe(name))
- return -EINVAL;
-
- if (!cg_controller_is_valid(controller, false))
- return -EINVAL;
-
- /* Check if this attribute already exists. Note that we will
- * explicitly check for the value here too, as there are
- * attributes which accept multiple values. */
- a = cgroup_attribute_find_list(u->cgroup_attributes, controller, name);
- if (a) {
- if (streq(value, a->value)) {
- /* Exactly the same value is always OK, let's ignore this */
- if (ret)
- *ret = a;
-
- return 0;
- }
-
- if (semantics && !semantics->multiple) {
- char *v;
-
- /* If this is a single-item entry, we can
- * simply patch the existing attribute */
-
- v = strdup(value);
- if (!v)
- return -ENOMEM;
-
- free(a->value);
- a->value = v;
-
- if (ret)
- *ret = a;
- return 1;
- }
- }
- a = new0(CGroupAttribute, 1);
- if (!a)
- return -ENOMEM;
-
- if (c) {
- a->controller = c;
- c = NULL;
- } else
- a->controller = strdup(controller);
-
- a->name = strdup(name);
- a->value = strdup(value);
-
- if (!a->controller || !a->name || !a->value) {
- free(a->controller);
- free(a->name);
- free(a->value);
- free(a);
- return -ENOMEM;
- }
-
- a->semantics = semantics;
- a->unit = u;
-
- LIST_PREPEND(CGroupAttribute, by_unit, u->cgroup_attributes, a);
-
- if (ret)
- *ret = a;
+ if (!UNIT_ISSET(u->slice))
+ return NULL;
- return 1;
+ return UNIT_DEREF(u->slice)->id;
}
int unit_load_related_unit(Unit *u, const char *type, Unit **_found) {
@@ -2359,7 +2173,8 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) {
if (!unit_can_serialize(u))
return 0;
- if ((r = UNIT_VTABLE(u)->serialize(u, f, fds)) < 0)
+ r = UNIT_VTABLE(u)->serialize(u, f, fds);
+ if (r < 0)
return r;
@@ -2384,6 +2199,11 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) {
if (dual_timestamp_is_set(&u->condition_timestamp))
unit_serialize_item(u, f, "condition-result", yes_no(u->condition_result));
+ unit_serialize_item(u, f, "transient", yes_no(u->transient));
+
+ if (u->cgroup_path)
+ unit_serialize_item(u, f, "cgroup", u->cgroup_path);
+
/* End marker */
fputc('\n', f);
return 0;
@@ -2506,22 +2326,47 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
} else if (streq(l, "condition-result")) {
int b;
- if ((b = parse_boolean(v)) < 0)
+ b = parse_boolean(v);
+ if (b < 0)
log_debug("Failed to parse condition result value %s", v);
else
u->condition_result = b;
continue;
+
+ } else if (streq(l, "transient")) {
+ int b;
+
+ b = parse_boolean(v);
+ if (b < 0)
+ log_debug("Failed to parse transient bool %s", v);
+ else
+ u->transient = b;
+
+ continue;
+ } else if (streq(l, "cgroup")) {
+ char *s;
+
+ s = strdup(v);
+ if (!s)
+ return -ENOMEM;
+
+ free(u->cgroup_path);
+ u->cgroup_path = s;
+
+ assert(hashmap_put(u->manager->cgroup_unit, s, u) == 1);
+ continue;
}
- if ((r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds)) < 0)
+ r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds);
+ if (r < 0)
return r;
}
}
int unit_add_node_link(Unit *u, const char *what, bool wants) {
Unit *device;
- char *e;
+ _cleanup_free_ char *e = NULL;
int r;
assert(u);
@@ -2539,7 +2384,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) {
return -ENOMEM;
r = manager_load_unit(u->manager, e, NULL, NULL, &device);
- free(e);
+
if (r < 0)
return r;
@@ -2714,6 +2559,34 @@ int unit_kill(Unit *u, KillWho w, int signo, DBusError *error) {
return UNIT_VTABLE(u)->kill(u, w, signo, error);
}
+static Set *unit_pid_set(pid_t main_pid, pid_t control_pid) {
+ Set *pid_set;
+ int r;
+
+ pid_set = set_new(trivial_hash_func, trivial_compare_func);
+ if (!pid_set)
+ return NULL;
+
+ /* Exclude the main/control pids from being killed via the cgroup */
+ if (main_pid > 0) {
+ r = set_put(pid_set, LONG_TO_PTR(main_pid));
+ if (r < 0)
+ goto fail;
+ }
+
+ if (control_pid > 0) {
+ r = set_put(pid_set, LONG_TO_PTR(control_pid));
+ if (r < 0)
+ goto fail;
+ }
+
+ return pid_set;
+
+fail:
+ set_free(pid_set);
+ return NULL;
+}
+
int unit_kill_common(
Unit *u,
KillWho who,
@@ -2750,28 +2623,16 @@ int unit_kill_common(
if (kill(main_pid, signo) < 0)
r = -errno;
- if (who == KILL_ALL) {
+ if (who == KILL_ALL && u->cgroup_path) {
_cleanup_set_free_ Set *pid_set = NULL;
int q;
- pid_set = set_new(trivial_hash_func, trivial_compare_func);
+ /* Exclude the main/control pids from being killed via the cgroup */
+ pid_set = unit_pid_set(main_pid, control_pid);
if (!pid_set)
return -ENOMEM;
- /* Exclude the control/main pid from being killed via the cgroup */
- if (control_pid > 0) {
- q = set_put(pid_set, LONG_TO_PTR(control_pid));
- if (q < 0)
- return q;
- }
-
- if (main_pid > 0) {
- q = set_put(pid_set, LONG_TO_PTR(main_pid));
- if (q < 0)
- return q;
- }
-
- q = cgroup_bonding_kill_list(u->cgroup_bondings, signo, false, false, pid_set, NULL);
+ q = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, signo, false, true, false, pid_set);
if (q < 0 && q != -EAGAIN && q != -ESRCH && q != -ENOENT)
r = q;
}
@@ -2823,40 +2684,39 @@ void unit_ref_unset(UnitRef *ref) {
ref->unit = NULL;
}
-int unit_add_one_mount_link(Unit *u, Mount *m) {
+int unit_add_mount_links(Unit *u) {
char **i;
+ int r;
assert(u);
- assert(m);
-
- if (u->load_state != UNIT_LOADED ||
- UNIT(m)->load_state != UNIT_LOADED)
- return 0;
STRV_FOREACH(i, u->requires_mounts_for) {
+ char prefix[strlen(*i) + 1];
- if (UNIT(m) == u)
- continue;
+ PATH_FOREACH_PREFIX_MORE(prefix, *i) {
+ Unit *m;
- if (!path_startswith(*i, m->where))
- continue;
-
- return unit_add_two_dependencies(u, UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true);
- }
+ r = manager_get_unit_by_path(u->manager, prefix, ".mount", &m);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ continue;
+ if (m == u)
+ continue;
- return 0;
-}
+ if (m->load_state != UNIT_LOADED)
+ continue;
-int unit_add_mount_links(Unit *u) {
- Unit *other;
- int r;
-
- assert(u);
+ r = unit_add_dependency(u, UNIT_AFTER, m, true);
+ if (r < 0)
+ return r;
- LIST_FOREACH(units_by_type, other, u->manager->units_by_type[UNIT_MOUNT]) {
- r = unit_add_one_mount_link(u, MOUNT(other));
- if (r < 0)
- return r;
+ if (m->fragment_path) {
+ r = unit_add_dependency(u, UNIT_REQUIRES, m, true);
+ if (r < 0)
+ return r;
+ }
+ }
}
return 0;
@@ -2870,7 +2730,6 @@ int unit_exec_context_defaults(Unit *u, ExecContext *c) {
assert(c);
/* This only copies in the ones that need memory */
-
for (i = 0; i < RLIMIT_NLIMITS; i++)
if (u->manager->rlimit[i] && !c->rlimit[i]) {
c->rlimit[i] = newdup(struct rlimit, u->manager->rlimit[i], 1);
@@ -2900,7 +2759,18 @@ ExecContext *unit_get_exec_context(Unit *u) {
return (ExecContext*) ((uint8_t*) u + offset);
}
-static int drop_in_file(Unit *u, bool runtime, const char *name, char **_p, char **_q) {
+CGroupContext *unit_get_cgroup_context(Unit *u) {
+ size_t offset;
+
+ offset = UNIT_VTABLE(u)->cgroup_context_offset;
+ if (offset <= 0)
+ return NULL;
+
+ return (CGroupContext*) ((uint8_t*) u + offset);
+}
+
+static int drop_in_file(Unit *u, UnitSetPropertiesMode mode, const char *name, char **_p, char **_q) {
+ _cleanup_free_ char *b = NULL;
char *p, *q;
int r;
@@ -2908,11 +2778,13 @@ static int drop_in_file(Unit *u, bool runtime, const char *name, char **_p, char
assert(name);
assert(_p);
assert(_q);
+ assert(mode & (UNIT_PERSISTENT|UNIT_RUNTIME));
- if (u->manager->running_as == SYSTEMD_USER && runtime)
- return -ENOTSUP;
+ b = xescape(name, "/.");
+ if (!b)
+ return -ENOMEM;
- if (!filename_is_safe(name))
+ if (!filename_is_safe(b))
return -EINVAL;
if (u->manager->running_as == SYSTEMD_USER) {
@@ -2925,14 +2797,14 @@ static int drop_in_file(Unit *u, bool runtime, const char *name, char **_p, char
return -ENOENT;
p = strjoin(c, "/", u->id, ".d", NULL);
- } else if (runtime)
- p = strjoin("/run/systemd/system/", u->id, ".d", NULL);
- else
+ } else if (mode & UNIT_PERSISTENT)
p = strjoin("/etc/systemd/system/", u->id, ".d", NULL);
+ else
+ p = strjoin("/run/systemd/system/", u->id, ".d", NULL);
if (!p)
return -ENOMEM;
- q = strjoin(p, "/50-", name, ".conf", NULL);
+ q = strjoin(p, "/90-", b, ".conf", NULL);
if (!q) {
free(p);
return -ENOMEM;
@@ -2943,13 +2815,18 @@ static int drop_in_file(Unit *u, bool runtime, const char *name, char **_p, char
return 0;
}
-int unit_write_drop_in(Unit *u, bool runtime, const char *name, const char *data) {
+int unit_write_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *data) {
_cleanup_free_ char *p = NULL, *q = NULL;
int r;
assert(u);
+ assert(name);
+ assert(data);
+
+ if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ return 0;
- r = drop_in_file(u, runtime, name, &p, &q);
+ r = drop_in_file(u, mode, name, &p, &q);
if (r < 0)
return r;
@@ -2957,22 +2834,126 @@ int unit_write_drop_in(Unit *u, bool runtime, const char *name, const char *data
return write_string_file_atomic_label(q, data);
}
-int unit_remove_drop_in(Unit *u, bool runtime, const char *name) {
+int unit_write_drop_in_format(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *format, ...) {
+ _cleanup_free_ char *p = NULL;
+ va_list ap;
+ int r;
+
+ assert(u);
+ assert(name);
+ assert(format);
+
+ if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ return 0;
+
+ va_start(ap, format);
+ r = vasprintf(&p, format, ap);
+ va_end(ap);
+
+ if (r < 0)
+ return -ENOMEM;
+
+ return unit_write_drop_in(u, mode, name, p);
+}
+
+int unit_write_drop_in_private(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *data) {
+ _cleanup_free_ char *ndata = NULL;
+
+ assert(u);
+ assert(name);
+ assert(data);
+
+ if (!UNIT_VTABLE(u)->private_section)
+ return -EINVAL;
+
+ if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ return 0;
+
+ ndata = strjoin("[", UNIT_VTABLE(u)->private_section, "]\n", data, NULL);
+ if (!ndata)
+ return -ENOMEM;
+
+ return unit_write_drop_in(u, mode, name, ndata);
+}
+
+int unit_write_drop_in_private_format(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *format, ...) {
+ _cleanup_free_ char *p = NULL;
+ va_list ap;
+ int r;
+
+ assert(u);
+ assert(name);
+ assert(format);
+
+ if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ return 0;
+
+ va_start(ap, format);
+ r = vasprintf(&p, format, ap);
+ va_end(ap);
+
+ if (r < 0)
+ return -ENOMEM;
+
+ return unit_write_drop_in_private(u, mode, name, p);
+}
+
+int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name) {
_cleanup_free_ char *p = NULL, *q = NULL;
int r;
assert(u);
- r = drop_in_file(u, runtime, name, &p, &q);
+ if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ return 0;
+
+ r = drop_in_file(u, mode, name, &p, &q);
if (unlink(q) < 0)
- r = -errno;
+ r = errno == ENOENT ? 0 : -errno;
else
- r = 0;
+ r = 1;
rmdir(p);
return r;
}
+int unit_make_transient(Unit *u) {
+ int r;
+
+ assert(u);
+
+ u->load_state = UNIT_STUB;
+ u->load_error = 0;
+ u->transient = true;
+
+ free(u->fragment_path);
+ u->fragment_path = NULL;
+
+ if (u->manager->running_as == SYSTEMD_USER) {
+ _cleanup_free_ char *c = NULL;
+
+ r = user_config_home(&c);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ return -ENOENT;
+
+ u->fragment_path = strjoin(c, "/", u->id, NULL);
+ if (!u->fragment_path)
+ return -ENOMEM;
+
+ mkdir_p(c, 0755);
+ } else {
+ u->fragment_path = strappend("/run/systemd/system/", u->id);
+ if (!u->fragment_path)
+ return -ENOMEM;
+
+ mkdir_p("/run/systemd/system", 0755);
+ }
+
+ return write_string_file_atomic_label(u->fragment_path, "# Transient stub");
+}
+
int unit_kill_context(
Unit *u,
KillContext *c,
@@ -3000,8 +2981,12 @@ int unit_kill_context(
log_warning_unit(u->id, "Failed to kill main process %li (%s): %s",
(long) main_pid, strna(comm), strerror(-r));
- } else
+ } else {
wait_for_exit = !main_pid_alien;
+
+ if (c->send_sighup)
+ kill(main_pid, SIGHUP);
+ }
}
if (control_pid > 0) {
@@ -3014,41 +2999,123 @@ int unit_kill_context(
log_warning_unit(u->id,
"Failed to kill control process %li (%s): %s",
(long) control_pid, strna(comm), strerror(-r));
- } else
+ } else {
wait_for_exit = true;
+
+ if (c->send_sighup)
+ kill(control_pid, SIGHUP);
+ }
}
- if (c->kill_mode == KILL_CONTROL_GROUP) {
+ if (c->kill_mode == KILL_CONTROL_GROUP && u->cgroup_path) {
_cleanup_set_free_ Set *pid_set = NULL;
- pid_set = set_new(trivial_hash_func, trivial_compare_func);
+ /* Exclude the main/control pids from being killed via the cgroup */
+ pid_set = unit_pid_set(main_pid, control_pid);
if (!pid_set)
return -ENOMEM;
- /* Exclude the main/control pids from being killed via the cgroup */
- if (main_pid > 0) {
- r = set_put(pid_set, LONG_TO_PTR(main_pid));
- if (r < 0)
- return r;
- }
-
- if (control_pid > 0) {
- r = set_put(pid_set, LONG_TO_PTR(control_pid));
- if (r < 0)
- return r;
- }
-
- r = cgroup_bonding_kill_list(u->cgroup_bondings, sig, true, false, pid_set, NULL);
+ r = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, sig, true, true, false, pid_set);
if (r < 0) {
if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
log_warning_unit(u->id, "Failed to kill control group: %s", strerror(-r));
- } else if (r > 0)
+ } else if (r > 0) {
wait_for_exit = true;
+ if (c->send_sighup) {
+ set_free(pid_set);
+
+ pid_set = unit_pid_set(main_pid, control_pid);
+ if (!pid_set)
+ return -ENOMEM;
+
+ cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, SIGHUP, true, true, false, pid_set);
+ }
+ }
}
return wait_for_exit;
}
+int unit_require_mounts_for(Unit *u, const char *path) {
+ char prefix[strlen(path) + 1], *p;
+ int r;
+
+ assert(u);
+ assert(path);
+
+ /* Registers a unit for requiring a certain path and all its
+ * prefixes. We keep a simple array of these paths in the
+ * unit, since its usually short. However, we build a prefix
+ * table for all possible prefixes so that new appearing mount
+ * units can easily determine which units to make themselves a
+ * dependency of. */
+
+ p = strdup(path);
+ if (!p)
+ return -ENOMEM;
+
+ path_kill_slashes(p);
+
+ if (!path_is_absolute(p)) {
+ free(p);
+ return -EINVAL;
+ }
+
+ if (!path_is_safe(p)) {
+ free(p);
+ return -EPERM;
+ }
+
+ if (strv_contains(u->requires_mounts_for, p)) {
+ free(p);
+ return 0;
+ }
+
+ r = strv_push(&u->requires_mounts_for, p);
+ if (r < 0) {
+ free(p);
+ return r;
+ }
+
+ PATH_FOREACH_PREFIX_MORE(prefix, p) {
+ Set *x;
+
+ x = hashmap_get(u->manager->units_requiring_mounts_for, prefix);
+ if (!x) {
+ char *q;
+
+ if (!u->manager->units_requiring_mounts_for) {
+ u->manager->units_requiring_mounts_for = hashmap_new(string_hash_func, string_compare_func);
+ if (!u->manager->units_requiring_mounts_for)
+ return -ENOMEM;
+ }
+
+ q = strdup(prefix);
+ if (!q)
+ return -ENOMEM;
+
+ x = set_new(NULL, NULL);
+ if (!x) {
+ free(q);
+ return -ENOMEM;
+ }
+
+ r = hashmap_put(u->manager->units_requiring_mounts_for, q, x);
+ if (r < 0) {
+ free(q);
+ set_free(x);
+ return r;
+ }
+ }
+
+ r = set_put(x, u);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
static const char* const unit_active_state_table[_UNIT_ACTIVE_STATE_MAX] = {
[UNIT_ACTIVE] = "active",
[UNIT_RELOADING] = "reloading",
diff --git a/src/core/unit.h b/src/core/unit.h
index b04475e4fb..6dd750f8c2 100644
--- a/src/core/unit.h
+++ b/src/core/unit.h
@@ -37,10 +37,10 @@ typedef struct UnitStatusMessageFormats UnitStatusMessageFormats;
#include "list.h"
#include "socket-util.h"
#include "execute.h"
+#include "cgroup.h"
#include "condition.h"
#include "install.h"
#include "unit-name.h"
-#include "cgroup-semantics.h"
enum UnitActiveState {
UNIT_ACTIVE,
@@ -115,8 +115,15 @@ enum UnitDependency {
#include "manager.h"
#include "job.h"
-#include "cgroup.h"
-#include "cgroup-attr.h"
+
+struct UnitRef {
+ /* Keeps tracks of references to a unit. This is useful so
+ * that we can merge two units if necessary and correct all
+ * references to them */
+
+ Unit* unit;
+ LIST_FIELDS(UnitRef, refs);
+};
struct Unit {
Manager *manager;
@@ -165,8 +172,10 @@ struct Unit {
dual_timestamp inactive_enter_timestamp;
/* Counterparts in the cgroup filesystem */
- CGroupBonding *cgroup_bondings;
- CGroupAttribute *cgroup_attributes;
+ char *cgroup_path;
+ CGroupControllerMask cgroup_mask;
+
+ UnitRef slice;
/* Per type list */
LIST_FIELDS(Unit, units_by_type);
@@ -186,6 +195,9 @@ struct Unit {
/* GC queue */
LIST_FIELDS(Unit, gc_queue);
+ /* CGroup realize members queue */
+ LIST_FIELDS(Unit, cgroup_queue);
+
/* Used during GC sweeps */
unsigned gc_marker;
@@ -228,25 +240,22 @@ struct Unit {
/* Did the last condition check succeed? */
bool condition_result;
+ /* Is this a transient unit? */
+ bool transient;
+
bool in_load_queue:1;
bool in_dbus_queue:1;
bool in_cleanup_queue:1;
bool in_gc_queue:1;
+ bool in_cgroup_queue:1;
bool sent_dbus_new_signal:1;
bool no_gc:1;
bool in_audit:1;
-};
-struct UnitRef {
- /* Keeps tracks of references to a unit. This is useful so
- * that we can merge two units if necessary and correct all
- * references to them */
-
- Unit* unit;
- LIST_FIELDS(UnitRef, refs);
+ bool cgroup_realized:1;
};
struct UnitStatusMessageFormats {
@@ -255,6 +264,12 @@ struct UnitStatusMessageFormats {
const char *finished_stop_job[_JOB_RESULT_MAX];
};
+typedef enum UnitSetPropertiesMode {
+ UNIT_CHECK = 0,
+ UNIT_RUNTIME = 1,
+ UNIT_PERSISTENT = 2,
+} UnitSetPropertiesMode;
+
#include "service.h"
#include "timer.h"
#include "socket.h"
@@ -265,6 +280,8 @@ struct UnitStatusMessageFormats {
#include "snapshot.h"
#include "swap.h"
#include "path.h"
+#include "slice.h"
+#include "scope.h"
struct UnitVTable {
/* How much memory does an object of this unit type need */
@@ -274,8 +291,12 @@ struct UnitVTable {
* ExecContext is found, if the unit type has that */
size_t exec_context_offset;
- /* The name of the section with the exec settings of ExecContext */
- const char *exec_section;
+ /* If greater than 0, the offset into the object where
+ * CGroupContext is found, if the unit type has that */
+ size_t cgroup_context_offset;
+
+ /* The name of the configuration file section with the private settings of this unit*/
+ const char *private_section;
/* Config file sections this unit type understands, separated
* by NUL chars */
@@ -347,7 +368,7 @@ struct UnitVTable {
/* Called whenever any of the cgroups this unit watches for
* ran empty */
- void (*cgroup_notify_empty)(Unit *u);
+ void (*notify_cgroup_empty)(Unit *u);
/* Called whenever a process of this unit sends us a message */
void (*notify_message)(Unit *u, pid_t pid, char **tags);
@@ -362,6 +383,12 @@ struct UnitVTable {
/* Called for each message received on the bus */
DBusHandlerResult (*bus_message_handler)(Unit *u, DBusConnection *c, DBusMessage *message);
+ /* Called for each property that is being set */
+ int (*bus_set_property)(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error);
+
+ /* Called after at least one property got changed to apply the necessary change */
+ int (*bus_commit_properties)(Unit *u);
+
/* Return the unit this unit is following */
Unit *(*following)(Unit *u);
@@ -403,6 +430,9 @@ struct UnitVTable {
/* Exclude from automatic gc */
bool no_gc:1;
+
+ /* True if transient units of this type are OK */
+ bool can_transient:1;
};
extern const UnitVTable * const unit_vtable[_UNIT_TYPE_MAX];
@@ -433,6 +463,8 @@ DEFINE_CAST(AUTOMOUNT, Automount);
DEFINE_CAST(SNAPSHOT, Snapshot);
DEFINE_CAST(SWAP, Swap);
DEFINE_CAST(PATH, Path);
+DEFINE_CAST(SLICE, Slice);
+DEFINE_CAST(SCOPE, Scope);
Unit *unit_new(Manager *m, size_t size);
void unit_free(Unit *u);
@@ -450,11 +482,6 @@ int unit_add_two_dependencies_by_name_inverse(Unit *u, UnitDependency d, UnitDep
int unit_add_exec_dependencies(Unit *u, ExecContext *c);
-int unit_add_cgroup_from_text(Unit *u, const char *name, bool overwrite, CGroupBonding **ret);
-int unit_add_default_cgroups(Unit *u);
-CGroupBonding* unit_get_default_cgroup(Unit *u);
-int unit_add_cgroup_attribute(Unit *u, const CGroupSemantics *semantics, const char *controller, const char *name, const char *value, CGroupAttribute **ret);
-
int unit_choose_id(Unit *u, const char *name);
int unit_set_description(Unit *u, const char *description);
@@ -474,6 +501,8 @@ int unit_load_fragment_and_dropin(Unit *u);
int unit_load_fragment_and_dropin_optional(Unit *u);
int unit_load(Unit *unit);
+int unit_add_default_slice(Unit *u);
+
const char *unit_description(Unit *u) _pure_;
bool unit_has_name(Unit *u, const char *name);
@@ -536,6 +565,8 @@ void unit_reset_failed(Unit *u);
Unit *unit_following(Unit *u);
+const char *unit_slice_name(Unit *u);
+
bool unit_stop_pending(Unit *u) _pure_;
bool unit_inactive_or_pending(Unit *u) _pure_;
bool unit_active_or_pending(Unit *u);
@@ -557,19 +588,29 @@ Unit* unit_ref_set(UnitRef *ref, Unit *u);
void unit_ref_unset(UnitRef *ref);
#define UNIT_DEREF(ref) ((ref).unit)
+#define UNIT_ISSET(ref) (!!(ref).unit)
-int unit_add_one_mount_link(Unit *u, Mount *m);
int unit_add_mount_links(Unit *u);
int unit_exec_context_defaults(Unit *u, ExecContext *c);
ExecContext *unit_get_exec_context(Unit *u) _pure_;
+CGroupContext *unit_get_cgroup_context(Unit *u) _pure_;
-int unit_write_drop_in(Unit *u, bool runtime, const char *name, const char *data);
-int unit_remove_drop_in(Unit *u, bool runtime, const char *name);
+int unit_write_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *data);
+int unit_write_drop_in_format(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *format, ...) _printf_attr_(4,5);
+
+int unit_write_drop_in_private(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *data);
+int unit_write_drop_in_private_format(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *format, ...) _printf_attr_(4,5);
+
+int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name);
int unit_kill_context(Unit *u, KillContext *c, bool sigkill, pid_t main_pid, pid_t control_pid, bool main_pid_alien);
+int unit_make_transient(Unit *u);
+
+int unit_require_mounts_for(Unit *u, const char *path);
+
const char *unit_active_state_to_string(UnitActiveState i) _const_;
UnitActiveState unit_active_state_from_string(const char *s) _pure_;
diff --git a/src/core/user.conf b/src/core/user.conf
index 4252451eb7..4a0129a984 100644
--- a/src/core/user.conf
+++ b/src/core/user.conf
@@ -12,6 +12,5 @@
#LogTarget=console
#LogColor=yes
#LogLocation=no
-#DefaultControllers=cpu
#DefaultStandardOutput=inherit
#DefaultStandardError=inherit
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
index 81b770890a..e1798a3e82 100644
--- a/src/cryptsetup/cryptsetup-generator.c
+++ b/src/cryptsetup/cryptsetup-generator.c
@@ -72,13 +72,20 @@ static int create_disk(
_cleanup_free_ char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL, *e = NULL;
_cleanup_fclose_ FILE *f = NULL;
- bool noauto, nofail;
+ bool noauto, nofail, tmp, swap;
assert(name);
assert(device);
noauto = has_option(options, "noauto");
nofail = has_option(options, "nofail");
+ tmp = has_option(options, "tmp");
+ swap = has_option(options, "swap");
+
+ if (tmp && swap) {
+ log_error("Device '%s' cannot be both 'tmp' and 'swap'. Ignoring.", name);
+ return -EINVAL;
+ }
n = unit_name_from_path_instance("systemd-cryptsetup", name, ".service");
if (!n)
@@ -111,6 +118,7 @@ static int create_disk(
"Conflicts=umount.target\n"
"DefaultDependencies=no\n"
"BindsTo=dev-mapper-%i.device\n"
+ "IgnoreOnIsolate=true\n"
"After=systemd-readahead-collect.service systemd-readahead-replay.service\n",
f);
@@ -122,7 +130,7 @@ static int create_disk(
if (streq(password, "/dev/urandom") ||
streq(password, "/dev/random") ||
streq(password, "/dev/hw_random"))
- fputs("After=systemd-random-seed-load.service\n", f);
+ fputs("After=systemd-random-seed.service\n", f);
else if (!streq(password, "-") &&
!streq(password, "none"))
fprintf(f,
@@ -151,12 +159,12 @@ static int create_disk(
name, u, strempty(password), strempty(options),
name);
- if (has_option(options, "tmp"))
+ if (tmp)
fprintf(f,
"ExecStartPost=/sbin/mke2fs '/dev/mapper/%s'\n",
name);
- if (has_option(options, "swap"))
+ if (swap)
fprintf(f,
"ExecStartPost=/sbin/mkswap '/dev/mapper/%s'\n",
name);
@@ -233,7 +241,7 @@ static int create_disk(
return 0;
}
-static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cmdline_keyfile) {
+static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char ***arg_proc_cmdline_options, char **arg_proc_cmdline_keyfile) {
_cleanup_free_ char *line = NULL;
char *w = NULL, *state = NULL;
int r;
@@ -300,7 +308,20 @@ static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cm
return log_oom();
}
+ } else if (startswith(word, "luks.options=")) {
+ if (strv_extend(arg_proc_cmdline_options, word + 13) < 0)
+ return log_oom();
+
+ } else if (startswith(word, "rd.luks.options=")) {
+
+ if (in_initrd()) {
+ if (strv_extend(arg_proc_cmdline_options, word + 16) < 0)
+ return log_oom();
+ }
+
} else if (startswith(word, "luks.key=")) {
+ if (*arg_proc_cmdline_keyfile)
+ free(*arg_proc_cmdline_keyfile);
*arg_proc_cmdline_keyfile = strdup(word + 9);
if (!*arg_proc_cmdline_keyfile)
return log_oom();
@@ -330,6 +351,7 @@ static int parse_proc_cmdline(char ***arg_proc_cmdline_disks, char **arg_proc_cm
int main(int argc, char *argv[]) {
_cleanup_strv_free_ char **arg_proc_cmdline_disks_done = NULL;
_cleanup_strv_free_ char **arg_proc_cmdline_disks = NULL;
+ _cleanup_strv_free_ char **arg_proc_cmdline_options = NULL;
_cleanup_free_ char *arg_proc_cmdline_keyfile = NULL;
_cleanup_fclose_ FILE *f = NULL;
unsigned n = 0;
@@ -350,7 +372,7 @@ int main(int argc, char *argv[]) {
umask(0022);
- if (parse_proc_cmdline(&arg_proc_cmdline_disks, &arg_proc_cmdline_keyfile) < 0)
+ if (parse_proc_cmdline(&arg_proc_cmdline_disks, &arg_proc_cmdline_options, &arg_proc_cmdline_keyfile) < 0)
return EXIT_FAILURE;
if (!arg_enabled)
@@ -405,6 +427,26 @@ int main(int argc, char *argv[]) {
continue;
}
+ if (arg_proc_cmdline_options) {
+ /*
+ If options are specified on the kernel commandline, let them override
+ the ones from crypttab.
+ */
+ STRV_FOREACH(i, arg_proc_cmdline_options) {
+ _cleanup_free_ char *proc_uuid = NULL, *proc_options = NULL;
+ const char *p = *i;
+
+ k = sscanf(p, "%m[0-9a-fA-F-]=%ms", &proc_uuid, &proc_options);
+ if (k == 2 && streq(proc_uuid, device + 5)) {
+ if (options)
+ free(options);
+ options = strdup(p);
+ if (!proc_options)
+ return log_oom();
+ }
+ }
+ }
+
if (arg_proc_cmdline_disks) {
/*
If luks UUIDs are specified on the kernel command line, use them as a filter
@@ -445,7 +487,7 @@ next:
on the kernel command line and not yet written.
*/
- _cleanup_free_ char *name = NULL, *device = NULL;
+ _cleanup_free_ char *name = NULL, *device = NULL, *options = NULL;
const char *p = *i;
if (startswith(p, "luks-"))
@@ -460,7 +502,44 @@ next:
if (!name || !device)
return log_oom();
- if (create_disk(name, device, arg_proc_cmdline_keyfile, "timeout=0") < 0)
+ if (arg_proc_cmdline_options) {
+ /*
+ If options are specified on the kernel commandline, use them.
+ */
+ char **j;
+
+ STRV_FOREACH(j, arg_proc_cmdline_options) {
+ _cleanup_free_ char *proc_uuid = NULL, *proc_options = NULL;
+ const char *s = *j;
+ int k;
+
+ k = sscanf(s, "%m[0-9a-fA-F-]=%ms", &proc_uuid, &proc_options);
+ if (k == 2) {
+ if (streq(proc_uuid, device + 5)) {
+ if (options)
+ free(options);
+ options = strdup(proc_options);
+ if (!options)
+ return log_oom();
+ }
+ } else if (!options) {
+ /*
+ Fall back to options without a specified UUID
+ */
+ options = strdup(s);
+ if (!options)
+ return log_oom();
+ }
+ }
+ }
+
+ if (!options) {
+ options = strdup("timeout=0");
+ if (!options)
+ return log_oom();
+ }
+
+ if (create_disk(name, device, arg_proc_cmdline_keyfile, options) < 0)
r = EXIT_FAILURE;
}
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
index 347394db8e..22b5eead72 100644
--- a/src/cryptsetup/cryptsetup.c
+++ b/src/cryptsetup/cryptsetup.c
@@ -27,6 +27,7 @@
#include <libcryptsetup.h>
#include <libudev.h>
+#include "fileio.h"
#include "log.h"
#include "util.h"
#include "path-util.h"
@@ -34,16 +35,19 @@
#include "ask-password-api.h"
#include "def.h"
-static const char *opt_type = NULL; /* LUKS1 or PLAIN */
+static const char *opt_type = NULL; /* CRYPT_LUKS1, CRYPT_TCRYPT or CRYPT_PLAIN */
static char *opt_cipher = NULL;
static unsigned opt_key_size = 0;
static unsigned opt_keyfile_size = 0;
static unsigned opt_keyfile_offset = 0;
static char *opt_hash = NULL;
-static unsigned opt_tries = 0;
+static unsigned opt_tries = 3;
static bool opt_readonly = false;
static bool opt_verify = false;
static bool opt_discards = false;
+static bool opt_tcrypt_hidden = false;
+static bool opt_tcrypt_system = false;
+static char **opt_tcrypt_keyfiles = NULL;
static usec_t opt_timeout = 0;
/* Options Debian's crypttab knows we don't:
@@ -82,6 +86,14 @@ static int parse_one_option(const char *option) {
return 0;
}
+ } else if (startswith(option, "tcrypt-keyfile=")) {
+
+ opt_type = CRYPT_TCRYPT;
+ if (path_is_absolute(option+15))
+ opt_tcrypt_keyfiles = strv_append(opt_tcrypt_keyfiles, strdup(option+15));
+ else
+ log_error("Key file path '%s' is not absolute. Ignoring.", option+15);
+
} else if (startswith(option, "keyfile-size=")) {
if (safe_atou(option+13, &opt_keyfile_size) < 0) {
@@ -117,11 +129,19 @@ static int parse_one_option(const char *option) {
opt_readonly = true;
else if (streq(option, "verify"))
opt_verify = true;
- else if (streq(option, "allow-discards"))
+ else if (streq(option, "allow-discards") || streq(option, "discard"))
opt_discards = true;
else if (streq(option, "luks"))
opt_type = CRYPT_LUKS1;
- else if (streq(option, "plain") ||
+ else if (streq(option, "tcrypt"))
+ opt_type = CRYPT_TCRYPT;
+ else if (streq(option, "tcrypt-hidden")) {
+ opt_type = CRYPT_TCRYPT;
+ opt_tcrypt_hidden = true;
+ } else if (streq(option, "tcrypt-system")) {
+ opt_type = CRYPT_TCRYPT;
+ opt_tcrypt_system = true;
+ } else if (streq(option, "plain") ||
streq(option, "swap") ||
streq(option, "tmp"))
opt_type = CRYPT_PLAIN;
@@ -215,7 +235,8 @@ finish:
}
static char *disk_mount_point(const char *label) {
- char *mp = NULL, *device = NULL;
+ char *mp = NULL;
+ _cleanup_free_ char *device = NULL;
FILE *f = NULL;
struct mntent *m;
@@ -238,11 +259,211 @@ finish:
if (f)
endmntent(f);
- free(device);
-
return mp;
}
+static int get_password(const char *name, usec_t until, bool accept_cached, char ***passwords) {
+ int r;
+ char **p;
+ _cleanup_free_ char *text = NULL;
+
+ assert(name);
+ assert(passwords);
+
+ if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0)
+ return log_oom();
+
+ r = ask_password_auto(text, "drive-harddisk", until, accept_cached, passwords);
+ if (r < 0) {
+ log_error("Failed to query password: %s", strerror(-r));
+ return r;
+ }
+
+ if (opt_verify) {
+ _cleanup_strv_free_ char **passwords2 = NULL;
+
+ assert(strv_length(*passwords) == 1);
+
+ if (asprintf(&text, "Please enter passphrase for disk %s! (verification)", name) < 0)
+ return log_oom();
+
+ r = ask_password_auto(text, "drive-harddisk", until, false, &passwords2);
+ if (r < 0) {
+ log_error("Failed to query verification password: %s", strerror(-r));
+ return r;
+ }
+
+ assert(strv_length(passwords2) == 1);
+
+ if (!streq(*passwords[0], passwords2[0])) {
+ log_warning("Passwords did not match, retrying.");
+ return -EAGAIN;
+ }
+ }
+
+ strv_uniq(*passwords);
+
+ STRV_FOREACH(p, *passwords) {
+ char *c;
+
+ if (strlen(*p)+1 >= opt_key_size)
+ continue;
+
+ /* Pad password if necessary */
+ if (!(c = new(char, opt_key_size)))
+ return log_oom();
+
+ strncpy(c, *p, opt_key_size);
+ free(*p);
+ *p = c;
+ }
+
+ return 0;
+}
+
+static int attach_tcrypt(struct crypt_device *cd,
+ const char *name,
+ const char *key_file,
+ char **passwords,
+ uint32_t flags) {
+ int r = 0;
+ _cleanup_free_ char *passphrase = NULL;
+ struct crypt_params_tcrypt params = {
+ .flags = CRYPT_TCRYPT_LEGACY_MODES,
+ .keyfiles = (const char **)opt_tcrypt_keyfiles,
+ .keyfiles_count = strv_length(opt_tcrypt_keyfiles)
+ };
+
+ assert(cd);
+ assert(name);
+ assert(key_file || passwords);
+
+ if (opt_tcrypt_hidden)
+ params.flags |= CRYPT_TCRYPT_HIDDEN_HEADER;
+
+ if (opt_tcrypt_system)
+ params.flags |= CRYPT_TCRYPT_SYSTEM_HEADER;
+
+ if (key_file) {
+ r = read_one_line_file(key_file, &passphrase);
+ if (r < 0) {
+ log_error("Failed to read password file '%s': %s", key_file, strerror(-r));
+ return -EAGAIN;
+ }
+
+ params.passphrase = passphrase;
+ } else
+ params.passphrase = passwords[0];
+ params.passphrase_size = strlen(params.passphrase);
+
+ r = crypt_load(cd, CRYPT_TCRYPT, &params);
+ if (r < 0) {
+ if (key_file && r == -EPERM) {
+ log_error("Failed to activate using password file '%s'.", key_file);
+ return -EAGAIN;
+ }
+ return r;
+ }
+
+ return crypt_activate_by_volume_key(cd, name, NULL, 0, flags);;
+}
+
+static int attach_luks_or_plain(struct crypt_device *cd,
+ const char *name,
+ const char *key_file,
+ char **passwords,
+ uint32_t flags) {
+ int r = 0;
+ bool pass_volume_key = false;
+
+ assert(cd);
+ assert(name);
+ assert(key_file || passwords);
+
+ if (!opt_type || streq(opt_type, CRYPT_LUKS1))
+ r = crypt_load(cd, CRYPT_LUKS1, NULL);
+
+ if ((!opt_type && r < 0) || streq_ptr(opt_type, CRYPT_PLAIN)) {
+ struct crypt_params_plain params = {};
+ const char *cipher, *cipher_mode;
+ _cleanup_free_ char *truncated_cipher = NULL;
+
+ if (opt_hash) {
+ /* plain isn't a real hash type. it just means "use no hash" */
+ if (!streq(opt_hash, "plain"))
+ params.hash = opt_hash;
+ } else
+ params.hash = "ripemd160";
+
+ if (opt_cipher) {
+ size_t l;
+
+ l = strcspn(opt_cipher, "-");
+ truncated_cipher = strndup(opt_cipher, l);
+ if (!truncated_cipher)
+ return log_oom();
+
+ cipher = truncated_cipher;
+ cipher_mode = opt_cipher[l] ? opt_cipher+l+1 : "plain";
+ } else {
+ cipher = "aes";
+ cipher_mode = "cbc-essiv:sha256";
+ }
+
+ /* for CRYPT_PLAIN limit reads
+ * from keyfile to key length, and
+ * ignore keyfile-size */
+ opt_keyfile_size = opt_key_size / 8;
+
+ /* In contrast to what the name
+ * crypt_setup() might suggest this
+ * doesn't actually format anything,
+ * it just configures encryption
+ * parameters when used for plain
+ * mode. */
+ r = crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode,
+ NULL, NULL, opt_keyfile_size, &params);
+
+ /* hash == NULL implies the user passed "plain" */
+ pass_volume_key = (params.hash == NULL);
+ }
+
+ if (r < 0) {
+ log_error("Loading of cryptographic parameters failed: %s", strerror(-r));
+ return r;
+ }
+
+ log_info("Set cipher %s, mode %s, key size %i bits for device %s.",
+ crypt_get_cipher(cd),
+ crypt_get_cipher_mode(cd),
+ crypt_get_volume_key_size(cd)*8,
+ crypt_get_device_name(cd));
+
+ if (key_file) {
+ r = crypt_activate_by_keyfile_offset(cd, name, CRYPT_ANY_SLOT,
+ key_file, opt_keyfile_size,
+ opt_keyfile_offset, flags);
+ if (r < 0) {
+ log_error("Failed to activate with key file '%s': %s", key_file, strerror(-r));
+ return -EAGAIN;
+ }
+ } else {
+ char **p;
+
+ STRV_FOREACH(p, passwords) {
+ if (pass_volume_key)
+ r = crypt_activate_by_volume_key(cd, name, *p, opt_key_size, flags);
+ else
+ r = crypt_activate_by_passphrase(cd, name, CRYPT_ANY_SLOT, *p, strlen(*p), flags);
+
+ if (r >= 0)
+ break;
+ }
+ }
+
+ return r;
+}
+
static int help(void) {
printf("%s attach VOLUME SOURCEDEVICE [PASSWORD] [OPTIONS]\n"
@@ -257,9 +478,6 @@ static int help(void) {
int main(int argc, char *argv[]) {
int r = EXIT_FAILURE;
struct crypt_device *cd = NULL;
- char **passwords = NULL, *truncated_cipher = NULL;
- const char *cipher = NULL, *cipher_mode = NULL, *hash = NULL, *name = NULL;
- char *description = NULL, *name_buffer = NULL, *mount_point = NULL;
if (argc <= 1) {
help();
@@ -280,10 +498,11 @@ int main(int argc, char *argv[]) {
if (streq(argv[1], "attach")) {
uint32_t flags = 0;
int k;
- unsigned try;
- const char *key_file = NULL;
+ unsigned tries;
usec_t until;
crypt_status_info status;
+ const char *key_file = NULL, *name = NULL;
+ _cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL;
/* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [PASSWORD] [OPTIONS] */
@@ -298,7 +517,7 @@ int main(int argc, char *argv[]) {
!streq(argv[4], "none")) {
if (!path_is_absolute(argv[4]))
- log_error("Password file path %s is not absolute. Ignoring.", argv[4]);
+ log_error("Password file path '%s' is not absolute. Ignoring.", argv[4]);
else
key_file = argv[4];
}
@@ -357,183 +576,38 @@ int main(int argc, char *argv[]) {
else
until = 0;
- opt_tries = opt_tries > 0 ? opt_tries : 3;
opt_key_size = (opt_key_size > 0 ? opt_key_size : 256);
- if (opt_hash) {
- /* plain isn't a real hash type. it just means "use no hash" */
- if (!streq(opt_hash, "plain"))
- hash = opt_hash;
- } else
- hash = "ripemd160";
-
- if (opt_cipher) {
- size_t l;
- l = strcspn(opt_cipher, "-");
- truncated_cipher = strndup(opt_cipher, l);
-
- if (!truncated_cipher) {
- log_oom();
- goto finish;
- }
+ if (key_file) {
+ struct stat st;
- cipher = truncated_cipher;
- cipher_mode = opt_cipher[l] ? opt_cipher+l+1 : "plain";
- } else {
- cipher = "aes";
- cipher_mode = "cbc-essiv:sha256";
+ /* Ideally we'd do this on the open fd, but since this is just a
+ * warning it's OK to do this in two steps. */
+ if (stat(key_file, &st) >= 0 && (st.st_mode & 0005))
+ log_warning("Key file %s is world-readable. This is not a good idea!", key_file);
}
- for (try = 0; try < opt_tries; try++) {
- bool pass_volume_key = false;
-
- strv_free(passwords);
- passwords = NULL;
+ for (tries = 0; opt_tries == 0 || tries < opt_tries; tries++) {
+ _cleanup_strv_free_ char **passwords = NULL;
if (!key_file) {
- char *text, **p;
-
- if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0) {
- log_oom();
- goto finish;
- }
-
- k = ask_password_auto(text, "drive-harddisk", until, try == 0 && !opt_verify, &passwords);
- free(text);
-
- if (k < 0) {
- log_error("Failed to query password: %s", strerror(-k));
- goto finish;
- }
-
- if (opt_verify) {
- char **passwords2 = NULL;
-
- assert(strv_length(passwords) == 1);
-
- if (asprintf(&text, "Please enter passphrase for disk %s! (verification)", name) < 0) {
- log_oom();
- goto finish;
- }
-
- k = ask_password_auto(text, "drive-harddisk", until, false, &passwords2);
- free(text);
-
- if (k < 0) {
- log_error("Failed to query verification password: %s", strerror(-k));
- goto finish;
- }
-
- assert(strv_length(passwords2) == 1);
-
- if (!streq(passwords[0], passwords2[0])) {
- log_warning("Passwords did not match, retrying.");
- strv_free(passwords2);
- continue;
- }
-
- strv_free(passwords2);
- }
-
- strv_uniq(passwords);
-
- STRV_FOREACH(p, passwords) {
- char *c;
-
- if (strlen(*p)+1 >= opt_key_size)
- continue;
-
- /* Pad password if necessary */
- if (!(c = new(char, opt_key_size))) {
- log_oom();
- goto finish;
- }
-
- strncpy(c, *p, opt_key_size);
- free(*p);
- *p = c;
- }
- }
-
- k = 0;
-
- if (!opt_type || streq(opt_type, CRYPT_LUKS1))
- k = crypt_load(cd, CRYPT_LUKS1, NULL);
-
- if ((!opt_type && k < 0) || streq_ptr(opt_type, CRYPT_PLAIN)) {
- struct crypt_params_plain params = { .hash = hash };
-
- /* for CRYPT_PLAIN limit reads
- * from keyfile to key length, and
- * ignore keyfile-size */
- opt_keyfile_size = opt_key_size / 8;
-
- /* In contrast to what the name
- * crypt_setup() might suggest this
- * doesn't actually format anything,
- * it just configures encryption
- * parameters when used for plain
- * mode. */
- k = crypt_format(cd, CRYPT_PLAIN,
- cipher,
- cipher_mode,
- NULL,
- NULL,
- opt_keyfile_size,
- &params);
-
- /* hash == NULL implies the user passed "plain" */
- pass_volume_key = (hash == NULL);
- }
-
- if (k < 0) {
- log_error("Loading of cryptographic parameters failed: %s", strerror(-k));
- goto finish;
- }
-
- log_info("Set cipher %s, mode %s, key size %i bits for device %s.",
- crypt_get_cipher(cd),
- crypt_get_cipher_mode(cd),
- crypt_get_volume_key_size(cd)*8,
- argv[3]);
-
- if (key_file) {
- struct stat st;
-
- /* Ideally we'd do this on the open
- * fd, but since this is just a
- * warning it's OK to do this in two
- * steps */
- if (stat(key_file, &st) >= 0 && (st.st_mode & 0005))
- log_warning("Key file %s is world-readable. That's certainly not a good idea.", key_file);
-
- k = crypt_activate_by_keyfile_offset(
- cd, argv[2], CRYPT_ANY_SLOT, key_file, opt_keyfile_size,
- opt_keyfile_offset, flags);
- if (k < 0) {
- log_error("Failed to activate with key file '%s': %s", key_file, strerror(-k));
- key_file = NULL;
+ k = get_password(name, until, tries == 0 && !opt_verify, &passwords);
+ if (k == -EAGAIN)
continue;
- }
- } else {
- char **p;
-
- STRV_FOREACH(p, passwords) {
-
- if (pass_volume_key)
- k = crypt_activate_by_volume_key(cd, argv[2], *p, opt_key_size, flags);
- else
- k = crypt_activate_by_passphrase(cd, argv[2], CRYPT_ANY_SLOT, *p, strlen(*p), flags);
-
- if (k >= 0)
- break;
- }
+ else if (k < 0)
+ goto finish;
}
+ if (streq_ptr(opt_type, CRYPT_TCRYPT))
+ k = attach_tcrypt(cd, argv[2], key_file, passwords, flags);
+ else
+ k = attach_luks_or_plain(cd, argv[2], key_file, passwords, flags);
if (k >= 0)
break;
-
- if (k != -EPERM) {
+ else if (k == -EAGAIN) {
+ key_file = NULL;
+ continue;
+ } else if (k != -EPERM) {
log_error("Failed to activate: %s", strerror(-k));
goto finish;
}
@@ -541,8 +615,8 @@ int main(int argc, char *argv[]) {
log_warning("Invalid passphrase.");
}
- if (try >= opt_tries) {
- log_error("Too many attempts.");
+ if (opt_tries != 0 && tries >= opt_tries) {
+ log_error("Too many attempts; giving up.");
r = EXIT_FAILURE;
goto finish;
}
@@ -578,14 +652,7 @@ finish:
free(opt_cipher);
free(opt_hash);
-
- free(truncated_cipher);
-
- strv_free(passwords);
-
- free(description);
- free(mount_point);
- free(name_buffer);
+ strv_free(opt_tcrypt_keyfiles);
return r;
}
diff --git a/src/delta/delta.c b/src/delta/delta.c
index aec3dc8995..b3272d916e 100644
--- a/src/delta/delta.c
+++ b/src/delta/delta.c
@@ -31,6 +31,7 @@
#include "log.h"
#include "pager.h"
#include "build.h"
+#include "strv.h"
static bool arg_no_pager = false;
static int arg_diff = -1;
@@ -41,9 +42,10 @@ static enum {
SHOW_REDIRECTED = 1 << 2,
SHOW_OVERRIDDEN = 1 << 3,
SHOW_UNCHANGED = 1 << 4,
+ SHOW_EXTENDED = 1 << 5,
SHOW_DEFAULTS =
- (SHOW_MASKED | SHOW_EQUIVALENT | SHOW_REDIRECTED | SHOW_OVERRIDDEN)
+ (SHOW_MASKED | SHOW_EQUIVALENT | SHOW_REDIRECTED | SHOW_OVERRIDDEN | SHOW_EXTENDED)
} arg_flags = 0;
static int equivalent(const char *a, const char *b) {
@@ -64,7 +66,8 @@ static int notify_override_masked(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_MASKED))
return 0;
- printf(ANSI_HIGHLIGHT_RED_ON "[MASKED]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
+ printf("%s%s%s %s → %s\n",
+ ansi_highlight_red(), "[MASKED]", ansi_highlight_off(), top, bottom);
return 1;
}
@@ -72,7 +75,8 @@ static int notify_override_equivalent(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_EQUIVALENT))
return 0;
- printf(ANSI_HIGHLIGHT_GREEN_ON "[EQUIVALENT]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
+ printf("%s%s%s %s → %s\n",
+ ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight(), top, bottom);
return 1;
}
@@ -80,7 +84,8 @@ static int notify_override_redirected(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_REDIRECTED))
return 0;
- printf(ANSI_HIGHLIGHT_ON "[REDIRECTED]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
+ printf("%s%s%s %s → %s\n",
+ ansi_highlight(), "[REDIRECTED]", ansi_highlight_off(), top, bottom);
return 1;
}
@@ -88,7 +93,17 @@ static int notify_override_overridden(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_OVERRIDDEN))
return 0;
- printf(ANSI_HIGHLIGHT_ON "[OVERRIDDEN]" ANSI_HIGHLIGHT_OFF " %s → %s\n", top, bottom);
+ printf("%s%s%s %s → %s\n",
+ ansi_highlight(), "[OVERRIDDEN]", ansi_highlight_off(), top, bottom);
+ return 1;
+}
+
+static int notify_override_extended(const char *top, const char *bottom) {
+ if (!(arg_flags & SHOW_EXTENDED))
+ return 0;
+
+ printf("%s%s%s %s → %s\n",
+ ansi_highlight(), "[EXTENDED]", ansi_highlight_off(), top, bottom);
return 1;
}
@@ -108,24 +123,20 @@ static int found_override(const char *top, const char *bottom) {
assert(top);
assert(bottom);
- if (null_or_empty_path(top) > 0) {
- notify_override_masked(top, bottom);
- return 0;
- }
+ if (null_or_empty_path(top) > 0)
+ return notify_override_masked(top, bottom);
k = readlink_malloc(top, &dest);
if (k >= 0) {
if (equivalent(dest, bottom) > 0)
- notify_override_equivalent(top, bottom);
+ return notify_override_equivalent(top, bottom);
else
- notify_override_redirected(top, bottom);
-
- return 0;
+ return notify_override_redirected(top, bottom);
}
- notify_override_overridden(top, bottom);
+ k = notify_override_overridden(top, bottom);
if (!arg_diff)
- return 0;
+ return k;
putchar('\n');
@@ -145,14 +156,117 @@ static int found_override(const char *top, const char *bottom) {
putchar('\n');
+ return k;
+}
+
+static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const char *toppath, const char *drop) {
+ _cleanup_free_ char *conf = NULL;
+ _cleanup_free_ char *path = NULL;
+ _cleanup_strv_free_ char **list = NULL;
+ char **file;
+ char *c;
+ int r;
+
+ path = strjoin(toppath, "/", drop, NULL);
+ if (!path)
+ return -ENOMEM;
+
+ path_kill_slashes(path);
+
+ conf = strdup(drop);
+ if (!conf)
+ return -ENOMEM;
+
+ c = strrchr(conf, '.');
+ if (!c)
+ return -EINVAL;
+ *c = 0;
+
+ r = get_files_in_directory(path, &list);
+ if (r < 0){
+ log_error("Failed to enumerate %s: %s", path, strerror(-r));
+ return r;
+ }
+
+ STRV_FOREACH(file, list) {
+ Hashmap *h;
+ int k;
+ char *p;
+ char *d;
+
+ if (!endswith(*file, ".conf"))
+ continue;
+
+ p = strjoin(path, "/", *file, NULL);
+ if (!p)
+ return -ENOMEM;
+
+ path_kill_slashes(p);
+
+ d = strrchr(p, '/');
+ if (!d || d == p) {
+ free(p);
+ return -EINVAL;
+ }
+ d--;
+ d = strrchr(p, '/');
+
+ if (!d || d == p) {
+ free(p);
+ return -EINVAL;
+ }
+
+ k = hashmap_put(top, d, p);
+ if (k >= 0) {
+ p = strdup(p);
+ if (!p)
+ return -ENOMEM;
+ d = strrchr(p, '/');
+ d--;
+ d = strrchr(p, '/');
+ } else if (k != -EEXIST) {
+ free(p);
+ return k;
+ }
+
+ free(hashmap_remove(bottom, d));
+ k = hashmap_put(bottom, d, p);
+ if (k < 0) {
+ free(p);
+ return k;
+ }
+
+ h = hashmap_get(drops, conf);
+ if (!h) {
+ h = hashmap_new(string_hash_func, string_compare_func);
+ if (!h)
+ return -ENOMEM;
+ hashmap_put(drops, conf, h);
+ conf = strdup(conf);
+ if (!conf)
+ return -ENOMEM;
+ }
+
+ p = strdup(p);
+ if (!p)
+ return -ENOMEM;
+
+ k = hashmap_put(h, path_get_file_name(p), p);
+ if (k < 0) {
+ free(p);
+ if (k != -EEXIST)
+ return k;
+ }
+ }
return 0;
}
-static int enumerate_dir(Hashmap *top, Hashmap *bottom, const char *path) {
+static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const char *path, bool dropins) {
_cleanup_closedir_ DIR *d;
assert(top);
assert(bottom);
+ assert(drops);
assert(path);
d = opendir(path);
@@ -177,6 +291,9 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, const char *path) {
if (!de)
break;
+ if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
+ enumerate_dir_d(top, bottom, drops, path, de->d_name);
+
if (!dirent_is_file(de))
continue;
@@ -207,12 +324,14 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, const char *path) {
return 0;
}
-static int process_suffix(const char *prefixes, const char *suffix) {
+static int process_suffix(const char *prefixes, const char *suffix, bool dropins) {
const char *p;
char *f;
- Hashmap *top, *bottom=NULL;
+ Hashmap *top, *bottom=NULL, *drops=NULL;
+ Hashmap *h;
+ char *key;
int r = 0, k;
- Iterator i;
+ Iterator i, j;
int n_found = 0;
assert(prefixes);
@@ -230,6 +349,12 @@ static int process_suffix(const char *prefixes, const char *suffix) {
goto finish;
}
+ drops = hashmap_new(string_hash_func, string_compare_func);
+ if (!drops) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
NULSTR_FOREACH(p, prefixes) {
_cleanup_free_ char *t = NULL;
@@ -239,29 +364,33 @@ static int process_suffix(const char *prefixes, const char *suffix) {
goto finish;
}
- k = enumerate_dir(top, bottom, t);
+ k = enumerate_dir(top, bottom, drops, t, dropins);
if (k < 0)
r = k;
log_debug("Looking at %s", t);
}
- HASHMAP_FOREACH(f, top, i) {
+ HASHMAP_FOREACH_KEY(f, key, top, i) {
char *o;
- o = hashmap_get(bottom, path_get_file_name(f));
+ o = hashmap_get(bottom, key);
assert(o);
- if (path_equal(o, f)) {
+ if (path_equal(o, f))
notify_override_unchanged(f);
- continue;
+ else {
+ k = found_override(f, o);
+ if (k < 0)
+ r = k;
+ else
+ n_found += k;
}
- k = found_override(f, o);
- if (k < 0)
- r = k;
-
- n_found ++;
+ h = hashmap_get(drops, key);
+ if (h)
+ HASHMAP_FOREACH(o, h, j)
+ n_found += notify_override_extended(f, o);
}
finish:
@@ -269,25 +398,32 @@ finish:
hashmap_free_free(top);
if (bottom)
hashmap_free_free(bottom);
-
+ if (drops) {
+ HASHMAP_FOREACH_KEY(h, key, drops, i){
+ hashmap_free_free(hashmap_remove(drops, key));
+ hashmap_remove(drops, key);
+ free(key);
+ }
+ hashmap_free(drops);
+ }
return r < 0 ? r : n_found;
}
-static int process_suffix_chop(const char *prefixes, const char *suffix) {
+static int process_suffix_chop(const char *prefixes, const char *suffix, const char *have_dropins) {
const char *p;
assert(prefixes);
assert(suffix);
if (!path_is_absolute(suffix))
- return process_suffix(prefixes, suffix);
+ return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
/* Strip prefix from the suffix */
NULSTR_FOREACH(p, prefixes) {
if (startswith(suffix, p)) {
suffix += strlen(p);
suffix += strspn(suffix, "/");
- return process_suffix(prefixes, suffix);
+ return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix));
}
}
@@ -322,6 +458,8 @@ static int parse_flags(const char *flag_str, int flags) {
flags |= SHOW_OVERRIDDEN;
else if (strneq("unchanged", w, l))
flags |= SHOW_UNCHANGED;
+ else if (strneq("extended", w, l))
+ flags |= SHOW_EXTENDED;
else if (strneq("default", w, l))
flags |= SHOW_DEFAULTS;
else
@@ -435,6 +573,10 @@ int main(int argc, char *argv[]) {
"udev/rules.d\0"
"modprobe.d\0";
+ const char have_dropins[] =
+ "systemd/system\0"
+ "systemd/user\0";
+
int r = 0, k;
int n_found = 0;
@@ -460,7 +602,7 @@ int main(int argc, char *argv[]) {
int i;
for (i = optind; i < argc; i++) {
- k = process_suffix_chop(prefixes, argv[i]);
+ k = process_suffix_chop(prefixes, argv[i], have_dropins);
if (k < 0)
r = k;
else
@@ -471,7 +613,7 @@ int main(int argc, char *argv[]) {
const char *n;
NULSTR_FOREACH(n, suffixes) {
- k = process_suffix(prefixes, n);
+ k = process_suffix(prefixes, n, nulstr_contains(have_dropins, n));
if (k < 0)
r = k;
else
@@ -480,7 +622,8 @@ int main(int argc, char *argv[]) {
}
if (r >= 0)
- printf("\n%i overridden configuration files found.\n", n_found);
+ printf("%s%i overridden configuration files found.\n",
+ n_found ? "\n" : "", n_found);
finish:
pager_close();
diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c
index 4367c536b0..05b95ed455 100644
--- a/src/efi-boot-generator/efi-boot-generator.c
+++ b/src/efi-boot-generator/efi-boot-generator.c
@@ -55,7 +55,7 @@ int main(int argc, char *argv[]) {
if (dir_is_empty("/boot") <= 0)
return EXIT_SUCCESS;
- r = efi_get_loader_device_part_uuid(&id);
+ r = efi_loader_get_device_part_uuid(&id);
if (r == -ENOENT)
return EXIT_SUCCESS;
if (r < 0) {
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index c17299f267..9efccb983d 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -38,22 +38,6 @@
static const char *arg_dest = "/tmp";
static bool arg_enabled = true;
-static int device_name(const char *path, char **unit) {
- char *p;
-
- assert(path);
-
- if (!is_device_path(path))
- return 0;
-
- p = unit_name_from_path(path, ".device");
- if (!p)
- return log_oom();
-
- *unit = p;
- return 1;
-}
-
static int mount_find_pri(struct mntent *me, int *ret) {
char *end, *pri;
unsigned long r;
@@ -80,9 +64,9 @@ static int mount_find_pri(struct mntent *me, int *ret) {
}
static int add_swap(const char *what, struct mntent *me) {
- _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
+ _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL;
_cleanup_fclose_ FILE *f = NULL;
- bool noauto, nofail;
+ bool noauto;
int r, pri = -1;
assert(what);
@@ -95,7 +79,6 @@ static int add_swap(const char *what, struct mntent *me) {
}
noauto = !!hasmntopt(me, "noauto");
- nofail = !!hasmntopt(me, "nofail");
name = unit_name_from_path(what, ".swap");
if (!name)
@@ -114,18 +97,10 @@ static int add_swap(const char *what, struct mntent *me) {
return -errno;
}
- fputs("# Automatically generated by systemd-fstab-generator\n\n"
- "[Unit]\n"
- "SourcePath=/etc/fstab\n"
- "DefaultDependencies=no\n"
- "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
- "Before=" SPECIAL_UMOUNT_TARGET "\n", f);
-
- if (!noauto && !nofail)
- fputs("Before=" SPECIAL_SWAP_TARGET "\n", f);
-
fprintf(f,
- "\n"
+ "# Automatically generated by systemd-fstab-generator\n\n"
+ "[Unit]\n"
+ "SourcePath=/etc/fstab\n\n"
"[Swap]\n"
"What=%s\n",
what);
@@ -151,38 +126,11 @@ static int add_swap(const char *what, struct mntent *me) {
log_error("Failed to create symlink %s: %m", lnk);
return -errno;
}
-
- r = device_name(what, &device);
- if (r < 0)
- return r;
-
- if (r > 0) {
- free(lnk);
- lnk = strjoin(arg_dest, "/", device, ".wants/", name, NULL);
- if (!lnk)
- return log_oom();
-
- mkdir_parents_label(lnk, 0755);
- if (symlink(unit, lnk) < 0) {
- log_error("Failed to create symlink %s: %m", lnk);
- return -errno;
- }
- }
}
return 0;
}
-static bool mount_is_bind(struct mntent *me) {
- assert(me);
-
- return
- hasmntopt(me, "bind") ||
- streq(me->mnt_type, "bind") ||
- hasmntopt(me, "rbind") ||
- streq(me->mnt_type, "rbind");
-}
-
static bool mount_is_network(struct mntent *me) {
assert(me);
@@ -208,17 +156,12 @@ static int add_mount(
bool noauto,
bool nofail,
bool automount,
- bool isbind,
- const char *pre,
- const char *pre2,
- const char *online,
const char *post,
const char *source) {
_cleanup_free_ char
- *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL,
+ *name = NULL, *unit = NULL, *lnk = NULL,
*automount_name = NULL, *automount_unit = NULL;
_cleanup_fclose_ FILE *f = NULL;
- int r;
assert(what);
assert(where);
@@ -258,33 +201,9 @@ static int add_mount(
fprintf(f,
"# Automatically generated by systemd-fstab-generator\n\n"
"[Unit]\n"
- "SourcePath=%s\n"
- "DefaultDependencies=no\n",
+ "SourcePath=%s\n",
source);
- if (!path_equal(where, "/")) {
- if (pre)
- fprintf(f,
- "After=%s\n",
- pre);
-
- if (pre2)
- fprintf(f,
- "After=%s\n",
- pre2);
-
- if (online)
- fprintf(f,
- "After=%s\n"
- "Wants=%s\n",
- online,
- online);
-
- fprintf(f,
- "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
- "Before=" SPECIAL_UMOUNT_TARGET "\n");
- }
-
if (post && !noauto && !nofail && !automount)
fprintf(f,
"Before=%s\n",
@@ -326,32 +245,11 @@ static int add_mount(
return -errno;
}
}
-
- if (!isbind &&
- !path_equal(where, "/")) {
-
- r = device_name(what, &device);
- if (r < 0)
- return r;
-
- if (r > 0) {
- free(lnk);
- lnk = strjoin(arg_dest, "/", device, ".wants/", name, NULL);
- if (!lnk)
- return log_oom();
-
- mkdir_parents_label(lnk, 0755);
- if (symlink(unit, lnk) < 0) {
- log_error("Failed to create symlink %s: %m", lnk);
- return -errno;
- }
- }
- }
}
if (automount && !path_equal(where, "/")) {
automount_name = unit_name_from_path(where, ".automount");
- if (!name)
+ if (!automount_name)
return log_oom();
automount_unit = strjoin(arg_dest, "/", automount_name, NULL);
@@ -368,10 +266,7 @@ static int add_mount(
fprintf(f,
"# Automatically generated by systemd-fstab-generator\n\n"
"[Unit]\n"
- "SourcePath=%s\n"
- "DefaultDependencies=no\n"
- "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
- "Before=" SPECIAL_UMOUNT_TARGET "\n",
+ "SourcePath=%s\n",
source);
if (post)
@@ -446,36 +341,28 @@ static int parse_fstab(const char *prefix, bool initrd) {
if (streq(me->mnt_type, "swap"))
k = add_swap(what, me);
else {
- bool noauto, nofail, automount, isbind;
- const char *pre, *pre2, *post, *online;
+ bool noauto, nofail, automount;
+ const char *post;
noauto = !!hasmntopt(me, "noauto");
nofail = !!hasmntopt(me, "nofail");
automount =
hasmntopt(me, "comment=systemd.automount") ||
hasmntopt(me, "x-systemd.automount");
- isbind = mount_is_bind(me);
if (initrd) {
- pre = pre2 = online = NULL;
post = SPECIAL_INITRD_FS_TARGET;
} else if (mount_in_initrd(me)) {
- pre = pre2 = online = NULL;
post = SPECIAL_INITRD_ROOT_FS_TARGET;
} else if (mount_is_network(me)) {
- pre = SPECIAL_REMOTE_FS_PRE_TARGET;
- pre2 = SPECIAL_NETWORK_TARGET;
- online = SPECIAL_NETWORK_ONLINE_TARGET;
post = SPECIAL_REMOTE_FS_TARGET;
} else {
- pre = SPECIAL_LOCAL_FS_PRE_TARGET;
- pre2 = online = NULL;
post = SPECIAL_LOCAL_FS_TARGET;
}
k = add_mount(what, where, me->mnt_type, me->mnt_opts,
me->mnt_passno, noauto, nofail, automount,
- isbind, pre, pre2, online, post, fstab_path);
+ post, fstab_path);
}
if (k < 0)
@@ -492,6 +379,7 @@ static int parse_new_root_from_proc_cmdline(void) {
char *w, *state;
int r;
size_t l;
+ bool noauto, nofail;
r = read_one_line_file("/proc/cmdline", &line);
if (r < 0) {
@@ -547,6 +435,9 @@ static int parse_new_root_from_proc_cmdline(void) {
}
}
+ noauto = !!strstr(opts, "noauto");
+ nofail = !!strstr(opts, "nofail");
+
if (!what) {
log_debug("Could not find a root= entry on the kernel commandline.");
return 0;
@@ -558,8 +449,8 @@ static int parse_new_root_from_proc_cmdline(void) {
}
log_debug("Found entry what=%s where=/sysroot type=%s", what, type);
- r = add_mount(what, "/sysroot", type, opts, 0, false, false, false,
- false, NULL, NULL, NULL, SPECIAL_INITRD_ROOT_FS_TARGET, "/proc/cmdline");
+ r = add_mount(what, "/sysroot", type, opts, 0, noauto, nofail, false,
+ SPECIAL_INITRD_ROOT_FS_TARGET, "/proc/cmdline");
return (r < 0) ? r : 0;
}
@@ -596,9 +487,9 @@ static int parse_proc_cmdline(void) {
} else if (startswith(word, "rd.fstab=")) {
if (in_initrd()) {
- r = parse_boolean(word + 6);
+ r = parse_boolean(word + 9);
if (r < 0)
- log_warning("Failed to parse fstab switch %s. Ignoring.", word + 6);
+ log_warning("Failed to parse fstab switch %s. Ignoring.", word + 9);
else
arg_enabled = r;
}
diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c
index 4b7a60a4ec..6c938062de 100644
--- a/src/getty-generator/getty-generator.c
+++ b/src/getty-generator/getty-generator.c
@@ -122,33 +122,42 @@ int main(int argc, char *argv[]) {
}
if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) {
- const char *tty;
-
- tty = strrchr(active, ' ');
- if (tty)
- tty ++;
- else
- tty = active;
-
- /* Automatically add in a serial getty on the kernel
- * console */
- if (isempty(tty) || tty_is_vc(tty))
- free(active);
- else {
+ char *w, *state;
+ size_t l;
+
+ /* Automatically add in a serial getty on all active
+ * kernel consoles */
+ FOREACH_WORD(w, l, active, state) {
+ char *tty;
int k;
+ tty = strndup(w, l);
+ if (!tty) {
+ log_oom();
+ free(active);
+ r = EXIT_FAILURE;
+ goto finish;
+ }
+
+ if (isempty(tty) || tty_is_vc(tty)) {
+ free(tty);
+ continue;
+ }
+
/* We assume that gettys on virtual terminals are
* started via manual configuration and do this magic
* only for non-VC terminals. */
k = add_serial_getty(tty);
- free(active);
if (k < 0) {
+ free(tty);
+ free(active);
r = EXIT_FAILURE;
goto finish;
}
}
+ free(active);
}
/* Automatically add in a serial getty on the first
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
new file mode 100644
index 0000000000..ca54925da4
--- /dev/null
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -0,0 +1,527 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/statfs.h>
+#include <blkid.h>
+
+#ifdef HAVE_LINUX_BTRFS_H
+#include <linux/btrfs.h>
+#endif
+
+#include "path-util.h"
+#include "util.h"
+#include "mkdir.h"
+#include "missing.h"
+#include "sd-id128.h"
+#include "libudev.h"
+#include "special.h"
+#include "unit-name.h"
+
+/* TODO:
+ *
+ * - Properly handle cryptsetup partitions
+ * - Define new partition type for encrypted swap
+ * - Make /home automount rather than mount
+ *
+ */
+
+static const char *arg_dest = "/tmp";
+
+static inline void blkid_free_probep(blkid_probe *b) {
+ if (*b)
+ blkid_free_probe(*b);
+}
+#define _cleanup_blkid_freep_probe_ _cleanup_(blkid_free_probep)
+
+static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr, char **fstype) {
+ _cleanup_blkid_freep_probe_ blkid_probe b = NULL;
+ const char *v;
+ int r;
+
+ errno = 0;
+ b = blkid_new_probe_from_filename(node);
+ if (!b)
+ return errno != 0 ? -errno : -ENOMEM;
+
+ blkid_probe_enable_superblocks(b, 1);
+ blkid_probe_set_superblocks_flags(b, BLKID_SUBLKS_TYPE);
+ blkid_probe_enable_partitions(b, 1);
+ blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+
+ errno = 0;
+ r = blkid_do_safeprobe(b);
+ if (r == -2)
+ return -ENODEV;
+ else if (r == 1)
+ return -ENODEV;
+ else if (r != 0)
+ return errno ? -errno : -EIO;
+
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "PART_ENTRY_SCHEME", &v, NULL);
+ if (r != 0)
+ /* return 0 if we're not on GPT */
+ return errno ? -errno : 0;
+
+ if (strcmp(v, "gpt") != 0)
+ return 0;
+
+ if (type) {
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "PART_ENTRY_TYPE", &v, NULL);
+ if (r != 0)
+ return errno ? -errno : -EIO;
+
+ r = sd_id128_from_string(v, type);
+ if (r < 0)
+ return r;
+ }
+
+ if (nr) {
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "PART_ENTRY_NUMBER", &v, NULL);
+ if (r != 0)
+ return errno ? -errno : -EIO;
+
+ r = safe_atou(v, nr);
+ if (r < 0)
+ return r;
+ }
+
+
+ if (fstype) {
+ char *fst;
+
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "TYPE", &v, NULL);
+ if (r != 0)
+ *fstype = NULL;
+ else {
+ fst = strdup(v);
+ if (!fst)
+ return -ENOMEM;
+
+ *fstype = fst;
+ }
+ }
+
+ return 1;
+}
+
+static int add_swap(const char *path, const char *fstype) {
+ _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+
+ log_debug("Adding swap: %s %s", path, fstype);
+
+ name = unit_name_from_path(path, ".swap");
+ if (!name)
+ return log_oom();
+
+ unit = strjoin(arg_dest, "/", name, NULL);
+ if (!unit)
+ return log_oom();
+
+ f = fopen(unit, "wxe");
+ if (!f) {
+ log_error("Failed to create unit file %s: %m", unit);
+ return -errno;
+ }
+
+ fprintf(f,
+ "# Automatically generated by systemd-gpt-auto-generator\n\n"
+ "[Unit]\n"
+ "DefaultDependencies=no\n"
+ "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
+ "Before=" SPECIAL_UMOUNT_TARGET " " SPECIAL_SWAP_TARGET "\n\n"
+ "[Swap]\n"
+ "What=%s\n",
+ path);
+
+ fflush(f);
+ if (ferror(f)) {
+ log_error("Failed to write unit file %s: %m", unit);
+ return -errno;
+ }
+
+ lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
+ if (!lnk)
+ return log_oom();
+
+ mkdir_parents_label(lnk, 0755);
+ if (symlink(unit, lnk) < 0) {
+ log_error("Failed to create symlink %s: %m", lnk);
+ return -errno;
+ }
+
+ return 0;
+}
+
+static int add_home(const char *path, const char *fstype) {
+ _cleanup_free_ char *unit = NULL, *lnk = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+
+ if (dir_is_empty("/home") <= 0)
+ return 0;
+
+ log_debug("Adding home: %s %s", path, fstype);
+
+ unit = strappend(arg_dest, "/home.mount");
+ if (!unit)
+ return log_oom();
+
+ f = fopen(unit, "wxe");
+ if (!f) {
+ log_error("Failed to create unit file %s: %m", unit);
+ return -errno;
+ }
+
+ fprintf(f,
+ "# Automatically generated by systemd-gpt-auto-generator\n\n"
+ "[Unit]\n"
+ "DefaultDependencies=no\n"
+ "After=" SPECIAL_LOCAL_FS_PRE_TARGET "\n"
+ "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
+ "Before=" SPECIAL_UMOUNT_TARGET " " SPECIAL_LOCAL_FS_TARGET "\n\n"
+ "[Mount]\n"
+ "What=%s\n"
+ "Where=/home\n"
+ "Type=%s\n"
+ "FsckPassNo=2\n",
+ path, fstype);
+
+ fflush(f);
+ if (ferror(f)) {
+ log_error("Failed to write unit file %s: %m", unit);
+ return -errno;
+ }
+
+ lnk = strjoin(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".requires/home.mount", NULL);
+ if (!lnk)
+ return log_oom();
+
+
+ mkdir_parents_label(lnk, 0755);
+ if (symlink(unit, lnk) < 0) {
+ log_error("Failed to create symlink %s: %m", lnk);
+ return -errno;
+ }
+
+ return 0;
+}
+
+static int enumerate_partitions(struct udev *udev, dev_t dev) {
+ struct udev_enumerate *e = NULL;
+ struct udev_device *parent = NULL, *d = NULL;
+ struct udev_list_entry *first, *item;
+ unsigned home_nr = (unsigned) -1;
+ _cleanup_free_ char *home = NULL, *home_fstype = NULL;
+ int r;
+
+ e = udev_enumerate_new(udev);
+ if (!e) {
+ r = log_oom();
+ goto finish;
+ }
+
+ d = udev_device_new_from_devnum(udev, 'b', dev);
+ if (!d) {
+ r = log_oom();
+ goto finish;
+ }
+
+ parent = udev_device_get_parent(d);
+ if (!parent) {
+ r = log_oom();
+ goto finish;
+ }
+
+ r = udev_enumerate_add_match_parent(e, parent);
+ if (r < 0) {
+ r = log_oom();
+ goto finish;
+ }
+
+ r = udev_enumerate_add_match_subsystem(e, "block");
+ if (r < 0) {
+ r = log_oom();
+ goto finish;
+ }
+
+ r = udev_enumerate_scan_devices(e);
+ if (r < 0) {
+ log_error("Failed to enumerate partitions on /dev/block/%u:%u: %s",
+ major(dev), minor(dev), strerror(-r));
+ goto finish;
+ }
+
+ first = udev_enumerate_get_list_entry(e);
+ udev_list_entry_foreach(item, first) {
+ _cleanup_free_ char *fstype = NULL;
+ const char *node = NULL;
+ struct udev_device *q;
+ sd_id128_t type_id;
+ unsigned nr;
+
+ q = udev_device_new_from_syspath(udev, udev_list_entry_get_name(item));
+ if (!q) {
+ r = log_oom();
+ goto finish;
+ }
+
+ if (udev_device_get_devnum(q) == udev_device_get_devnum(d))
+ goto skip;
+
+ if (udev_device_get_devnum(q) == udev_device_get_devnum(parent))
+ goto skip;
+
+ node = udev_device_get_devnode(q);
+ if (!node) {
+ r = log_oom();
+ goto finish;
+ }
+
+ r = verify_gpt_partition(node, &type_id, &nr, &fstype);
+ if (r < 0) {
+ log_error("Failed to verify GPT partition %s: %s",
+ node, strerror(-r));
+ udev_device_unref(q);
+ goto finish;
+ }
+ if (r == 0)
+ goto skip;
+
+ if (sd_id128_equal(type_id, SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)))
+ add_swap(node, fstype);
+ else if (sd_id128_equal(type_id, SD_ID128_MAKE(93,3a,c7,e1,2e,b4,4f,13,b8,44,0e,14,e2,ae,f9,15))) {
+
+ if (!home || nr < home_nr) {
+ free(home);
+ home = strdup(node);
+ if (!home) {
+ r = log_oom();
+ goto finish;
+ }
+
+ home_nr = nr;
+
+ free(home_fstype);
+ home_fstype = fstype;
+ fstype = NULL;
+ }
+ }
+
+ skip:
+ udev_device_unref(q);
+ }
+
+ if (home && home_fstype)
+ add_home(home, home_fstype);
+
+finish:
+ if (d)
+ udev_device_unref(d);
+
+ if (e)
+ udev_enumerate_unref(e);
+
+
+ return r;
+}
+
+static int get_btrfs_block_device(const char *path, dev_t *dev) {
+ struct btrfs_ioctl_fs_info_args fsi;
+ _cleanup_close_ int fd = -1;
+ uint64_t id;
+
+ assert(path);
+ assert(dev);
+
+ fd = open(path, O_DIRECTORY|O_CLOEXEC);
+ if (fd < 0)
+ return -errno;
+
+ zero(fsi);
+ if (ioctl(fd, BTRFS_IOC_FS_INFO, &fsi) < 0)
+ return -errno;
+
+ /* We won't do this for btrfs RAID */
+ if (fsi.num_devices != 1)
+ return 0;
+
+ for (id = 1; id <= fsi.max_id; id++) {
+ struct btrfs_ioctl_dev_info_args di;
+ struct stat st;
+
+ zero(di);
+ di.devid = id;
+
+ if (ioctl(fd, BTRFS_IOC_DEV_INFO, &di) < 0) {
+ if (errno == ENODEV)
+ continue;
+
+ return -errno;
+ }
+
+ if (stat((char*) di.path, &st) < 0)
+ return -errno;
+
+ if (!S_ISBLK(st.st_mode))
+ return -ENODEV;
+
+ if (major(st.st_rdev) == 0)
+ return -ENODEV;
+
+ *dev = st.st_rdev;
+ return 1;
+ }
+
+ return -ENODEV;
+}
+
+static int get_block_device(const char *path, dev_t *dev) {
+ struct stat st;
+ struct statfs sfs;
+
+ assert(path);
+ assert(dev);
+
+ if (lstat("/", &st))
+ return -errno;
+
+ if (major(st.st_dev) != 0) {
+ *dev = st.st_dev;
+ return 1;
+ }
+
+ if (statfs("/", &sfs) < 0)
+ return -errno;
+
+ if (F_TYPE_EQUAL(sfs.f_type, BTRFS_SUPER_MAGIC))
+ return get_btrfs_block_device(path, dev);
+
+ return 0;
+}
+
+static int devno_to_devnode(struct udev *udev, dev_t devno, char **ret) {
+ struct udev_device *d = NULL;
+ const char *t;
+ char *n;
+ int r;
+
+ d = udev_device_new_from_devnum(udev, 'b', devno);
+ if (!d) {
+ r = log_oom();
+ goto finish;
+ }
+
+ t = udev_device_get_devnode(d);
+ if (!t) {
+ r = -ENODEV;
+ goto finish;
+ }
+
+ n = strdup(t);
+ if (!n) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ *ret = n;
+ r = 0;
+
+finish:
+ if (d)
+ udev_device_unref(d);
+
+ return r;
+}
+
+int main(int argc, char *argv[]) {
+ _cleanup_free_ char *node = NULL;
+ struct udev *udev = NULL;
+ dev_t devno;
+ int r;
+
+ if (argc > 1 && argc != 4) {
+ log_error("This program takes three or no arguments.");
+ r = -EINVAL;
+ goto finish;
+ }
+
+ if (argc > 1)
+ arg_dest = argv[3];
+
+ log_set_target(LOG_TARGET_SAFE);
+ log_parse_environment();
+ log_open();
+
+ umask(0022);
+
+ if (in_initrd()) {
+ r = 0;
+ goto finish;
+ }
+
+ r = get_block_device("/", &devno);
+ if (r < 0) {
+ log_error("Failed to determine block device of root file system: %s", strerror(-r));
+ goto finish;
+ }
+ if (r == 0) {
+ log_debug("Root file system not on a (single) block device.");
+ goto finish;
+ }
+
+ udev = udev_new();
+ if (!udev) {
+ r = log_oom();
+ goto finish;
+ }
+
+ r = devno_to_devnode(udev, devno, &node);
+ if (r < 0) {
+ log_error("Failed to determine block device node from major/minor: %s", strerror(-r));
+ goto finish;
+ }
+
+ log_debug("Root device %s.", node);
+
+ r = verify_gpt_partition(node, NULL, NULL, NULL);
+ if (r < 0) {
+ log_error("Failed to verify GPT partition %s: %s", node, strerror(-r));
+ goto finish;
+ }
+ if (r == 0)
+ goto finish;
+
+ r = enumerate_partitions(udev, devno);
+
+finish:
+ if (udev)
+ udev_unref(udev);
+
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c
index 064581a31c..66015c2f4c 100644
--- a/src/hostname/hostnamectl.c
+++ b/src/hostname/hostnamectl.c
@@ -44,10 +44,11 @@ static enum transport {
TRANSPORT_POLKIT
} arg_transport = TRANSPORT_NORMAL;
static bool arg_ask_password = true;
-static const char *arg_host = NULL;
-static bool arg_set_transient = false;
-static bool arg_set_pretty = false;
-static bool arg_set_static = false;
+static char *arg_host = NULL;
+static char *arg_user = NULL;
+static bool arg_transient = false;
+static bool arg_pretty = false;
+static bool arg_static = false;
static void polkit_agent_open_if_enabled(void) {
@@ -151,15 +152,52 @@ static int status_property(const char *name, DBusMessageIter *iter, StatusInfo *
return 0;
}
-static int show_status(DBusConnection *bus, char **args, unsigned n) {
+static int show_one_name(DBusConnection *bus, const char* attr) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *interface = "org.freedesktop.hostname1", *s;
+ DBusMessageIter iter, sub;
+ int r;
+
+ r = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.hostname1",
+ "/org/freedesktop/hostname1",
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ &reply,
+ NULL,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &attr,
+ DBUS_TYPE_INVALID);
+ if (r < 0)
+ return r;
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ dbus_message_iter_get_basic(&sub, &s);
+ printf("%s\n", s);
+
+ return 0;
+}
+
+static int show_all_names(DBusConnection *bus) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
const char *interface = "";
int r;
DBusMessageIter iter, sub, sub2, sub3;
StatusInfo info = {};
- assert(args);
-
r = bus_method_call_with_reply(
bus,
"org.freedesktop.hostname1",
@@ -217,9 +255,28 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
return 0;
}
+static int show_status(DBusConnection *bus, char **args, unsigned n) {
+ assert(args);
+
+ if (arg_pretty || arg_static || arg_transient) {
+ const char *attr;
+
+ if (!!arg_static + !!arg_pretty + !!arg_transient > 1) {
+ log_error("Cannot query more than one name type at a time");
+ return -EINVAL;
+ }
+
+ attr = arg_pretty ? "PrettyHostname" :
+ arg_static ? "StaticHostname" : "Hostname";
+
+ return show_one_name(bus, attr);
+ } else
+ return show_all_names(bus);
+}
+
static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true;
+ dbus_bool_t interactive = arg_ask_password;
_cleanup_free_ char *h = NULL;
const char *hostname = args[1];
int r;
@@ -229,7 +286,10 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
polkit_agent_open_if_enabled();
- if (arg_set_pretty) {
+ if (!arg_pretty && !arg_static && !arg_transient)
+ arg_pretty = arg_static = arg_transient = true;
+
+ if (arg_pretty) {
const char *p;
/* If the passed hostname is already valid, then
@@ -244,7 +304,7 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
hostname_cleanup(h, true);
- if (arg_set_static && streq(h, hostname))
+ if (arg_static && streq(h, hostname))
p = "";
else {
p = hostname;
@@ -269,7 +329,7 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
reply = NULL;
}
- if (arg_set_static) {
+ if (arg_static) {
r = bus_method_call_with_reply(
bus,
"org.freedesktop.hostname1",
@@ -289,7 +349,7 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
reply = NULL;
}
- if (arg_set_transient) {
+ if (arg_transient) {
r = bus_method_call_with_reply(
bus,
"org.freedesktop.hostname1",
@@ -311,7 +371,7 @@ static int set_hostname(DBusConnection *bus, char **args, unsigned n) {
static int set_icon_name(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true;
+ dbus_bool_t interactive = arg_ask_password;
assert(args);
assert(n == 2);
@@ -333,7 +393,7 @@ static int set_icon_name(DBusConnection *bus, char **args, unsigned n) {
static int set_chassis(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true;
+ dbus_bool_t interactive = arg_ask_password;
assert(args);
assert(n == 2);
@@ -362,6 +422,7 @@ static int help(void) {
" --transient Only set transient hostname\n"
" --static Only set static hostname\n"
" --pretty Only set pretty hostname\n"
+ " -P --privileged Acquire privileges before execution\n"
" --no-ask-password Do not prompt for password\n"
" -H --host=[USER@]HOST Operate on remote host\n\n"
"Commands:\n"
@@ -379,17 +440,17 @@ static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
ARG_NO_ASK_PASSWORD,
- ARG_SET_TRANSIENT,
- ARG_SET_STATIC,
- ARG_SET_PRETTY
+ ARG_TRANSIENT,
+ ARG_STATIC,
+ ARG_PRETTY
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
- { "transient", no_argument, NULL, ARG_SET_TRANSIENT },
- { "static", no_argument, NULL, ARG_SET_STATIC },
- { "pretty", no_argument, NULL, ARG_SET_PRETTY },
+ { "transient", no_argument, NULL, ARG_TRANSIENT },
+ { "static", no_argument, NULL, ARG_STATIC },
+ { "pretty", no_argument, NULL, ARG_PRETTY },
{ "host", required_argument, NULL, 'H' },
{ "privileged", no_argument, NULL, 'P' },
{ "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
@@ -420,19 +481,19 @@ static int parse_argv(int argc, char *argv[]) {
case 'H':
arg_transport = TRANSPORT_SSH;
- arg_host = optarg;
+ parse_user_at_host(optarg, &arg_user, &arg_host);
break;
- case ARG_SET_TRANSIENT:
- arg_set_transient = true;
+ case ARG_TRANSIENT:
+ arg_transient = true;
break;
- case ARG_SET_PRETTY:
- arg_set_pretty = true;
+ case ARG_PRETTY:
+ arg_pretty = true;
break;
- case ARG_SET_STATIC:
- arg_set_static = true;
+ case ARG_STATIC:
+ arg_static = true;
break;
case ARG_NO_ASK_PASSWORD:
@@ -448,9 +509,6 @@ static int parse_argv(int argc, char *argv[]) {
}
}
- if (!arg_set_transient && !arg_set_pretty && !arg_set_static)
- arg_set_transient = arg_set_pretty = arg_set_static = true;
-
return 1;
}
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
index 0437e33a66..6a43aeb840 100644
--- a/src/hostname/hostnamed.c
+++ b/src/hostname/hostnamed.c
@@ -553,7 +553,8 @@ static DBusHandlerResult hostname_message_handler(
* safe than sorry */
if (k == PROP_ICON_NAME && !filename_is_safe(name))
return bus_send_error_reply(connection, message, NULL, -EINVAL);
- if (k == PROP_PRETTY_HOSTNAME && string_has_cc(name))
+ if (k == PROP_PRETTY_HOSTNAME &&
+ (string_has_cc(name) || chars_intersect(name, "\t")))
return bus_send_error_reply(connection, message, NULL, -EINVAL);
if (k == PROP_CHASSIS && !valid_chassis(name))
return bus_send_error_reply(connection, message, NULL, -EINVAL);
diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c
index 735f1e1450..ec33040509 100644
--- a/src/initctl/initctl.c
+++ b/src/initctl/initctl.c
@@ -122,7 +122,7 @@ static void change_runlevel(Server *s, int runlevel) {
if (isolate)
mode = "isolate";
else
- mode = "replace";
+ mode = "replace-irreversibly";
log_debug("Running request %s/start/%s", target, mode);
@@ -223,8 +223,10 @@ static int fifo_process(Fifo *f) {
assert(f);
errno = EIO;
- if ((l = read(f->fd, ((uint8_t*) &f->buffer) + f->bytes_read, sizeof(f->buffer) - f->bytes_read)) <= 0) {
-
+ l = read(f->fd,
+ ((uint8_t*) &f->buffer) + f->bytes_read,
+ sizeof(f->buffer) - f->bytes_read);
+ if (l <= 0) {
if (errno == EAGAIN)
return 0;
@@ -372,8 +374,8 @@ static int process_event(Server *s, struct epoll_event *ev) {
}
f = (Fifo*) ev->data.ptr;
-
- if ((r = fifo_process(f)) < 0) {
+ r = fifo_process(f);
+ if (r < 0) {
log_info("Got error on fifo: %s", strerror(-r));
fifo_free(f);
return r;
diff --git a/src/journal/coredump.c b/src/journal/coredump.c
index fd03e389bb..68c353fe83 100644
--- a/src/journal/coredump.c
+++ b/src/journal/coredump.c
@@ -41,7 +41,7 @@
#define COREDUMP_MIN_START (3*1024*1024)
/* Make sure to not make this larger than the maximum journal entry
* size. See ENTRY_SIZE_MAX in journald-native.c. */
-#define COREDUMP_MAX (768*1024*1024)
+#define COREDUMP_MAX (767*1024*1024)
enum {
ARG_PID = 1,
@@ -241,7 +241,7 @@ int main(int argc, char* argv[]) {
coredump_data = malloc(coredump_bufsize);
if (!coredump_data) {
r = log_oom();
- goto finish;
+ goto finalize;
}
memcpy(coredump_data, "COREDUMP=", 9);
@@ -258,9 +258,15 @@ int main(int argc, char* argv[]) {
break;
coredump_size += n;
+
+ if(coredump_size > COREDUMP_MAX) {
+ log_error("Coredump too large, ignoring");
+ goto finalize;
+ }
+
if (!GREEDY_REALLOC(coredump_data, coredump_bufsize, coredump_size + 1)) {
r = log_oom();
- goto finish;
+ goto finalize;
}
}
@@ -268,6 +274,7 @@ int main(int argc, char* argv[]) {
iovec[j].iov_len = coredump_size;
j++;
+finalize:
r = sd_journal_sendv(iovec, j);
if (r < 0)
log_error("Failed to send coredump: %s", strerror(-r));
diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c
index 5652c2f91a..75c96cc081 100644
--- a/src/journal/coredumpctl.c
+++ b/src/journal/coredumpctl.c
@@ -84,6 +84,7 @@ static int help(void) {
"Flags:\n"
" -o --output=FILE Write output to FILE\n"
" --no-pager Do not pipe output into a pager\n"
+ " --no-legend Do not print the column headers.\n\n"
"Commands:\n"
" -h --help Show this help\n"
@@ -341,7 +342,7 @@ static int dump_list(sd_journal *j) {
assert(j);
/* The coredumps are likely to compressed, and for just
- * listing them we don#t need to decompress them, so let's
+ * listing them we don't need to decompress them, so let's
* pick a fairly low data threshold here */
sd_journal_set_data_threshold(j, 4096);
@@ -556,6 +557,13 @@ int main(int argc, char *argv[]) {
}
}
+ if (_unlikely_(log_get_max_level() >= LOG_PRI(LOG_DEBUG))) {
+ _cleanup_free_ char *filter;
+
+ filter = journal_make_match_string(j);
+ log_debug("Journal filter: %s", filter);
+ }
+
switch(arg_action) {
case ACTION_LIST:
diff --git a/src/journal/fsprg.c b/src/journal/fsprg.c
index 6817a629c8..dd9a242561 100644
--- a/src/journal/fsprg.c
+++ b/src/journal/fsprg.c
@@ -19,7 +19,13 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
+ */
+
+/*
+ * See "Practical Secure Logging: Seekable Sequential Key Generators"
+ * by G. A. Marson, B. Poettering for details:
*
+ * http://eprint.iacr.org/2013/397
*/
#include <gcrypt.h>
diff --git a/src/journal/journal-authenticate.c b/src/journal/journal-authenticate.c
index 64bf96874e..bd7100a8d5 100644
--- a/src/journal/journal-authenticate.c
+++ b/src/journal/journal-authenticate.c
@@ -60,9 +60,9 @@ int journal_file_append_tag(JournalFile *f) {
o->tag.seqnum = htole64(journal_file_tag_seqnum(f));
o->tag.epoch = htole64(FSPRG_GetEpoch(f->fsprg_state));
- log_debug("Writing tag %llu for epoch %llu\n",
- (unsigned long long) le64toh(o->tag.seqnum),
- (unsigned long long) FSPRG_GetEpoch(f->fsprg_state));
+ log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"\n",
+ le64toh(o->tag.seqnum),
+ FSPRG_GetEpoch(f->fsprg_state));
/* Add the tag object itself, so that we can protect its
* header. This will exclude the actual hash value in it */
@@ -152,7 +152,7 @@ int journal_file_fsprg_evolve(JournalFile *f, uint64_t realtime) {
epoch = FSPRG_GetEpoch(f->fsprg_state);
if (epoch < goal)
- log_debug("Evolving FSPRG key from epoch %llu to %llu.", (unsigned long long) epoch, (unsigned long long) goal);
+ log_debug("Evolving FSPRG key from epoch %"PRIu64" to %"PRIu64".", epoch, goal);
for (;;) {
if (epoch > goal)
@@ -195,7 +195,7 @@ int journal_file_fsprg_seek(JournalFile *f, uint64_t goal) {
return -ENOMEM;
}
- log_debug("Seeking FSPRG key to %llu.", (unsigned long long) goal);
+ log_debug("Seeking FSPRG key to %"PRIu64".", goal);
msk = alloca(FSPRG_mskinbytes(FSPRG_RECOMMENDED_SECPAR));
FSPRG_GenMK(msk, NULL, f->fsprg_seed, f->fsprg_seed_size, FSPRG_RECOMMENDED_SECPAR);
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
index 38499a6881..12364030d9 100644
--- a/src/journal/journal-file.c
+++ b/src/journal/journal-file.c
@@ -549,7 +549,7 @@ static int journal_file_setup_data_hash_table(JournalFile *f) {
if (s < DEFAULT_DATA_HASH_TABLE_SIZE)
s = DEFAULT_DATA_HASH_TABLE_SIZE;
- log_debug("Reserving %llu entries in hash table.", (unsigned long long) (s / sizeof(HashItem)));
+ log_debug("Reserving %"PRIu64" entries in hash table.", s / sizeof(HashItem));
r = journal_file_append_object(f,
OBJECT_DATA_HASH_TABLE,
@@ -985,7 +985,7 @@ static int journal_file_append_data(
o->object.size = htole64(offsetof(Object, data.payload) + rsize);
o->object.flags |= OBJECT_COMPRESSED;
- log_debug("Compressed data object %lu -> %lu", (unsigned long) size, (unsigned long) rsize);
+ log_debug("Compressed data object %"PRIu64" -> %"PRIu64, size, rsize);
}
}
#endif
@@ -1206,7 +1206,7 @@ static int journal_file_link_entry(JournalFile *f, Object *o, uint64_t offset) {
if (r < 0)
return r;
- /* log_debug("=> %s seqnr=%lu n_entries=%lu", f->path, (unsigned long) o->entry.seqnum, (unsigned long) f->header->n_entries); */
+ /* log_debug("=> %s seqnr=%"PRIu64" n_entries=%"PRIu64, f->path, o->entry.seqnum, f->header->n_entries); */
if (f->header->head_entry_realtime == 0)
f->header->head_entry_realtime = o->entry.realtime;
@@ -2227,10 +2227,10 @@ void journal_file_dump(JournalFile *f) {
break;
case OBJECT_ENTRY:
- printf("Type: OBJECT_ENTRY seqnum=%llu monotonic=%llu realtime=%llu\n",
- (unsigned long long) le64toh(o->entry.seqnum),
- (unsigned long long) le64toh(o->entry.monotonic),
- (unsigned long long) le64toh(o->entry.realtime));
+ printf("Type: OBJECT_ENTRY seqnum=%"PRIu64" monotonic=%"PRIu64" realtime=%"PRIu64"\n",
+ le64toh(o->entry.seqnum),
+ le64toh(o->entry.monotonic),
+ le64toh(o->entry.realtime));
break;
case OBJECT_FIELD_HASH_TABLE:
@@ -2246,9 +2246,9 @@ void journal_file_dump(JournalFile *f) {
break;
case OBJECT_TAG:
- printf("Type: OBJECT_TAG seqnum=%llu epoch=%llu\n",
- (unsigned long long) le64toh(o->tag.seqnum),
- (unsigned long long) le64toh(o->tag.epoch));
+ printf("Type: OBJECT_TAG seqnum=%"PRIu64" epoch=%"PRIu64"\n",
+ le64toh(o->tag.seqnum),
+ le64toh(o->tag.epoch));
break;
default:
@@ -2270,9 +2270,18 @@ fail:
log_error("File corrupt");
}
+static const char* format_timestamp_safe(char *buf, size_t l, usec_t t) {
+ const char *x;
+
+ x = format_timestamp(buf, l, t);
+ if (x)
+ return x;
+ return " --- ";
+}
+
void journal_file_print_header(JournalFile *f) {
- char a[33], b[33], c[33];
- char x[FORMAT_TIMESTAMP_MAX], y[FORMAT_TIMESTAMP_MAX];
+ char a[33], b[33], c[33], d[33];
+ char x[FORMAT_TIMESTAMP_MAX], y[FORMAT_TIMESTAMP_MAX], z[FORMAT_TIMESTAMP_MAX];
struct stat st;
char bytes[FORMAT_BYTES_MAX];
@@ -2286,22 +2295,23 @@ void journal_file_print_header(JournalFile *f) {
"State: %s\n"
"Compatible Flags:%s%s\n"
"Incompatible Flags:%s%s\n"
- "Header size: %llu\n"
- "Arena size: %llu\n"
- "Data Hash Table Size: %llu\n"
- "Field Hash Table Size: %llu\n"
+ "Header size: %"PRIu64"\n"
+ "Arena size: %"PRIu64"\n"
+ "Data Hash Table Size: %"PRIu64"\n"
+ "Field Hash Table Size: %"PRIu64"\n"
"Rotate Suggested: %s\n"
- "Head Sequential Number: %llu\n"
- "Tail Sequential Number: %llu\n"
+ "Head Sequential Number: %"PRIu64"\n"
+ "Tail Sequential Number: %"PRIu64"\n"
"Head Realtime Timestamp: %s\n"
"Tail Realtime Timestamp: %s\n"
- "Objects: %llu\n"
- "Entry Objects: %llu\n",
+ "Tail Monotonic Timestamp: %s\n"
+ "Objects: %"PRIu64"\n"
+ "Entry Objects: %"PRIu64"\n",
f->path,
sd_id128_to_string(f->header->file_id, a),
sd_id128_to_string(f->header->machine_id, b),
sd_id128_to_string(f->header->boot_id, c),
- sd_id128_to_string(f->header->seqnum_id, c),
+ sd_id128_to_string(f->header->seqnum_id, d),
f->header->state == STATE_OFFLINE ? "OFFLINE" :
f->header->state == STATE_ONLINE ? "ONLINE" :
f->header->state == STATE_ARCHIVED ? "ARCHIVED" : "UNKNOWN",
@@ -2309,36 +2319,37 @@ void journal_file_print_header(JournalFile *f) {
(le32toh(f->header->compatible_flags) & ~HEADER_COMPATIBLE_SEALED) ? " ???" : "",
JOURNAL_HEADER_COMPRESSED(f->header) ? " COMPRESSED" : "",
(le32toh(f->header->incompatible_flags) & ~HEADER_INCOMPATIBLE_COMPRESSED) ? " ???" : "",
- (unsigned long long) le64toh(f->header->header_size),
- (unsigned long long) le64toh(f->header->arena_size),
- (unsigned long long) le64toh(f->header->data_hash_table_size) / sizeof(HashItem),
- (unsigned long long) le64toh(f->header->field_hash_table_size) / sizeof(HashItem),
+ le64toh(f->header->header_size),
+ le64toh(f->header->arena_size),
+ le64toh(f->header->data_hash_table_size) / sizeof(HashItem),
+ le64toh(f->header->field_hash_table_size) / sizeof(HashItem),
yes_no(journal_file_rotate_suggested(f, 0)),
- (unsigned long long) le64toh(f->header->head_entry_seqnum),
- (unsigned long long) le64toh(f->header->tail_entry_seqnum),
- format_timestamp(x, sizeof(x), le64toh(f->header->head_entry_realtime)),
- format_timestamp(y, sizeof(y), le64toh(f->header->tail_entry_realtime)),
- (unsigned long long) le64toh(f->header->n_objects),
- (unsigned long long) le64toh(f->header->n_entries));
+ le64toh(f->header->head_entry_seqnum),
+ le64toh(f->header->tail_entry_seqnum),
+ format_timestamp_safe(x, sizeof(x), le64toh(f->header->head_entry_realtime)),
+ format_timestamp_safe(y, sizeof(y), le64toh(f->header->tail_entry_realtime)),
+ format_timespan(z, sizeof(z), le64toh(f->header->tail_entry_monotonic), USEC_PER_MSEC),
+ le64toh(f->header->n_objects),
+ le64toh(f->header->n_entries));
if (JOURNAL_HEADER_CONTAINS(f->header, n_data))
- printf("Data Objects: %llu\n"
+ printf("Data Objects: %"PRIu64"\n"
"Data Hash Table Fill: %.1f%%\n",
- (unsigned long long) le64toh(f->header->n_data),
+ le64toh(f->header->n_data),
100.0 * (double) le64toh(f->header->n_data) / ((double) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem))));
if (JOURNAL_HEADER_CONTAINS(f->header, n_fields))
- printf("Field Objects: %llu\n"
+ printf("Field Objects: %"PRIu64"\n"
"Field Hash Table Fill: %.1f%%\n",
- (unsigned long long) le64toh(f->header->n_fields),
+ le64toh(f->header->n_fields),
100.0 * (double) le64toh(f->header->n_fields) / ((double) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem))));
if (JOURNAL_HEADER_CONTAINS(f->header, n_tags))
- printf("Tag Objects: %llu\n",
- (unsigned long long) le64toh(f->header->n_tags));
+ printf("Tag Objects: %"PRIu64"\n",
+ le64toh(f->header->n_tags));
if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays))
- printf("Entry Array Objects: %llu\n",
- (unsigned long long) le64toh(f->header->n_entry_arrays));
+ printf("Entry Array Objects: %"PRIu64"\n",
+ le64toh(f->header->n_entry_arrays));
if (fstat(f->fd, &st) >= 0)
printf("Disk usage: %s\n", format_bytes(bytes, sizeof(bytes), (off_t) st.st_blocks * 512ULL));
@@ -2564,9 +2575,9 @@ int journal_file_rotate(JournalFile **f, bool compress, bool seal) {
p[l-8] = '@';
sd_id128_to_string(old_file->header->seqnum_id, p + l - 8 + 1);
snprintf(p + l - 8 + 1 + 32, 1 + 16 + 1 + 16 + 8 + 1,
- "-%016llx-%016llx.journal",
- (unsigned long long) le64toh((*f)->header->head_entry_seqnum),
- (unsigned long long) le64toh((*f)->header->head_entry_realtime));
+ "-%016"PRIx64"-%016"PRIx64".journal",
+ le64toh((*f)->header->head_entry_seqnum),
+ le64toh((*f)->header->head_entry_realtime));
r = rename(old_file->path, p);
free(p);
@@ -2596,7 +2607,7 @@ int journal_file_open_reliably(
int r;
size_t l;
- char *p;
+ _cleanup_free_ char *p = NULL;
r = journal_file_open(fname, flags, mode, compress, seal,
metrics, mmap_cache, template, ret);
@@ -2627,7 +2638,6 @@ int journal_file_open_reliably(
return -ENOMEM;
r = rename(fname, p);
- free(p);
if (r < 0)
return -errno;
@@ -2873,23 +2883,23 @@ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec) {
if (JOURNAL_HEADER_CONTAINS(f->header, n_data))
if (le64toh(f->header->n_data) * 4ULL > (le64toh(f->header->data_hash_table_size) / sizeof(HashItem)) * 3ULL) {
- log_debug("Data hash table of %s has a fill level at %.1f (%llu of %llu items, %llu file size, %llu bytes per hash table item), suggesting rotation.",
+ log_debug("Data hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items, %llu file size, %"PRIu64" bytes per hash table item), suggesting rotation.",
f->path,
100.0 * (double) le64toh(f->header->n_data) / ((double) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem))),
- (unsigned long long) le64toh(f->header->n_data),
- (unsigned long long) (le64toh(f->header->data_hash_table_size) / sizeof(HashItem)),
- (unsigned long long) (f->last_stat.st_size),
- (unsigned long long) (f->last_stat.st_size / le64toh(f->header->n_data)));
+ le64toh(f->header->n_data),
+ le64toh(f->header->data_hash_table_size) / sizeof(HashItem),
+ (unsigned long long) f->last_stat.st_size,
+ f->last_stat.st_size / le64toh(f->header->n_data));
return true;
}
if (JOURNAL_HEADER_CONTAINS(f->header, n_fields))
if (le64toh(f->header->n_fields) * 4ULL > (le64toh(f->header->field_hash_table_size) / sizeof(HashItem)) * 3ULL) {
- log_debug("Field hash table of %s has a fill level at %.1f (%llu of %llu items), suggesting rotation.",
+ log_debug("Field hash table of %s has a fill level at %.1f (%"PRIu64" of %"PRIu64" items), suggesting rotation.",
f->path,
100.0 * (double) le64toh(f->header->n_fields) / ((double) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem))),
- (unsigned long long) le64toh(f->header->n_fields),
- (unsigned long long) (le64toh(f->header->field_hash_table_size) / sizeof(HashItem)));
+ le64toh(f->header->n_fields),
+ le64toh(f->header->field_hash_table_size) / sizeof(HashItem));
return true;
}
diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
index 7b1cd42854..5cc2c2d28d 100644
--- a/src/journal/journal-file.h
+++ b/src/journal/journal-file.h
@@ -42,10 +42,14 @@ typedef struct JournalMetrics {
uint64_t keep_free;
} JournalMetrics;
+typedef enum direction {
+ DIRECTION_UP,
+ DIRECTION_DOWN
+} direction_t;
+
typedef struct JournalFile {
int fd;
- char *path;
- struct stat last_stat;
+
mode_t mode;
int flags;
@@ -56,6 +60,11 @@ typedef struct JournalFile {
bool tail_entry_monotonic_valid;
+ direction_t last_direction;
+
+ char *path;
+ struct stat last_stat;
+
Header *header;
HashItem *data_hash_table;
HashItem *field_hash_table;
@@ -90,11 +99,6 @@ typedef struct JournalFile {
#endif
} JournalFile;
-typedef enum direction {
- DIRECTION_UP,
- DIRECTION_DOWN
-} direction_t;
-
int journal_file_open(
const char *fname,
int flags,
diff --git a/src/journal/journal-gatewayd.c b/src/journal/journal-gatewayd.c
index 745f45f932..06a236df6b 100644
--- a/src/journal/journal-gatewayd.c
+++ b/src/journal/journal-gatewayd.c
@@ -109,7 +109,7 @@ static int open_journal(RequestMeta *m) {
if (m->journal)
return 0;
- return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM_ONLY);
+ return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM);
}
static int respond_oom_internal(struct MHD_Connection *connection) {
@@ -248,7 +248,7 @@ static ssize_t request_reader_entries(
}
}
- r = output_journal(m->tmp, m->journal, m->mode, 0, OUTPUT_FULL_WIDTH);
+ r = output_journal(m->tmp, m->journal, m->mode, 0, OUTPUT_FULL_WIDTH, NULL);
if (r < 0) {
log_error("Failed to serialize item: %s", strerror(-r));
return MHD_CONTENT_READER_END_WITH_ERROR;
@@ -834,17 +834,17 @@ static int request_handler_machine(
"\"hostname\" : \"%s\","
"\"os_pretty_name\" : \"%s\","
"\"virtualization\" : \"%s\","
- "\"usage\" : \"%llu\","
- "\"cutoff_from_realtime\" : \"%llu\","
- "\"cutoff_to_realtime\" : \"%llu\" }\n",
+ "\"usage\" : \"%"PRIu64"\","
+ "\"cutoff_from_realtime\" : \"%"PRIu64"\","
+ "\"cutoff_to_realtime\" : \"%"PRIu64"\" }\n",
SD_ID128_FORMAT_VAL(mid),
SD_ID128_FORMAT_VAL(bid),
hostname_cleanup(hostname, false),
os_name ? os_name : "Linux",
v ? v : "bare",
- (unsigned long long) usage,
- (unsigned long long) cutoff_from,
- (unsigned long long) cutoff_to);
+ usage,
+ cutoff_from,
+ cutoff_to);
if (r < 0)
return respond_oom(connection);
diff --git a/src/journal/journal-internal.h b/src/journal/journal-internal.h
index c7e585d810..5bc653537c 100644
--- a/src/journal/journal-internal.h
+++ b/src/journal/journal-internal.h
@@ -97,8 +97,6 @@ struct Directory {
};
struct sd_journal {
- int flags;
-
char *path;
Hashmap *files;
@@ -109,26 +107,29 @@ struct sd_journal {
JournalFile *current_file;
uint64_t current_field;
- Hashmap *directories_by_path;
- Hashmap *directories_by_wd;
-
- int inotify_fd;
-
Match *level0, *level1, *level2;
+ pid_t original_pid;
+
+ int inotify_fd;
unsigned current_invalidate_counter, last_invalidate_counter;
+ usec_t last_process_usec;
char *unique_field;
JournalFile *unique_file;
uint64_t unique_offset;
+ int flags;
+
bool on_network;
+ bool no_new_files;
size_t data_threshold;
- Set *errors;
+ Hashmap *directories_by_path;
+ Hashmap *directories_by_wd;
- usec_t last_process_usec;
+ Set *errors;
};
char *journal_make_match_string(sd_journal *j);
@@ -139,3 +140,6 @@ static inline void journal_closep(sd_journal **j) {
}
#define _cleanup_journal_close_ _cleanup_(journal_closep)
+
+#define JOURNAL_FOREACH_DATA_RETVAL(j, data, l, retval) \
+ for (sd_journal_restart_data(j); ((retval) = sd_journal_enumerate_data((j), &(data), &(l))) > 0; )
diff --git a/src/journal/journal-qrcode.c b/src/journal/journal-qrcode.c
index 10a14e4def..1db66e89c6 100644
--- a/src/journal/journal-qrcode.c
+++ b/src/journal/journal-qrcode.c
@@ -76,9 +76,9 @@ int print_qr_code(
fprintf(f, "%02x", ((uint8_t*) seed)[i]);
}
- fprintf(f, "/%llx-%llx?machine=" SD_ID128_FORMAT_STR,
- (unsigned long long) start,
- (unsigned long long) interval,
+ fprintf(f, "/%"PRIx64"-%"PRIx64"?machine=" SD_ID128_FORMAT_STR,
+ start,
+ interval,
SD_ID128_FORMAT_VAL(machine));
if (hn)
diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c
index 14c437da78..d00e26f1eb 100644
--- a/src/journal/journal-send.c
+++ b/src/journal/journal-send.c
@@ -204,8 +204,14 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
struct iovec *w;
uint64_t *l;
int i, j = 0;
- struct msghdr mh;
- struct sockaddr_un sa;
+ struct sockaddr_un sa = {
+ .sun_family = AF_UNIX,
+ .sun_path = "/run/systemd/journal/socket",
+ };
+ struct msghdr mh = {
+ .msg_name = &sa,
+ .msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(sa.sun_path),
+ };
ssize_t k;
union {
struct cmsghdr cmsghdr;
@@ -239,7 +245,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
have_syslog_identifier = have_syslog_identifier ||
(c == (char *) iov[i].iov_base + 17 &&
- memcmp(iov[i].iov_base, "SYSLOG_IDENTIFIER", 17) == 0);
+ startswith(iov[i].iov_base, "SYSLOG_IDENTIFIER"));
nl = memchr(iov[i].iov_base, '\n', iov[i].iov_len);
if (nl) {
@@ -292,13 +298,6 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
if (_unlikely_(fd < 0))
return fd;
- zero(sa);
- sa.sun_family = AF_UNIX;
- strncpy(sa.sun_path, "/run/systemd/journal/socket", sizeof(sa.sun_path));
-
- zero(mh);
- mh.msg_name = &sa;
- mh.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(sa.sun_path);
mh.msg_iov = w;
mh.msg_iovlen = j;
@@ -402,7 +401,10 @@ _public_ int sd_journal_perror(const char *message) {
}
_public_ int sd_journal_stream_fd(const char *identifier, int priority, int level_prefix) {
- union sockaddr_union sa;
+ union sockaddr_union sa = {
+ .un.sun_family = AF_UNIX,
+ .un.sun_path = "/run/systemd/journal/stdout",
+ };
int fd;
char *header;
size_t l;
@@ -415,10 +417,6 @@ _public_ int sd_journal_stream_fd(const char *identifier, int priority, int leve
if (fd < 0)
return -errno;
- zero(sa);
- sa.un.sun_family = AF_UNIX;
- strncpy(sa.un.sun_path, "/run/systemd/journal/stdout", sizeof(sa.un.sun_path));
-
r = connect(fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path));
if (r < 0) {
close_nointr_nofail(fd);
diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c
index 4a3a5a9e63..c73ad8f393 100644
--- a/src/journal/journal-vacuum.c
+++ b/src/journal/journal-vacuum.c
@@ -128,6 +128,25 @@ static void patch_realtime(
#endif
}
+static int journal_file_empty(int dir_fd, const char *name) {
+ int r;
+ le64_t n_entries;
+ _cleanup_close_ int fd;
+
+ fd = openat(dir_fd, name, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
+ if (fd < 0)
+ return -errno;
+
+ if (lseek(fd, offsetof(Header, n_entries), SEEK_SET) < 0)
+ return -errno;
+
+ r = read(fd, &n_entries, sizeof(n_entries));
+ if (r != sizeof(n_entries))
+ return r == 0 ? -EINVAL : -errno;
+
+ return le64toh(n_entries) == 0;
+}
+
int journal_directory_vacuum(
const char *directory,
uint64_t max_use,
@@ -135,11 +154,12 @@ int journal_directory_vacuum(
usec_t max_retention_usec,
usec_t *oldest_usec) {
- DIR *d;
+ _cleanup_closedir_ DIR *d = NULL;
int r = 0;
struct vacuum_info *list = NULL;
- unsigned n_list = 0, n_allocated = 0, i;
- uint64_t sum = 0;
+ unsigned n_list = 0, i;
+ size_t n_allocated = 0;
+ uint64_t sum = 0, freed = 0;
usec_t retention_limit = 0;
assert(directory);
@@ -246,22 +266,25 @@ int journal_directory_vacuum(
/* We do not vacuum active files or unknown files! */
continue;
- patch_realtime(directory, de->d_name, &st, &realtime);
+ if (journal_file_empty(dirfd(d), p)) {
+ /* Always vacuum empty non-online files. */
- if (n_list >= n_allocated) {
- struct vacuum_info *j;
+ uint64_t size = 512UL * (uint64_t) st.st_blocks;
- n_allocated = MAX(n_allocated * 2U, 8U);
- j = realloc(list, n_allocated * sizeof(struct vacuum_info));
- if (!j) {
- free(p);
- r = -ENOMEM;
- goto finish;
- }
+ if (unlinkat(dirfd(d), p, 0) >= 0) {
+ log_info("Deleted empty journal %s/%s (%"PRIu64" bytes).",
+ directory, p, size);
+ freed += size;
+ } else if (errno != ENOENT)
+ log_warning("Failed to delete %s/%s: %m", directory, p);
- list = j;
+ continue;
}
+ patch_realtime(directory, p, &st, &realtime);
+
+ GREEDY_REALLOC(list, n_allocated, n_list + 1);
+
list[n_list].filename = p;
list[n_list].usage = 512UL * (uint64_t) st.st_blocks;
list[n_list].seqnum = seqnum;
@@ -291,7 +314,9 @@ int journal_directory_vacuum(
break;
if (unlinkat(dirfd(d), list[i].filename, 0) >= 0) {
- log_debug("Deleted archived journal %s/%s.", directory, list[i].filename);
+ log_debug("Deleted archived journal %s/%s (%"PRIu64" bytes).",
+ directory, list[i].filename, list[i].usage);
+ freed += list[i].usage;
if (list[i].usage < sum)
sum -= list[i].usage;
@@ -308,11 +333,9 @@ int journal_directory_vacuum(
finish:
for (i = 0; i < n_list; i++)
free(list[i].filename);
-
free(list);
- if (d)
- closedir(d);
+ log_info("Vacuuming done, freed %"PRIu64" bytes", freed);
return r;
}
diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
index ed28b45737..3405811534 100644
--- a/src/journal/journal-verify.c
+++ b/src/journal/journal-verify.c
@@ -34,10 +34,15 @@
#include "compress.h"
#include "fsprg.h"
-static int journal_file_object_verify(JournalFile *f, Object *o) {
+/* Use six characters to cover the offsets common in smallish journal
+ * files without adding to many zeros. */
+#define OFSfmt "%06"PRIx64
+
+static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) {
uint64_t i;
assert(f);
+ assert(offset);
assert(o);
/* This does various superficial tests about the length an
@@ -53,12 +58,21 @@ static int journal_file_object_verify(JournalFile *f, Object *o) {
case OBJECT_DATA: {
uint64_t h1, h2;
- if (le64toh(o->data.entry_offset) <= 0 ||
- le64toh(o->data.n_entries) <= 0)
+ if (le64toh(o->data.entry_offset) == 0)
+ log_warning(OFSfmt": unused data (entry_offset==0)", offset);
+
+ if ((le64toh(o->data.entry_offset) == 0) ^ (le64toh(o->data.n_entries) == 0)) {
+ log_error(OFSfmt": bad n_entries: %"PRIu64, offset, o->data.n_entries);
return -EBADMSG;
+ }
- if (le64toh(o->object.size) - offsetof(DataObject, payload) <= 0)
+ if (le64toh(o->object.size) - offsetof(DataObject, payload) <= 0) {
+ log_error(OFSfmt": bad object size (<= %zu): %"PRIu64,
+ offset,
+ offsetof(DataObject, payload),
+ le64toh(o->object.size));
return -EBADMSG;
+ }
h1 = le64toh(o->data.hash);
@@ -69,104 +83,197 @@ static int journal_file_object_verify(JournalFile *f, Object *o) {
if (!uncompress_blob(o->data.payload,
le64toh(o->object.size) - offsetof(Object, data.payload),
- &b, &alloc, &b_size, 0))
+ &b, &alloc, &b_size, 0)) {
+ log_error(OFSfmt": uncompression failed", offset);
return -EBADMSG;
+ }
h2 = hash64(b, b_size);
free(b);
#else
+ log_error("Compression is not supported");
return -EPROTONOSUPPORT;
#endif
} else
h2 = hash64(o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload));
- if (h1 != h2)
+ if (h1 != h2) {
+ log_error(OFSfmt": invalid hash (%08"PRIx64" vs. %08"PRIx64, offset, h1, h2);
return -EBADMSG;
+ }
if (!VALID64(o->data.next_hash_offset) ||
!VALID64(o->data.next_field_offset) ||
!VALID64(o->data.entry_offset) ||
- !VALID64(o->data.entry_array_offset))
+ !VALID64(o->data.entry_array_offset)) {
+ log_error(OFSfmt": invalid offset (next_hash_offset="OFSfmt", next_field_offset="OFSfmt", entry_offset="OFSfmt", entry_array_offset="OFSfmt,
+ offset,
+ o->data.next_hash_offset,
+ o->data.next_field_offset,
+ o->data.entry_offset,
+ o->data.entry_array_offset);
return -EBADMSG;
+ }
break;
}
case OBJECT_FIELD:
- if (le64toh(o->object.size) - offsetof(FieldObject, payload) <= 0)
+ if (le64toh(o->object.size) - offsetof(FieldObject, payload) <= 0) {
+ log_error(OFSfmt": bad field size (<= %zu): %"PRIu64,
+ offset,
+ offsetof(FieldObject, payload),
+ le64toh(o->object.size));
return -EBADMSG;
+ }
if (!VALID64(o->field.next_hash_offset) ||
- !VALID64(o->field.head_data_offset))
+ !VALID64(o->field.head_data_offset)) {
+ log_error(OFSfmt": invalid offset (next_hash_offset="OFSfmt", head_data_offset="OFSfmt,
+ offset,
+ o->field.next_hash_offset,
+ o->field.head_data_offset);
return -EBADMSG;
+ }
break;
case OBJECT_ENTRY:
- if ((le64toh(o->object.size) - offsetof(EntryObject, items)) % sizeof(EntryItem) != 0)
+ if ((le64toh(o->object.size) - offsetof(EntryObject, items)) % sizeof(EntryItem) != 0) {
+ log_error(OFSfmt": bad entry size (<= %zu): %"PRIu64,
+ offset,
+ offsetof(EntryObject, items),
+ le64toh(o->object.size));
return -EBADMSG;
+ }
- if ((le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem) <= 0)
+ if ((le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem) <= 0) {
+ log_error(OFSfmt": invalid number items in entry: %"PRIu64,
+ offset,
+ (le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem));
return -EBADMSG;
+ }
+
+ if (le64toh(o->entry.seqnum) <= 0) {
+ log_error(OFSfmt": invalid entry seqnum: %"PRIx64,
+ offset,
+ le64toh(o->entry.seqnum));
+ return -EBADMSG;
+ }
- if (le64toh(o->entry.seqnum) <= 0 ||
- !VALID_REALTIME(le64toh(o->entry.realtime)) ||
- !VALID_MONOTONIC(le64toh(o->entry.monotonic)))
+ if (!VALID_REALTIME(le64toh(o->entry.realtime))) {
+ log_error(OFSfmt": invalid entry realtime timestamp: %"PRIu64,
+ offset,
+ le64toh(o->entry.realtime));
return -EBADMSG;
+ }
+
+ if (!VALID_MONOTONIC(le64toh(o->entry.monotonic))) {
+ log_error(OFSfmt": invalid entry monotonic timestamp: %"PRIu64,
+ offset,
+ le64toh(o->entry.monotonic));
+ return -EBADMSG;
+ }
for (i = 0; i < journal_file_entry_n_items(o); i++) {
if (o->entry.items[i].object_offset == 0 ||
- !VALID64(o->entry.items[i].object_offset))
+ !VALID64(o->entry.items[i].object_offset)) {
+ log_error(OFSfmt": invalid entry item (%"PRIu64"/%"PRIu64" offset: "OFSfmt,
+ offset,
+ i, journal_file_entry_n_items(o),
+ o->entry.items[i].object_offset);
return -EBADMSG;
+ }
}
break;
case OBJECT_DATA_HASH_TABLE:
case OBJECT_FIELD_HASH_TABLE:
- if ((le64toh(o->object.size) - offsetof(HashTableObject, items)) % sizeof(HashItem) != 0)
- return -EBADMSG;
-
- if ((le64toh(o->object.size) - offsetof(HashTableObject, items)) / sizeof(HashItem) <= 0)
+ if ((le64toh(o->object.size) - offsetof(HashTableObject, items)) % sizeof(HashItem) != 0 ||
+ (le64toh(o->object.size) - offsetof(HashTableObject, items)) / sizeof(HashItem) <= 0) {
+ log_error(OFSfmt": invalid %s hash table size: %"PRIu64,
+ offset,
+ o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+ le64toh(o->object.size));
return -EBADMSG;
+ }
for (i = 0; i < journal_file_hash_table_n_items(o); i++) {
if (o->hash_table.items[i].head_hash_offset != 0 &&
- !VALID64(le64toh(o->hash_table.items[i].head_hash_offset)))
+ !VALID64(le64toh(o->hash_table.items[i].head_hash_offset))) {
+ log_error(OFSfmt": invalid %s hash table item (%"PRIu64"/%"PRIu64") head_hash_offset: "OFSfmt,
+ offset,
+ o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+ i, journal_file_hash_table_n_items(o),
+ le64toh(o->hash_table.items[i].head_hash_offset));
return -EBADMSG;
+ }
if (o->hash_table.items[i].tail_hash_offset != 0 &&
- !VALID64(le64toh(o->hash_table.items[i].tail_hash_offset)))
+ !VALID64(le64toh(o->hash_table.items[i].tail_hash_offset))) {
+ log_error(OFSfmt": invalid %s hash table item (%"PRIu64"/%"PRIu64") tail_hash_offset: "OFSfmt,
+ offset,
+ o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+ i, journal_file_hash_table_n_items(o),
+ le64toh(o->hash_table.items[i].tail_hash_offset));
return -EBADMSG;
+ }
if ((o->hash_table.items[i].head_hash_offset != 0) !=
- (o->hash_table.items[i].tail_hash_offset != 0))
+ (o->hash_table.items[i].tail_hash_offset != 0)) {
+ log_error(OFSfmt": invalid %s hash table item (%"PRIu64"/%"PRIu64"): head_hash_offset="OFSfmt" tail_hash_offset="OFSfmt,
+ offset,
+ o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
+ i, journal_file_hash_table_n_items(o),
+ le64toh(o->hash_table.items[i].head_hash_offset),
+ le64toh(o->hash_table.items[i].tail_hash_offset));
return -EBADMSG;
+ }
}
break;
case OBJECT_ENTRY_ARRAY:
- if ((le64toh(o->object.size) - offsetof(EntryArrayObject, items)) % sizeof(le64_t) != 0)
- return -EBADMSG;
-
- if ((le64toh(o->object.size) - offsetof(EntryArrayObject, items)) / sizeof(le64_t) <= 0)
+ if ((le64toh(o->object.size) - offsetof(EntryArrayObject, items)) % sizeof(le64_t) != 0 ||
+ (le64toh(o->object.size) - offsetof(EntryArrayObject, items)) / sizeof(le64_t) <= 0) {
+ log_error(OFSfmt": invalid object entry array size: %"PRIu64,
+ offset,
+ le64toh(o->object.size));
return -EBADMSG;
+ }
- if (!VALID64(o->entry_array.next_entry_array_offset))
+ if (!VALID64(o->entry_array.next_entry_array_offset)) {
+ log_error(OFSfmt": invalid object entry array next_entry_array_offset: "OFSfmt,
+ offset,
+ o->entry_array.next_entry_array_offset);
return -EBADMSG;
+ }
for (i = 0; i < journal_file_entry_array_n_items(o); i++)
if (o->entry_array.items[i] != 0 &&
- !VALID64(o->entry_array.items[i]))
+ !VALID64(o->entry_array.items[i])) {
+ log_error(OFSfmt": invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
+ offset,
+ i, journal_file_entry_array_n_items(o),
+ o->entry_array.items[i]);
return -EBADMSG;
+ }
break;
case OBJECT_TAG:
- if (le64toh(o->object.size) != sizeof(TagObject))
+ if (le64toh(o->object.size) != sizeof(TagObject)) {
+ log_error(OFSfmt": invalid object tag size: %"PRIu64,
+ offset,
+ le64toh(o->object.size));
return -EBADMSG;
+ }
- if (!VALID_EPOCH(o->tag.epoch))
+ if (!VALID_EPOCH(o->tag.epoch)) {
+ log_error(OFSfmt": invalid object tag epoch: %"PRIu64,
+ offset,
+ o->tag.epoch);
return -EBADMSG;
+ }
break;
}
@@ -203,7 +310,7 @@ static void draw_progress(uint64_t p, usec_t *last_usec) {
for (i = 0; i < k; i++)
fputs("\xe2\x96\x91", stdout);
- printf(" %3lu%%", 100LU * (unsigned long) p / 65535LU);
+ printf(" %3"PRIu64"%%", 100U * p / 65535U);
fputs("\r\x1B[?25h", stdout);
fflush(stdout);
@@ -288,7 +395,7 @@ static int entry_points_to_data(
assert(entry_fd >= 0);
if (!contains_uint64(f->mmap, entry_fd, n_entries, entry_p)) {
- log_error("Data object references invalid entry at %llu", (unsigned long long) data_p);
+ log_error("Data object references invalid entry at %"PRIu64, data_p);
return -EBADMSG;
}
@@ -304,7 +411,7 @@ static int entry_points_to_data(
}
if (!found) {
- log_error("Data object not referenced by linked entry at %llu", (unsigned long long) data_p);
+ log_error("Data object not referenced by linked entry at %"PRIu64, data_p);
return -EBADMSG;
}
@@ -347,7 +454,7 @@ static int entry_points_to_data(
x = z;
}
- log_error("Entry object doesn't exist in main entry array at %llu", (unsigned long long) entry_p);
+ log_error("Entry object doesn't exist in main entry array at %"PRIu64, entry_p);
return -EBADMSG;
}
@@ -375,8 +482,18 @@ static int verify_data(
n = le64toh(o->data.n_entries);
a = le64toh(o->data.entry_array_offset);
- /* We already checked this earlier */
- assert(n > 0);
+ /* Entry array means at least two objects */
+ if (a && n < 2) {
+ log_error("Entry array present (entry_array_offset=%"PRIu64", but n_entries=%"PRIu64,
+ a, n);
+ return -EBADMSG;
+ }
+
+ if (n == 0)
+ return 0;
+
+ /* We already checked that earlier */
+ assert(o->data.entry_offset);
last = q = le64toh(o->data.entry_offset);
r = entry_points_to_data(f, entry_fd, n_entries, q, p);
@@ -388,12 +505,12 @@ static int verify_data(
uint64_t next, m, j;
if (a == 0) {
- log_error("Array chain too short at %llu", (unsigned long long) p);
+ log_error("Array chain too short at %"PRIu64, p);
return -EBADMSG;
}
if (!contains_uint64(f->mmap, entry_array_fd, n_entry_arrays, a)) {
- log_error("Invalid array at %llu", (unsigned long long) p);
+ log_error("Invalid array at %"PRIu64, p);
return -EBADMSG;
}
@@ -403,7 +520,7 @@ static int verify_data(
next = le64toh(o->entry_array.next_entry_array_offset);
if (next != 0 && next <= a) {
- log_error("Array chain has cycle at %llu", (unsigned long long) p);
+ log_error("Array chain has cycle at %"PRIu64, p);
return -EBADMSG;
}
@@ -412,7 +529,7 @@ static int verify_data(
q = le64toh(o->entry_array.items[j]);
if (q <= last) {
- log_error("Data object's entry array not sorted at %llu", (unsigned long long) p);
+ log_error("Data object's entry array not sorted at %"PRIu64, p);
return -EBADMSG;
}
last = q;
@@ -463,8 +580,8 @@ static int verify_hash_table(
uint64_t next;
if (!contains_uint64(f->mmap, data_fd, n_data, p)) {
- log_error("Invalid data object at hash entry %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Invalid data object at hash entry %"PRIu64" of %"PRIu64,
+ i, n);
return -EBADMSG;
}
@@ -474,14 +591,14 @@ static int verify_hash_table(
next = le64toh(o->data.next_hash_offset);
if (next != 0 && next <= p) {
- log_error("Hash chain has a cycle in hash entry %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Hash chain has a cycle in hash entry %"PRIu64" of %"PRIu64,
+ i, n);
return -EBADMSG;
}
if (le64toh(o->data.hash) % n != i) {
- log_error("Hash value mismatch in hash entry %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Hash value mismatch in hash entry %"PRIu64" of %"PRIu64,
+ i, n);
return -EBADMSG;
}
@@ -548,8 +665,7 @@ static int verify_entry(
h = le64toh(o->entry.items[i].hash);
if (!contains_uint64(f->mmap, data_fd, n_data, q)) {
- log_error("Invalid data object at entry %llu",
- (unsigned long long) p);
+ log_error("Invalid data object at entry %"PRIu64, p);
return -EBADMSG;
}
@@ -558,8 +674,7 @@ static int verify_entry(
return r;
if (le64toh(u->data.hash) != h) {
- log_error("Hash mismatch for data object at entry %llu",
- (unsigned long long) p);
+ log_error("Hash mismatch for data object at entry %"PRIu64, p);
return -EBADMSG;
}
@@ -567,8 +682,7 @@ static int verify_entry(
if (r < 0)
return r;
if (r == 0) {
- log_error("Data object missing from hash at entry %llu",
- (unsigned long long) p);
+ log_error("Data object missing from hash at entry %"PRIu64, p);
return -EBADMSG;
}
}
@@ -603,14 +717,12 @@ static int verify_entry_array(
draw_progress(0x8000 + (0x3FFF * i / n), last_usec);
if (a == 0) {
- log_error("Array chain too short at %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Array chain too short at %"PRIu64" of %"PRIu64, i, n);
return -EBADMSG;
}
if (!contains_uint64(f->mmap, entry_array_fd, n_entry_arrays, a)) {
- log_error("Invalid array at %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Invalid array at %"PRIu64" of %"PRIu64, i, n);
return -EBADMSG;
}
@@ -620,8 +732,7 @@ static int verify_entry_array(
next = le64toh(o->entry_array.next_entry_array_offset);
if (next != 0 && next <= a) {
- log_error("Array chain has cycle at %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Array chain has cycle at %"PRIu64" of %"PRIu64, i, n);
return -EBADMSG;
}
@@ -631,15 +742,15 @@ static int verify_entry_array(
p = le64toh(o->entry_array.items[j]);
if (p <= last) {
- log_error("Entry array not sorted at %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Entry array not sorted at %"PRIu64" of %"PRIu64,
+ i, n);
return -EBADMSG;
}
last = p;
if (!contains_uint64(f->mmap, entry_fd, n_entries, p)) {
- log_error("Invalid array entry at %llu of %llu",
- (unsigned long long) i, (unsigned long long) n);
+ log_error("Invalid array entry at %"PRIu64" of %"PRIu64,
+ i, n);
return -EBADMSG;
}
@@ -753,7 +864,7 @@ int journal_file_verify(
r = journal_file_move_to_object(f, -1, p, &o);
if (r < 0) {
- log_error("Invalid object at %llu", (unsigned long long) p);
+ log_error("Invalid object at "OFSfmt, p);
goto fail;
}
@@ -768,14 +879,14 @@ int journal_file_verify(
n_objects ++;
- r = journal_file_object_verify(f, o);
+ r = journal_file_object_verify(f, p, o);
if (r < 0) {
- log_error("Invalid object contents at %llu", (unsigned long long) p);
+ log_error("Invalid object contents at "OFSfmt": %s", p, strerror(-r));
goto fail;
}
if ((o->object.flags & OBJECT_COMPRESSED) && !JOURNAL_HEADER_COMPRESSED(f->header)) {
- log_error("Compressed object in file without compression at %llu", (unsigned long long) p);
+ log_error("Compressed object in file without compression at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -796,7 +907,7 @@ int journal_file_verify(
case OBJECT_ENTRY:
if (JOURNAL_HEADER_SEALED(f->header) && n_tags <= 0) {
- log_error("First entry before first tag at %llu", (unsigned long long) p);
+ log_error("First entry before first tag at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -806,21 +917,21 @@ int journal_file_verify(
goto fail;
if (le64toh(o->entry.realtime) < last_tag_realtime) {
- log_error("Older entry after newer tag at %llu", (unsigned long long) p);
+ log_error("Older entry after newer tag at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
if (!entry_seqnum_set &&
le64toh(o->entry.seqnum) != le64toh(f->header->head_entry_seqnum)) {
- log_error("Head entry sequence number incorrect at %llu", (unsigned long long) p);
+ log_error("Head entry sequence number incorrect at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
if (entry_seqnum_set &&
entry_seqnum >= le64toh(o->entry.seqnum)) {
- log_error("Entry sequence number out of synchronization at %llu", (unsigned long long) p);
+ log_error("Entry sequence number out of synchronization at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -831,7 +942,7 @@ int journal_file_verify(
if (entry_monotonic_set &&
sd_id128_equal(entry_boot_id, o->entry.boot_id) &&
entry_monotonic > le64toh(o->entry.monotonic)) {
- log_error("Entry timestamp out of synchronization at %llu", (unsigned long long) p);
+ log_error("Entry timestamp out of synchronization at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -855,7 +966,7 @@ int journal_file_verify(
case OBJECT_DATA_HASH_TABLE:
if (n_data_hash_tables > 1) {
- log_error("More than one data hash table at %llu", (unsigned long long) p);
+ log_error("More than one data hash table at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -872,7 +983,7 @@ int journal_file_verify(
case OBJECT_FIELD_HASH_TABLE:
if (n_field_hash_tables > 1) {
- log_error("More than one field hash table at %llu", (unsigned long long) p);
+ log_error("More than one field hash table at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -894,7 +1005,7 @@ int journal_file_verify(
if (p == le64toh(f->header->entry_array_offset)) {
if (found_main_entry_array) {
- log_error("More than one main entry array at %llu", (unsigned long long) p);
+ log_error("More than one main entry array at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -907,19 +1018,19 @@ int journal_file_verify(
case OBJECT_TAG:
if (!JOURNAL_HEADER_SEALED(f->header)) {
- log_error("Tag object in file without sealing at %llu", (unsigned long long) p);
+ log_error("Tag object in file without sealing at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
if (le64toh(o->tag.seqnum) != n_tags + 1) {
- log_error("Tag sequence number out of synchronization at %llu", (unsigned long long) p);
+ log_error("Tag sequence number out of synchronization at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
if (le64toh(o->tag.epoch) < last_epoch) {
- log_error("Epoch sequence out of synchronization at %llu", (unsigned long long) p);
+ log_error("Epoch sequence out of synchronization at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -928,11 +1039,11 @@ int journal_file_verify(
if (f->seal) {
uint64_t q, rt;
- log_debug("Checking tag %llu..", (unsigned long long) le64toh(o->tag.seqnum));
+ log_debug("Checking tag %"PRIu64"...", le64toh(o->tag.seqnum));
rt = f->fss_start_usec + o->tag.epoch * f->fss_interval_usec;
if (entry_realtime_set && entry_realtime >= rt + f->fss_interval_usec) {
- log_error("Tag/entry realtime timestamp out of synchronization at %llu", (unsigned long long) p);
+ log_error("Tag/entry realtime timestamp out of synchronization at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -975,7 +1086,7 @@ int journal_file_verify(
goto fail;
if (memcmp(o->tag.tag, gcry_md_read(f->hmac, 0), TAG_LENGTH) != 0) {
- log_error("Tag failed verification at %llu", (unsigned long long) p);
+ log_error("Tag failed verification at "OFSfmt, p);
r = -EBADMSG;
goto fail;
}
@@ -1138,11 +1249,11 @@ fail:
if (show_progress)
flush_progress();
- log_error("File corruption detected at %s:%llu (of %llu, %llu%%).",
+ log_error("File corruption detected at %s:"OFSfmt" (of %llu bytes, %"PRIu64"%%).",
f->path,
- (unsigned long long) p,
+ p,
(unsigned long long) f->last_stat.st_size,
- (unsigned long long) (100 * p / f->last_stat.st_size));
+ 100 * p / f->last_stat.st_size);
if (data_fd >= 0) {
mmap_cache_close_fd(f->mmap, data_fd);
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 409f082276..9a2d255361 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -45,6 +45,7 @@
#include "logs-show.h"
#include "util.h"
#include "path-util.h"
+#include "fileio.h"
#include "build.h"
#include "pager.h"
#include "logs-show.h"
@@ -70,13 +71,19 @@ static int arg_lines = -1;
static bool arg_no_tail = false;
static bool arg_quiet = false;
static bool arg_merge = false;
-static bool arg_this_boot = false;
+static bool arg_boot = false;
+static char *arg_boot_descriptor = NULL;
+static bool arg_dmesg = false;
static const char *arg_cursor = NULL;
+static const char *arg_after_cursor = NULL;
+static bool arg_show_cursor = false;
static const char *arg_directory = NULL;
+static char **arg_file = NULL;
static int arg_priorities = 0xFF;
static const char *arg_verify_key = NULL;
#ifdef HAVE_GCRYPT
static usec_t arg_interval = DEFAULT_FSS_INTERVAL_USEC;
+static bool arg_force = false;
#endif
static usec_t arg_since, arg_until;
static bool arg_since_set = false, arg_until_set = false;
@@ -85,6 +92,7 @@ static char **arg_user_units = NULL;
static const char *arg_field = NULL;
static bool arg_catalog = false;
static bool arg_reverse = false;
+static int arg_journal_type = 0;
static const char *arg_root = NULL;
static enum {
@@ -99,50 +107,63 @@ static enum {
ACTION_UPDATE_CATALOG
} arg_action = ACTION_SHOW;
+typedef struct boot_id_t {
+ sd_id128_t id;
+ uint64_t timestamp;
+} boot_id_t;
+
static int help(void) {
printf("%s [OPTIONS...] [MATCHES...]\n\n"
"Query the journal.\n\n"
"Flags:\n"
- " --since=DATE Start showing entries newer or of the specified date\n"
- " --until=DATE Stop showing entries older or of the specified date\n"
- " -c --cursor=CURSOR Start showing entries from specified cursor\n"
- " -b --this-boot Show data only from current boot\n"
- " -u --unit=UNIT Show data only from the specified unit\n"
- " --user-unit=UNIT Show data only from the specified user session unit\n"
- " -p --priority=RANGE Show only messages within the specified priority range\n"
- " -e --pager-end Immediately jump to end of the journal in the pager\n"
- " -f --follow Follow journal\n"
- " -n --lines[=INTEGER] Number of journal entries to show\n"
- " --no-tail Show all lines, even in follow mode\n"
- " -r --reverse Show the newest entries first\n"
- " -o --output=STRING Change journal output mode (short, short-monotonic,\n"
- " verbose, export, json, json-pretty, json-sse, cat)\n"
- " -x --catalog Add message explanations where available\n"
- " --full Do not ellipsize fields\n"
- " -a --all Show all fields, including long and unprintable\n"
- " -q --quiet Don't show privilege warning\n"
- " --no-pager Do not pipe output into a pager\n"
- " -m --merge Show entries from all available journals\n"
- " -D --directory=PATH Show journal files from directory\n"
- " --root=ROOT Operate on catalog files underneath the root ROOT\n"
+ " --system Show only the system journal\n"
+ " --user Show only the user journal for current user\n"
+ " --since=DATE Start showing entries newer or of the specified date\n"
+ " --until=DATE Stop showing entries older or of the specified date\n"
+ " -c --cursor=CURSOR Start showing entries from specified cursor\n"
+ " --after-cursor=CURSOR Start showing entries from specified cursor\n"
+ " --show-cursor Print the cursor after all the entries\n"
+ " -b --boot[=ID] Show data only from ID or current boot if unspecified\n"
+ " -k --dmesg Show kernel message log from current boot\n"
+ " -u --unit=UNIT Show data only from the specified unit\n"
+ " --user-unit=UNIT Show data only from the specified user session unit\n"
+ " -p --priority=RANGE Show only messages within the specified priority range\n"
+ " -e --pager-end Immediately jump to end of the journal in the pager\n"
+ " -f --follow Follow journal\n"
+ " -n --lines[=INTEGER] Number of journal entries to show\n"
+ " --no-tail Show all lines, even in follow mode\n"
+ " -r --reverse Show the newest entries first\n"
+ " -o --output=STRING Change journal output mode (short, short-iso,\n"
+ " short-precise, short-monotonic, verbose,\n"
+ " export, json, json-pretty, json-sse, cat)\n"
+ " -x --catalog Add message explanations where available\n"
+ " -l --full Do not ellipsize fields\n"
+ " -a --all Show all fields, including long and unprintable\n"
+ " -q --quiet Don't show privilege warning\n"
+ " --no-pager Do not pipe output into a pager\n"
+ " -m --merge Show entries from all available journals\n"
+ " -D --directory=PATH Show journal files from directory\n"
+ " --file=PATH Show journal file\n"
+ " --root=ROOT Operate on catalog files underneath the root ROOT\n"
#ifdef HAVE_GCRYPT
- " --interval=TIME Time interval for changing the FSS sealing key\n"
- " --verify-key=KEY Specify FSS verification key\n"
+ " --interval=TIME Time interval for changing the FSS sealing key\n"
+ " --verify-key=KEY Specify FSS verification key\n"
+ " --force Force overriding new FSS key pair with --setup-keys\n"
#endif
"\nCommands:\n"
- " -h --help Show this help\n"
- " --version Show package version\n"
- " --new-id128 Generate a new 128 Bit ID\n"
- " --header Show journal header information\n"
- " --disk-usage Show total disk usage\n"
- " -F --field=FIELD List all values a certain field takes\n"
- " --list-catalog Show message IDs of all entries in the message catalog\n"
- " --dump-catalog Show entries in the message catalog\n"
- " --update-catalog Update the message catalog database\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " --new-id128 Generate a new 128 Bit ID\n"
+ " --header Show journal header information\n"
+ " --disk-usage Show total disk usage\n"
+ " -F --field=FIELD List all values a certain field takes\n"
+ " --list-catalog Show message IDs of all entries in the message catalog\n"
+ " --dump-catalog Show entries in the message catalog\n"
+ " --update-catalog Update the message catalog database\n"
#ifdef HAVE_GCRYPT
- " --setup-keys Generate new FSS key pair\n"
- " --verify Verify journal file consistency\n"
+ " --setup-keys Generate new FSS key pair\n"
+ " --verify Verify journal file consistency\n"
#endif
, program_invocation_short_name);
@@ -156,58 +177,71 @@ static int parse_argv(int argc, char *argv[]) {
ARG_NO_PAGER,
ARG_NO_TAIL,
ARG_NEW_ID128,
+ ARG_USER,
+ ARG_SYSTEM,
ARG_ROOT,
ARG_HEADER,
- ARG_FULL,
ARG_SETUP_KEYS,
+ ARG_FILE,
ARG_INTERVAL,
ARG_VERIFY,
ARG_VERIFY_KEY,
ARG_DISK_USAGE,
ARG_SINCE,
ARG_UNTIL,
+ ARG_AFTER_CURSOR,
+ ARG_SHOW_CURSOR,
ARG_USER_UNIT,
ARG_LIST_CATALOG,
ARG_DUMP_CATALOG,
- ARG_UPDATE_CATALOG
+ ARG_UPDATE_CATALOG,
+ ARG_FORCE,
};
static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "version" , no_argument, NULL, ARG_VERSION },
- { "no-pager", no_argument, NULL, ARG_NO_PAGER },
- { "pager-end", no_argument, NULL, 'e' },
- { "follow", no_argument, NULL, 'f' },
- { "output", required_argument, NULL, 'o' },
- { "all", no_argument, NULL, 'a' },
- { "full", no_argument, NULL, ARG_FULL },
- { "lines", optional_argument, NULL, 'n' },
- { "no-tail", no_argument, NULL, ARG_NO_TAIL },
- { "new-id128", no_argument, NULL, ARG_NEW_ID128 },
- { "quiet", no_argument, NULL, 'q' },
- { "merge", no_argument, NULL, 'm' },
- { "this-boot", no_argument, NULL, 'b' },
- { "directory", required_argument, NULL, 'D' },
- { "root", required_argument, NULL, ARG_ROOT },
- { "header", no_argument, NULL, ARG_HEADER },
- { "priority", required_argument, NULL, 'p' },
- { "setup-keys", no_argument, NULL, ARG_SETUP_KEYS },
- { "interval", required_argument, NULL, ARG_INTERVAL },
- { "verify", no_argument, NULL, ARG_VERIFY },
- { "verify-key", required_argument, NULL, ARG_VERIFY_KEY },
- { "disk-usage", no_argument, NULL, ARG_DISK_USAGE },
- { "cursor", required_argument, NULL, 'c' },
- { "since", required_argument, NULL, ARG_SINCE },
- { "until", required_argument, NULL, ARG_UNTIL },
- { "unit", required_argument, NULL, 'u' },
- { "user-unit", required_argument, NULL, ARG_USER_UNIT },
- { "field", required_argument, NULL, 'F' },
- { "catalog", no_argument, NULL, 'x' },
- { "list-catalog", no_argument, NULL, ARG_LIST_CATALOG },
- { "dump-catalog", no_argument, NULL, ARG_DUMP_CATALOG },
- { "update-catalog",no_argument, NULL, ARG_UPDATE_CATALOG },
- { "reverse", no_argument, NULL, 'r' },
- { NULL, 0, NULL, 0 }
+ { "help", no_argument, NULL, 'h' },
+ { "version" , no_argument, NULL, ARG_VERSION },
+ { "no-pager", no_argument, NULL, ARG_NO_PAGER },
+ { "pager-end", no_argument, NULL, 'e' },
+ { "follow", no_argument, NULL, 'f' },
+ { "force", no_argument, NULL, ARG_FORCE },
+ { "output", required_argument, NULL, 'o' },
+ { "all", no_argument, NULL, 'a' },
+ { "full", no_argument, NULL, 'l' },
+ { "lines", optional_argument, NULL, 'n' },
+ { "no-tail", no_argument, NULL, ARG_NO_TAIL },
+ { "new-id128", no_argument, NULL, ARG_NEW_ID128 },
+ { "quiet", no_argument, NULL, 'q' },
+ { "merge", no_argument, NULL, 'm' },
+ { "boot", optional_argument, NULL, 'b' },
+ { "this-boot", optional_argument, NULL, 'b' }, /* deprecated */
+ { "dmesg", no_argument, NULL, 'k' },
+ { "system", no_argument, NULL, ARG_SYSTEM },
+ { "user", no_argument, NULL, ARG_USER },
+ { "directory", required_argument, NULL, 'D' },
+ { "file", required_argument, NULL, ARG_FILE },
+ { "root", required_argument, NULL, ARG_ROOT },
+ { "header", no_argument, NULL, ARG_HEADER },
+ { "priority", required_argument, NULL, 'p' },
+ { "setup-keys", no_argument, NULL, ARG_SETUP_KEYS },
+ { "interval", required_argument, NULL, ARG_INTERVAL },
+ { "verify", no_argument, NULL, ARG_VERIFY },
+ { "verify-key", required_argument, NULL, ARG_VERIFY_KEY },
+ { "disk-usage", no_argument, NULL, ARG_DISK_USAGE },
+ { "cursor", required_argument, NULL, 'c' },
+ { "after-cursor", required_argument, NULL, ARG_AFTER_CURSOR },
+ { "show-cursor", no_argument, NULL, ARG_SHOW_CURSOR },
+ { "since", required_argument, NULL, ARG_SINCE },
+ { "until", required_argument, NULL, ARG_UNTIL },
+ { "unit", required_argument, NULL, 'u' },
+ { "user-unit", required_argument, NULL, ARG_USER_UNIT },
+ { "field", required_argument, NULL, 'F' },
+ { "catalog", no_argument, NULL, 'x' },
+ { "list-catalog", no_argument, NULL, ARG_LIST_CATALOG },
+ { "dump-catalog", no_argument, NULL, ARG_DUMP_CATALOG },
+ { "update-catalog", no_argument, NULL, ARG_UPDATE_CATALOG },
+ { "reverse", no_argument, NULL, 'r' },
+ { NULL, 0, NULL, 0 }
};
int c, r;
@@ -215,7 +249,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "hefo:an::qmbD:p:c:u:F:xr", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "hefo:aln::qmb::kD:p:c:u:F:xr", options, NULL)) >= 0) {
switch (c) {
@@ -260,7 +294,7 @@ static int parse_argv(int argc, char *argv[]) {
break;
- case ARG_FULL:
+ case 'l':
arg_full = true;
break;
@@ -314,13 +348,46 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'b':
- arg_this_boot = true;
+ arg_boot = true;
+
+ if (optarg)
+ arg_boot_descriptor = optarg;
+ else if (optind < argc) {
+ int boot;
+
+ if (argv[optind][0] != '-' ||
+ safe_atoi(argv[optind], &boot) >= 0) {
+ arg_boot_descriptor = argv[optind];
+ optind++;
+ }
+ }
+
+ break;
+
+ case 'k':
+ arg_boot = arg_dmesg = true;
+ break;
+
+ case ARG_SYSTEM:
+ arg_journal_type |= SD_JOURNAL_SYSTEM;
+ break;
+
+ case ARG_USER:
+ arg_journal_type |= SD_JOURNAL_CURRENT_USER;
break;
case 'D':
arg_directory = optarg;
break;
+ case ARG_FILE:
+ r = glob_extend(&arg_file, optarg);
+ if (r < 0) {
+ log_error("Failed to add paths: %s", strerror(-r));
+ return r;
+ };
+ break;
+
case ARG_ROOT:
arg_root = optarg;
break;
@@ -329,6 +396,14 @@ static int parse_argv(int argc, char *argv[]) {
arg_cursor = optarg;
break;
+ case ARG_AFTER_CURSOR:
+ arg_after_cursor = optarg;
+ break;
+
+ case ARG_SHOW_CURSOR:
+ arg_show_cursor = true;
+ break;
+
case ARG_HEADER:
arg_action = ACTION_PRINT_HEADER;
break;
@@ -342,6 +417,10 @@ static int parse_argv(int argc, char *argv[]) {
break;
#ifdef HAVE_GCRYPT
+ case ARG_FORCE:
+ arg_force = true;
+ break;
+
case ARG_SETUP_KEYS:
arg_action = ACTION_SETUP_KEYS;
break;
@@ -364,6 +443,7 @@ static int parse_argv(int argc, char *argv[]) {
case ARG_SETUP_KEYS:
case ARG_VERIFY_KEY:
case ARG_INTERVAL:
+ case ARG_FORCE:
log_error("Forward-secure sealing not available.");
return -ENOTSUP;
#endif
@@ -484,13 +564,18 @@ static int parse_argv(int argc, char *argv[]) {
if (arg_follow && !arg_no_tail && arg_lines < 0)
arg_lines = 10;
+ if (arg_directory && arg_file) {
+ log_error("Please specify either -D/--directory= or --file=, not both.");
+ return -EINVAL;
+ }
+
if (arg_since_set && arg_until_set && arg_since > arg_until) {
log_error("--since= must be before --until=.");
return -EINVAL;
}
- if (arg_cursor && arg_since_set) {
- log_error("Please specify either --since= or --cursor=, not both.");
+ if (!!arg_cursor + !!arg_after_cursor + !!arg_since_set > 1) {
+ log_error("Please specify only one of --since=, --cursor=, and --after-cursor.");
return -EINVAL;
}
@@ -544,8 +629,9 @@ static int add_matches(sd_journal *j, char **args) {
if (streq(*i, "+"))
r = sd_journal_add_disjunction(j);
else if (path_is_absolute(*i)) {
- _cleanup_free_ char *p, *t = NULL;
+ _cleanup_free_ char *p, *t = NULL, *t2 = NULL;
const char *path;
+ _cleanup_free_ char *interpreter = NULL;
struct stat st;
p = canonicalize_file_name(*i);
@@ -556,9 +642,27 @@ static int add_matches(sd_journal *j, char **args) {
return -errno;
}
- if (S_ISREG(st.st_mode) && (0111 & st.st_mode))
- t = strappend("_EXE=", path);
- else if (S_ISCHR(st.st_mode))
+ if (S_ISREG(st.st_mode) && (0111 & st.st_mode)) {
+ if (executable_is_script(path, &interpreter) > 0) {
+ _cleanup_free_ char *comm;
+
+ comm = strndup(path_get_file_name(path), 15);
+ if (!comm)
+ return log_oom();
+
+ t = strappend("_COMM=", comm);
+
+ /* Append _EXE only if the interpreter is not a link.
+ Otherwise it might be outdated often. */
+ if (lstat(interpreter, &st) == 0 &&
+ !S_ISLNK(st.st_mode)) {
+ t2 = strappend("_EXE=", interpreter);
+ if (!t2)
+ return log_oom();
+ }
+ } else
+ t = strappend("_EXE=", path);
+ } else if (S_ISCHR(st.st_mode))
asprintf(&t, "_KERNEL_DEVICE=c%u:%u", major(st.st_rdev), minor(st.st_rdev));
else if (S_ISBLK(st.st_mode))
asprintf(&t, "_KERNEL_DEVICE=b%u:%u", major(st.st_rdev), minor(st.st_rdev));
@@ -571,6 +675,8 @@ static int add_matches(sd_journal *j, char **args) {
return log_oom();
r = sd_journal_add_match(j, t, 0);
+ if (t2)
+ r = sd_journal_add_match(j, t2, 0);
} else
r = sd_journal_add_match(j, *i, 0);
@@ -583,24 +689,169 @@ static int add_matches(sd_journal *j, char **args) {
return 0;
}
-static int add_this_boot(sd_journal *j) {
- char match[9+32+1] = "_BOOT_ID=";
- sd_id128_t boot_id;
+static int boot_id_cmp(const void *a, const void *b) {
+ uint64_t _a, _b;
+
+ _a = ((const boot_id_t *)a)->timestamp;
+ _b = ((const boot_id_t *)b)->timestamp;
+
+ return _a < _b ? -1 : (_a > _b ? 1 : 0);
+}
+
+static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative) {
int r;
+ const void *data;
+ unsigned int count = 0;
+ size_t length, allocated = 0;
+ boot_id_t ref_boot_id = {SD_ID128_NULL}, *id;
+ _cleanup_free_ boot_id_t *all_ids = NULL;
+
+ assert(j);
+ assert(boot_id);
+
+ if (relative == 0 && !sd_id128_equal(*boot_id, SD_ID128_NULL))
+ return 0;
+
+ r = sd_journal_query_unique(j, "_BOOT_ID");
+ if (r < 0)
+ return r;
+
+ SD_JOURNAL_FOREACH_UNIQUE(j, data, length) {
+ if (length < strlen("_BOOT_ID="))
+ continue;
+
+ if (!GREEDY_REALLOC(all_ids, allocated, count + 1))
+ return log_oom();
+
+ id = &all_ids[count];
+
+ r = sd_id128_from_string(((const char *)data) + strlen("_BOOT_ID="), &id->id);
+ if (r < 0)
+ continue;
+
+ r = sd_journal_add_match(j, data, length);
+ if (r < 0)
+ return r;
+
+ r = sd_journal_seek_head(j);
+ if (r < 0)
+ return r;
+
+ r = sd_journal_next(j);
+ if (r < 0)
+ return r;
+ else if (r == 0)
+ goto flush;
+
+ r = sd_journal_get_realtime_usec(j, &id->timestamp);
+ if (r < 0)
+ return r;
+
+ if (sd_id128_equal(id->id, *boot_id))
+ ref_boot_id = *id;
+
+ count++;
+ flush:
+ sd_journal_flush_matches(j);
+ }
+
+ qsort(all_ids, count, sizeof(boot_id_t), boot_id_cmp);
+
+ if (sd_id128_equal(*boot_id, SD_ID128_NULL)) {
+ if (relative > (int) count || relative <= -(int)count)
+ return -EADDRNOTAVAIL;
+
+ *boot_id = all_ids[(relative <= 0)*count + relative - 1].id;
+ } else {
+ id = bsearch(&ref_boot_id, all_ids, count, sizeof(boot_id_t), boot_id_cmp);
+
+ if (!id ||
+ relative <= 0 ? (id - all_ids) + relative < 0 :
+ (id - all_ids) + relative >= (int) count)
+ return -EADDRNOTAVAIL;
+
+ *boot_id = (id + relative)->id;
+ }
+
+ return 0;
+}
+
+static int add_boot(sd_journal *j) {
+ char match[9+32+1] = "_BOOT_ID=";
+ char *offset;
+ sd_id128_t boot_id = SD_ID128_NULL;
+ int r, relative = 0;
assert(j);
- if (!arg_this_boot)
+ if (!arg_boot)
return 0;
- r = sd_id128_get_boot(&boot_id);
+ if (!arg_boot_descriptor)
+ return add_match_this_boot(j);
+
+ if (strlen(arg_boot_descriptor) >= 32) {
+ char tmp = arg_boot_descriptor[32];
+ arg_boot_descriptor[32] = '\0';
+ r = sd_id128_from_string(arg_boot_descriptor, &boot_id);
+ arg_boot_descriptor[32] = tmp;
+
+ if (r < 0) {
+ log_error("Failed to parse boot ID '%.32s': %s",
+ arg_boot_descriptor, strerror(-r));
+ return r;
+ }
+
+ offset = arg_boot_descriptor + 32;
+
+ if (*offset && *offset != '-' && *offset != '+') {
+ log_error("Relative boot ID offset must start with a '+' or a '-', found '%s' ", offset);
+ return -EINVAL;
+ }
+ } else
+ offset = arg_boot_descriptor;
+
+ if (*offset) {
+ r = safe_atoi(offset, &relative);
+ if (r < 0) {
+ log_error("Failed to parse relative boot ID number '%s'", offset);
+ return -EINVAL;
+ }
+ }
+
+ r = get_relative_boot_id(j, &boot_id, relative);
if (r < 0) {
- log_error("Failed to get boot id: %s", strerror(-r));
+ if (sd_id128_equal(boot_id, SD_ID128_NULL))
+ log_error("Failed to look up boot %+d: %s", relative, strerror(-r));
+ else
+ log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+d: %s",
+ SD_ID128_FORMAT_VAL(boot_id), relative, strerror(-r));
return r;
}
sd_id128_to_string(boot_id, match + 9);
- r = sd_journal_add_match(j, match, strlen(match));
+
+ r = sd_journal_add_match(j, match, sizeof(match) - 1);
+ if (r < 0) {
+ log_error("Failed to add match: %s", strerror(-r));
+ return r;
+ }
+
+ r = sd_journal_add_conjunction(j);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+static int add_dmesg(sd_journal *j) {
+ int r;
+ assert(j);
+
+ if (!arg_dmesg)
+ return 0;
+
+ r = sd_journal_add_match(j, "_TRANSPORT=kernel", strlen("_TRANSPORT=kernel"));
if (r < 0) {
log_error("Failed to add match: %s", strerror(-r));
return r;
@@ -690,6 +941,19 @@ static int setup_keys(void) {
char *p = NULL, *k = NULL;
struct FSSHeader h;
uint64_t n;
+ struct stat st;
+
+ r = stat("/var/log/journal", &st);
+ if (r < 0 && errno != ENOENT && errno != ENOTDIR) {
+ log_error("stat(\"%s\") failed: %m", "/var/log/journal");
+ return -errno;
+ }
+
+ if (r < 0 || !S_ISDIR(st.st_mode)) {
+ log_error("%s is not a directory, must be using persistent logging for FSS.",
+ "/var/log/journal");
+ return r < 0 ? -errno : -ENOTDIR;
+ }
r = sd_id128_get_machine(&machine);
if (r < 0) {
@@ -708,9 +972,18 @@ static int setup_keys(void) {
return log_oom();
if (access(p, F_OK) >= 0) {
- log_error("Sealing key file %s exists already.", p);
- r = -EEXIST;
- goto finish;
+ if (arg_force) {
+ r = unlink(p);
+ if (r < 0) {
+ log_error("unlink(\"%s\") failed: %m", p);
+ r = -errno;
+ goto finish;
+ }
+ } else {
+ log_error("Sealing key file %s exists already. (--force to recreate)", p);
+ r = -EEXIST;
+ goto finish;
+ }
}
if (asprintf(&k, "/var/log/journal/" SD_ID128_FORMAT_STR "/fss.tmp.XXXXXX",
@@ -1028,11 +1301,12 @@ static int access_check(sd_journal *j) {
int main(int argc, char *argv[]) {
int r;
- _cleanup_journal_close_ sd_journal*j = NULL;
+ _cleanup_journal_close_ sd_journal *j = NULL;
bool need_seek = false;
sd_id128_t previous_boot_id;
bool previous_boot_id_valid = false, first_line = true;
int n_shown = 0;
+ bool ellipsized = false;
setlocale(LC_ALL, "");
log_parse_environment();
@@ -1090,11 +1364,15 @@ int main(int argc, char *argv[]) {
}
if (arg_directory)
- r = sd_journal_open_directory(&j, arg_directory, 0);
+ r = sd_journal_open_directory(&j, arg_directory, arg_journal_type);
+ else if (arg_file)
+ r = sd_journal_open_files(&j, (const char**) arg_file, 0);
else
- r = sd_journal_open(&j, arg_merge ? 0 : SD_JOURNAL_LOCAL_ONLY);
+ r = sd_journal_open(&j, !arg_merge*SD_JOURNAL_LOCAL_ONLY + arg_journal_type);
if (r < 0) {
- log_error("Failed to open journal: %s", strerror(-r));
+ log_error("Failed to open %s: %s",
+ arg_directory ? arg_directory : arg_file ? "files" : "journal",
+ strerror(-r));
return EXIT_FAILURE;
}
@@ -1125,7 +1403,13 @@ int main(int argc, char *argv[]) {
return EXIT_SUCCESS;
}
- r = add_this_boot(j);
+ /* add_boot() must be called first!
+ * It may need to seek the journal to find parent boot IDs. */
+ r = add_boot(j);
+ if (r < 0)
+ return EXIT_FAILURE;
+
+ r = add_dmesg(j);
if (r < 0)
return EXIT_FAILURE;
@@ -1144,10 +1428,12 @@ int main(int argc, char *argv[]) {
if (r < 0)
return EXIT_FAILURE;
- /* Opening the fd now means the first sd_journal_wait() will actually wait */
- r = sd_journal_get_fd(j);
- if (r < 0)
- return EXIT_FAILURE;
+ if (_unlikely_(log_get_max_level() >= LOG_PRI(LOG_DEBUG))) {
+ _cleanup_free_ char *filter;
+
+ filter = journal_make_match_string(j);
+ log_debug("Journal filter: %s", filter);
+ }
if (arg_field) {
const void *data;
@@ -1183,16 +1469,27 @@ int main(int argc, char *argv[]) {
return EXIT_SUCCESS;
}
- if (arg_cursor) {
- r = sd_journal_seek_cursor(j, arg_cursor);
+ /* Opening the fd now means the first sd_journal_wait() will actually wait */
+ if (arg_follow) {
+ r = sd_journal_get_fd(j);
+ if (r < 0)
+ return EXIT_FAILURE;
+ }
+
+ if (arg_cursor || arg_after_cursor) {
+ r = sd_journal_seek_cursor(j, arg_cursor ? arg_cursor : arg_after_cursor);
if (r < 0) {
log_error("Failed to seek to cursor: %s", strerror(-r));
return EXIT_FAILURE;
}
if (!arg_reverse)
- r = sd_journal_next(j);
+ r = sd_journal_next_skip(j, 1 + !!arg_after_cursor);
else
- r = sd_journal_previous(j);
+ r = sd_journal_previous_skip(j, 1 + !!arg_after_cursor);
+
+ if (arg_after_cursor && r < 2 && !arg_follow)
+ /* We couldn't find the next entry after the cursor. */
+ arg_lines = 0;
} else if (arg_since_set && !arg_reverse) {
r = sd_journal_seek_realtime_usec(j, arg_since);
@@ -1280,11 +1577,10 @@ int main(int argc, char *argv[]) {
log_error("Failed to iterate through journal: %s", strerror(-r));
goto finish;
}
+ if (r == 0)
+ break;
}
- if (r == 0)
- break;
-
if (arg_until_set && !arg_reverse) {
usec_t usec;
@@ -1316,7 +1612,8 @@ int main(int argc, char *argv[]) {
if (r >= 0) {
if (previous_boot_id_valid &&
!sd_id128_equal(boot_id, previous_boot_id))
- printf(ANSI_HIGHLIGHT_ON "-- Reboot --" ANSI_HIGHLIGHT_OFF "\n");
+ printf("%s-- Reboot --%s\n",
+ ansi_highlight(), ansi_highlight_off());
previous_boot_id = boot_id;
previous_boot_id_valid = true;
@@ -1329,16 +1626,29 @@ int main(int argc, char *argv[]) {
on_tty() * OUTPUT_COLOR |
arg_catalog * OUTPUT_CATALOG;
- r = output_journal(stdout, j, arg_output, 0, flags);
- if (r < 0 || ferror(stdout))
+ r = output_journal(stdout, j, arg_output, 0, flags, &ellipsized);
+ need_seek = true;
+ if (r == -EADDRNOTAVAIL)
+ break;
+ else if (r < 0 || ferror(stdout))
goto finish;
- need_seek = true;
n_shown++;
}
- if (!arg_follow)
+ if (!arg_follow) {
+ if (arg_show_cursor) {
+ _cleanup_free_ char *cursor = NULL;
+
+ r = sd_journal_get_cursor(j, &cursor);
+ if (r < 0 && r != -EADDRNOTAVAIL)
+ log_error("Failed to get cursor: %s", strerror(-r));
+ else if (r >= 0)
+ printf("-- cursor: %s\n", cursor);
+ }
+
break;
+ }
r = sd_journal_wait(j, (uint64_t) -1);
if (r < 0) {
diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
index 2f536320f8..21649d06ce 100644
--- a/src/journal/journald-kmsg.c
+++ b/src/journal/journald-kmsg.c
@@ -151,7 +151,8 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) {
/* Did we lose any? */
if (serial > *s->kernel_seqnum)
- server_driver_message(s, SD_MESSAGE_JOURNAL_MISSED, "Missed %llu kernel messages", (unsigned long long) serial - *s->kernel_seqnum - 1);
+ server_driver_message(s, SD_MESSAGE_JOURNAL_MISSED, "Missed %"PRIu64" kernel messages",
+ serial - *s->kernel_seqnum - 1);
/* Make sure we never read this one again. Note that
* we always store the next message serial we expect
@@ -303,7 +304,7 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) {
if (message)
IOVEC_SET_STRING(iovec[n++], message);
- server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, NULL, 0, NULL, priority);
+ server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, NULL, 0, NULL, priority, 0);
finish:
for (j = 0; j < z; j++)
diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
index f878dfc911..c50cf64f5c 100644
--- a/src/journal/journald-native.c
+++ b/src/journal/journald-native.c
@@ -71,6 +71,10 @@ static bool valid_user_field(const char *p, size_t l) {
return true;
}
+static bool allow_object_pid(struct ucred *ucred) {
+ return ucred && ucred->uid == 0;
+}
+
void server_process_native_message(
Server *s,
const void *buffer, size_t buffer_size,
@@ -79,11 +83,12 @@ void server_process_native_message(
const char *label, size_t label_len) {
struct iovec *iovec = NULL;
- unsigned n = 0, m = 0, j, tn = (unsigned) -1;
+ unsigned n = 0, j, tn = (unsigned) -1;
const char *p;
- size_t remaining;
+ size_t remaining, m = 0;
int priority = LOG_INFO;
char *identifier = NULL, *message = NULL;
+ pid_t object_pid = 0;
assert(s);
assert(buffer || buffer_size == 0);
@@ -104,7 +109,7 @@ void server_process_native_message(
if (e == p) {
/* Entry separator */
- server_dispatch_message(s, iovec, n, m, ucred, tv, label, label_len, NULL, priority);
+ server_dispatch_message(s, iovec, n, m, ucred, tv, label, label_len, NULL, priority, object_pid);
n = 0;
priority = LOG_INFO;
@@ -124,19 +129,10 @@ void server_process_native_message(
/* A property follows */
/* n received properties, +1 for _TRANSPORT */
- if (n + 1 + N_IOVEC_META_FIELDS >= m) {
- struct iovec *c;
- unsigned u;
-
- u = MAX((n + 1 + N_IOVEC_META_FIELDS) * 2U, 4U);
- c = realloc(iovec, u * sizeof(struct iovec));
- if (!c) {
- log_oom();
- break;
- }
-
- iovec = c;
- m = u;
+ if (!GREEDY_REALLOC(iovec, m, n + 1 + N_IOVEC_META_FIELDS +
+ !!object_pid * N_IOVEC_OBJECT_FIELDS)) {
+ log_oom();
+ break;
}
q = memchr(p, '=', e - p);
@@ -158,23 +154,23 @@ void server_process_native_message(
* of this entry for the rate limiting
* logic */
if (l == 10 &&
- memcmp(p, "PRIORITY=", 9) == 0 &&
+ startswith(p, "PRIORITY=") &&
p[9] >= '0' && p[9] <= '9')
priority = (priority & LOG_FACMASK) | (p[9] - '0');
else if (l == 17 &&
- memcmp(p, "SYSLOG_FACILITY=", 16) == 0 &&
+ startswith(p, "SYSLOG_FACILITY=") &&
p[16] >= '0' && p[16] <= '9')
priority = (priority & LOG_PRIMASK) | ((p[16] - '0') << 3);
else if (l == 18 &&
- memcmp(p, "SYSLOG_FACILITY=", 16) == 0 &&
+ startswith(p, "SYSLOG_FACILITY=") &&
p[16] >= '0' && p[16] <= '9' &&
p[17] >= '0' && p[17] <= '9')
priority = (priority & LOG_PRIMASK) | (((p[16] - '0')*10 + (p[17] - '0')) << 3);
else if (l >= 19 &&
- memcmp(p, "SYSLOG_IDENTIFIER=", 18) == 0) {
+ startswith(p, "SYSLOG_IDENTIFIER=")) {
char *t;
t = strndup(p + 18, l - 18);
@@ -183,7 +179,7 @@ void server_process_native_message(
identifier = t;
}
} else if (l >= 8 &&
- memcmp(p, "MESSAGE=", 8) == 0) {
+ startswith(p, "MESSAGE=")) {
char *t;
t = strndup(p + 8, l - 8);
@@ -191,6 +187,16 @@ void server_process_native_message(
free(message);
message = t;
}
+ } else if (l > strlen("OBJECT_PID=") &&
+ l < strlen("OBJECT_PID=") + DECIMAL_STR_MAX(pid_t) &&
+ startswith(p, "OBJECT_PID=") &&
+ allow_object_pid(ucred)) {
+ char buf[DECIMAL_STR_MAX(pid_t)];
+ memcpy(buf, p + strlen("OBJECT_PID="), l - strlen("OBJECT_PID="));
+ char_array_0(buf);
+
+ /* ignore error */
+ parse_pid(buf, &object_pid);
}
}
@@ -260,7 +266,7 @@ void server_process_native_message(
server_forward_console(s, priority, identifier, message, ucred);
}
- server_dispatch_message(s, iovec, n, m, ucred, tv, label, label_len, NULL, priority);
+ server_dispatch_message(s, iovec, n, m, ucred, tv, label, label_len, NULL, priority, object_pid);
finish:
for (j = 0; j < n; j++) {
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index cc52b8a5c9..4f47eb1c11 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -65,8 +65,8 @@
#define USER_JOURNALS_MAX 1024
#define DEFAULT_SYNC_INTERVAL_USEC (5*USEC_PER_MINUTE)
-#define DEFAULT_RATE_LIMIT_INTERVAL (10*USEC_PER_SEC)
-#define DEFAULT_RATE_LIMIT_BURST 200
+#define DEFAULT_RATE_LIMIT_INTERVAL (30*USEC_PER_SEC)
+#define DEFAULT_RATE_LIMIT_BURST 1000
#define RECHECK_AVAILABLE_SPACE_USEC (30*USEC_PER_SEC)
@@ -89,21 +89,22 @@ static const char* const split_mode_table[] = {
DEFINE_STRING_TABLE_LOOKUP(split_mode, SplitMode);
DEFINE_CONFIG_PARSE_ENUM(config_parse_split_mode, split_mode, SplitMode, "Failed to parse split mode setting");
-static uint64_t available_space(Server *s) {
+static uint64_t available_space(Server *s, bool verbose) {
char ids[33];
_cleanup_free_ char *p = NULL;
- const char *f;
sd_id128_t machine;
struct statvfs ss;
- uint64_t sum = 0, avail = 0, ss_avail = 0;
+ uint64_t sum = 0, ss_avail = 0, avail = 0;
int r;
_cleanup_closedir_ DIR *d = NULL;
usec_t ts;
+ const char *f;
JournalMetrics *m;
ts = now(CLOCK_MONOTONIC);
- if (s->cached_available_space_timestamp + RECHECK_AVAILABLE_SPACE_USEC > ts)
+ if (s->cached_available_space_timestamp + RECHECK_AVAILABLE_SPACE_USEC > ts
+ && !verbose)
return s->cached_available_space;
r = sd_id128_get_machine(&machine);
@@ -156,38 +157,27 @@ static uint64_t available_space(Server *s) {
sum += (uint64_t) st.st_blocks * 512UL;
}
- avail = sum >= m->max_use ? 0 : m->max_use - sum;
-
ss_avail = ss.f_bsize * ss.f_bavail;
+ avail = ss_avail > m->keep_free ? ss_avail - m->keep_free : 0;
- ss_avail = ss_avail < m->keep_free ? 0 : ss_avail - m->keep_free;
-
- if (ss_avail < avail)
- avail = ss_avail;
-
- s->cached_available_space = avail;
+ s->cached_available_space = MIN(m->max_use, avail) > sum ? MIN(m->max_use, avail) - sum : 0;
s->cached_available_space_timestamp = ts;
- return avail;
-}
-
-static void server_read_file_gid(Server *s) {
- const char *g = "systemd-journal";
- int r;
-
- assert(s);
-
- if (s->file_gid_valid)
- return;
-
- r = get_group_creds(&g, &s->file_gid);
- if (r < 0)
- log_warning("Failed to resolve '%s' group: %s", g, strerror(-r));
+ if (verbose) {
+ char fb1[FORMAT_BYTES_MAX], fb2[FORMAT_BYTES_MAX], fb3[FORMAT_BYTES_MAX],
+ fb4[FORMAT_BYTES_MAX], fb5[FORMAT_BYTES_MAX];
+
+ server_driver_message(s, SD_MESSAGE_JOURNAL_USAGE,
+ "%s journal is using %s (max %s, leaving %s of free %s, current limit %s).",
+ s->system_journal ? "Permanent" : "Runtime",
+ format_bytes(fb1, sizeof(fb1), sum),
+ format_bytes(fb2, sizeof(fb2), m->max_use),
+ format_bytes(fb3, sizeof(fb3), m->keep_free),
+ format_bytes(fb4, sizeof(fb4), ss_avail),
+ format_bytes(fb5, sizeof(fb5), MIN(m->max_use, avail)));
+ }
- /* if we couldn't read the gid, then it will be 0, but that's
- * fine and we shouldn't try to resolve the group again, so
- * let's just pretend it worked right-away. */
- s->file_gid_valid = true;
+ return s->cached_available_space;
}
void server_fix_perms(Server *s, JournalFile *f, uid_t uid) {
@@ -200,11 +190,9 @@ void server_fix_perms(Server *s, JournalFile *f, uid_t uid) {
assert(f);
- server_read_file_gid(s);
-
- r = fchmod_and_fchown(f->fd, 0640, 0, s->file_gid);
+ r = fchmod(f->fd, 0640);
if (r < 0)
- log_warning("Failed to fix access mode/rights on %s, ignoring: %s", f->path, strerror(-r));
+ log_warning("Failed to fix access mode on %s, ignoring: %s", f->path, strerror(-r));
#ifdef HAVE_ACL
if (uid <= 0)
@@ -227,9 +215,11 @@ void server_fix_perms(Server *s, JournalFile *f, uid_t uid) {
}
}
- /* We do not recalculate the mask here, so that the fchmod() mask above stays intact. */
+ /* We do not recalculate the mask unconditionally here,
+ * so that the fchmod() mask above stays intact. */
if (acl_get_permset(entry, &permset) < 0 ||
- acl_add_perm(permset, ACL_READ) < 0) {
+ acl_add_perm(permset, ACL_READ) < 0 ||
+ calc_acl_mask_if_needed(&acl) < 0) {
log_warning("Failed to patch ACL on %s, ignoring: %m", f->path);
goto finish;
}
@@ -243,7 +233,7 @@ finish:
}
static JournalFile* find_journal(Server *s, uid_t uid) {
- char *p;
+ _cleanup_free_ char *p = NULL;
int r;
JournalFile *f;
sd_id128_t machine;
@@ -280,9 +270,7 @@ static JournalFile* find_journal(Server *s, uid_t uid) {
journal_file_close(f);
}
- r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, s->system_journal, &f);
- free(p);
-
+ r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &f);
if (r < 0)
return s->system_journal;
@@ -343,13 +331,12 @@ void server_rotate(Server *s) {
}
void server_sync(Server *s) {
+ static const struct itimerspec sync_timer_disable = {};
JournalFile *f;
void *k;
Iterator i;
int r;
- static const struct itimerspec sync_timer_disable = {};
-
if (s->system_journal) {
r = journal_file_set_offline(s->system_journal);
if (r < 0)
@@ -370,7 +357,6 @@ void server_sync(Server *s) {
}
void server_vacuum(Server *s) {
- char *p;
char ids[33];
sd_id128_t machine;
int r;
@@ -388,29 +374,19 @@ void server_vacuum(Server *s) {
sd_id128_to_string(machine, ids);
if (s->system_journal) {
- p = strappend("/var/log/journal/", ids);
- if (!p) {
- log_oom();
- return;
- }
+ char *p = strappenda("/var/log/journal/", ids);
r = journal_directory_vacuum(p, s->system_metrics.max_use, s->system_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
if (r < 0 && r != -ENOENT)
log_error("Failed to vacuum %s: %s", p, strerror(-r));
- free(p);
}
if (s->runtime_journal) {
- p = strappend("/run/log/journal/", ids);
- if (!p) {
- log_oom();
- return;
- }
+ char *p = strappenda("/run/log/journal/", ids);
r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->runtime_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
if (r < 0 && r != -ENOENT)
log_error("Failed to vacuum %s: %s", p, strerror(-r));
- free(p);
}
s->cached_available_space_timestamp = 0;
@@ -445,7 +421,7 @@ bool shall_try_append_again(JournalFile *f, int r) {
return true;
}
-static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned n) {
+static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned n, int priority) {
JournalFile *f;
bool vacuumed = false;
int r;
@@ -471,12 +447,17 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
r = journal_file_append_entry(f, NULL, iovec, n, &s->seqnum, NULL, NULL);
if (r >= 0) {
- server_schedule_sync(s);
+ server_schedule_sync(s, priority);
return;
}
if (vacuumed || !shall_try_append_again(f, r)) {
- log_error("Failed to write entry, ignoring: %s", strerror(-r));
+ size_t size = 0;
+ unsigned i;
+ for (i = 0; i < n; i++)
+ size += iovec[i].iov_len;
+
+ log_error("Failed to write entry (%d items, %zu bytes), ignoring: %s", n, size, strerror(-r));
return;
}
@@ -489,8 +470,15 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
log_debug("Retrying write.");
r = journal_file_append_entry(f, NULL, iovec, n, &s->seqnum, NULL, NULL);
- if (r < 0)
- log_error("Failed to write entry, ignoring: %s", strerror(-r));
+ if (r < 0) {
+ size_t size = 0;
+ unsigned i;
+ for (i = 0; i < n; i++)
+ size += iovec[i].iov_len;
+
+ log_error("Failed to write entry (%d items, %zu bytes) despite vacuuming, ignoring: %s", n, size, strerror(-r));
+ } else
+ server_schedule_sync(s, priority);
}
static void dispatch_message_real(
@@ -499,24 +487,33 @@ static void dispatch_message_real(
struct ucred *ucred,
struct timeval *tv,
const char *label, size_t label_len,
- const char *unit_id) {
+ const char *unit_id,
+ int priority,
+ pid_t object_pid) {
- char pid[sizeof("_PID=") + DECIMAL_STR_MAX(pid_t)],
+ char pid[sizeof("_PID=") + DECIMAL_STR_MAX(pid_t)],
uid[sizeof("_UID=") + DECIMAL_STR_MAX(uid_t)],
gid[sizeof("_GID=") + DECIMAL_STR_MAX(gid_t)],
owner_uid[sizeof("_SYSTEMD_OWNER_UID=") + DECIMAL_STR_MAX(uid_t)],
source_time[sizeof("_SOURCE_REALTIME_TIMESTAMP=") + DECIMAL_STR_MAX(usec_t)],
boot_id[sizeof("_BOOT_ID=") + 32] = "_BOOT_ID=",
- machine_id[sizeof("_MACHINE_ID=") + 32] = "_MACHINE_ID=";
- char *comm, *exe, *cmdline, *cgroup, *session, *unit, *hostname;
+ machine_id[sizeof("_MACHINE_ID=") + 32] = "_MACHINE_ID=",
+ o_uid[sizeof("OBJECT_UID=") + DECIMAL_STR_MAX(uid_t)],
+ o_gid[sizeof("OBJECT_GID=") + DECIMAL_STR_MAX(gid_t)],
+ o_owner_uid[sizeof("OBJECT_SYSTEMD_OWNER_UID=") + DECIMAL_STR_MAX(uid_t)];
+ uid_t object_uid;
+ gid_t object_gid;
+ char *x;
sd_id128_t id;
int r;
char *t, *c;
uid_t realuid = 0, owner = 0, journal_uid;
bool owner_valid = false;
#ifdef HAVE_AUDIT
- char audit_session[sizeof("_AUDIT_SESSION=") + DECIMAL_STR_MAX(uint32_t)],
- audit_loginuid[sizeof("_AUDIT_LOGINUID=") + DECIMAL_STR_MAX(uid_t)];
+ char audit_session[sizeof("_AUDIT_SESSION=") + DECIMAL_STR_MAX(uint32_t)],
+ audit_loginuid[sizeof("_AUDIT_LOGINUID=") + DECIMAL_STR_MAX(uid_t)],
+ o_audit_session[sizeof("OBJECT_AUDIT_SESSION=") + DECIMAL_STR_MAX(uint32_t)],
+ o_audit_loginuid[sizeof("OBJECT_AUDIT_LOGINUID=") + DECIMAL_STR_MAX(uid_t)];
uint32_t audit;
uid_t loginuid;
@@ -525,7 +522,7 @@ static void dispatch_message_real(
assert(s);
assert(iovec);
assert(n > 0);
- assert(n + N_IOVEC_META_FIELDS <= m);
+ assert(n + N_IOVEC_META_FIELDS + (object_pid ? N_IOVEC_OBJECT_FIELDS : 0) <= m);
if (ucred) {
realuid = ucred->uid;
@@ -541,23 +538,30 @@ static void dispatch_message_real(
r = get_process_comm(ucred->pid, &t);
if (r >= 0) {
- comm = strappenda("_COMM=", t);
+ x = strappenda("_COMM=", t);
free(t);
- IOVEC_SET_STRING(iovec[n++], comm);
+ IOVEC_SET_STRING(iovec[n++], x);
}
r = get_process_exe(ucred->pid, &t);
if (r >= 0) {
- exe = strappenda("_EXE=", t);
+ x = strappenda("_EXE=", t);
free(t);
- IOVEC_SET_STRING(iovec[n++], exe);
+ IOVEC_SET_STRING(iovec[n++], x);
}
r = get_process_cmdline(ucred->pid, 0, false, &t);
if (r >= 0) {
- cmdline = strappenda("_CMDLINE=", t);
+ x = strappenda("_CMDLINE=", t);
free(t);
- IOVEC_SET_STRING(iovec[n++], cmdline);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ r = get_process_capeff(ucred->pid, &t);
+ if (r >= 0) {
+ x = strappenda("_CAP_EFFECTIVE=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
}
#ifdef HAVE_AUDIT
@@ -576,8 +580,10 @@ static void dispatch_message_real(
r = cg_pid_get_path_shifted(ucred->pid, NULL, &c);
if (r >= 0) {
- cgroup = strappenda("_SYSTEMD_CGROUP=", c);
- IOVEC_SET_STRING(iovec[n++], cgroup);
+ char *session = NULL;
+
+ x = strappenda("_SYSTEMD_CGROUP=", c);
+ IOVEC_SET_STRING(iovec[n++], x);
r = cg_path_get_session(c, &t);
if (r >= 0) {
@@ -594,43 +600,133 @@ static void dispatch_message_real(
}
if (cg_path_get_unit(c, &t) >= 0) {
- unit = strappenda("_SYSTEMD_UNIT=", t);
+ x = strappenda("_SYSTEMD_UNIT=", t);
free(t);
- } else if (cg_path_get_user_unit(c, &t) >= 0) {
- unit = strappenda("_SYSTEMD_USER_UNIT=", t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ } else if (unit_id && !session) {
+ x = strappenda("_SYSTEMD_UNIT=", unit_id);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ if (cg_path_get_user_unit(c, &t) >= 0) {
+ x = strappenda("_SYSTEMD_USER_UNIT=", t);
free(t);
- } else if (unit_id) {
- if (session)
- unit = strappenda("_SYSTEMD_USER_UNIT=", unit_id);
- else
- unit = strappenda("_SYSTEMD_UNIT=", unit_id);
- } else
- unit = NULL;
+ IOVEC_SET_STRING(iovec[n++], x);
+ } else if (unit_id && session) {
+ x = strappenda("_SYSTEMD_USER_UNIT=", unit_id);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
- if (unit)
- IOVEC_SET_STRING(iovec[n++], unit);
+ if (cg_path_get_slice(c, &t) >= 0) {
+ x = strappenda("_SYSTEMD_SLICE=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
free(c);
}
#ifdef HAVE_SELINUX
if (label) {
- char *selinux_context = alloca(sizeof("_SELINUX_CONTEXT=") + label_len);
+ x = alloca(sizeof("_SELINUX_CONTEXT=") + label_len);
- *((char*) mempcpy(stpcpy(selinux_context, "_SELINUX_CONTEXT="), label, label_len)) = 0;
- IOVEC_SET_STRING(iovec[n++], selinux_context);
+ *((char*) mempcpy(stpcpy(x, "_SELINUX_CONTEXT="), label, label_len)) = 0;
+ IOVEC_SET_STRING(iovec[n++], x);
} else {
security_context_t con;
if (getpidcon(ucred->pid, &con) >= 0) {
- char *selinux_context = strappenda("_SELINUX_CONTEXT=", con);
+ x = strappenda("_SELINUX_CONTEXT=", con);
freecon(con);
- IOVEC_SET_STRING(iovec[n++], selinux_context);
+ IOVEC_SET_STRING(iovec[n++], x);
}
}
#endif
}
+ assert(n <= m);
+
+ if (object_pid) {
+ r = get_process_uid(object_pid, &object_uid);
+ if (r >= 0) {
+ sprintf(o_uid, "OBJECT_UID=%lu", (unsigned long) object_uid);
+ IOVEC_SET_STRING(iovec[n++], o_uid);
+ }
+
+ r = get_process_gid(object_pid, &object_gid);
+ if (r >= 0) {
+ sprintf(o_gid, "OBJECT_GID=%lu", (unsigned long) object_gid);
+ IOVEC_SET_STRING(iovec[n++], o_gid);
+ }
+
+ r = get_process_comm(object_pid, &t);
+ if (r >= 0) {
+ x = strappenda("OBJECT_COMM=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ r = get_process_exe(object_pid, &t);
+ if (r >= 0) {
+ x = strappenda("OBJECT_EXE=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ r = get_process_cmdline(object_pid, 0, false, &t);
+ if (r >= 0) {
+ x = strappenda("OBJECT_CMDLINE=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+#ifdef HAVE_AUDIT
+ r = audit_session_from_pid(object_pid, &audit);
+ if (r >= 0) {
+ sprintf(o_audit_session, "OBJECT_AUDIT_SESSION=%lu", (unsigned long) audit);
+ IOVEC_SET_STRING(iovec[n++], o_audit_session);
+ }
+
+ r = audit_loginuid_from_pid(object_pid, &loginuid);
+ if (r >= 0) {
+ sprintf(o_audit_loginuid, "OBJECT_AUDIT_LOGINUID=%lu", (unsigned long) loginuid);
+ IOVEC_SET_STRING(iovec[n++], o_audit_loginuid);
+ }
+#endif
+
+ r = cg_pid_get_path_shifted(object_pid, NULL, &c);
+ if (r >= 0) {
+ x = strappenda("OBJECT_SYSTEMD_CGROUP=", c);
+ IOVEC_SET_STRING(iovec[n++], x);
+
+ r = cg_path_get_session(c, &t);
+ if (r >= 0) {
+ x = strappenda("OBJECT_SYSTEMD_SESSION=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ if (cg_path_get_owner_uid(c, &owner) >= 0) {
+ sprintf(o_owner_uid, "OBJECT_SYSTEMD_OWNER_UID=%lu", (unsigned long) owner);
+ IOVEC_SET_STRING(iovec[n++], o_owner_uid);
+ }
+
+ if (cg_path_get_unit(c, &t) >= 0) {
+ x = strappenda("OBJECT_SYSTEMD_UNIT=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ if (cg_path_get_user_unit(c, &t) >= 0) {
+ x = strappenda("OBJECT_SYSTEMD_USER_UNIT=", t);
+ free(t);
+ IOVEC_SET_STRING(iovec[n++], x);
+ }
+
+ free(c);
+ }
+ }
+ assert(n <= m);
if (tv) {
sprintf(source_time, "_SOURCE_REALTIME_TIMESTAMP=%llu", (unsigned long long) timeval_load(tv));
@@ -642,21 +738,21 @@ static void dispatch_message_real(
* anyway. However, we need this indexed, too. */
r = sd_id128_get_boot(&id);
if (r >= 0) {
- sd_id128_to_string(id, boot_id + sizeof("_BOOT_ID=") - 1);
+ sd_id128_to_string(id, boot_id + strlen("_BOOT_ID="));
IOVEC_SET_STRING(iovec[n++], boot_id);
}
r = sd_id128_get_machine(&id);
if (r >= 0) {
- sd_id128_to_string(id, machine_id + sizeof("_MACHINE_ID=") - 1);
+ sd_id128_to_string(id, machine_id + strlen("_MACHINE_ID="));
IOVEC_SET_STRING(iovec[n++], machine_id);
}
t = gethostname_malloc();
if (t) {
- hostname = strappenda("_HOSTNAME=", t);
+ x = strappenda("_HOSTNAME=", t);
free(t);
- IOVEC_SET_STRING(iovec[n++], hostname);
+ IOVEC_SET_STRING(iovec[n++], x);
}
assert(n <= m);
@@ -675,7 +771,7 @@ static void dispatch_message_real(
else
journal_uid = 0;
- write_to_journal(s, journal_uid, iovec, n);
+ write_to_journal(s, journal_uid, iovec, n, priority);
}
void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) {
@@ -709,7 +805,7 @@ void server_driver_message(Server *s, sd_id128_t message_id, const char *format,
ucred.uid = getuid();
ucred.gid = getgid();
- dispatch_message_real(s, iovec, n, ELEMENTSOF(iovec), &ucred, NULL, NULL, 0, NULL);
+ dispatch_message_real(s, iovec, n, ELEMENTSOF(iovec), &ucred, NULL, NULL, 0, NULL, LOG_INFO, 0);
}
void server_dispatch_message(
@@ -719,7 +815,8 @@ void server_dispatch_message(
struct timeval *tv,
const char *label, size_t label_len,
const char *unit_id,
- int priority) {
+ int priority,
+ pid_t object_pid) {
int rl, r;
_cleanup_free_ char *path = NULL;
@@ -734,6 +831,11 @@ void server_dispatch_message(
if (LOG_PRI(priority) > s->max_level_store)
return;
+ /* Stop early in case the information will not be stored
+ * in a journal. */
+ if (s->storage == STORAGE_NONE)
+ return;
+
if (!ucred)
goto finish;
@@ -758,7 +860,7 @@ void server_dispatch_message(
}
rl = journal_rate_limit_test(s->rate_limit, path,
- priority & LOG_PRIMASK, available_space(s));
+ priority & LOG_PRIMASK, available_space(s, false));
if (rl == 0)
return;
@@ -769,7 +871,7 @@ void server_dispatch_message(
"Suppressed %u messages from %s", rl - 1, path);
finish:
- dispatch_message_real(s, iovec, n, m, ucred, tv, label, label_len, unit_id);
+ dispatch_message_real(s, iovec, n, m, ucred, tv, label, label_len, unit_id, priority, object_pid);
}
@@ -780,8 +882,10 @@ static int system_journal_open(Server *s) {
char ids[33];
r = sd_id128_get_machine(&machine);
- if (r < 0)
+ if (r < 0) {
+ log_error("Failed to get machine id: %s", strerror(-r));
return r;
+ }
sd_id128_to_string(machine, ids);
@@ -798,29 +902,15 @@ static int system_journal_open(Server *s) {
if (s->storage == STORAGE_PERSISTENT)
(void) mkdir("/var/log/journal/", 0755);
- fn = strappend("/var/log/journal/", ids);
- if (!fn)
- return -ENOMEM;
-
+ fn = strappenda("/var/log/journal/", ids);
(void) mkdir(fn, 0755);
- free(fn);
-
- fn = strjoin("/var/log/journal/", ids, "/system.journal", NULL);
- if (!fn)
- return -ENOMEM;
+ fn = strappenda(fn, "/system.journal");
r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &s->system_journal);
- free(fn);
-
- if (r >= 0) {
- char fb[FORMAT_BYTES_MAX];
+ if (r >= 0)
server_fix_perms(s, s->system_journal, 0);
- server_driver_message(s, SD_ID128_NULL, "Allowing system journal files to grow to %s.",
- format_bytes(fb, sizeof(fb), s->system_metrics.max_use));
-
- } else if (r < 0) {
-
+ else if (r < 0) {
if (r != -ENOENT && r != -EROFS)
log_warning("Failed to open system journal: %s", strerror(-r));
@@ -866,15 +956,12 @@ static int system_journal_open(Server *s) {
}
}
- if (s->runtime_journal) {
- char fb[FORMAT_BYTES_MAX];
-
+ if (s->runtime_journal)
server_fix_perms(s, s->runtime_journal, 0);
- server_driver_message(s, SD_ID128_NULL, "Allowing runtime journal files to grow to %s.",
- format_bytes(fb, sizeof(fb), s->runtime_metrics.max_use));
- }
}
+ available_space(s, true);
+
return r;
}
@@ -900,10 +987,8 @@ int server_flush_to_var(Server *s) {
log_debug("Flushing to /var...");
r = sd_id128_get_machine(&machine);
- if (r < 0) {
- log_error("Failed to get machine id: %s", strerror(-r));
+ if (r < 0)
return r;
- }
r = sd_journal_open(&j, SD_JOURNAL_RUNTIME_ONLY);
if (r < 0) {
@@ -975,7 +1060,8 @@ int process_event(Server *s, struct epoll_event *ev) {
ssize_t n;
if (ev->events != EPOLLIN) {
- log_error("Got invalid event from epoll.");
+ log_error("Got invalid event from epoll for %s: %"PRIx32,
+ "signal fd", ev->events);
return -EIO;
}
@@ -992,6 +1078,8 @@ int process_event(Server *s, struct epoll_event *ev) {
}
if (sfsi.ssi_signo == SIGUSR1) {
+ log_info("Received request to flush runtime journal from PID %"PRIu32,
+ sfsi.ssi_pid);
touch("/run/systemd/journal/flushed");
server_flush_to_var(s);
server_sync(s);
@@ -999,6 +1087,8 @@ int process_event(Server *s, struct epoll_event *ev) {
}
if (sfsi.ssi_signo == SIGUSR2) {
+ log_info("Received request to rotate journal from PID %"PRIu32,
+ sfsi.ssi_pid);
server_rotate(s);
server_vacuum(s);
return 1;
@@ -1024,8 +1114,12 @@ int process_event(Server *s, struct epoll_event *ev) {
} else if (ev->data.fd == s->dev_kmsg_fd) {
int r;
- if (ev->events != EPOLLIN) {
- log_error("Got invalid event from epoll.");
+ if (ev->events & EPOLLERR)
+ log_warning("/dev/kmsg buffer overrun, some messages lost.");
+
+ if (!(ev->events & EPOLLIN)) {
+ log_error("Got invalid event from epoll for %s: %"PRIx32,
+ "/dev/kmsg", ev->events);
return -EIO;
}
@@ -1039,7 +1133,9 @@ int process_event(Server *s, struct epoll_event *ev) {
ev->data.fd == s->syslog_fd) {
if (ev->events != EPOLLIN) {
- log_error("Got invalid event from epoll.");
+ log_error("Got invalid event from epoll for %s: %"PRIx32,
+ ev->data.fd == s->native_fd ? "native fd" : "syslog fd",
+ ev->events);
return -EIO;
}
@@ -1126,8 +1222,8 @@ int process_event(Server *s, struct epoll_event *ev) {
label = (char*) CMSG_DATA(cmsg);
label_len = cmsg->cmsg_len - CMSG_LEN(0);
} else if (cmsg->cmsg_level == SOL_SOCKET &&
- cmsg->cmsg_type == SO_TIMESTAMP &&
- cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval)))
+ cmsg->cmsg_type == SO_TIMESTAMP &&
+ cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval)))
tv = (struct timeval*) CMSG_DATA(cmsg);
else if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_RIGHTS) {
@@ -1137,15 +1233,8 @@ int process_event(Server *s, struct epoll_event *ev) {
}
if (ev->data.fd == s->syslog_fd) {
- char *e;
-
if (n > 0 && n_fds == 0) {
- e = memchr(s->buffer, '\n', n);
- if (e)
- *e = 0;
- else
- s->buffer[n] = 0;
-
+ s->buffer[n] = 0;
server_process_syslog_message(s, strstrip(s->buffer), ucred, tv, label, label_len);
} else if (n_fds > 0)
log_warning("Got file descriptors via syslog socket. Ignoring.");
@@ -1167,7 +1256,8 @@ int process_event(Server *s, struct epoll_event *ev) {
} else if (ev->data.fd == s->stdout_fd) {
if (ev->events != EPOLLIN) {
- log_error("Got invalid event from epoll.");
+ log_error("Got invalid event from epoll for %s: %"PRIx32,
+ "stdout fd", ev->events);
return -EIO;
}
@@ -1178,7 +1268,8 @@ int process_event(Server *s, struct epoll_event *ev) {
StdoutStream *stream;
if ((ev->events|EPOLLIN|EPOLLHUP) != (EPOLLIN|EPOLLHUP)) {
- log_error("Got invalid event from epoll.");
+ log_error("Got invalid event from epoll for %s: %"PRIx32,
+ "stdout stream", ev->events);
return -EIO;
}
@@ -1323,19 +1414,24 @@ static int server_open_sync_timer(Server *s) {
return 0;
}
-int server_schedule_sync(Server *s) {
+int server_schedule_sync(Server *s, int priority) {
int r;
assert(s);
+ if (priority <= LOG_CRIT) {
+ /* Immediately sync to disk when this is of priority CRIT, ALERT, EMERG */
+ server_sync(s);
+ return 0;
+ }
+
if (s->sync_scheduled)
return 0;
if (s->sync_interval_usec) {
- struct itimerspec sync_timer_enable = {
- .it_value.tv_sec = s->sync_interval_usec / USEC_PER_SEC,
- .it_value.tv_nsec = s->sync_interval_usec % MSEC_PER_SEC,
- };
+ struct itimerspec sync_timer_enable = {};
+
+ timespec_store(&sync_timer_enable.it_value, s->sync_interval_usec);
r = timerfd_settime(s->sync_timer_fd, 0, &sync_timer_enable, NULL);
if (r < 0)
@@ -1354,7 +1450,7 @@ int server_init(Server *s) {
zero(*s);
s->sync_timer_fd = s->syslog_fd = s->native_fd = s->stdout_fd =
- s->signal_fd = s->epoll_fd = s->dev_kmsg_fd = -1;
+ s->signal_fd = s->epoll_fd = s->dev_kmsg_fd = -1;
s->compress = true;
s->seal = true;
diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
index 129f7e8ab4..10e9958be0 100644
--- a/src/journal/journald-server.h
+++ b/src/journal/journald-server.h
@@ -97,9 +97,6 @@ typedef struct Server {
usec_t max_file_usec;
usec_t oldest_file_usec;
- gid_t file_gid;
- bool file_gid_valid;
-
LIST_HEAD(StdoutStream, stdout_streams);
unsigned n_stdout_streams;
@@ -125,11 +122,12 @@ typedef struct Server {
bool sync_scheduled;
} Server;
-#define N_IOVEC_META_FIELDS 17
+#define N_IOVEC_META_FIELDS 20
#define N_IOVEC_KERNEL_FIELDS 64
#define N_IOVEC_UDEV_FIELDS 32
+#define N_IOVEC_OBJECT_FIELDS 11
-void server_dispatch_message(Server *s, struct iovec *iovec, unsigned n, unsigned m, struct ucred *ucred, struct timeval *tv, const char *label, size_t label_len, const char *unit_id, int priority);
+void server_dispatch_message(Server *s, struct iovec *iovec, unsigned n, unsigned m, struct ucred *ucred, struct timeval *tv, const char *label, size_t label_len, const char *unit_id, int priority, pid_t object_pid);
void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) _printf_attr_(3,4);
/* gperf lookup function */
@@ -152,7 +150,7 @@ void server_done(Server *s);
void server_sync(Server *s);
void server_vacuum(Server *s);
void server_rotate(Server *s);
-int server_schedule_sync(Server *s);
+int server_schedule_sync(Server *s, int priority);
int server_flush_to_var(Server *s);
int process_event(Server *s, struct epoll_event *ev);
void server_maybe_append_tags(Server *s);
diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
index 6d51c29083..9c4efec9bc 100644
--- a/src/journal/journald-stream.c
+++ b/src/journal/journald-stream.c
@@ -90,7 +90,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
priority = s->priority;
if (s->level_prefix)
- syslog_parse_priority((char**) &p, &priority);
+ syslog_parse_priority((char**) &p, &priority, false);
if (s->forward_to_syslog || s->server->forward_to_syslog)
server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL);
@@ -127,7 +127,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) {
}
#endif
- server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority);
+ server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0);
free(message);
free(syslog_priority);
@@ -440,7 +440,7 @@ int server_open_stdout_socket(Server *s) {
chmod(sa.un.sun_path, 0666);
if (listen(s->stdout_fd, SOMAXCONN) < 0) {
- log_error("liste() failed: %m");
+ log_error("listen() failed: %m");
return -errno;
}
} else
diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
index 000f5acc10..c2770a53d0 100644
--- a/src/journal/journald-syslog.c
+++ b/src/journal/journald-syslog.c
@@ -236,7 +236,7 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid)
return e;
}
-void syslog_parse_priority(char **p, int *priority) {
+void syslog_parse_priority(char **p, int *priority, bool with_facility) {
int a = 0, b = 0, c = 0;
int k;
@@ -265,10 +265,14 @@ void syslog_parse_priority(char **p, int *priority) {
} else
return;
- if (a < 0 || b < 0 || c < 0)
+ if (a < 0 || b < 0 || c < 0 ||
+ (!with_facility && (a || b || c > 7)))
return;
- *priority = a*100+b*10+c;
+ if (with_facility)
+ *priority = a*100 + b*10 + c;
+ else
+ *priority = (*priority & LOG_FACMASK) | c;
*p += k;
}
@@ -361,7 +365,7 @@ void server_process_syslog_message(
assert(buf);
orig = buf;
- syslog_parse_priority((char**) &buf, &priority);
+ syslog_parse_priority((char**) &buf, &priority, true);
if (s->forward_to_syslog)
forward_syslog_raw(s, priority, orig, ucred, tv);
@@ -400,7 +404,7 @@ void server_process_syslog_message(
if (message)
IOVEC_SET_STRING(iovec[n++], message);
- server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), ucred, tv, label, label_len, NULL, priority);
+ server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), ucred, tv, label, label_len, NULL, priority, 0);
free(message);
free(identifier);
diff --git a/src/journal/journald-syslog.h b/src/journal/journald-syslog.h
index 324b70eef0..8ccdb77a09 100644
--- a/src/journal/journald-syslog.h
+++ b/src/journal/journald-syslog.h
@@ -25,7 +25,7 @@
int syslog_fixup_facility(int priority) _const_;
-void syslog_parse_priority(char **p, int *priority);
+void syslog_parse_priority(char **p, int *priority, bool with_facility);
size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid);
void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv);
diff --git a/src/journal/journald.conf b/src/journal/journald.conf
index 5410477201..54f6833a17 100644
--- a/src/journal/journald.conf
+++ b/src/journal/journald.conf
@@ -13,8 +13,8 @@
#Seal=yes
#SplitMode=login
#SyncIntervalSec=5m
-#RateLimitInterval=10s
-#RateLimitBurst=200
+#RateLimitInterval=30s
+#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
diff --git a/src/journal/libsystemd-journal.sym b/src/journal/libsystemd-journal.sym
index 449f37c4da..4eb15910d2 100644
--- a/src/journal/libsystemd-journal.sym
+++ b/src/journal/libsystemd-journal.sym
@@ -104,3 +104,8 @@ LIBSYSTEMD_JOURNAL_202 {
global:
sd_journal_add_conjunction;
} LIBSYSTEMD_JOURNAL_201;
+
+LIBSYSTEMD_JOURNAL_205 {
+global:
+ sd_journal_open_files;
+} LIBSYSTEMD_JOURNAL_202;
diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
index 767f555526..03b57beb04 100644
--- a/src/journal/mmap-cache.c
+++ b/src/journal/mmap-cache.c
@@ -307,9 +307,13 @@ static void mmap_cache_free(MMapCache *m) {
while ((c = hashmap_first(m->contexts)))
context_free(c);
+ hashmap_free(m->contexts);
+
while ((f = hashmap_first(m->fds)))
fd_free(f);
+ hashmap_free(m->fds);
+
while (m->unused)
window_free(m->unused);
diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index c21712b7c4..7700d6cb12 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -33,6 +33,7 @@
#include "journal-file.h"
#include "hashmap.h"
#include "list.h"
+#include "strv.h"
#include "path-util.h"
#include "lookup3.h"
#include "compress.h"
@@ -49,6 +50,15 @@
#define DEFAULT_DATA_THRESHOLD (64*1024)
+static bool journal_pid_changed(sd_journal *j) {
+ assert(j);
+
+ /* We don't support people creating a journal object and
+ * keeping it around over a fork(). Let's complain. */
+
+ return j->original_pid != getpid();
+}
+
/* We return an error here only if we didn't manage to
memorize the real error. */
static int set_put_error(sd_journal *j, int r) {
@@ -101,7 +111,8 @@ static void init_location(Location *l, LocationType type, JournalFile *f, Object
l->seqnum_set = l->realtime_set = l->monotonic_set = l->xor_hash_set = true;
}
-static void set_location(sd_journal *j, LocationType type, JournalFile *f, Object *o, uint64_t offset) {
+static void set_location(sd_journal *j, LocationType type, JournalFile *f, Object *o,
+ direction_t direction, uint64_t offset) {
assert(j);
assert(type == LOCATION_DISCRETE || type == LOCATION_SEEK);
assert(f);
@@ -109,12 +120,10 @@ static void set_location(sd_journal *j, LocationType type, JournalFile *f, Objec
init_location(&j->current_location, type, f, o);
- if (j->current_file)
- j->current_file->current_offset = 0;
-
j->current_file = f;
j->current_field = 0;
+ f->last_direction = direction;
f->current_offset = offset;
}
@@ -163,7 +172,7 @@ static bool same_field(const void *_a, size_t s, const void *_b, size_t t) {
return true;
}
- return true;
+ assert_not_reached("\"=\" not found");
}
static Match *match_new(Match *p, MatchType t) {
@@ -197,9 +206,7 @@ static void match_free(Match *m) {
}
static void match_free_if_empty(Match *m) {
- assert(m);
-
- if (m->matches)
+ if (!m || m->matches)
return;
match_free(m);
@@ -211,6 +218,8 @@ _public_ int sd_journal_add_match(sd_journal *j, const void *data, size_t size)
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!data)
return -EINVAL;
@@ -296,23 +305,19 @@ _public_ int sd_journal_add_match(sd_journal *j, const void *data, size_t size)
return 0;
fail:
- if (add_here)
- match_free_if_empty(add_here);
-
- if (j->level2)
- match_free_if_empty(j->level2);
-
- if (j->level1)
- match_free_if_empty(j->level1);
-
- if (j->level0)
- match_free_if_empty(j->level0);
+ match_free_if_empty(add_here);
+ match_free_if_empty(j->level2);
+ match_free_if_empty(j->level1);
+ match_free_if_empty(j->level0);
return -ENOMEM;
}
_public_ int sd_journal_add_conjunction(sd_journal *j) {
- assert(j);
+ if (!j)
+ return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!j->level0)
return 0;
@@ -330,7 +335,10 @@ _public_ int sd_journal_add_conjunction(sd_journal *j) {
}
_public_ int sd_journal_add_disjunction(sd_journal *j) {
- assert(j);
+ if (!j)
+ return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!j->level0)
return 0;
@@ -354,7 +362,7 @@ static char *match_make_string(Match *m) {
bool enclose = false;
if (!m)
- return strdup("");
+ return strdup("none");
if (m->type == MATCH_DISCRETE)
return strndup(m->data, m->size);
@@ -380,10 +388,8 @@ static char *match_make_string(Match *m) {
p = k;
enclose = true;
- } else {
- free(p);
+ } else
p = t;
- }
}
if (enclose) {
@@ -402,7 +408,6 @@ char *journal_make_match_string(sd_journal *j) {
}
_public_ void sd_journal_flush_matches(sd_journal *j) {
-
if (!j)
return;
@@ -596,52 +601,47 @@ static int next_for_match(
if (r < 0)
return r;
else if (r > 0) {
- if (np == 0 || (direction == DIRECTION_DOWN ? np > cp : np < cp))
+ if (np == 0 || (direction == DIRECTION_DOWN ? cp < np : cp > np))
np = cp;
}
}
+ if (np == 0)
+ return 0;
+
} else if (m->type == MATCH_AND_TERM) {
- Match *i;
- bool continue_looking;
+ Match *i, *last_moved;
/* Always jump to the next matching entry and repeat
- * this until we fine and offset that matches for all
+ * this until we find an offset that matches for all
* matches. */
if (!m->matches)
return 0;
- np = 0;
- do {
- continue_looking = false;
+ r = next_for_match(j, m->matches, f, after_offset, direction, NULL, &np);
+ if (r <= 0)
+ return r;
- LIST_FOREACH(matches, i, m->matches) {
- uint64_t cp, limit;
+ assert(direction == DIRECTION_DOWN ? np >= after_offset : np <= after_offset);
+ last_moved = m->matches;
- if (np == 0)
- limit = after_offset;
- else if (direction == DIRECTION_DOWN)
- limit = MAX(np, after_offset);
- else
- limit = MIN(np, after_offset);
+ LIST_LOOP_BUT_ONE(matches, i, m->matches, last_moved) {
+ uint64_t cp;
- r = next_for_match(j, i, f, limit, direction, NULL, &cp);
- if (r <= 0)
- return r;
+ r = next_for_match(j, i, f, np, direction, NULL, &cp);
+ if (r <= 0)
+ return r;
- if ((direction == DIRECTION_DOWN ? cp >= after_offset : cp <= after_offset) &&
- (np == 0 || (direction == DIRECTION_DOWN ? cp > np : cp < np))) {
- np = cp;
- continue_looking = true;
- }
+ assert(direction == DIRECTION_DOWN ? cp >= np : cp <= np);
+ if (direction == DIRECTION_DOWN ? cp > np : cp < np) {
+ np = cp;
+ last_moved = i;
}
-
- } while (continue_looking);
+ }
}
- if (np == 0)
- return 0;
+ assert(np > 0);
r = journal_file_move_to_object(f, OBJECT_ENTRY, np, &n);
if (r < 0)
@@ -746,7 +746,7 @@ static int find_location_for_match(
if (r <= 0)
return r;
- if (np == 0 || (direction == DIRECTION_DOWN ? np < cp : np > cp))
+ if (np == 0 || (direction == DIRECTION_DOWN ? cp > np : cp < np))
np = cp;
}
@@ -826,7 +826,7 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc
assert(j);
assert(f);
- if (f->current_offset > 0) {
+ if (f->last_direction == direction && f->current_offset > 0) {
cp = f->current_offset;
r = journal_file_move_to_object(f, OBJECT_ENTRY, cp, &c);
@@ -842,7 +842,7 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc
return r;
}
- /* OK, we found the spot, now let's advance until to an entry
+ /* OK, we found the spot, now let's advance until an entry
* that is actually different from what we were previously
* looking at. This is necessary to handle entries which exist
* in two (or more) journal files, and which shall all be
@@ -886,6 +886,8 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
HASHMAP_FOREACH(f, j->files, i) {
bool found;
@@ -904,10 +906,7 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
k = compare_entry_order(f, o, new_file, new_offset);
- if (direction == DIRECTION_DOWN)
- found = k < 0;
- else
- found = k > 0;
+ found = direction == DIRECTION_DOWN ? k < 0 : k > 0;
}
if (found) {
@@ -923,7 +922,7 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
if (r < 0)
return r;
- set_location(j, LOCATION_DISCRETE, new_file, o, new_offset);
+ set_location(j, LOCATION_DISCRETE, new_file, o, direction, new_offset);
return 1;
}
@@ -941,6 +940,8 @@ static int real_journal_next_skip(sd_journal *j, direction_t direction, uint64_t
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (skip == 0) {
/* If this is not a discrete skip, then at least
@@ -981,6 +982,8 @@ _public_ int sd_journal_get_cursor(sd_journal *j, char **cursor) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!cursor)
return -EINVAL;
@@ -995,11 +998,11 @@ _public_ int sd_journal_get_cursor(sd_journal *j, char **cursor) {
sd_id128_to_string(o->entry.boot_id, bid);
if (asprintf(cursor,
- "s=%s;i=%llx;b=%s;m=%llx;t=%llx;x=%llx",
- sid, (unsigned long long) le64toh(o->entry.seqnum),
- bid, (unsigned long long) le64toh(o->entry.monotonic),
- (unsigned long long) le64toh(o->entry.realtime),
- (unsigned long long) le64toh(o->entry.xor_hash)) < 0)
+ "s=%s;i=%"PRIx64";b=%s;m=%"PRIx64";t=%"PRIx64";x=%"PRIx64,
+ sid, le64toh(o->entry.seqnum),
+ bid, le64toh(o->entry.monotonic),
+ le64toh(o->entry.realtime),
+ le64toh(o->entry.xor_hash)) < 0)
return -ENOMEM;
return 0;
@@ -1020,6 +1023,8 @@ _public_ int sd_journal_seek_cursor(sd_journal *j, const char *cursor) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (isempty(cursor))
return -EINVAL;
@@ -1119,6 +1124,8 @@ _public_ int sd_journal_test_cursor(sd_journal *j, const char *cursor) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (isempty(cursor))
return -EINVAL;
@@ -1197,6 +1204,8 @@ _public_ int sd_journal_test_cursor(sd_journal *j, const char *cursor) {
_public_ int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t usec) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
reset_location(j);
j->current_location.type = LOCATION_SEEK;
@@ -1210,6 +1219,8 @@ _public_ int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, u
_public_ int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
reset_location(j);
j->current_location.type = LOCATION_SEEK;
@@ -1222,6 +1233,8 @@ _public_ int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec) {
_public_ int sd_journal_seek_head(sd_journal *j) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
reset_location(j);
j->current_location.type = LOCATION_HEAD;
@@ -1232,6 +1245,8 @@ _public_ int sd_journal_seek_head(sd_journal *j) {
_public_ int sd_journal_seek_tail(sd_journal *j) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
reset_location(j);
j->current_location.type = LOCATION_TAIL;
@@ -1251,48 +1266,67 @@ static void check_network(sd_journal *j, int fd) {
return;
j->on_network =
- F_TYPE_CMP(sfs.f_type, CIFS_MAGIC_NUMBER) ||
- F_TYPE_CMP(sfs.f_type, CODA_SUPER_MAGIC) ||
- F_TYPE_CMP(sfs.f_type, NCP_SUPER_MAGIC) ||
- F_TYPE_CMP(sfs.f_type, NFS_SUPER_MAGIC) ||
- F_TYPE_CMP(sfs.f_type, SMB_SUPER_MAGIC);
+ F_TYPE_EQUAL(sfs.f_type, CIFS_MAGIC_NUMBER) ||
+ F_TYPE_EQUAL(sfs.f_type, CODA_SUPER_MAGIC) ||
+ F_TYPE_EQUAL(sfs.f_type, NCP_SUPER_MAGIC) ||
+ F_TYPE_EQUAL(sfs.f_type, NFS_SUPER_MAGIC) ||
+ F_TYPE_EQUAL(sfs.f_type, SMB_SUPER_MAGIC);
}
-static int add_file(sd_journal *j, const char *prefix, const char *filename) {
- _cleanup_free_ char *path = NULL;
- int r;
- JournalFile *f;
+static bool file_has_type_prefix(const char *prefix, const char *filename) {
+ const char *full, *tilded, *atted;
- assert(j);
- assert(prefix);
- assert(filename);
+ full = strappend(prefix, ".journal");
+ tilded = strappenda(full, "~");
+ atted = strappenda(prefix, "@");
- if ((j->flags & SD_JOURNAL_SYSTEM_ONLY) &&
- !(streq(filename, "system.journal") ||
- streq(filename, "system.journal~") ||
- (startswith(filename, "system@") &&
- (endswith(filename, ".journal") || endswith(filename, ".journal~")))))
- return 0;
+ return streq(filename, full) ||
+ streq(filename, tilded) ||
+ startswith(filename, atted);
+}
- path = strjoin(prefix, "/", filename, NULL);
- if (!path)
- return -ENOMEM;
+static bool file_type_wanted(int flags, const char *filename) {
+ if (!endswith(filename, ".journal") && !endswith(filename, ".journal~"))
+ return false;
+
+ /* no flags set → every type is OK */
+ if (!(flags & (SD_JOURNAL_SYSTEM | SD_JOURNAL_CURRENT_USER)))
+ return true;
+
+ if (flags & SD_JOURNAL_SYSTEM && file_has_type_prefix("system", filename))
+ return true;
+
+ if (flags & SD_JOURNAL_CURRENT_USER) {
+ char prefix[5 + DECIMAL_STR_MAX(uid_t) + 1];
+
+ assert_se(snprintf(prefix, sizeof(prefix), "user-%lu", (unsigned long) getuid())
+ < (int) sizeof(prefix));
+
+ if (file_has_type_prefix(prefix, filename))
+ return true;
+ }
+
+ return false;
+}
+
+static int add_any_file(sd_journal *j, const char *path) {
+ JournalFile *f;
+ int r;
+
+ assert(j);
+ assert(path);
if (hashmap_get(j->files, path))
return 0;
if (hashmap_size(j->files) >= JOURNAL_FILES_MAX) {
- log_debug("Too many open journal files, not adding %s, ignoring.", path);
+ log_warning("Too many open journal files, not adding %s.", path);
return set_put_error(j, -ETOOMANYREFS);
}
r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, j->mmap, NULL, &f);
- if (r < 0) {
- if (errno == ENOENT)
- return 0;
-
+ if (r < 0)
return r;
- }
/* journal_file_dump(f); */
@@ -1302,7 +1336,7 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) {
return r;
}
- log_debug("File %s got added.", f->path);
+ log_debug("File %s added.", f->path);
check_network(j, f->fd);
@@ -1311,6 +1345,28 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) {
return 0;
}
+static int add_file(sd_journal *j, const char *prefix, const char *filename) {
+ _cleanup_free_ char *path = NULL;
+ int r;
+
+ assert(j);
+ assert(prefix);
+ assert(filename);
+
+ if (j->no_new_files ||
+ !file_type_wanted(j->flags, filename))
+ return 0;
+
+ path = strjoin(prefix, "/", filename, NULL);
+ if (!path)
+ return -ENOMEM;
+
+ r = add_any_file(j, path);
+ if (r == -ENOENT)
+ return 0;
+ return 0;
+}
+
static int remove_file(sd_journal *j, const char *prefix, const char *filename) {
char *path;
JournalFile *f;
@@ -1330,7 +1386,7 @@ static int remove_file(sd_journal *j, const char *prefix, const char *filename)
hashmap_remove(j->files, f->path);
- log_debug("File %s got removed.", f->path);
+ log_debug("File %s removed.", f->path);
if (j->current_file == f) {
j->current_file = NULL;
@@ -1397,7 +1453,7 @@ static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
path = NULL; /* avoid freeing in cleanup */
j->current_invalidate_counter ++;
- log_debug("Directory %s got added.", m->path);
+ log_debug("Directory %s added.", m->path);
} else if (m->is_root)
return 0;
@@ -1476,7 +1532,7 @@ static int add_root_directory(sd_journal *j, const char *p) {
j->current_invalidate_counter ++;
- log_debug("Root directory %s got added.", m->path);
+ log_debug("Root directory %s added.", m->path);
} else if (!m->is_root)
return 0;
@@ -1491,6 +1547,9 @@ static int add_root_directory(sd_journal *j, const char *p) {
inotify_rm_watch(j->inotify_fd, m->wd);
}
+ if (j->no_new_files)
+ return 0;
+
for (;;) {
struct dirent *de;
union dirent_storage buf;
@@ -1537,9 +1596,9 @@ static int remove_directory(sd_journal *j, Directory *d) {
hashmap_remove(j->directories_by_path, d->path);
if (d->is_root)
- log_debug("Root directory %s got removed.", d->path);
+ log_debug("Root directory %s removed.", d->path);
else
- log_debug("Directory %s got removed.", d->path);
+ log_debug("Directory %s removed.", d->path);
free(d->path);
free(d);
@@ -1571,6 +1630,36 @@ static int add_search_paths(sd_journal *j) {
return 0;
}
+static int add_current_paths(sd_journal *j) {
+ Iterator i;
+ JournalFile *f;
+
+ assert(j);
+ assert(j->no_new_files);
+
+ /* Simply adds all directories for files we have open as
+ * "root" directories. We don't expect errors here, so we
+ * treat them as fatal. */
+
+ HASHMAP_FOREACH(f, j->files, i) {
+ int r;
+ _cleanup_free_ char *dir;
+
+ dir = dirname_malloc(f->path);
+ if (!dir)
+ return -ENOMEM;
+
+ r = add_root_directory(j, dir);
+ if (r < 0) {
+ set_put_error(j, r);
+ return r;
+ }
+ }
+
+ return 0;
+}
+
+
static int allocate_inotify(sd_journal *j) {
assert(j);
@@ -1596,6 +1685,7 @@ static sd_journal *journal_new(int flags, const char *path) {
if (!j)
return NULL;
+ j->original_pid = getpid();
j->inotify_fd = -1;
j->flags = flags;
j->data_threshold = DEFAULT_DATA_THRESHOLD;
@@ -1628,7 +1718,8 @@ _public_ int sd_journal_open(sd_journal **ret, int flags) {
if (flags & ~(SD_JOURNAL_LOCAL_ONLY|
SD_JOURNAL_RUNTIME_ONLY|
- SD_JOURNAL_SYSTEM_ONLY))
+ SD_JOURNAL_SYSTEM|
+ SD_JOURNAL_CURRENT_USER))
return -EINVAL;
j = journal_new(flags, NULL);
@@ -1680,6 +1771,40 @@ fail:
return r;
}
+_public_ int sd_journal_open_files(sd_journal **ret, const char **paths, int flags) {
+ sd_journal *j;
+ const char **path;
+ int r;
+
+ if (!ret)
+ return -EINVAL;
+
+ if (flags != 0)
+ return -EINVAL;
+
+ j = journal_new(flags, NULL);
+ if (!j)
+ return -ENOMEM;
+
+ STRV_FOREACH(path, paths) {
+ r = add_any_file(j, *path);
+ if (r < 0) {
+ log_error("Failed to open %s: %s", *path, strerror(-r));
+ goto fail;
+ }
+ }
+
+ j->no_new_files = true;
+
+ *ret = j;
+ return 0;
+
+fail:
+ sd_journal_close(j);
+
+ return r;
+}
+
_public_ void sd_journal_close(sd_journal *j) {
Directory *d;
JournalFile *f;
@@ -1722,6 +1847,8 @@ _public_ int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!ret)
return -EINVAL;
@@ -1748,6 +1875,8 @@ _public_ int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id12
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
f = j->current_file;
if (!f)
@@ -1814,6 +1943,8 @@ _public_ int sd_journal_get_data(sd_journal *j, const char *field, const void **
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!field)
return -EINVAL;
if (!data)
@@ -1940,6 +2071,8 @@ _public_ int sd_journal_enumerate_data(sd_journal *j, const void **data, size_t
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!data)
return -EINVAL;
if (!size)
@@ -1990,6 +2123,8 @@ _public_ int sd_journal_get_fd(sd_journal *j) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (j->inotify_fd >= 0)
return j->inotify_fd;
@@ -2000,7 +2135,9 @@ _public_ int sd_journal_get_fd(sd_journal *j) {
/* Iterate through all dirs again, to add them to the
* inotify */
- if (j->path)
+ if (j->no_new_files)
+ r = add_current_paths(j);
+ else if (j->path)
r = add_root_directory(j, j->path);
else
r = add_search_paths(j);
@@ -2015,6 +2152,8 @@ _public_ int sd_journal_get_events(sd_journal *j) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
fd = sd_journal_get_fd(j);
if (fd < 0)
@@ -2028,6 +2167,8 @@ _public_ int sd_journal_get_timeout(sd_journal *j, uint64_t *timeout_usec) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!timeout_usec)
return -EINVAL;
@@ -2128,6 +2269,8 @@ _public_ int sd_journal_process(sd_journal *j) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
j->last_process_usec = now(CLOCK_MONOTONIC);
@@ -2166,7 +2309,10 @@ _public_ int sd_journal_wait(sd_journal *j, uint64_t timeout_usec) {
int r;
uint64_t t;
- assert(j);
+ if (!j)
+ return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (j->inotify_fd < 0) {
@@ -2215,8 +2361,12 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from,
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!from && !to)
return -EINVAL;
+ if (from == to)
+ return -EINVAL;
HASHMAP_FOREACH(f, j->files, i) {
usec_t fr, t;
@@ -2254,8 +2404,12 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!from && !to)
return -EINVAL;
+ if (from == to)
+ return -EINVAL;
HASHMAP_FOREACH(f, j->files, i) {
usec_t fr, t;
@@ -2309,6 +2463,8 @@ _public_ int sd_journal_get_usage(sd_journal *j, uint64_t *bytes) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!bytes)
return -EINVAL;
@@ -2330,6 +2486,8 @@ _public_ int sd_journal_query_unique(sd_journal *j, const char *field) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (isempty(field))
return -EINVAL;
if (!field_is_valid(field))
@@ -2354,6 +2512,8 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!data)
return -EINVAL;
if (!l)
@@ -2466,6 +2626,8 @@ _public_ void sd_journal_restart_unique(sd_journal *j) {
_public_ int sd_journal_reliable_fd(sd_journal *j) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
return !j->on_network;
}
@@ -2499,6 +2661,8 @@ _public_ int sd_journal_get_catalog(sd_journal *j, char **ret) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!ret)
return -EINVAL;
@@ -2536,6 +2700,8 @@ _public_ int sd_journal_get_catalog_for_message_id(sd_id128_t id, char **ret) {
_public_ int sd_journal_set_data_threshold(sd_journal *j, size_t sz) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
j->data_threshold = sz;
return 0;
@@ -2544,6 +2710,8 @@ _public_ int sd_journal_set_data_threshold(sd_journal *j, size_t sz) {
_public_ int sd_journal_get_data_threshold(sd_journal *j, size_t *sz) {
if (!j)
return -EINVAL;
+ if (journal_pid_changed(j))
+ return -ECHILD;
if (!sz)
return -EINVAL;
diff --git a/src/journal/test-catalog.c b/src/journal/test-catalog.c
index 987867f0c8..5db5bed8de 100644
--- a/src/journal/test-catalog.c
+++ b/src/journal/test-catalog.c
@@ -31,6 +31,16 @@
#include "sd-messages.h"
#include "catalog.h"
+static const char *catalog_dirs[] = {
+ CATALOG_DIR,
+ NULL,
+};
+
+static const char *no_catalog_dirs[] = {
+ "/bin/hopefully/with/no/catalog",
+ NULL
+};
+
static void test_import(Hashmap *h, struct strbuf *sb,
const char* contents, ssize_t size, int code) {
int r;
@@ -100,9 +110,13 @@ static void test_catalog_update(void) {
r = catalog_update(database, NULL, NULL);
assert(r >= 0);
- /* Note: this might actually not find anything, if systemd was
- * not installed before. That should be fine too. */
- r = catalog_update(database, NULL, catalog_file_dirs);
+ /* Test what happens if there are no files in the directory. */
+ r = catalog_update(database, NULL, no_catalog_dirs);
+ assert(r >= 0);
+
+ /* Make sure that we at least have some files loaded or the
+ catalog_list below will fail. */
+ r = catalog_update(database, NULL, catalog_dirs);
assert(r >= 0);
}
diff --git a/src/journal/test-journal-init.c b/src/journal/test-journal-init.c
new file mode 100644
index 0000000000..58f260d6c2
--- /dev/null
+++ b/src/journal/test-journal-init.c
@@ -0,0 +1,60 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <systemd/sd-journal.h>
+
+#include "log.h"
+#include "util.h"
+
+int main(int argc, char *argv[]) {
+ sd_journal *j;
+ int r, i, I = 100;
+ char t[] = "/tmp/journal-stream-XXXXXX";
+
+ log_set_max_level(LOG_DEBUG);
+
+ if (argc >= 2)
+ safe_atoi(argv[1], &I);
+ log_info("Running %d loops", I);
+
+ assert_se(mkdtemp(t));
+
+ for (i = 0; i < I; i++) {
+ r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
+ assert_se(r == 0);
+
+ sd_journal_close(j);
+
+ r = sd_journal_open_directory(&j, t, 0);
+ assert_se(r == 0);
+
+ sd_journal_close(j);
+
+ j = NULL;
+ r = sd_journal_open_directory(&j, t, SD_JOURNAL_LOCAL_ONLY);
+ assert_se(r == -EINVAL);
+ assert_se(j == NULL);
+ }
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+
+ return 0;
+}
diff --git a/src/journal/test-journal-interleaving.c b/src/journal/test-journal-interleaving.c
new file mode 100644
index 0000000000..1a058eaedd
--- /dev/null
+++ b/src/journal/test-journal-interleaving.c
@@ -0,0 +1,303 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Marius Vollmer
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <systemd/sd-journal.h>
+
+#include "journal-file.h"
+#include "journal-internal.h"
+#include "journal-vacuum.h"
+#include "util.h"
+#include "log.h"
+
+/* This program tests skipping around in a multi-file journal.
+ */
+
+static bool arg_keep = false;
+
+_noreturn_ static void log_assert_errno(const char *text, int eno, const char *file, int line, const char *func) {
+ log_meta(LOG_CRIT, file, line, func,
+ "'%s' failed at %s:%u (%s): %s.",
+ text, file, line, func, strerror(eno));
+ abort();
+}
+
+#define assert_ret(expr) \
+ do { \
+ int _r_ = (expr); \
+ if (_unlikely_(_r_ < 0)) \
+ log_assert_errno(#expr, -_r_, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ } while (false)
+
+static JournalFile *test_open (const char *name)
+{
+ JournalFile *f;
+ assert_ret(journal_file_open(name, O_RDWR|O_CREAT, 0644, true, false, NULL, NULL, NULL, &f));
+ return f;
+}
+
+static void test_close (JournalFile *f)
+{
+ journal_file_close (f);
+}
+
+static void append_number(JournalFile *f, int n, uint64_t *seqnum)
+{
+ char *p;
+ dual_timestamp ts;
+ struct iovec iovec[1];
+
+ dual_timestamp_get(&ts);
+
+ assert_se(asprintf(&p, "NUMBER=%d", n) >= 0);
+ iovec[0].iov_base = p;
+ iovec[0].iov_len = strlen(p);
+ assert_ret(journal_file_append_entry(f, &ts, iovec, 1, seqnum, NULL, NULL));
+ free (p);
+}
+
+static void test_check_number (sd_journal *j, int n)
+{
+ const void *d;
+ char *k;
+ size_t l;
+ int x;
+
+ assert_ret(sd_journal_get_data(j, "NUMBER", &d, &l));
+ assert_se(k = strndup(d, l));
+ printf("%s\n", k);
+
+ assert_se(safe_atoi(k + 7, &x) >= 0);
+ assert_se(n == x);
+}
+
+static void test_check_numbers_down (sd_journal *j, int count)
+{
+ for (int i = 1; i <= count; i++) {
+ int r;
+ test_check_number(j, i);
+ assert_ret(r = sd_journal_next(j));
+ if (i == count)
+ assert_se(r == 0);
+ else
+ assert_se(r == 1);
+ }
+
+}
+
+static void test_check_numbers_up (sd_journal *j, int count)
+{
+ for (int i = count; i >= 1; i--) {
+ int r;
+ test_check_number(j, i);
+ assert_ret(r = sd_journal_previous(j));
+ if (i == 1)
+ assert_se(r == 0);
+ else
+ assert_se(r == 1);
+ }
+
+}
+
+static void setup_sequential(void) {
+ JournalFile *one, *two;
+ one = test_open("one.journal");
+ two = test_open("two.journal");
+ append_number(one, 1, NULL);
+ append_number(one, 2, NULL);
+ append_number(two, 3, NULL);
+ append_number(two, 4, NULL);
+ test_close(one);
+ test_close(two);
+}
+
+static void setup_interleaved(void) {
+ JournalFile *one, *two;
+ one = test_open("one.journal");
+ two = test_open("two.journal");
+ append_number(one, 1, NULL);
+ append_number(two, 2, NULL);
+ append_number(one, 3, NULL);
+ append_number(two, 4, NULL);
+ test_close(one);
+ test_close(two);
+}
+
+static void test_skip(void (*setup)(void))
+{
+ char t[] = "/tmp/journal-skip-XXXXXX";
+ sd_journal *j;
+ int r;
+
+ assert_se(mkdtemp(t));
+ assert_se(chdir(t) >= 0);
+
+ setup();
+
+ /* Seek to head, iterate down.
+ */
+ assert_ret(sd_journal_open_directory(&j, t, 0));
+ assert_ret(sd_journal_seek_head(j));
+ assert_ret(sd_journal_next(j));
+ test_check_numbers_down(j, 4);
+ sd_journal_close(j);
+
+ /* Seek to tail, iterate up.
+ */
+ assert_ret(sd_journal_open_directory(&j, t, 0));
+ assert_ret(sd_journal_seek_tail(j));
+ assert_ret(sd_journal_previous(j));
+ test_check_numbers_up(j, 4);
+ sd_journal_close(j);
+
+ /* Seek to tail, skip to head, iterate down.
+ */
+ assert_ret(sd_journal_open_directory(&j, t, 0));
+ assert_ret(sd_journal_seek_tail(j));
+ assert_ret(r = sd_journal_previous_skip(j, 4));
+ assert_se(r == 4);
+ test_check_numbers_down(j, 4);
+ sd_journal_close(j);
+
+ /* Seek to head, skip to tail, iterate up.
+ */
+ assert_ret(sd_journal_open_directory(&j, t, 0));
+ assert_ret(sd_journal_seek_head(j));
+ assert_ret(r = sd_journal_next_skip(j, 4));
+ assert_se(r == 4);
+ test_check_numbers_up(j, 4);
+ sd_journal_close(j);
+
+ log_info("Done...");
+
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+ journal_directory_vacuum(".", 3000000, 0, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+
+ puts("------------------------------------------------------------");
+}
+
+static void test_sequence_numbers(void) {
+
+ char t[] = "/tmp/journal-seq-XXXXXX";
+ JournalFile *one, *two;
+ uint64_t seqnum = 0;
+ sd_id128_t seqnum_id;
+
+ assert_se(mkdtemp(t));
+ assert_se(chdir(t) >= 0);
+
+ assert_se(journal_file_open("one.journal", O_RDWR|O_CREAT, 0644,
+ true, false, NULL, NULL, NULL, &one) == 0);
+
+ append_number(one, 1, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 1);
+ append_number(one, 2, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 2);
+
+ assert(one->header->state == STATE_ONLINE);
+ assert(!sd_id128_equal(one->header->file_id, one->header->machine_id));
+ assert(!sd_id128_equal(one->header->file_id, one->header->boot_id));
+ assert(sd_id128_equal(one->header->file_id, one->header->seqnum_id));
+
+ memcpy(&seqnum_id, &one->header->seqnum_id, sizeof(sd_id128_t));
+
+ assert_se(journal_file_open("two.journal", O_RDWR|O_CREAT, 0644,
+ true, false, NULL, NULL, one, &two) == 0);
+
+ assert(two->header->state == STATE_ONLINE);
+ assert(!sd_id128_equal(two->header->file_id, one->header->file_id));
+ assert(sd_id128_equal(one->header->machine_id, one->header->machine_id));
+ assert(sd_id128_equal(one->header->boot_id, one->header->boot_id));
+ assert(sd_id128_equal(one->header->seqnum_id, one->header->seqnum_id));
+
+ append_number(two, 3, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 3);
+ append_number(two, 4, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 4);
+
+ test_close(two);
+
+ append_number(one, 5, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 5);
+
+ append_number(one, 6, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 6);
+
+ test_close(one);
+
+ /* restart server */
+ seqnum = 0;
+
+ assert_se(journal_file_open("two.journal", O_RDWR, 0,
+ true, false, NULL, NULL, NULL, &two) == 0);
+
+ assert(sd_id128_equal(two->header->seqnum_id, seqnum_id));
+
+ append_number(two, 7, &seqnum);
+ printf("seqnum=%"PRIu64"\n", seqnum);
+ assert(seqnum == 5);
+
+ /* So..., here we have the same seqnum in two files with the
+ * same seqnum_id. */
+
+ test_close(two);
+
+ log_info("Done...");
+
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+ journal_directory_vacuum(".", 3000000, 0, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+}
+
+int main(int argc, char *argv[]) {
+ log_set_max_level(LOG_DEBUG);
+
+ /* journal_file_open requires a valid machine id */
+ if (access("/etc/machine-id", F_OK) != 0)
+ return EXIT_TEST_SKIP;
+
+ arg_keep = argc > 1;
+
+ test_skip(setup_sequential);
+ test_skip(setup_interleaved);
+
+ test_sequence_numbers();
+
+ return 0;
+}
diff --git a/src/journal/test-journal-stream.c b/src/journal/test-journal-stream.c
index 4aba7febc7..8e1d08d596 100644
--- a/src/journal/test-journal-stream.c
+++ b/src/journal/test-journal-stream.c
@@ -75,11 +75,15 @@ int main(int argc, char *argv[]) {
JournalFile *one, *two, *three;
char t[] = "/tmp/journal-stream-XXXXXX";
unsigned i;
- _cleanup_journal_close_ sd_journal*j = NULL;
+ _cleanup_journal_close_ sd_journal *j = NULL;
char *z;
const void *data;
size_t l;
+ /* journal_file_open requires a valid machine id */
+ if (access("/etc/machine-id", F_OK) != 0)
+ return EXIT_TEST_SKIP;
+
log_set_max_level(LOG_DEBUG);
assert_se(mkdtemp(t));
diff --git a/src/journal/test-journal-verify.c b/src/journal/test-journal-verify.c
index ad2e2d4c3b..0540074207 100644
--- a/src/journal/test-journal-verify.c
+++ b/src/journal/test-journal-verify.c
@@ -77,6 +77,10 @@ int main(int argc, char *argv[]) {
struct stat st;
uint64_t p;
+ /* journal_file_open requires a valid machine id */
+ if (access("/etc/machine-id", F_OK) != 0)
+ return EXIT_TEST_SKIP;
+
log_set_max_level(LOG_DEBUG);
assert_se(mkdtemp(t));
@@ -130,10 +134,10 @@ int main(int argc, char *argv[]) {
for (p = 38448*8+0; p < ((uint64_t) st.st_size * 8); p ++) {
bit_toggle("test.journal", p);
- log_info("[ %llu+%llu]", (unsigned long long) p / 8, (unsigned long long) p % 8);
+ log_info("[ %"PRIu64"+%"PRIu64"]", p / 8, p % 8);
if (raw_verify("test.journal", verification_key) >= 0)
- log_notice(ANSI_HIGHLIGHT_RED_ON ">>>> %llu (bit %llu) can be toggled without detection." ANSI_HIGHLIGHT_OFF, (unsigned long long) p / 8, (unsigned long long) p % 8);
+ log_notice(ANSI_HIGHLIGHT_RED_ON ">>>> %"PRIu64" (bit %"PRIu64") can be toggled without detection." ANSI_HIGHLIGHT_OFF, p / 8, p % 8);
bit_toggle("test.journal", p);
}
diff --git a/src/journal/test-journal.c b/src/journal/test-journal.c
index f4dc52cd81..190c426eba 100644
--- a/src/journal/test-journal.c
+++ b/src/journal/test-journal.c
@@ -29,7 +29,9 @@
#include "journal-authenticate.h"
#include "journal-vacuum.h"
-int main(int argc, char *argv[]) {
+static bool arg_keep = false;
+
+static void test_non_empty(void) {
dual_timestamp ts;
JournalFile *f;
struct iovec iovec;
@@ -119,11 +121,65 @@ int main(int argc, char *argv[]) {
journal_file_close(f);
- journal_directory_vacuum(".", 3000000, 0, 0, NULL);
+ log_info("Done...");
+
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+ journal_directory_vacuum(".", 3000000, 0, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+
+ puts("------------------------------------------------------------");
+}
+
+static void test_empty(void) {
+ JournalFile *f1, *f2, *f3, *f4;
+ char t[] = "/tmp/journal-XXXXXX";
+
+ log_set_max_level(LOG_DEBUG);
+
+ assert_se(mkdtemp(t));
+ assert_se(chdir(t) >= 0);
+
+ assert_se(journal_file_open("test.journal", O_RDWR|O_CREAT, 0666, false, false, NULL, NULL, NULL, &f1) == 0);
+
+ assert_se(journal_file_open("test-compress.journal", O_RDWR|O_CREAT, 0666, true, false, NULL, NULL, NULL, &f2) == 0);
+
+ assert_se(journal_file_open("test-seal.journal", O_RDWR|O_CREAT, 0666, false, true, NULL, NULL, NULL, &f3) == 0);
+
+ assert_se(journal_file_open("test-seal-compress.journal", O_RDWR|O_CREAT, 0666, true, true, NULL, NULL, NULL, &f4) == 0);
+
+ journal_file_print_header(f1);
+ puts("");
+ journal_file_print_header(f2);
+ puts("");
+ journal_file_print_header(f3);
+ puts("");
+ journal_file_print_header(f4);
+ puts("");
+
+ log_info("Done...");
+
+ if (arg_keep)
+ log_info("Not removing %s", t);
+ else {
+ journal_directory_vacuum(".", 3000000, 0, 0, NULL);
+
+ assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ }
+}
+
+int main(int argc, char *argv[]) {
+ arg_keep = argc > 1;
- log_error("Exiting...");
+ /* journal_file_open requires a valid machine id */
+ if (access("/etc/machine-id", F_OK) != 0)
+ return EXIT_TEST_SKIP;
- assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
+ test_non_empty();
+ test_empty();
return 0;
}
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
index 55b4d24672..a6a8abc2bd 100644
--- a/src/kernel-install/90-loaderentry.install
+++ b/src/kernel-install/90-loaderentry.install
@@ -38,21 +38,30 @@ if ! [[ $PRETTY_NAME ]]; then
PRETTY_NAME="Linux $KERNEL_VERSION"
fi
+declare -a BOOT_OPTIONS
+
if [[ -f /etc/kernel/cmdline ]]; then
readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
fi
if ! [[ ${BOOT_OPTIONS[*]} ]]; then
- readarray -t BOOT_OPTIONS < /proc/cmdline
+ readarray -t line < /proc/cmdline
+ for i in ${line[*]}; do
+ if [[ "${i#initrd=*}" == "$i" ]]; then
+ BOOT_OPTIONS[${#BOOT_OPTIONS[@]}]="$i"
+ fi
+ done
fi
-if ! [[ $BOOT_OPTIONS ]]; then
+if ! [[ ${BOOT_OPTIONS[*]} ]]; then
echo "Could not determine the kernel command line parameters." >&2
echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2
exit 1
fi
-cp --preserve "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" || {
+cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" &&
+ chown root:root "$BOOT_DIR_ABS/linux" &&
+ chmod 0644 "$BOOT_DIR_ABS/linux" || {
echo "Could not copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'." >&2
exit 1
}
@@ -70,6 +79,7 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
echo "linux $BOOT_DIR/linux"
[[ -f $BOOT_DIR_ABS/initrd ]] && \
echo "initrd $BOOT_DIR/initrd"
+ :
} > "$LOADER_ENTRY" || {
echo "Could not create loader entry '$LOADER_ENTRY'." >&2
exit 1
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
index fb2ee57b5b..9d3e75db08 100644
--- a/src/kernel-install/kernel-install
+++ b/src/kernel-install/kernel-install
@@ -54,9 +54,15 @@ dropindirs_sort()
export LC_COLLATE=C
-COMMAND="$1"
-KERNEL_VERSION="$2"
-KERNEL_IMAGE="$3"
+if [[ "${0##*/}" == 'installkernel' ]]; then
+ COMMAND='add'
+else
+ COMMAND="$1"
+ shift
+fi
+
+KERNEL_VERSION="$1"
+KERNEL_IMAGE="$2"
if [[ -f /etc/machine-id ]]; then
read MACHINE_ID < /etc/machine-id
diff --git a/src/libsystemd-bus/bus-bloom.c b/src/libsystemd-bus/bus-bloom.c
index cb65e47b4c..04bee8581e 100644
--- a/src/libsystemd-bus/bus-bloom.c
+++ b/src/libsystemd-bus/bus-bloom.c
@@ -49,6 +49,8 @@ void bloom_add_data(uint64_t filter[BLOOM_SIZE/8], const void *data, size_t n) {
for (k = 0; k < ELEMENTSOF(hash); k++)
set_bit(filter, hash[k] & 511);
+
+ /* log_debug("bloom: adding <%.*s>", (int) n, (char*) data); */
}
void bloom_add_pair(uint64_t filter[BLOOM_SIZE/8], const char *a, const char *b) {
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index a4dc9bf511..0ba8585805 100644
--- a/src/libsystemd-bus/bus-control.c
+++ b/src/libsystemd-bus/bus-control.c
@@ -32,6 +32,7 @@
#include "bus-internal.h"
#include "bus-message.h"
#include "bus-control.h"
+#include "bus-bloom.h"
int sd_bus_get_unique_name(sd_bus *bus, const char **unique) {
int r;
@@ -40,6 +41,8 @@ int sd_bus_get_unique_name(sd_bus *bus, const char **unique) {
return -EINVAL;
if (!unique)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = bus_ensure_running(bus);
if (r < 0)
@@ -60,6 +63,10 @@ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
return -EINVAL;
if (!bus->bus_client)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (bus->is_kernel) {
struct kdbus_cmd_name *n;
@@ -68,7 +75,7 @@ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
l = strlen(name);
n = alloca0(offsetof(struct kdbus_cmd_name, name) + l + 1);
n->size = offsetof(struct kdbus_cmd_name, name) + l + 1;
- n->name_flags = flags;
+ n->flags = flags;
memcpy(n->name, name, l+1);
#ifdef HAVE_VALGRIND_MEMCHECK_H
@@ -79,7 +86,7 @@ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
if (r < 0)
return -errno;
- return n->name_flags;
+ return n->flags;
} else {
r = sd_bus_call_method(
bus,
@@ -114,6 +121,10 @@ int sd_bus_release_name(sd_bus *bus, const char *name) {
return -EINVAL;
if (!bus->bus_client)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (bus->is_kernel) {
struct kdbus_cmd_name *n;
@@ -131,7 +142,7 @@ int sd_bus_release_name(sd_bus *bus, const char *name) {
if (r < 0)
return -errno;
- return n->name_flags;
+ return n->flags;
} else {
r = sd_bus_call_method(
bus,
@@ -163,6 +174,10 @@ int sd_bus_list_names(sd_bus *bus, char ***l) {
return -EINVAL;
if (!l)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = sd_bus_call_method(
bus,
@@ -213,6 +228,10 @@ int sd_bus_get_owner(sd_bus *bus, const char *name, char **owner) {
return -EINVAL;
if (!name)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = sd_bus_call_method(
bus,
@@ -255,6 +274,10 @@ int sd_bus_get_owner_uid(sd_bus *bus, const char *name, uid_t *uid) {
return -EINVAL;
if (!uid)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = sd_bus_call_method(
bus,
@@ -288,6 +311,10 @@ int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid) {
return -EINVAL;
if (!pid)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = sd_bus_call_method(
bus,
@@ -313,36 +340,201 @@ int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid) {
return 0;
}
-int bus_add_match_internal(sd_bus *bus, const char *match) {
+int bus_add_match_internal(
+ sd_bus *bus,
+ const char *match,
+ struct bus_match_component *components,
+ unsigned n_components,
+ uint64_t cookie) {
+
+ int r;
+
assert(bus);
assert(match);
- return sd_bus_call_method(
- bus,
- "org.freedesktop.DBus",
- "/",
- "org.freedesktop.DBus",
- "AddMatch",
- NULL,
- NULL,
- "s",
- match);
+ if (bus->is_kernel) {
+ struct kdbus_cmd_match *m;
+ struct kdbus_item *item;
+ uint64_t bloom[BLOOM_SIZE/8];
+ size_t sz;
+ const char *sender = NULL;
+ size_t sender_length = 0;
+ uint64_t src_id = KDBUS_MATCH_SRC_ID_ANY;
+ bool using_bloom = false;
+ unsigned i;
+
+ zero(bloom);
+
+ sz = offsetof(struct kdbus_cmd_match, items);
+
+ for (i = 0; i < n_components; i++) {
+ struct bus_match_component *c = &components[i];
+
+ switch (c->type) {
+
+ case BUS_MATCH_SENDER:
+ r = bus_kernel_parse_unique_name(c->value_str, &src_id);
+ if (r < 0)
+ return r;
+
+ if (r > 0) {
+ sender = c->value_str;
+ sender_length = strlen(sender);
+ sz += ALIGN8(offsetof(struct kdbus_item, str) + sender_length + 1);
+ }
+
+ break;
+
+ case BUS_MATCH_MESSAGE_TYPE:
+ bloom_add_pair(bloom, "message-type", bus_message_type_to_string(c->value_u8));
+ using_bloom = true;
+ break;
+
+ case BUS_MATCH_INTERFACE:
+ bloom_add_pair(bloom, "interface", c->value_str);
+ using_bloom = true;
+ break;
+
+ case BUS_MATCH_MEMBER:
+ bloom_add_pair(bloom, "member", c->value_str);
+ using_bloom = true;
+ break;
+
+ case BUS_MATCH_PATH:
+ bloom_add_pair(bloom, "path", c->value_str);
+ using_bloom = true;
+ break;
+
+ case BUS_MATCH_PATH_NAMESPACE:
+ if (!streq(c->value_str, "/")) {
+ bloom_add_pair(bloom, "path-slash-prefix", c->value_str);
+ using_bloom = true;
+ }
+ break;
+
+ case BUS_MATCH_ARG...BUS_MATCH_ARG_LAST: {
+ char buf[sizeof("arg")-1 + 2 + 1];
+
+ snprintf(buf, sizeof(buf), "arg%u", c->type - BUS_MATCH_ARG);
+ bloom_add_pair(bloom, buf, c->value_str);
+ using_bloom = true;
+ break;
+ }
+
+ case BUS_MATCH_ARG_PATH...BUS_MATCH_ARG_PATH_LAST: {
+ char buf[sizeof("arg")-1 + 2 + sizeof("-slash-prefix")];
+
+ snprintf(buf, sizeof(buf), "arg%u-slash-prefix", c->type - BUS_MATCH_ARG_PATH);
+ bloom_add_pair(bloom, buf, c->value_str);
+ using_bloom = true;
+ break;
+ }
+
+ case BUS_MATCH_ARG_NAMESPACE...BUS_MATCH_ARG_NAMESPACE_LAST: {
+ char buf[sizeof("arg")-1 + 2 + sizeof("-dot-prefix")];
+
+ snprintf(buf, sizeof(buf), "arg%u-dot-prefix", c->type - BUS_MATCH_ARG_NAMESPACE);
+ bloom_add_pair(bloom, buf, c->value_str);
+ using_bloom = true;
+ break;
+ }
+
+ case BUS_MATCH_DESTINATION:
+ /* The bloom filter does not include
+ the destination, since it is only
+ available for broadcast messages
+ which do not carry a destination
+ since they are undirected. */
+ break;
+
+ case BUS_MATCH_ROOT:
+ case BUS_MATCH_VALUE:
+ case BUS_MATCH_LEAF:
+ case _BUS_MATCH_NODE_TYPE_MAX:
+ case _BUS_MATCH_NODE_TYPE_INVALID:
+ assert_not_reached("Invalid match type?");
+ }
+ }
+
+ if (using_bloom)
+ sz += ALIGN8(offsetof(struct kdbus_item, data64) + BLOOM_SIZE);
+
+ m = alloca0(sz);
+ m->size = sz;
+ m->cookie = cookie;
+ m->src_id = src_id;
+
+ item = m->items;
+
+ if (using_bloom) {
+ item->size = offsetof(struct kdbus_item, data64) + BLOOM_SIZE;
+ item->type = KDBUS_MATCH_BLOOM;
+ memcpy(item->data64, bloom, BLOOM_SIZE);
+
+ item = KDBUS_ITEM_NEXT(item);
+ }
+
+ if (sender) {
+ item->size = offsetof(struct kdbus_item, str) + sender_length + 1;
+ item->type = KDBUS_MATCH_SRC_NAME;
+ memcpy(item->str, sender, sender_length + 1);
+ }
+
+ r = ioctl(bus->input_fd, KDBUS_CMD_MATCH_ADD, m);
+ if (r < 0)
+ return -errno;
+
+ } else {
+ return sd_bus_call_method(
+ bus,
+ "org.freedesktop.DBus",
+ "/",
+ "org.freedesktop.DBus",
+ "AddMatch",
+ NULL,
+ NULL,
+ "s",
+ match);
+ }
+
+ return 0;
}
-int bus_remove_match_internal(sd_bus *bus, const char *match) {
+int bus_remove_match_internal(
+ sd_bus *bus,
+ const char *match,
+ uint64_t cookie) {
+
+ int r;
+
assert(bus);
assert(match);
- return sd_bus_call_method(
- bus,
- "org.freedesktop.DBus",
- "/",
- "org.freedesktop.DBus",
- "RemoveMatch",
- NULL,
- NULL,
- "s",
- match);
+ if (bus->is_kernel) {
+ struct kdbus_cmd_match m;
+
+ zero(m);
+ m.size = offsetof(struct kdbus_cmd_match, items);
+ m.cookie = cookie;
+
+ r = ioctl(bus->input_fd, KDBUS_CMD_MATCH_REMOVE, &m);
+ if (r < 0)
+ return -errno;
+
+ } else {
+ return sd_bus_call_method(
+ bus,
+ "org.freedesktop.DBus",
+ "/",
+ "org.freedesktop.DBus",
+ "RemoveMatch",
+ NULL,
+ NULL,
+ "s",
+ match);
+ }
+
+ return 0;
}
int sd_bus_get_owner_machine_id(sd_bus *bus, const char *name, sd_id128_t *machine) {
@@ -354,6 +546,10 @@ int sd_bus_get_owner_machine_id(sd_bus *bus, const char *name, sd_id128_t *machi
return -EINVAL;
if (!name)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (streq_ptr(name, bus->unique_name))
return sd_id128_get_machine(machine);
diff --git a/src/libsystemd-bus/bus-control.h b/src/libsystemd-bus/bus-control.h
index 34ecb260c3..2cac5d83ae 100644
--- a/src/libsystemd-bus/bus-control.h
+++ b/src/libsystemd-bus/bus-control.h
@@ -23,5 +23,5 @@
#include "sd-bus.h"
-int bus_add_match_internal(sd_bus *bus, const char *match);
-int bus_remove_match_internal(sd_bus *bus, const char *match);
+int bus_add_match_internal(sd_bus *bus, const char *match, struct bus_match_component *components, unsigned n_components, uint64_t cookie);
+int bus_remove_match_internal(sd_bus *bus, const char *match, uint64_t cookie);
diff --git a/src/libsystemd-bus/bus-error.c b/src/libsystemd-bus/bus-error.c
index 5faa17384e..4696a88f76 100644
--- a/src/libsystemd-bus/bus-error.c
+++ b/src/libsystemd-bus/bus-error.c
@@ -142,6 +142,9 @@ int bus_error_to_errno(const sd_bus_error* e) {
/* Better replce this with a gperf table */
+ if (!e)
+ return -EIO;
+
if (!e->name)
return -EIO;
@@ -152,6 +155,30 @@ int bus_error_to_errno(const sd_bus_error* e) {
streq(e->name, "org.freedesktop.DBus.Error.AccessDenied"))
return -EPERM;
+ if (streq(e->name, "org.freedesktop.DBus.Error.InvalidArgs"))
+ return -EINVAL;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.UnixProcessIdUnknown"))
+ return -ESRCH;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.FileNotFound"))
+ return -ENOENT;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.FileExists"))
+ return -EEXIST;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.Timeout"))
+ return -ETIMEDOUT;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.IOError"))
+ return -EIO;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.Disconnected"))
+ return -ECONNRESET;
+
+ if (streq(e->name, "org.freedesktop.DBus.Error.NotSupported"))
+ return -ENOTSUP;
+
return -EIO;
}
@@ -159,13 +186,54 @@ int bus_error_from_errno(sd_bus_error *e, int error) {
if (!e)
return error;
- if (error == -ENOMEM)
- sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.NoMemory", strerror(-error));
- else if (error == -EPERM || error == -EACCES)
- sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.AccessDenied", strerror(-error));
- else
- sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.Failed", "Operation failed");
+ switch (error) {
+
+ case -ENOMEM:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.NoMemory", "Out of memory");
+ break;
+
+ case -EPERM:
+ case -EACCES:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.AccessDenied", "Access denied");
+ break;
+
+ case -EINVAL:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid argument");
+ break;
+
+ case -ESRCH:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.UnixProcessIdUnknown", "No such process");
+ break;
+
+ case -ENOENT:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.FileNotFound", "File not found");
+ break;
+
+ case -EEXIST:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.FileExists", "File exists");
+ break;
+
+ case -ETIMEDOUT:
+ case -ETIME:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.Timeout", "Timed out");
+ break;
+
+ case -EIO:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.IOError", "Input/output error");
+ break;
+
+ case -ENETRESET:
+ case -ECONNABORTED:
+ case -ECONNRESET:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.Disconnected", "Disconnected");
+ break;
+
+ case -ENOTSUP:
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.NotSupported", "Not supported");
+ break;
+ }
+ sd_bus_error_set_const(e, "org.freedesktop.DBus.Error.Failed", "Operation failed");
return error;
}
diff --git a/src/libsystemd-bus/bus-internal.h b/src/libsystemd-bus/bus-internal.h
index 4babfac86d..30b8d519a0 100644
--- a/src/libsystemd-bus/bus-internal.h
+++ b/src/libsystemd-bus/bus-internal.h
@@ -24,15 +24,18 @@
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
+#include <pthread.h>
#include "hashmap.h"
#include "prioq.h"
#include "list.h"
#include "util.h"
+#include "refcnt.h"
#include "sd-bus.h"
#include "bus-error.h"
#include "bus-match.h"
+#include "bus-kernel.h"
struct reply_callback {
sd_bus_message_handler_t callback;
@@ -66,9 +69,14 @@ enum bus_state {
BUS_OPENING,
BUS_AUTHENTICATING,
BUS_HELLO,
- BUS_RUNNING
+ BUS_RUNNING,
+ BUS_CLOSED
};
+static inline bool BUS_IS_OPEN(enum bus_state state) {
+ return state > BUS_UNSET && state < BUS_CLOSED;
+}
+
enum bus_auth {
_BUS_AUTH_INVALID,
BUS_AUTH_EXTERNAL,
@@ -76,13 +84,21 @@ enum bus_auth {
};
struct sd_bus {
- unsigned n_ref;
+ /* We use atomic ref counting here since sd_bus_message
+ objects retain references to their originating sd_bus but
+ we want to allow them to be processed in a different
+ thread. We won't provide full thread safety, but only the
+ bare minimum that makes it possible to use sd_bus and
+ sd_bus_message objects independently and on different
+ threads as long as each object is used only once at the
+ same time. */
+ RefCount n_ref;
+
enum bus_state state;
int input_fd, output_fd;
int message_version;
bool is_kernel:1;
- bool negotiate_fds:1;
bool can_fds:1;
bool bus_client:1;
bool ucred_valid:1;
@@ -95,6 +111,8 @@ struct sd_bus {
bool filter_callbacks_modified:1;
bool object_callbacks_modified:1;
+ int use_memfd;
+
void *rbuffer;
size_t rbuffer_size;
@@ -150,6 +168,24 @@ struct sd_bus {
uint64_t hello_serial;
unsigned iteration_counter;
+
+ void *kdbus_buffer;
+
+ /* We do locking around the memfd cache, since we want to
+ * allow people to process a sd_bus_message in a different
+ * thread then it was generated on and free it there. Since
+ * adding something to the memfd cache might happen when a
+ * message is released, we hence need to protect this bit with
+ * a mutex. */
+ pthread_mutex_t memfd_cache_mutex;
+ struct memfd_cache memfd_cache[MEMFD_CACHE_MAX];
+ unsigned n_memfd_cache;
+
+ pid_t original_pid;
+
+ uint64_t hello_flags;
+
+ uint64_t match_cookie;
};
static inline void bus_unrefp(sd_bus **b) {
@@ -196,3 +232,5 @@ const char *bus_message_type_to_string(uint8_t u);
int bus_ensure_running(sd_bus *bus);
int bus_start_running(sd_bus *bus);
int bus_next_address(sd_bus *bus);
+
+bool bus_pid_changed(sd_bus *bus);
diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c
index 0762b7836f..bf8de04ab6 100644
--- a/src/libsystemd-bus/bus-kernel.c
+++ b/src/libsystemd-bus/bus-kernel.c
@@ -25,6 +25,7 @@
#include <fcntl.h>
#include <malloc.h>
+#include <sys/mman.h>
#include "util.h"
@@ -33,18 +34,7 @@
#include "bus-kernel.h"
#include "bus-bloom.h"
-#define KDBUS_ITEM_NEXT(item) \
- (typeof(item))(((uint8_t *)item) + ALIGN8((item)->size))
-
-#define KDBUS_ITEM_FOREACH(item, head) \
- for (item = (head)->items; \
- (uint8_t *)(item) < (uint8_t *)(head) + (head)->size; \
- item = KDBUS_ITEM_NEXT(item))
-
-#define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
-#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_ITEM_HEADER_SIZE)
-
-static int parse_unique_name(const char *s, uint64_t *id) {
+int bus_kernel_parse_unique_name(const char *s, uint64_t *id) {
int r;
assert(s);
@@ -62,19 +52,36 @@ static int parse_unique_name(const char *s, uint64_t *id) {
static void append_payload_vec(struct kdbus_item **d, const void *p, size_t sz) {
assert(d);
- assert(p);
assert(sz > 0);
*d = ALIGN8_PTR(*d);
+ /* Note that p can be NULL, which encodes a region full of
+ * zeroes, which is useful to optimize certain padding
+ * conditions */
+
(*d)->size = offsetof(struct kdbus_item, vec) + sizeof(struct kdbus_vec);
(*d)->type = KDBUS_MSG_PAYLOAD_VEC;
- (*d)->vec.address = (intptr_t) p;
+ (*d)->vec.address = PTR_TO_UINT64(p);
(*d)->vec.size = sz;
*d = (struct kdbus_item *) ((uint8_t*) *d + (*d)->size);
}
+static void append_payload_memfd(struct kdbus_item **d, int memfd, size_t sz) {
+ assert(d);
+ assert(memfd >= 0);
+ assert(sz > 0);
+
+ *d = ALIGN8_PTR(*d);
+ (*d)->size = offsetof(struct kdbus_item, memfd) + sizeof(struct kdbus_memfd);
+ (*d)->type = KDBUS_MSG_PAYLOAD_MEMFD;
+ (*d)->memfd.fd = memfd;
+ (*d)->memfd.size = sz;
+
+ *d = (struct kdbus_item *) ((uint8_t*) *d + (*d)->size);
+}
+
static void append_destination(struct kdbus_item **d, const char *s, size_t length) {
assert(d);
assert(s);
@@ -111,7 +118,7 @@ static void append_fds(struct kdbus_item **d, const int fds[], unsigned n_fds) {
*d = ALIGN8_PTR(*d);
(*d)->size = offsetof(struct kdbus_item, fds) + sizeof(int) * n_fds;
- (*d)->type = KDBUS_MSG_UNIX_FDS;
+ (*d)->type = KDBUS_MSG_FDS;
memcpy((*d)->fds, fds, sizeof(int) * n_fds);
*d = (struct kdbus_item *) ((uint8_t*) *d + (*d)->size);
@@ -134,6 +141,7 @@ static int bus_message_setup_bloom(sd_bus_message *m, void *bloom) {
bloom_add_pair(bloom, "member", m->member);
if (m->path) {
bloom_add_pair(bloom, "path", m->path);
+ bloom_add_pair(bloom, "path-slash-prefix", m->path);
bloom_add_prefixes(bloom, "path-slash-prefix", m->path, '/');
}
@@ -181,10 +189,12 @@ static int bus_message_setup_bloom(sd_bus_message *m, void *bloom) {
}
static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
+ struct bus_body_part *part;
struct kdbus_item *d;
bool well_known;
uint64_t unique;
size_t sz, dl;
+ unsigned i;
int r;
assert(b);
@@ -195,7 +205,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
return 0;
if (m->destination) {
- r = parse_unique_name(m->destination, &unique);
+ r = bus_kernel_parse_unique_name(m->destination, &unique);
if (r < 0)
return r;
@@ -205,8 +215,12 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
sz = offsetof(struct kdbus_msg, items);
+ assert_cc(ALIGN8(offsetof(struct kdbus_item, vec) + sizeof(struct kdbus_vec)) ==
+ ALIGN8(offsetof(struct kdbus_item, memfd) + sizeof(struct kdbus_memfd)));
+
/* Add in fixed header, fields header and payload */
- sz += 3 * ALIGN8(offsetof(struct kdbus_item, vec) + sizeof(struct kdbus_vec));
+ sz += (1 + m->n_body_parts) *
+ ALIGN8(offsetof(struct kdbus_item, vec) + sizeof(struct kdbus_vec));
/* Add space for bloom filter */
sz += ALIGN8(offsetof(struct kdbus_item, data) + BLOOM_SIZE);
@@ -222,9 +236,12 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
sz += ALIGN8(offsetof(struct kdbus_item, fds) + sizeof(int)*m->n_fds);
m->kdbus = memalign(8, sz);
- if (!m->kdbus)
- return -ENOMEM;
+ if (!m->kdbus) {
+ r = -ENOMEM;
+ goto fail;
+ }
+ m->free_kdbus = true;
memset(m->kdbus, 0, sz);
m->kdbus->flags =
@@ -243,24 +260,43 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
if (well_known)
append_destination(&d, m->destination, dl);
- append_payload_vec(&d, m->header, sizeof(*m->header));
+ append_payload_vec(&d, m->header, BUS_MESSAGE_BODY_BEGIN(m));
- if (m->fields)
- append_payload_vec(&d, m->fields, ALIGN8(m->header->fields_size));
+ MESSAGE_FOREACH_PART(part, i, m) {
+ if (part->is_zero) {
+ /* If this is padding then simply send a
+ * vector with a NULL data pointer which the
+ * kernel will just pass through. This is the
+ * most efficient way to encode zeroes */
- if (m->body)
- append_payload_vec(&d, m->body, m->header->body_size);
+ append_payload_vec(&d, NULL, part->size);
+ continue;
+ }
+
+ if (part->memfd >= 0 && part->sealed && m->destination) {
+ /* Try to send a memfd, if the part is
+ * sealed and this is not a broadcast. Since we can only */
+
+ append_payload_memfd(&d, part->memfd, part->size);
+ continue;
+ }
+
+ /* Otherwise let's send a vector to the actual data,
+ * for that we need to map it first. */
+ r = bus_body_part_map(part);
+ if (r < 0)
+ goto fail;
+
+ append_payload_vec(&d, part->data, part->size);
+ }
if (m->kdbus->dst_id == KDBUS_DST_ID_BROADCAST) {
void *p;
p = append_bloom(&d, BLOOM_SIZE);
r = bus_message_setup_bloom(m, p);
- if (r < 0) {
- free(m->kdbus);
- m->kdbus = NULL;
- return -r;
- }
+ if (r < 0)
+ goto fail;
}
if (m->n_fds > 0)
@@ -269,23 +305,15 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
m->kdbus->size = (uint8_t*) d - (uint8_t*) m->kdbus;
assert(m->kdbus->size <= sz);
- m->free_kdbus = true;
-
return 0;
+
+fail:
+ m->poisoned = true;
+ return r;
}
int bus_kernel_take_fd(sd_bus *b) {
- struct kdbus_cmd_hello hello = {
- .conn_flags =
- KDBUS_HELLO_ACCEPT_FD|
- KDBUS_HELLO_ATTACH_COMM|
- KDBUS_HELLO_ATTACH_EXE|
- KDBUS_HELLO_ATTACH_CMDLINE|
- KDBUS_HELLO_ATTACH_CGROUP|
- KDBUS_HELLO_ATTACH_CAPS|
- KDBUS_HELLO_ATTACH_SECLABEL|
- KDBUS_HELLO_ATTACH_AUDIT
- };
+ struct kdbus_cmd_hello hello;
int r;
assert(b);
@@ -293,10 +321,25 @@ int bus_kernel_take_fd(sd_bus *b) {
if (b->is_server)
return -EINVAL;
+ b->use_memfd = 1;
+
+ zero(hello);
+ hello.size = sizeof(hello);
+ hello.conn_flags = b->hello_flags;
+ hello.pool_size = KDBUS_POOL_SIZE;
+
r = ioctl(b->input_fd, KDBUS_CMD_HELLO, &hello);
if (r < 0)
return -errno;
+ if (!b->kdbus_buffer) {
+ b->kdbus_buffer = mmap(NULL, KDBUS_POOL_SIZE, PROT_READ, MAP_SHARED, b->input_fd, 0);
+ if (b->kdbus_buffer == MAP_FAILED) {
+ b->kdbus_buffer = NULL;
+ return -errno;
+ }
+ }
+
/* The higher 32bit of both flags fields are considered
* 'incompatible flags'. Refuse them all for now. */
if (hello.bus_flags > 0xFFFFFFFFULL ||
@@ -311,7 +354,7 @@ int bus_kernel_take_fd(sd_bus *b) {
b->is_kernel = true;
b->bus_client = true;
- b->can_fds = true;
+ b->can_fds = !!(hello.conn_flags & KDBUS_HELLO_ACCEPT_FD);
r = bus_start_running(b);
if (r < 0)
@@ -356,22 +399,29 @@ int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m) {
return 1;
}
-static void close_kdbus_msg(struct kdbus_msg *k) {
+static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
+ uint64_t off;
struct kdbus_item *d;
- KDBUS_ITEM_FOREACH(d, k) {
+ assert(bus);
+ assert(k);
- if (d->type != KDBUS_MSG_UNIX_FDS)
- continue;
+ off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
+ ioctl(bus->input_fd, KDBUS_CMD_MSG_RELEASE, &off);
- close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int));
+ KDBUS_ITEM_FOREACH(d, k) {
+
+ if (d->type == KDBUS_MSG_FDS)
+ close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int));
+ else if (d->type == KDBUS_MSG_PAYLOAD_MEMFD)
+ close_nointr_nofail(d->memfd.fd);
}
}
static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_message **ret) {
sd_bus_message *m = NULL;
struct kdbus_item *d;
- unsigned n_payload = 0, n_fds = 0;
+ unsigned n_fds = 0;
_cleanup_free_ int *fds = NULL;
struct bus_header *h = NULL;
size_t total, n_bytes = 0, idx = 0;
@@ -390,19 +440,25 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
l = d->size - offsetof(struct kdbus_item, data);
- if (d->type == KDBUS_MSG_PAYLOAD) {
+ if (d->type == KDBUS_MSG_PAYLOAD_OFF) {
if (!h) {
- if (l < sizeof(struct bus_header))
- return -EBADMSG;
+ h = (struct bus_header *)((uint8_t *)bus->kdbus_buffer + d->vec.offset);
- h = (struct bus_header*) d->data;
+ if (!bus_header_is_complete(h, d->vec.size))
+ return -EBADMSG;
}
- n_payload++;
- n_bytes += l;
+ n_bytes += d->vec.size;
+
+ } else if (d->type == KDBUS_MSG_PAYLOAD_MEMFD) {
- } else if (d->type == KDBUS_MSG_UNIX_FDS) {
+ if (!h)
+ return -EBADMSG;
+
+ n_bytes += d->memfd.size;
+
+ } else if (d->type == KDBUS_MSG_FDS) {
int *f;
unsigned j;
@@ -415,16 +471,14 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
memcpy(fds + n_fds, d->fds, sizeof(int) * j);
n_fds += j;
- } else if (d->type == KDBUS_MSG_DST_NAME)
- destination = d->str;
- else if (d->type == KDBUS_MSG_SRC_SECLABEL)
+ } else if (d->type == KDBUS_MSG_SRC_SECLABEL)
seclabel = d->str;
}
if (!h)
return -EBADMSG;
- r = bus_header_size(h, &total);
+ r = bus_header_message_size(h, &total);
if (r < 0)
return r;
@@ -440,20 +494,59 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
l = d->size - offsetof(struct kdbus_item, data);
- if (d->type == KDBUS_MSG_PAYLOAD) {
+ if (d->type == KDBUS_MSG_PAYLOAD_OFF) {
+ size_t begin_body;
- if (idx == sizeof(struct bus_header) &&
- l == ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m)))
- m->fields = d->data;
- else if (idx == sizeof(struct bus_header) + ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m)) &&
- l == BUS_MESSAGE_BODY_SIZE(m))
- m->body = d->data;
- else if (!(idx == 0 && l == sizeof(struct bus_header))) {
- sd_bus_message_unref(m);
- return -EBADMSG;
+ begin_body = BUS_MESSAGE_BODY_BEGIN(m);
+
+ if (idx + d->vec.size > begin_body) {
+ struct bus_body_part *part;
+
+ /* Contains body material */
+
+ part = message_append_part(m);
+ if (!part) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ /* A -1 offset is NUL padding. */
+ part->is_zero = d->vec.offset == ~0ULL;
+
+ if (idx >= begin_body) {
+ if (!part->is_zero)
+ part->data = (uint8_t *)bus->kdbus_buffer + d->vec.offset;
+ part->size = d->vec.size;
+ } else {
+ if (!part->is_zero)
+ part->data = (uint8_t *)bus->kdbus_buffer + d->vec.offset + (begin_body - idx);
+ part->size = d->vec.size - (begin_body - idx);
+ }
+
+ part->sealed = true;
}
- idx += l;
+ idx += d->vec.size;
+ } else if (d->type == KDBUS_MSG_PAYLOAD_MEMFD) {
+ struct bus_body_part *part;
+
+ if (idx < BUS_MESSAGE_BODY_BEGIN(m)) {
+ r = -EBADMSG;
+ goto fail;
+ }
+
+ part = message_append_part(m);
+ if (!part) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ part->memfd = d->memfd.fd;
+ part->size = d->memfd.size;
+ part->sealed = true;
+
+ idx += d->memfd.size;
+
} else if (d->type == KDBUS_MSG_SRC_CREDS) {
m->pid_starttime = d->creds.starttime / NSEC_PER_USEC;
m->uid = d->creds.uid;
@@ -480,15 +573,16 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
else if (d->type == KDBUS_MSG_SRC_CAPS) {
m->capability = d->data;
m->capability_size = l;
- } else
+ } else if (d->type == KDBUS_MSG_DST_NAME)
+ destination = d->str;
+ else if (d->type != KDBUS_MSG_FDS &&
+ d->type != KDBUS_MSG_SRC_SECLABEL)
log_debug("Got unknown field from kernel %llu", d->type);
}
r = bus_message_parse_fields(m);
- if (r < 0) {
- sd_bus_message_unref(m);
- return r;
- }
+ if (r < 0)
+ goto fail;
if (k->src_id == KDBUS_SRC_ID_KERNEL)
m->sender = "org.freedesktop.DBus";
@@ -509,66 +603,58 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
/* We take possession of the kmsg struct now */
m->kdbus = k;
- m->free_kdbus = true;
+ m->bus = sd_bus_ref(bus);
+ m->release_kdbus = true;
m->free_fds = true;
fds = NULL;
*ret = m;
return 1;
+
+fail:
+ if (m) {
+ struct bus_body_part *part;
+ unsigned i;
+
+ /* Make sure the memfds are not freed twice */
+ MESSAGE_FOREACH_PART(part, i, m)
+ if (part->memfd >= 0)
+ part->memfd = -1;
+
+ sd_bus_message_unref(m);
+ }
+
+ return r;
}
int bus_kernel_read_message(sd_bus *bus, sd_bus_message **m) {
+ uint64_t off;
struct kdbus_msg *k;
- size_t sz = 1024;
int r;
assert(bus);
assert(m);
- for (;;) {
- void *q;
-
- q = memalign(8, sz);
- if (!q)
- return -errno;
-
- free(bus->rbuffer);
- k = bus->rbuffer = q;
- k->size = sz;
-
- /* Let's tell valgrind that there's really no need to
- * initialize this fully. This should be removed again
- * when valgrind learned the kdbus ioctls natively. */
-#ifdef HAVE_VALGRIND_MEMCHECK_H
- VALGRIND_MAKE_MEM_DEFINED(k, sz);
-#endif
-
- r = ioctl(bus->input_fd, KDBUS_CMD_MSG_RECV, bus->rbuffer);
- if (r >= 0)
- break;
-
+ r = ioctl(bus->input_fd, KDBUS_CMD_MSG_RECV, &off);
+ if (r < 0) {
if (errno == EAGAIN)
return 0;
- if (errno != ENOBUFS)
- return -errno;
-
- sz *= 2;
+ return -errno;
}
+ k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + off);
r = bus_kernel_make_message(bus, k, m);
- if (r > 0)
- bus->rbuffer = NULL;
- else
- close_kdbus_msg(k);
+ if (r <= 0)
+ close_kdbus_msg(bus, k);
return r < 0 ? r : 1;
}
int bus_kernel_create(const char *name, char **s) {
struct kdbus_cmd_bus_make *make;
- struct kdbus_item *n, *cg;
+ struct kdbus_item *n;
size_t l;
int fd;
char *p;
@@ -585,18 +671,13 @@ int bus_kernel_create(const char *name, char **s) {
KDBUS_ITEM_HEADER_SIZE + sizeof(uint64_t) +
KDBUS_ITEM_HEADER_SIZE + DECIMAL_STR_MAX(uid_t) + 1 + l + 1);
- cg = make->items;
- cg->type = KDBUS_MAKE_CGROUP;
- cg->data64[0] = 1;
- cg->size = KDBUS_ITEM_HEADER_SIZE + sizeof(uint64_t);
-
- n = KDBUS_ITEM_NEXT(cg);
+ n = make->items;
n->type = KDBUS_MAKE_NAME;
sprintf(n->str, "%lu-%s", (unsigned long) getuid(), name);
n->size = KDBUS_ITEM_HEADER_SIZE + strlen(n->str) + 1;
- make->size = offsetof(struct kdbus_cmd_bus_make, items) + cg->size + n->size;
- make->flags = KDBUS_MAKE_ACCESS_WORLD | KDBUS_MAKE_POLICY_OPEN;
+ make->size = offsetof(struct kdbus_cmd_bus_make, items) + n->size;
+ make->flags = KDBUS_MAKE_POLICY_OPEN;
make->bus_flags = 0;
make->bloom_size = BLOOM_SIZE;
assert_cc(BLOOM_SIZE % 8 == 0);
@@ -616,3 +697,95 @@ int bus_kernel_create(const char *name, char **s) {
return fd;
}
+
+int bus_kernel_pop_memfd(sd_bus *bus, void **address, size_t *size) {
+ struct memfd_cache *c;
+ int fd;
+
+ assert(address);
+ assert(size);
+
+ if (!bus || !bus->is_kernel)
+ return -ENOTSUP;
+
+ assert_se(pthread_mutex_lock(&bus->memfd_cache_mutex) >= 0);
+
+ if (bus->n_memfd_cache <= 0) {
+ int r;
+
+ assert_se(pthread_mutex_unlock(&bus->memfd_cache_mutex) >= 0);
+
+ r = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &fd);
+ if (r < 0)
+ return -errno;
+
+ *address = NULL;
+ *size = 0;
+ return fd;
+ }
+
+ c = &bus->memfd_cache[--bus->n_memfd_cache];
+
+ assert(c->fd >= 0);
+ assert(c->size == 0 || c->address);
+
+ *address = c->address;
+ *size = c->size;
+ fd = c->fd;
+
+ assert_se(pthread_mutex_unlock(&bus->memfd_cache_mutex) >= 0);
+
+ return fd;
+}
+
+static void close_and_munmap(int fd, void *address, size_t size) {
+ if (size > 0)
+ assert_se(munmap(address, PAGE_ALIGN(size)) >= 0);
+
+ close_nointr_nofail(fd);
+}
+
+void bus_kernel_push_memfd(sd_bus *bus, int fd, void *address, size_t size) {
+ struct memfd_cache *c;
+ uint64_t max_sz = PAGE_ALIGN(MEMFD_CACHE_ITEM_SIZE_MAX);
+
+ assert(fd >= 0);
+ assert(size == 0 || address);
+
+ if (!bus || !bus->is_kernel) {
+ close_and_munmap(fd, address, size);
+ return;
+ }
+
+ assert_se(pthread_mutex_lock(&bus->memfd_cache_mutex) >= 0);
+
+ if (bus->n_memfd_cache >= ELEMENTSOF(bus->memfd_cache)) {
+ assert_se(pthread_mutex_unlock(&bus->memfd_cache_mutex) >= 0);
+
+ close_and_munmap(fd, address, size);
+ return;
+ }
+
+ c = &bus->memfd_cache[bus->n_memfd_cache++];
+ c->fd = fd;
+ c->address = address;
+
+ /* If overly long, let's return a bit to the OS */
+ if (size > max_sz) {
+ assert_se(ioctl(fd, KDBUS_CMD_MEMFD_SIZE_SET, &max_sz) >= 0);
+ assert_se(munmap((uint8_t*) address + max_sz, PAGE_ALIGN(size - max_sz)) >= 0);
+ c->size = max_sz;
+ } else
+ c->size = size;
+
+ assert_se(pthread_mutex_unlock(&bus->memfd_cache_mutex) >= 0);
+}
+
+void bus_kernel_flush_memfd(sd_bus *b) {
+ unsigned i;
+
+ assert(b);
+
+ for (i = 0; i < b->n_memfd_cache; i++)
+ close_and_munmap(b->memfd_cache[i].fd, b->memfd_cache[i].address, b->memfd_cache[i].size);
+}
diff --git a/src/libsystemd-bus/bus-kernel.h b/src/libsystemd-bus/bus-kernel.h
index ac746afe03..c4573c9222 100644
--- a/src/libsystemd-bus/bus-kernel.h
+++ b/src/libsystemd-bus/bus-kernel.h
@@ -23,6 +23,37 @@
#include "sd-bus.h"
+#define KDBUS_ITEM_NEXT(item) \
+ (typeof(item))(((uint8_t *)item) + ALIGN8((item)->size))
+
+#define KDBUS_ITEM_FOREACH(item, head) \
+ for (item = (head)->items; \
+ (uint8_t *)(item) < (uint8_t *)(head) + (head)->size; \
+ item = KDBUS_ITEM_NEXT(item))
+
+#define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
+#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_ITEM_HEADER_SIZE)
+
+#define MEMFD_CACHE_MAX 32
+
+/* When we cache a memfd block for reuse, we will truncate blocks
+ * longer than this in order not to keep too much data around. */
+#define MEMFD_CACHE_ITEM_SIZE_MAX (128*1024)
+
+/* This determines at which minimum size we prefer sending memfds over
+ * sending vectors */
+#define MEMFD_MIN_SIZE (128*1024)
+
+/* The size of the per-connection memory pool that we set up and where
+ * the kernel places our incoming messages */
+#define KDBUS_POOL_SIZE (16*1024*1024)
+
+struct memfd_cache {
+ int fd;
+ void *address;
+ size_t size;
+};
+
int bus_kernel_connect(sd_bus *b);
int bus_kernel_take_fd(sd_bus *b);
@@ -30,3 +61,10 @@ int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m);
int bus_kernel_read_message(sd_bus *bus, sd_bus_message **m);
int bus_kernel_create(const char *name, char **s);
+
+int bus_kernel_pop_memfd(sd_bus *bus, void **address, size_t *size);
+void bus_kernel_push_memfd(sd_bus *bus, int fd, void *address, size_t size);
+
+void bus_kernel_flush_memfd(sd_bus *bus);
+
+int bus_kernel_parse_unique_name(const char *s, uint64_t *id);
diff --git a/src/libsystemd-bus/bus-match.c b/src/libsystemd-bus/bus-match.c
index 501a38df70..1411167a7f 100644
--- a/src/libsystemd-bus/bus-match.c
+++ b/src/libsystemd-bus/bus-match.c
@@ -199,7 +199,6 @@ static bool value_node_same(
int bus_match_run(
sd_bus *bus,
struct bus_match_node *node,
- int ret,
sd_bus_message *m) {
@@ -230,7 +229,7 @@ int bus_match_run(
* we won't call any. The children of the root node
* are compares or leaves, they will automatically
* call their siblings. */
- return bus_match_run(bus, node->child, ret, m);
+ return bus_match_run(bus, node->child, m);
case BUS_MATCH_VALUE:
@@ -240,7 +239,7 @@ int bus_match_run(
* automatically call their siblings */
assert(node->child);
- return bus_match_run(bus, node->child, ret, m);
+ return bus_match_run(bus, node->child, m);
case BUS_MATCH_LEAF:
@@ -256,12 +255,13 @@ int bus_match_run(
return r;
/* Run the callback. And then invoke siblings. */
- assert(node->leaf.callback);
- r = node->leaf.callback(bus, ret, m, node->leaf.userdata);
- if (r != 0)
- return r;
+ if (node->leaf.callback) {
+ r = node->leaf.callback(bus, m, node->leaf.userdata);
+ if (r != 0)
+ return r;
+ }
- return bus_match_run(bus, node->next, ret, m);
+ return bus_match_run(bus, node->next, m);
case BUS_MATCH_MESSAGE_TYPE:
test_u8 = m->header->type;
@@ -318,7 +318,7 @@ int bus_match_run(
found = NULL;
if (found) {
- r = bus_match_run(bus, found, ret, m);
+ r = bus_match_run(bus, found, m);
if (r != 0)
return r;
}
@@ -331,7 +331,7 @@ int bus_match_run(
if (!value_node_test(c, node->type, test_u8, test_str))
continue;
- r = bus_match_run(bus, c, ret, m);
+ r = bus_match_run(bus, c, m);
if (r != 0)
return r;
}
@@ -341,7 +341,7 @@ int bus_match_run(
return 0;
/* And now, let's invoke our siblings */
- return bus_match_run(bus, node->next, ret, m);
+ return bus_match_run(bus, node->next, m);
}
static int bus_match_add_compare_value(
@@ -500,6 +500,7 @@ static int bus_match_add_leaf(
struct bus_match_node *where,
sd_bus_message_handler_t callback,
void *userdata,
+ uint64_t cookie,
struct bus_match_node **ret) {
struct bus_match_node *n;
@@ -519,6 +520,7 @@ static int bus_match_add_leaf(
n->next->prev = n;
n->leaf.callback = callback;
n->leaf.userdata = userdata;
+ n->leaf.cookie = cookie;
where->child = n;
@@ -553,22 +555,22 @@ static int bus_match_find_leaf(
enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n) {
assert(k);
- if (n == 4 && memcmp(k, "type", 4) == 0)
+ if (n == 4 && startswith(k, "type"))
return BUS_MATCH_MESSAGE_TYPE;
- if (n == 6 && memcmp(k, "sender", 6) == 0)
+ if (n == 6 && startswith(k, "sender"))
return BUS_MATCH_SENDER;
- if (n == 11 && memcmp(k, "destination", 11) == 0)
+ if (n == 11 && startswith(k, "destination"))
return BUS_MATCH_DESTINATION;
- if (n == 9 && memcmp(k, "interface", 9) == 0)
+ if (n == 9 && startswith(k, "interface"))
return BUS_MATCH_INTERFACE;
- if (n == 6 && memcmp(k, "member", 6) == 0)
+ if (n == 6 && startswith(k, "member"))
return BUS_MATCH_MEMBER;
- if (n == 4 && memcmp(k, "path", 4) == 0)
+ if (n == 4 && startswith(k, "path"))
return BUS_MATCH_PATH;
- if (n == 14 && memcmp(k, "path_namespace", 14) == 0)
+ if (n == 14 && startswith(k, "path_namespace"))
return BUS_MATCH_PATH_NAMESPACE;
- if (n == 4 && memcmp(k, "arg", 3) == 0) {
+ if (n == 4 && startswith(k, "arg")) {
int j;
j = undecchar(k[3]);
@@ -578,7 +580,7 @@ enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n
return BUS_MATCH_ARG + j;
}
- if (n == 5 && memcmp(k, "arg", 3) == 0) {
+ if (n == 5 && startswith(k, "arg")) {
int a, b;
enum bus_match_node_type t;
@@ -594,7 +596,7 @@ enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n
return t;
}
- if (n == 8 && memcmp(k, "arg", 3) == 0 && memcmp(k + 4, "path", 4) == 0) {
+ if (n == 8 && startswith(k, "arg") && startswith(k + 4, "path")) {
int j;
j = undecchar(k[3]);
@@ -604,7 +606,7 @@ enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n
return BUS_MATCH_ARG_PATH + j;
}
- if (n == 9 && memcmp(k, "arg", 3) == 0 && memcmp(k + 5, "path", 4) == 0) {
+ if (n == 9 && startswith(k, "arg") && startswith(k + 5, "path")) {
enum bus_match_node_type t;
int a, b;
@@ -620,7 +622,7 @@ enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n
return t;
}
- if (n == 13 && memcmp(k, "arg", 3) == 0 && memcmp(k + 4, "namespace", 9) == 0) {
+ if (n == 13 && startswith(k, "arg") && startswith(k + 4, "namespace")) {
int j;
j = undecchar(k[3]);
@@ -630,7 +632,7 @@ enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n
return BUS_MATCH_ARG_NAMESPACE + j;
}
- if (n == 14 && memcmp(k, "arg", 3) == 0 && memcmp(k + 5, "namespace", 9) == 0) {
+ if (n == 14 && startswith(k, "arg") && startswith(k + 5, "namespace")) {
enum bus_match_node_type t;
int a, b;
@@ -649,14 +651,8 @@ enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n
return -EINVAL;
}
-struct match_component {
- enum bus_match_node_type type;
- uint8_t value_u8;
- char *value_str;
-};
-
static int match_component_compare(const void *a, const void *b) {
- const struct match_component *x = a, *y = b;
+ const struct bus_match_component *x = a, *y = b;
if (x->type < y->type)
return -1;
@@ -666,7 +662,7 @@ static int match_component_compare(const void *a, const void *b) {
return 0;
}
-static void free_components(struct match_component *components, unsigned n_components) {
+void bus_match_parse_free(struct bus_match_component *components, unsigned n_components) {
unsigned i;
for (i = 0; i < n_components; i++)
@@ -675,13 +671,13 @@ static void free_components(struct match_component *components, unsigned n_compo
free(components);
}
-static int parse_match(
+int bus_match_parse(
const char *match,
- struct match_component **_components,
+ struct bus_match_component **_components,
unsigned *_n_components) {
const char *p = match;
- struct match_component *components = NULL;
+ struct bus_match_component *components = NULL;
size_t components_allocated = 0;
unsigned n_components = 0, i;
_cleanup_free_ char *value = NULL;
@@ -772,7 +768,7 @@ static int parse_match(
}
/* Order the whole thing, so that we always generate the same tree */
- qsort(components, n_components, sizeof(struct match_component), match_component_compare);
+ qsort(components, n_components, sizeof(struct bus_match_component), match_component_compare);
/* Check for duplicates */
for (i = 0; i+1 < n_components; i++)
@@ -787,29 +783,24 @@ static int parse_match(
return 0;
fail:
- free_components(components, n_components);
+ bus_match_parse_free(components, n_components);
return r;
}
int bus_match_add(
struct bus_match_node *root,
- const char *match,
+ struct bus_match_component *components,
+ unsigned n_components,
sd_bus_message_handler_t callback,
void *userdata,
+ uint64_t cookie,
struct bus_match_node **ret) {
- struct match_component *components = NULL;
- unsigned n_components = 0, i;
+ unsigned i;
struct bus_match_node *n;
int r;
assert(root);
- assert(match);
- assert(callback);
-
- r = parse_match(match, &components, &n_components);
- if (r < 0)
- return r;
n = root;
for (i = 0; i < n_components; i++) {
@@ -817,38 +808,32 @@ int bus_match_add(
n, components[i].type,
components[i].value_u8, components[i].value_str, &n);
if (r < 0)
- goto finish;
+ return r;
}
- r = bus_match_add_leaf(n, callback, userdata, &n);
+ r = bus_match_add_leaf(n, callback, userdata, cookie, &n);
if (r < 0)
- goto finish;
+ return r;
if (ret)
*ret = n;
-finish:
- free_components(components, n_components);
- return r;
+ return 0;
}
int bus_match_remove(
struct bus_match_node *root,
- const char *match,
+ struct bus_match_component *components,
+ unsigned n_components,
sd_bus_message_handler_t callback,
- void *userdata) {
+ void *userdata,
+ uint64_t *cookie) {
- struct match_component *components = NULL;
- unsigned n_components = 0, i;
+ unsigned i;
struct bus_match_node *n, **gc;
int r;
assert(root);
- assert(match);
-
- r = parse_match(match, &components, &n_components);
- if (r < 0)
- return r;
gc = newa(struct bus_match_node*, n_components);
@@ -859,14 +844,17 @@ int bus_match_remove(
components[i].value_u8, components[i].value_str,
&n);
if (r <= 0)
- goto finish;
+ return r;
gc[i] = n;
}
r = bus_match_find_leaf(n, callback, userdata, &n);
if (r <= 0)
- goto finish;
+ return r;
+
+ if (cookie)
+ *cookie = n->leaf.cookie;
/* Free the leaf */
bus_match_node_free(n);
@@ -882,8 +870,6 @@ int bus_match_remove(
break;
}
-finish:
- free_components(components, n_components);
return r;
}
diff --git a/src/libsystemd-bus/bus-match.h b/src/libsystemd-bus/bus-match.h
index 075f1a9e3a..d24aeec43d 100644
--- a/src/libsystemd-bus/bus-match.h
+++ b/src/libsystemd-bus/bus-match.h
@@ -61,6 +61,7 @@ struct bus_match_node {
sd_bus_message_handler_t callback;
void *userdata;
unsigned last_iteration;
+ uint64_t cookie;
} leaf;
struct {
/* If this is set, then the child is NULL */
@@ -69,10 +70,16 @@ struct bus_match_node {
};
};
-int bus_match_run(sd_bus *bus, struct bus_match_node *root, int ret, sd_bus_message *m);
+struct bus_match_component {
+ enum bus_match_node_type type;
+ uint8_t value_u8;
+ char *value_str;
+};
-int bus_match_add(struct bus_match_node *root, const char *match, sd_bus_message_handler_t callback, void *userdata, struct bus_match_node **ret);
-int bus_match_remove(struct bus_match_node *root, const char *match, sd_bus_message_handler_t callback, void *userdata);
+int bus_match_run(sd_bus *bus, struct bus_match_node *root, sd_bus_message *m);
+
+int bus_match_add(struct bus_match_node *root, struct bus_match_component *components, unsigned n_components, sd_bus_message_handler_t callback, void *userdata, uint64_t cookie, struct bus_match_node **ret);
+int bus_match_remove(struct bus_match_node *root, struct bus_match_component *components, unsigned n_components, sd_bus_message_handler_t callback, void *userdata, uint64_t *cookie);
void bus_match_free(struct bus_match_node *node);
@@ -80,3 +87,6 @@ void bus_match_dump(struct bus_match_node *node, unsigned level);
const char* bus_match_node_type_to_string(enum bus_match_node_type t, char buf[], size_t l);
enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n);
+
+int bus_match_parse(const char *match, struct bus_match_component **_components, unsigned *_n_components);
+void bus_match_parse_free(struct bus_match_component *components, unsigned n_components);
diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c
index 835a9f9a44..760a148fad 100644
--- a/src/libsystemd-bus/bus-message.c
+++ b/src/libsystemd-bus/bus-message.c
@@ -21,6 +21,7 @@
#include <errno.h>
#include <fcntl.h>
+#include <sys/mman.h>
#include "util.h"
#include "utf8.h"
@@ -36,7 +37,69 @@
static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored);
-static void reset_containers(sd_bus_message *m) {
+static void *adjust_pointer(const void *p, void *old_base, size_t sz, void *new_base) {
+
+ if (p == NULL)
+ return NULL;
+
+ if (old_base == new_base)
+ return (void*) p;
+
+ if ((uint8_t*) p < (uint8_t*) old_base)
+ return (void*) p;
+
+ if ((uint8_t*) p >= (uint8_t*) old_base + sz)
+ return (void*) p;
+
+ return (uint8_t*) new_base + ((uint8_t*) p - (uint8_t*) old_base);
+}
+
+static void message_free_part(sd_bus_message *m, struct bus_body_part *part) {
+ assert(m);
+ assert(part);
+
+ if (part->memfd >= 0) {
+ /* If we can reuse the memfd, try that. For that it
+ * can't be sealed yet. */
+
+ if (!part->sealed)
+ bus_kernel_push_memfd(m->bus, part->memfd, part->data, part->mapped);
+ else {
+ if (part->mapped > 0)
+ assert_se(munmap(part->data, part->mapped) == 0);
+
+ close_nointr_nofail(part->memfd);
+ }
+
+ } else if (part->munmap_this)
+ munmap(part->data, part->mapped);
+ else if (part->free_this)
+ free(part->data);
+
+ if (part != &m->body)
+ free(part);
+}
+
+static void message_reset_parts(sd_bus_message *m) {
+ struct bus_body_part *part;
+
+ assert(m);
+
+ part = &m->body;
+ while (m->n_body_parts > 0) {
+ struct bus_body_part *next = part->next;
+ message_free_part(m, part);
+ part = next;
+ m->n_body_parts--;
+ }
+
+ m->body_end = NULL;
+
+ m->cached_rindex_part = NULL;
+ m->cached_rindex_part_begin = 0;
+}
+
+static void message_reset_containers(sd_bus_message *m) {
unsigned i;
assert(m);
@@ -57,23 +120,32 @@ static void message_free(sd_bus_message *m) {
if (m->free_header)
free(m->header);
- if (m->free_fields)
- free(m->fields);
-
- if (m->free_body)
- free(m->body);
+ message_reset_parts(m);
if (m->free_kdbus)
free(m->kdbus);
+ if (m->release_kdbus) {
+ uint64_t off;
+
+ off = (uint8_t *)m->kdbus - (uint8_t *)m->bus->kdbus_buffer;
+ ioctl(m->bus->input_fd, KDBUS_CMD_MSG_RELEASE, &off);
+ }
+
+ if (m->bus)
+ sd_bus_unref(m->bus);
+
if (m->free_fds) {
close_many(m->fds, m->n_fds);
free(m->fds);
}
+ if (m->iovec != m->iovec_fixed)
+ free(m->iovec);
+
free(m->cmdline_array);
- reset_containers(m);
+ message_reset_containers(m);
free(m->root_container.signature);
free(m->peeked_signature);
@@ -84,67 +156,64 @@ static void message_free(sd_bus_message *m) {
free(m);
}
-static void* buffer_extend(void **p, uint32_t *sz, size_t align, size_t extend) {
- size_t start, n;
- void *k;
-
- assert(p);
- assert(sz);
- assert(align > 0);
-
- start = ALIGN_TO((size_t) *sz, align);
- n = start + extend;
+static void *message_extend_fields(sd_bus_message *m, size_t align, size_t sz) {
+ void *op, *np;
+ size_t old_size, new_size, start;
- if (n == *sz)
- return (uint8_t*) *p + start;
+ assert(m);
- if (n > (size_t) ((uint32_t) -1))
+ if (m->poisoned)
return NULL;
- k = realloc(*p, n);
- if (!k)
- return NULL;
+ old_size = sizeof(struct bus_header) + m->header->fields_size;
+ start = ALIGN_TO(old_size, align);
+ new_size = start + sz;
- /* Zero out padding */
- if (start > *sz)
- memset((uint8_t*) k + *sz, 0, start - *sz);
+ if (old_size == new_size)
+ return (uint8_t*) m->header + old_size;
- *p = k;
- *sz = n;
+ if (new_size > (size_t) ((uint32_t) -1))
+ goto poison;
- return (uint8_t*) k + start;
-}
+ if (m->free_header) {
+ np = realloc(m->header, ALIGN8(new_size));
+ if (!np)
+ goto poison;
+ } else {
+ /* Initially, the header is allocated as part of of
+ * the sd_bus_message itself, let's replace it by
+ * dynamic data */
-static void *message_extend_fields(sd_bus_message *m, size_t align, size_t sz) {
- void *p, *o;
+ np = malloc(ALIGN8(new_size));
+ if (!np)
+ goto poison;
- assert(m);
+ memcpy(np, m->header, sizeof(struct bus_header));
+ }
- o = m->fields;
- p = buffer_extend(&m->fields, &m->header->fields_size, align, sz);
- if (!p)
- return NULL;
+ /* Zero out padding */
+ if (start > old_size)
+ memset((uint8_t*) np + old_size, 0, start - old_size);
- if (o != m->fields) {
- /* Adjust quick access pointers */
+ op = m->header;
+ m->header = np;
+ m->header->fields_size = new_size - sizeof(struct bus_header);
- if (m->path)
- m->path = (const char*) m->fields + (m->path - (const char*) o);
- if (m->interface)
- m->interface = (const char*) m->fields + (m->interface - (const char*) o);
- if (m->member)
- m->member = (const char*) m->fields + (m->member - (const char*) o);
- if (m->destination)
- m->destination = (const char*) m->fields + (m->destination - (const char*) o);
- if (m->sender)
- m->sender = (const char*) m->fields + (m->sender - (const char*) o);
- if (m->error.name)
- m->error.name = (const char*) m->fields + (m->error.name - (const char*) o);
- }
+ /* Adjust quick access pointers */
+ m->path = adjust_pointer(m->path, op, old_size, m->header);
+ m->interface = adjust_pointer(m->interface, op, old_size, m->header);
+ m->member = adjust_pointer(m->member, op, old_size, m->header);
+ m->destination = adjust_pointer(m->destination, op, old_size, m->header);
+ m->sender = adjust_pointer(m->sender, op, old_size, m->header);
+ m->error.name = adjust_pointer(m->error.name, op, old_size, m->header);
+
+ m->free_header = true;
- m->free_fields = true;
+ return (uint8_t*) np + start;
- return p;
+poison:
+ m->poisoned = true;
+ return NULL;
}
static int message_append_field_string(
@@ -177,7 +246,7 @@ static int message_append_field_string(
memcpy(p + 8, s, l + 1);
if (ret)
- *ret = (const char*) p + 8;
+ *ret = (char*) p + 8;
return 0;
}
@@ -324,10 +393,14 @@ int bus_message_from_malloc(
goto fail;
}
- m->fields = (uint8_t*) buffer + sizeof(struct bus_header);
- m->body = (uint8_t*) buffer + sizeof(struct bus_header) + ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m));
+ m->n_body_parts = 1;
+ m->body.data = (uint8_t*) buffer + sizeof(struct bus_header) + ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m));
+ m->body.size = length - sizeof(struct bus_header) - ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m));
+ m->body.sealed = true;
+ m->body.memfd = -1;
m->n_iovec = 1;
+ m->iovec = m->iovec_fixed;
m->iovec[0].iov_base = buffer;
m->iovec[0].iov_len = length;
@@ -361,6 +434,9 @@ static sd_bus_message *message_new(sd_bus *bus, uint8_t type) {
m->header->version = bus ? bus->message_version : 1;
m->allow_fds = !bus || bus->can_fds || (bus->state != BUS_HELLO && bus->state != BUS_RUNNING);
+ if (bus)
+ m->bus = sd_bus_ref(bus);
+
return m;
}
@@ -492,7 +568,7 @@ static int message_new_reply(
goto fail;
if (call->sender) {
- r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, call->sender, &t->sender);
+ r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, call->sender, &t->destination);
if (r < 0)
goto fail;
}
@@ -551,6 +627,43 @@ fail:
return r;
}
+int bus_message_new_synthetic_error(
+ sd_bus *bus,
+ uint64_t serial,
+ const sd_bus_error *e,
+ sd_bus_message **m) {
+
+ sd_bus_message *t;
+ int r;
+
+ assert(sd_bus_error_is_set(e));
+ assert(m);
+
+ t = message_new(bus, SD_BUS_MESSAGE_TYPE_METHOD_ERROR);
+ if (!t)
+ return -ENOMEM;
+
+ t->header->flags |= SD_BUS_MESSAGE_NO_REPLY_EXPECTED;
+ t->reply_serial = serial;
+
+ r = message_append_field_uint32(t, SD_BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_serial);
+ if (r < 0)
+ goto fail;
+
+ if (bus && bus->unique_name) {
+ r = message_append_field_string(t, SD_BUS_MESSAGE_HEADER_DESTINATION, SD_BUS_TYPE_STRING, bus->unique_name, &t->destination);
+ if (r < 0)
+ goto fail;
+ }
+
+ *m = t;
+ return 0;
+
+fail:
+ message_free(t);
+ return r;
+}
+
sd_bus_message* sd_bus_message_ref(sd_bus_message *m) {
if (!m)
return NULL;
@@ -1016,35 +1129,205 @@ static struct bus_container *message_get_container(sd_bus_message *m) {
return m->containers + m->n_containers - 1;
}
-static void *message_extend_body(sd_bus_message *m, size_t align, size_t sz) {
- void *p, *o;
- size_t added;
+struct bus_body_part *message_append_part(sd_bus_message *m) {
+ struct bus_body_part *part;
+
+ assert(m);
+
+ if (m->poisoned)
+ return NULL;
+
+ if (m->n_body_parts <= 0) {
+ part = &m->body;
+ zero(*part);
+ } else {
+ assert(m->body_end);
+
+ part = new0(struct bus_body_part, 1);
+ if (!part) {
+ m->poisoned = true;
+ return NULL;
+ }
+
+ m->body_end->next = part;
+ }
+
+ part->memfd = -1;
+ m->body_end = part;
+ m->n_body_parts ++;
+
+ return part;
+}
+
+static void part_zero(struct bus_body_part *part, size_t sz) {
+ assert(part);
+ assert(sz > 0);
+ assert(sz < 8);
+
+ /* All other fields can be left in their defaults */
+ assert(!part->data);
+ assert(part->memfd < 0);
+
+ part->size = sz;
+ part->is_zero = true;
+ part->sealed = true;
+}
+
+static int part_make_space(
+ struct sd_bus_message *m,
+ struct bus_body_part *part,
+ size_t sz,
+ void **q) {
+
+ void *n;
+ int r;
+
+ assert(m);
+ assert(part);
+ assert(!part->sealed);
+
+ if (m->poisoned)
+ return -ENOMEM;
+
+ if (!part->data && part->memfd < 0)
+ part->memfd = bus_kernel_pop_memfd(m->bus, &part->data, &part->mapped);
+
+ if (part->memfd >= 0) {
+ uint64_t u = sz;
+
+ r = ioctl(part->memfd, KDBUS_CMD_MEMFD_SIZE_SET, &u);
+ if (r < 0) {
+ m->poisoned = true;
+ return -errno;
+ }
+
+ if (!part->data || sz > part->mapped) {
+ size_t psz = PAGE_ALIGN(sz > 0 ? sz : 1);
+
+ if (part->mapped <= 0)
+ n = mmap(NULL, psz, PROT_READ|PROT_WRITE, MAP_SHARED, part->memfd, 0);
+ else
+ n = mremap(part->data, part->mapped, psz, MREMAP_MAYMOVE);
+
+ if (n == MAP_FAILED) {
+ m->poisoned = true;
+ return -errno;
+ }
+
+ part->mapped = psz;
+ part->data = n;
+ }
+
+ part->munmap_this = true;
+ } else {
+ n = realloc(part->data, sz);
+ if (!n) {
+ m->poisoned = true;
+ return -ENOMEM;
+ }
+
+ part->data = n;
+ part->free_this = true;
+ }
+
+ if (q)
+ *q = part->data ? (uint8_t*) part->data + part->size : NULL;
+
+ part->size = sz;
+ return 0;
+}
+
+static void message_extend_containers(sd_bus_message *m, size_t expand) {
struct bus_container *c;
assert(m);
+
+ if (expand <= 0)
+ return;
+
+ /* Update counters */
+ for (c = m->containers; c < m->containers + m->n_containers; c++)
+ if (c->array_size)
+ *c->array_size += expand;
+}
+
+static void *message_extend_body(sd_bus_message *m, size_t align, size_t sz) {
+ struct bus_body_part *part = NULL;
+ size_t start_body, end_body, padding, start_part, end_part, added;
+ bool add_new_part;
+ void *p;
+ int r;
+
+ assert(m);
assert(align > 0);
+ assert(!m->sealed);
+
+ if (m->poisoned)
+ return NULL;
- o = m->body;
- added = m->header->body_size;
+ start_body = ALIGN_TO((size_t) m->header->body_size, align);
+ end_body = start_body + sz;
- p = buffer_extend(&m->body, &m->header->body_size, align, sz);
- if (!p)
+ padding = start_body - m->header->body_size;
+ added = padding + sz;
+
+ /* Check for 32bit overflows */
+ if (end_body > (size_t) ((uint32_t) -1)) {
+ m->poisoned = true;
return NULL;
+ }
- added = m->header->body_size - added;
+ add_new_part =
+ m->n_body_parts <= 0 ||
+ m->body_end->sealed ||
+ padding != ALIGN_TO(m->body_end->size, align) - m->body_end->size;
- for (c = m->containers; c < m->containers + m->n_containers; c++)
- if (c->array_size) {
- c->array_size = (uint32_t*) ((uint8_t*) m->body + ((uint8_t*) c->array_size - (uint8_t*) o));
- *c->array_size += added;
+ if (add_new_part) {
+ if (padding > 0) {
+ part = message_append_part(m);
+ if (!part)
+ return NULL;
+
+ part_zero(part, padding);
+ }
+
+ part = message_append_part(m);
+ if (!part)
+ return NULL;
+
+ r = part_make_space(m, part, sz, &p);
+ if (r < 0)
+ return NULL;
+ } else {
+ struct bus_container *c;
+ void *op;
+ size_t os;
+
+ part = m->body_end;
+ op = part->data;
+ os = part->size;
+
+ start_part = ALIGN_TO(part->size, align);
+ end_part = start_part + sz;
+
+ r = part_make_space(m, part, end_part, &p);
+ if (r < 0)
+ return NULL;
+
+ if (padding > 0) {
+ memset(p, 0, padding);
+ p = (uint8_t*) p + padding;
}
- if (o != m->body) {
- if (m->error.message)
- m->error.message = (const char*) m->body + (m->error.message - (const char*) o);
+ /* Readjust pointers */
+ for (c = m->containers; c < m->containers + m->n_containers; c++)
+ c->array_size = adjust_pointer(c->array_size, op, os, part->data);
+
+ m->error.message = (const char*) adjust_pointer(m->error.message, op, os, part->data);
}
- m->free_body = true;
+ m->header->body_size = end_body;
+ message_extend_containers(m, added);
return p;
}
@@ -1054,7 +1337,6 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void
ssize_t align, sz;
uint32_t k;
void *a;
- char *e = NULL;
int fd = -1;
uint32_t fdi = 0;
int r;
@@ -1067,6 +1349,8 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void
return -EPERM;
if (!bus_type_is_basic(type))
return -EINVAL;
+ if (m->poisoned)
+ return -ESTALE;
c = message_get_container(m);
@@ -1076,13 +1360,17 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void
if (c->signature[c->index] != type)
return -ENXIO;
} else {
+ char *e;
+
/* Maybe we can append to the signature? But only if this is the top-level container*/
if (c->enclosing != 0)
return -ENXIO;
e = strextend(&c->signature, CHAR_TO_STR(type), NULL);
- if (!e)
+ if (!e) {
+ m->poisoned = true;
return -ENOMEM;
+ }
}
switch (type) {
@@ -1133,6 +1421,7 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void
f = realloc(m->fds, sizeof(int) * (m->n_fds + 1));
if (!f) {
+ m->poisoned = true;
r = -ENOMEM;
goto fail;
}
@@ -1193,10 +1482,6 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void
return 0;
fail:
- /* Truncate extended signature again */
- if (e)
- c->signature[c->index] = 0;
-
if (fd >= 0)
close_nointr_nofail(fd);
@@ -1207,6 +1492,55 @@ int sd_bus_message_append_basic(sd_bus_message *m, char type, const void *p) {
return message_append_basic(m, type, p, NULL);
}
+int sd_bus_message_append_string_space(sd_bus_message *m, size_t size, char **s) {
+ struct bus_container *c;
+ void *a;
+
+ if (!m)
+ return -EINVAL;
+ if (!s)
+ return -EINVAL;
+ if (m->sealed)
+ return -EPERM;
+ if (m->poisoned)
+ return -ESTALE;
+
+ c = message_get_container(m);
+
+ if (c->signature && c->signature[c->index]) {
+ /* Container signature is already set */
+
+ if (c->signature[c->index] != SD_BUS_TYPE_STRING)
+ return -ENXIO;
+ } else {
+ char *e;
+
+ /* Maybe we can append to the signature? But only if this is the top-level container*/
+ if (c->enclosing != 0)
+ return -ENXIO;
+
+ e = strextend(&c->signature, CHAR_TO_STR(SD_BUS_TYPE_STRING), NULL);
+ if (!e) {
+ m->poisoned = true;
+ return -ENOMEM;
+ }
+ }
+
+ a = message_extend_body(m, 4, 4 + size + 1);
+ if (!a)
+ return -ENOMEM;
+
+ *(uint32_t*) a = size;
+ *s = (char*) a + 4;
+
+ (*s)[size] = 0;
+
+ if (c->enclosing != SD_BUS_TYPE_ARRAY)
+ c->index++;
+
+ return 0;
+}
+
static int bus_message_open_array(
sd_bus_message *m,
struct bus_container *c,
@@ -1214,10 +1548,10 @@ static int bus_message_open_array(
uint32_t **array_size) {
unsigned nindex;
- char *e = NULL;
- void *a, *b;
+ void *a, *op;
int alignment;
- size_t saved;
+ size_t os;
+ struct bus_body_part *o;
assert(m);
assert(c);
@@ -1243,45 +1577,42 @@ static int bus_message_open_array(
nindex = c->index + 1 + strlen(contents);
} else {
+ char *e;
+
if (c->enclosing != 0)
return -ENXIO;
/* Extend the existing signature */
e = strextend(&c->signature, CHAR_TO_STR(SD_BUS_TYPE_ARRAY), contents, NULL);
- if (!e)
+ if (!e) {
+ m->poisoned = true;
return -ENOMEM;
+ }
nindex = e - c->signature;
}
- saved = m->header->body_size;
a = message_extend_body(m, 4, 4);
- if (!a) {
- /* Truncate extended signature again */
- if (e)
- c->signature[c->index] = 0;
-
+ if (!a)
return -ENOMEM;
- }
- b = m->body;
- if (!message_extend_body(m, alignment, 0)) {
- /* Add alignment between size and first element */
- if (e)
- c->signature[c->index] = 0;
+ o = m->body_end;
+ op = m->body_end->data;
+ os = m->body_end->size;
- m->header->body_size = saved;
+ /* Add alignment between size and first element */
+ if (!message_extend_body(m, alignment, 0))
return -ENOMEM;
- }
if (c->enclosing != SD_BUS_TYPE_ARRAY)
c->index = nindex;
- /* m->body might have changed so let's readjust a */
- a = (uint8_t*) m->body + ((uint8_t*) a - (uint8_t*) b);
- *(uint32_t*) a = 0;
+ /* location of array size might have changed so let's readjust a */
+ if (o == m->body_end)
+ a = adjust_pointer(a, op, os, m->body_end->data);
+ *(uint32_t*) a = 0;
*array_size = a;
return 0;
}
@@ -1291,7 +1622,6 @@ static int bus_message_open_variant(
struct bus_container *c,
const char *contents) {
- char *e = NULL;
size_t l;
void *a;
@@ -1311,23 +1641,22 @@ static int bus_message_open_variant(
return -ENXIO;
} else {
+ char *e;
+
if (c->enclosing != 0)
return -ENXIO;
e = strextend(&c->signature, CHAR_TO_STR(SD_BUS_TYPE_VARIANT), NULL);
- if (!e)
+ if (!e) {
+ m->poisoned = true;
return -ENOMEM;
+ }
}
l = strlen(contents);
a = message_extend_body(m, 1, 1 + l + 1);
- if (!a) {
- /* Truncate extended signature again */
- if (e)
- c->signature[c->index] = 0;
-
+ if (!a)
return -ENOMEM;
- }
*(uint8_t*) a = l;
memcpy((uint8_t*) a + 1, contents, l + 1);
@@ -1344,7 +1673,6 @@ static int bus_message_open_struct(
const char *contents) {
size_t nindex;
- char *e = NULL;
assert(m);
assert(c);
@@ -1365,23 +1693,23 @@ static int bus_message_open_struct(
nindex = c->index + 1 + l + 1;
} else {
+ char *e;
+
if (c->enclosing != 0)
return -ENXIO;
e = strextend(&c->signature, CHAR_TO_STR(SD_BUS_TYPE_STRUCT_BEGIN), contents, CHAR_TO_STR(SD_BUS_TYPE_STRUCT_END), NULL);
- if (!e)
+ if (!e) {
+ m->poisoned = true;
return -ENOMEM;
+ }
nindex = e - c->signature;
}
/* Align contents to 8 byte boundary */
- if (!message_extend_body(m, 8, 0)) {
- if (e)
- c->signature[c->index] = 0;
-
+ if (!message_extend_body(m, 8, 0))
return -ENOMEM;
- }
if (c->enclosing != SD_BUS_TYPE_ARRAY)
c->index = nindex;
@@ -1438,6 +1766,7 @@ int sd_bus_message_open_container(
struct bus_container *c, *w;
uint32_t *array_size = NULL;
char *signature;
+ size_t before;
int r;
if (!m)
@@ -1446,18 +1775,30 @@ int sd_bus_message_open_container(
return -EPERM;
if (!contents)
return -EINVAL;
+ if (m->poisoned)
+ return -ESTALE;
/* Make sure we have space for one more container */
w = realloc(m->containers, sizeof(struct bus_container) * (m->n_containers + 1));
- if (!w)
+ if (!w) {
+ m->poisoned = true;
return -ENOMEM;
+ }
+
m->containers = w;
c = message_get_container(m);
signature = strdup(contents);
- if (!signature)
+ if (!signature) {
+ m->poisoned = true;
return -ENOMEM;
+ }
+
+ /* Save old index in the parent container, in case we have to
+ * abort this container */
+ c->saved_index = c->index;
+ before = m->header->body_size;
if (type == SD_BUS_TYPE_ARRAY)
r = bus_message_open_array(m, c, contents, &array_size);
@@ -1481,7 +1822,8 @@ int sd_bus_message_open_container(
w->signature = signature;
w->index = 0;
w->array_size = array_size;
- w->begin = 0;
+ w->before = before;
+ w->begin = m->rindex;
return 0;
}
@@ -1495,6 +1837,8 @@ int sd_bus_message_close_container(sd_bus_message *m) {
return -EPERM;
if (m->n_containers <= 0)
return -EINVAL;
+ if (m->poisoned)
+ return -ESTALE;
c = message_get_container(m);
if (c->enclosing != SD_BUS_TYPE_ARRAY)
@@ -1507,7 +1851,6 @@ int sd_bus_message_close_container(sd_bus_message *m) {
return 0;
}
-
typedef struct {
const char *types;
unsigned n_struct;
@@ -1752,6 +2095,8 @@ int sd_bus_message_append(sd_bus_message *m, const char *types, ...) {
return -EINVAL;
if (m->sealed)
return -EPERM;
+ if (m->poisoned)
+ return -ESTALE;
if (!types)
return 0;
@@ -1762,16 +2107,280 @@ int sd_bus_message_append(sd_bus_message *m, const char *types, ...) {
return r;
}
+int sd_bus_message_append_array_space(sd_bus_message *m, char type, size_t size, void **ptr) {
+ ssize_t align, sz;
+ void *a;
+ int r;
+
+ if (!m)
+ return -EINVAL;
+ if (m->sealed)
+ return -EPERM;
+ if (!bus_type_is_trivial(type))
+ return -EINVAL;
+ if (!ptr && size > 0)
+ return -EINVAL;
+ if (m->poisoned)
+ return -ESTALE;
+
+ align = bus_type_get_alignment(type);
+ sz = bus_type_get_size(type);
+
+ assert_se(align > 0);
+ assert_se(sz > 0);
+
+ if (size % sz != 0)
+ return -EINVAL;
+
+ r = sd_bus_message_open_container(m, SD_BUS_TYPE_ARRAY, CHAR_TO_STR(type));
+ if (r < 0)
+ return r;
+
+ a = message_extend_body(m, align, size);
+ if (!a)
+ return -ENOMEM;
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ *ptr = a;
+ return 0;
+}
+
+int sd_bus_message_append_array(sd_bus_message *m, char type, const void *ptr, size_t size) {
+ int r;
+ void *p;
+
+ if (!ptr && size > 0)
+ return -EINVAL;
+
+ r = sd_bus_message_append_array_space(m, type, size, &p);
+ if (r < 0)
+ return r;
+
+ if (size > 0)
+ memcpy(p, ptr, size);
+
+ return 0;
+}
+
+int sd_bus_message_append_array_memfd(sd_bus_message *m, char type, sd_memfd *memfd) {
+ _cleanup_close_ int copy_fd = -1;
+ struct bus_body_part *part;
+ ssize_t align, sz;
+ uint64_t size;
+ void *a;
+ int r;
+
+ if (!m)
+ return -EINVAL;
+ if (!memfd)
+ return -EINVAL;
+ if (m->sealed)
+ return -EPERM;
+ if (!bus_type_is_trivial(type))
+ return -EINVAL;
+ if (m->poisoned)
+ return -ESTALE;
+
+ r = sd_memfd_set_sealed(memfd, true);
+ if (r < 0)
+ return r;
+
+ copy_fd = sd_memfd_dup_fd(memfd);
+ if (copy_fd < 0)
+ return copy_fd;
+
+ r = sd_memfd_get_size(memfd, &size);
+ if (r < 0)
+ return r;
+
+ align = bus_type_get_alignment(type);
+ sz = bus_type_get_size(type);
+
+ assert_se(align > 0);
+ assert_se(sz > 0);
+
+ if (size % sz != 0)
+ return -EINVAL;
+
+ if (size > (uint64_t) (uint32_t) -1)
+ return -EINVAL;
+
+ r = sd_bus_message_open_container(m, SD_BUS_TYPE_ARRAY, CHAR_TO_STR(type));
+ if (r < 0)
+ return r;
+
+ a = message_extend_body(m, align, 0);
+ if (!a)
+ return -ENOMEM;
+
+ part = message_append_part(m);
+ if (!part)
+ return -ENOMEM;
+
+ part->memfd = copy_fd;
+ part->sealed = true;
+ part->size = size;
+ copy_fd = -1;
+
+ message_extend_containers(m, size);
+ m->header->body_size += size;
+
+ return sd_bus_message_close_container(m);
+}
+
+int sd_bus_message_append_string_memfd(sd_bus_message *m, sd_memfd *memfd) {
+ _cleanup_close_ int copy_fd = -1;
+ struct bus_body_part *part;
+ struct bus_container *c;
+ uint64_t size;
+ void *a;
+ int r;
+
+ if (!m)
+ return -EINVAL;
+ if (!memfd)
+ return -EINVAL;
+ if (m->sealed)
+ return -EPERM;
+ if (m->poisoned)
+ return -ESTALE;
+
+ r = sd_memfd_set_sealed(memfd, true);
+ if (r < 0)
+ return r;
+
+ copy_fd = sd_memfd_dup_fd(memfd);
+ if (copy_fd < 0)
+ return copy_fd;
+
+ r = sd_memfd_get_size(memfd, &size);
+ if (r < 0)
+ return r;
+
+ /* We require this to be NUL terminated */
+ if (size == 0)
+ return -EINVAL;
+
+ if (size > (uint64_t) (uint32_t) -1)
+ return -EINVAL;
+
+ c = message_get_container(m);
+ if (c->signature && c->signature[c->index]) {
+ /* Container signature is already set */
+
+ if (c->signature[c->index] != SD_BUS_TYPE_STRING)
+ return -ENXIO;
+ } else {
+ char *e;
+
+ /* Maybe we can append to the signature? But only if this is the top-level container*/
+ if (c->enclosing != 0)
+ return -ENXIO;
+
+ e = strextend(&c->signature, CHAR_TO_STR(SD_BUS_TYPE_STRING), NULL);
+ if (!e) {
+ m->poisoned = true;
+ return -ENOMEM;
+ }
+ }
+
+ a = message_extend_body(m, 4, 4);
+ if (!a)
+ return -ENOMEM;
+
+ *(uint32_t*) a = size - 1;
+
+ part = message_append_part(m);
+ if (!part)
+ return -ENOMEM;
+
+ part->memfd = copy_fd;
+ part->sealed = true;
+ part->size = size;
+ copy_fd = -1;
+
+ message_extend_containers(m, size);
+ m->header->body_size += size;
+
+ if (c->enclosing != SD_BUS_TYPE_ARRAY)
+ c->index++;
+
+ return 0;
+}
+
+int bus_body_part_map(struct bus_body_part *part) {
+ void *p;
+ size_t psz;
+
+ assert_se(part);
+
+ if (part->data)
+ return 0;
+
+ if (part->size <= 0)
+ return 0;
+
+ /* For smaller zero parts (as used for padding) we don't need to map anything... */
+ if (part->memfd < 0 && part->is_zero && part->size < 8) {
+ static const uint8_t zeroes[7] = { };
+ part->data = (void*) zeroes;
+ return 0;
+ }
+
+ psz = PAGE_ALIGN(part->size);
+
+ if (part->memfd >= 0)
+ p = mmap(NULL, psz, PROT_READ, MAP_SHARED, part->memfd, 0);
+ else if (part->is_zero)
+ p = mmap(NULL, psz, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ else
+ return -EINVAL;
+
+ if (p == MAP_FAILED)
+ return -errno;
+
+ part->mapped = psz;
+ part->data = p;
+ part->munmap_this = true;
+
+ return 0;
+}
+
+void bus_body_part_unmap(struct bus_body_part *part) {
+
+ assert_se(part);
+
+ if (part->memfd < 0)
+ return;
+
+ if (!part->data)
+ return;
+
+ if (!part->munmap_this)
+ return;
+
+ assert_se(munmap(part->data, part->mapped) == 0);
+
+ part->data = NULL;
+ part->mapped = 0;
+ part->munmap_this = false;
+
+ return;
+}
+
static int buffer_peek(const void *p, uint32_t sz, size_t *rindex, size_t align, size_t nbytes, void **r) {
- size_t k, start, n;
+ size_t k, start, end;
assert(rindex);
assert(align > 0);
start = ALIGN_TO((size_t) *rindex, align);
- n = start + nbytes;
+ end = start + nbytes;
- if (n > sz)
+ if (end > sz)
return -EBADMSG;
/* Verify that padding is 0 */
@@ -1782,7 +2391,7 @@ static int buffer_peek(const void *p, uint32_t sz, size_t *rindex, size_t align,
if (r)
*r = (uint8_t*) p + start;
- *rindex = n;
+ *rindex = end;
return 1;
}
@@ -1799,7 +2408,58 @@ static bool message_end_of_array(sd_bus_message *m, size_t index) {
return index >= c->begin + BUS_MESSAGE_BSWAP32(m, *c->array_size);
}
-static int message_peek_body(sd_bus_message *m, size_t *rindex, size_t align, size_t nbytes, void **ret) {
+static struct bus_body_part* find_part(sd_bus_message *m, size_t index, size_t sz, void **p) {
+ struct bus_body_part *part;
+ size_t begin;
+ int r;
+
+ assert(m);
+
+ if (m->cached_rindex_part && index >= m->cached_rindex_part_begin) {
+ part = m->cached_rindex_part;
+ begin = m->cached_rindex_part_begin;
+ } else {
+ part = &m->body;
+ begin = 0;
+ }
+
+ while (part) {
+ if (index < begin)
+ return NULL;
+
+ if (index + sz <= begin + part->size) {
+
+ r = bus_body_part_map(part);
+ if (r < 0)
+ return NULL;
+
+ if (p)
+ *p = (uint8_t*) part->data + index - begin;
+
+ m->cached_rindex_part = part;
+ m->cached_rindex_part_begin = begin;
+
+ return part;
+ }
+
+ begin += part->size;
+ part = part->next;
+ }
+
+ return NULL;
+}
+
+static int message_peek_body(
+ sd_bus_message *m,
+ size_t *rindex,
+ size_t align,
+ size_t nbytes,
+ void **ret) {
+
+ size_t k, start, end, padding;
+ struct bus_body_part *part;
+ uint8_t *q;
+
assert(m);
assert(rindex);
assert(align > 0);
@@ -1807,7 +2467,34 @@ static int message_peek_body(sd_bus_message *m, size_t *rindex, size_t align, si
if (message_end_of_array(m, *rindex))
return 0;
- return buffer_peek(m->body, BUS_MESSAGE_BODY_SIZE(m), rindex, align, nbytes, ret);
+ start = ALIGN_TO((size_t) *rindex, align);
+ padding = start - *rindex;
+ end = start + nbytes;
+
+ if (end > BUS_MESSAGE_BODY_SIZE(m))
+ return -EBADMSG;
+
+ part = find_part(m, *rindex, padding, (void**) &q);
+ if (!part)
+ return -EBADMSG;
+
+ if (q) {
+ /* Verify padding */
+ for (k = 0; k < padding; k++)
+ if (q[k] != 0)
+ return -EBADMSG;
+ }
+
+ part = find_part(m, start, nbytes, (void**) &q);
+ if (!part || !q)
+ return -EBADMSG;
+
+ *rindex = end;
+
+ if (ret)
+ *ret = q;
+
+ return 1;
}
static bool validate_nul(const char *s, size_t l) {
@@ -1990,7 +2677,7 @@ int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p) {
assert_not_reached("Unknown basic type...");
}
- m->rindex = rindex;
+ m->rindex = rindex;
break;
}
@@ -2186,6 +2873,7 @@ int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *con
struct bus_container *c, *w;
uint32_t *array_size = NULL;
char *signature;
+ size_t before;
int r;
if (!m)
@@ -2228,6 +2916,9 @@ int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *con
if (!signature)
return -ENOMEM;
+ c->saved_index = c->index;
+ before = m->rindex;
+
if (type == SD_BUS_TYPE_ARRAY)
r = bus_message_enter_array(m, c, contents, &array_size);
else if (type == SD_BUS_TYPE_VARIANT)
@@ -2250,6 +2941,7 @@ int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *con
w->signature = signature;
w->index = 0;
w->array_size = array_size;
+ w->before = before;
w->begin = m->rindex;
return 1;
@@ -2284,6 +2976,28 @@ int sd_bus_message_exit_container(sd_bus_message *m) {
return 1;
}
+static void message_quit_container(sd_bus_message *m) {
+ struct bus_container *c;
+
+ assert(m);
+ assert(m->sealed);
+ assert(m->n_containers > 0);
+
+ c = message_get_container(m);
+
+ /* Undo seeks */
+ assert(m->rindex >= c->before);
+ m->rindex = c->before;
+
+ /* Free container */
+ free(c->signature);
+ m->n_containers--;
+
+ /* Correct index of new top-level container */
+ c = message_get_container(m);
+ c->index = c->saved_index;
+}
+
int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char **contents) {
struct bus_container *c;
int r;
@@ -2415,7 +3129,7 @@ int sd_bus_message_rewind(sd_bus_message *m, int complete) {
return -EPERM;
if (complete) {
- reset_containers(m);
+ message_reset_containers(m);
m->rindex = 0;
m->root_container.index = 0;
@@ -2627,6 +3341,59 @@ int sd_bus_message_read(sd_bus_message *m, const char *types, ...) {
return r;
}
+int sd_bus_message_read_array(sd_bus_message *m, char type, const void **ptr, size_t *size) {
+ struct bus_container *c;
+ void *p;
+ size_t sz;
+ ssize_t align;
+ int r;
+
+ if (!m)
+ return -EINVAL;
+ if (!m->sealed)
+ return -EPERM;
+ if (!bus_type_is_trivial(type))
+ return -EINVAL;
+ if (!ptr)
+ return -EINVAL;
+ if (!size)
+ return -EINVAL;
+ if (BUS_MESSAGE_NEED_BSWAP(m))
+ return -ENOTSUP;
+
+ align = bus_type_get_alignment(type);
+ if (align < 0)
+ return align;
+
+ r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, CHAR_TO_STR(type));
+ if (r <= 0)
+ return r;
+
+ c = message_get_container(m);
+ sz = BUS_MESSAGE_BSWAP32(m, *c->array_size);
+
+ r = message_peek_body(m, &m->rindex, align, sz, &p);
+ if (r < 0)
+ goto fail;
+ if (r == 0) {
+ r = -EBADMSG;
+ goto fail;
+ }
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ goto fail;
+
+ *ptr = (const void*) p;
+ *size = sz;
+
+ return 1;
+
+fail:
+ message_quit_container(m);
+ return r;
+}
+
static int message_peek_fields(
sd_bus_message *m,
size_t *rindex,
@@ -2638,7 +3405,7 @@ static int message_peek_fields(
assert(rindex);
assert(align > 0);
- return buffer_peek(m->fields, BUS_MESSAGE_FIELDS_SIZE(m), rindex, align, nbytes, ret);
+ return buffer_peek(BUS_MESSAGE_FIELDS(m), BUS_MESSAGE_FIELDS_SIZE(m), rindex, align, nbytes, ret);
}
static int message_peek_field_uint32(
@@ -3061,8 +3828,10 @@ int bus_message_parse_fields(sd_bus_message *m) {
}
int bus_message_seal(sd_bus_message *m, uint64_t serial) {
- int r;
+ struct bus_body_part *part;
size_t l, a;
+ unsigned i;
+ int r;
assert(m);
@@ -3072,6 +3841,9 @@ int bus_message_seal(sd_bus_message *m, uint64_t serial) {
if (m->n_containers > 0)
return -EBADMSG;
+ if (m->poisoned)
+ return -ESTALE;
+
/* If there's a non-trivial signature set, then add it in here */
if (!isempty(m->root_container.signature)) {
r = message_append_field_signature(m, SD_BUS_MESSAGE_HEADER_SIGNATURE, m->root_container.signature, NULL);
@@ -3085,20 +3857,26 @@ int bus_message_seal(sd_bus_message *m, uint64_t serial) {
return r;
}
+ /* Add padding at the end of the fields part, since we know
+ * the body needs to start at an 8 byte alignment. We made
+ * sure we allocated enough space for this, so all we need to
+ * do here is to zero it out. */
l = BUS_MESSAGE_FIELDS_SIZE(m);
a = ALIGN8(l) - l;
-
- if (a > 0) {
- /* Add padding at the end, since we know the body
- * needs to start at an 8 byte alignment. */
- void *p;
-
- p = message_extend_fields(m, 1, a);
- if (!p)
- return -ENOMEM;
-
- memset(p, 0, a);
- m->header->fields_size -= a;
+ if (a > 0)
+ memset((uint8_t*) BUS_MESSAGE_FIELDS(m) + l, 0, a);
+
+ /* If this is something we can send as memfd, then let's seal
+ the memfd now. Note that we can send memfds as payload only
+ for directed messages, and not for broadcasts. */
+ if (m->destination && m->bus && m->bus->use_memfd) {
+ MESSAGE_FOREACH_PART(part, i, m)
+ if (part->memfd >= 0 && !part->sealed && (part->size > MEMFD_MIN_SIZE || m->bus->use_memfd < 0)) {
+ bus_body_part_unmap(part);
+
+ if (ioctl(part->memfd, KDBUS_CMD_MEMFD_SEAL_SET, 1) >= 0)
+ part->sealed = true;
+ }
}
m->header->serial = serial;
@@ -3148,7 +3926,8 @@ int bus_message_dump(sd_bus_message *m) {
"\treply_serial=%u\n"
"\terror.name=%s\n"
"\terror.message=%s\n"
- "\tsealed=%s\n",
+ "\tsealed=%s\n"
+ "\tn_body_parts=%u\n",
m,
m->n_ref,
m->header->endian,
@@ -3167,7 +3946,8 @@ int bus_message_dump(sd_bus_message *m) {
m->reply_serial,
strna(m->error.name),
strna(m->error.message),
- yes_no(m->sealed));
+ yes_no(m->sealed),
+ m->n_body_parts);
if (m->pid != 0)
printf("\tpid=%lu\n", (unsigned long) m->pid);
@@ -3381,6 +4161,8 @@ int bus_message_dump(sd_bus_message *m) {
int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz) {
size_t total;
void *p, *e;
+ unsigned i;
+ struct bus_body_part *part;
assert(m);
assert(buffer);
@@ -3392,17 +4174,9 @@ int bus_message_get_blob(sd_bus_message *m, void **buffer, size_t *sz) {
if (!p)
return -ENOMEM;
- e = mempcpy(p, m->header, sizeof(*m->header));
-
- if (m->fields) {
- e = mempcpy(e, m->fields, m->header->fields_size);
-
- if (m->header->fields_size % 8 != 0)
- e = mempset(e, 0, 8 - (m->header->fields_size % 8));
- }
-
- if (m->body)
- e = mempcpy(e, m->body, m->header->body_size);
+ e = mempcpy(p, m->header, BUS_MESSAGE_BODY_BEGIN(m));
+ MESSAGE_FOREACH_PART(part, i, m)
+ e = mempcpy(e, part->data, part->size);
assert(total == (size_t) ((uint8_t*) e - (uint8_t*) p));
@@ -3474,7 +4248,22 @@ const char* bus_message_get_arg(sd_bus_message *m, unsigned i) {
return t;
}
-int bus_header_size(struct bus_header *h, size_t *sum) {
+bool bus_header_is_complete(struct bus_header *h, size_t size) {
+ size_t full;
+
+ assert(h);
+ assert(size);
+
+ if (size < sizeof(struct bus_header))
+ return false;
+
+ full = sizeof(struct bus_header) +
+ (h->endian == SD_BUS_NATIVE_ENDIAN ? h->fields_size : bswap_32(h->fields_size));
+
+ return size >= full;
+}
+
+int bus_header_message_size(struct bus_header *h, size_t *sum) {
size_t fs, bs;
assert(h);
@@ -3492,3 +4281,12 @@ int bus_header_size(struct bus_header *h, size_t *sum) {
*sum = sizeof(struct bus_header) + ALIGN8(fs) + bs;
return 0;
}
+
+int bus_message_to_errno(sd_bus_message *m) {
+ assert(m);
+
+ if (m->header->type != SD_BUS_MESSAGE_TYPE_METHOD_ERROR)
+ return 0;
+
+ return bus_error_to_errno(&m->error);
+}
diff --git a/src/libsystemd-bus/bus-message.h b/src/libsystemd-bus/bus-message.h
index 9c0829c7fa..2fb11ea3b1 100644
--- a/src/libsystemd-bus/bus-message.h
+++ b/src/libsystemd-bus/bus-message.h
@@ -33,11 +33,12 @@
struct bus_container {
char enclosing;
+ unsigned index, saved_index;
+
char *signature;
- unsigned index;
uint32_t *array_size;
- size_t begin;
+ size_t before, begin;
};
struct bus_header {
@@ -50,9 +51,23 @@ struct bus_header {
uint32_t fields_size;
} _packed_;
+struct bus_body_part {
+ struct bus_body_part *next;
+ void *data;
+ size_t size;
+ size_t mapped;
+ int memfd;
+ bool free_this:1;
+ bool munmap_this:1;
+ bool sealed:1;
+ bool is_zero:1;
+};
+
struct sd_bus_message {
unsigned n_ref;
+ sd_bus *bus;
+
uint32_t reply_serial;
const char *path;
@@ -77,19 +92,21 @@ struct sd_bus_message {
bool uid_valid:1;
bool gid_valid:1;
bool free_header:1;
- bool free_fields:1;
- bool free_body:1;
bool free_kdbus:1;
bool free_fds:1;
+ bool release_kdbus:1;
+ bool poisoned:1;
struct bus_header *header;
- void *fields;
- void *body;
- struct kdbus_msg *kdbus;
+ struct bus_body_part body;
+ struct bus_body_part *body_end;
+ unsigned n_body_parts;
char *label;
size_t rindex;
+ struct bus_body_part *cached_rindex_part;
+ size_t cached_rindex_part_begin;
uint32_t n_fds;
int *fds;
@@ -97,9 +114,12 @@ struct sd_bus_message {
struct bus_container root_container, *containers;
unsigned n_containers;
- struct iovec iovec[3];
+ struct iovec *iovec;
+ struct iovec iovec_fixed[2];
unsigned n_iovec;
+ struct kdbus_msg *kdbus;
+
char *peeked_signature;
usec_t timeout;
@@ -159,6 +179,16 @@ static inline uint32_t BUS_MESSAGE_SIZE(sd_bus_message *m) {
BUS_MESSAGE_BODY_SIZE(m);
}
+static inline uint32_t BUS_MESSAGE_BODY_BEGIN(sd_bus_message *m) {
+ return
+ sizeof(struct bus_header) +
+ ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m));
+}
+
+static inline void* BUS_MESSAGE_FIELDS(sd_bus_message *m) {
+ return (uint8_t*) m->header + sizeof(struct bus_header);
+}
+
static inline void bus_message_unrefp(sd_bus_message **m) {
sd_bus_message_unref(*m);
}
@@ -195,4 +225,17 @@ int bus_message_append_ap(sd_bus_message *m, const char *types, va_list ap);
int bus_message_parse_fields(sd_bus_message *m);
-int bus_header_size(struct bus_header *h, size_t *sum);
+bool bus_header_is_complete(struct bus_header *h, size_t size);
+int bus_header_message_size(struct bus_header *h, size_t *sum);
+
+struct bus_body_part *message_append_part(sd_bus_message *m);
+
+#define MESSAGE_FOREACH_PART(part, i, m) \
+ for ((i) = 0, (part) = &(m)->body; (i) < (m)->n_body_parts; (i)++, (part) = (part)->next)
+
+int bus_body_part_map(struct bus_body_part *part);
+void bus_body_part_unmap(struct bus_body_part *part);
+
+int bus_message_to_errno(sd_bus_message *m);
+
+int bus_message_new_synthetic_error(sd_bus *bus, uint64_t serial, const sd_bus_error *e, sd_bus_message **m);
diff --git a/src/libsystemd-bus/bus-socket.c b/src/libsystemd-bus/bus-socket.c
index 8a86b02c68..b60facb20f 100644
--- a/src/libsystemd-bus/bus-socket.c
+++ b/src/libsystemd-bus/bus-socket.c
@@ -58,7 +58,7 @@ static void iovec_advance(struct iovec iov[], unsigned *idx, size_t size) {
}
}
-static void append_iovec(sd_bus_message *m, const void *p, size_t sz) {
+static int append_iovec(sd_bus_message *m, const void *p, size_t sz) {
assert(m);
assert(p);
assert(sz > 0);
@@ -66,22 +66,55 @@ static void append_iovec(sd_bus_message *m, const void *p, size_t sz) {
m->iovec[m->n_iovec].iov_base = (void*) p;
m->iovec[m->n_iovec].iov_len = sz;
m->n_iovec++;
+
+ return 0;
}
-static void bus_message_setup_iovec(sd_bus_message *m) {
+static int bus_message_setup_iovec(sd_bus_message *m) {
+ struct bus_body_part *part;
+ unsigned n, i;
+ int r;
+
assert(m);
assert(m->sealed);
if (m->n_iovec > 0)
- return;
+ return 0;
+
+ assert(!m->iovec);
+
+ n = 1 + m->n_body_parts;
+ if (n < ELEMENTSOF(m->iovec_fixed))
+ m->iovec = m->iovec_fixed;
+ else {
+ m->iovec = new(struct iovec, n);
+ if (!m->iovec) {
+ r = -ENOMEM;
+ goto fail;
+ }
+ }
+
+ r = append_iovec(m, m->header, BUS_MESSAGE_BODY_BEGIN(m));
+ if (r < 0)
+ goto fail;
+
+ MESSAGE_FOREACH_PART(part, i, m) {
+ r = bus_body_part_map(part);
+ if (r < 0)
+ goto fail;
- append_iovec(m, m->header, sizeof(*m->header));
+ r = append_iovec(m, part->data, part->size);
+ if (r < 0)
+ goto fail;
+ }
- if (m->fields)
- append_iovec(m, m->fields, ALIGN8(m->header->fields_size));
+ assert(n == m->n_iovec);
- if (m->body)
- append_iovec(m, m->body, m->header->body_size);
+ return 0;
+
+fail:
+ m->poisoned = true;
+ return r;
}
bool bus_socket_auth_needs_write(sd_bus *b) {
@@ -148,7 +181,7 @@ static int bus_socket_auth_verify_client(sd_bus *b) {
if (!e)
return 0;
- if (b->negotiate_fds) {
+ if (b->hello_flags & KDBUS_HELLO_ACCEPT_FD) {
f = memmem(e + 2, b->rbuffer_size - (e - (char*) b->rbuffer) - 2, "\r\n", 2);
if (!f)
return 0;
@@ -431,7 +464,7 @@ static int bus_socket_auth_verify_server(sd_bus *b) {
r = bus_socket_auth_write_ok(b);
}
} else if (line_equals(line, l, "NEGOTIATE_UNIX_FD")) {
- if (b->auth == _BUS_AUTH_INVALID || !b->negotiate_fds)
+ if (b->auth == _BUS_AUTH_INVALID || !(b->hello_flags & KDBUS_HELLO_ACCEPT_FD))
r = bus_socket_auth_write(b, "ERROR\r\n");
else {
b->can_fds = true;
@@ -577,6 +610,8 @@ static int bus_socket_setup(sd_bus *b) {
* socket, just in case. */
enable = !b->bus_client;
setsockopt(b->input_fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable));
+
+ enable = !b->bus_client && (b->hello_flags & KDBUS_HELLO_ATTACH_SECLABEL);
setsockopt(b->input_fd, SOL_SOCKET, SO_PASSSEC, &enable, sizeof(enable));
/* Increase the buffers to a MB */
@@ -618,7 +653,7 @@ static int bus_socket_start_auth_client(sd_bus *b) {
if (!b->auth_buffer)
return -ENOMEM;
- if (b->negotiate_fds)
+ if (b->hello_flags & KDBUS_HELLO_ACCEPT_FD)
auth_suffix = "\r\nNEGOTIATE_UNIX_FD\r\nBEGIN\r\n";
else
auth_suffix = "\r\nBEGIN\r\n";
@@ -640,11 +675,11 @@ static int bus_socket_start_auth(sd_bus *b) {
b->auth_timeout = now(CLOCK_MONOTONIC) + BUS_DEFAULT_TIMEOUT;
if (sd_is_socket(b->input_fd, AF_UNIX, 0, 0) <= 0)
- b->negotiate_fds = false;
+ b->hello_flags &= ~KDBUS_HELLO_ACCEPT_FD;
if (b->output_fd != b->input_fd)
if (sd_is_socket(b->output_fd, AF_UNIX, 0, 0) <= 0)
- b->negotiate_fds = false;
+ b->hello_flags &= ~KDBUS_HELLO_ACCEPT_FD;
if (b->is_server)
return bus_socket_read_auth(b);
@@ -749,6 +784,7 @@ int bus_socket_write_message(sd_bus *bus, sd_bus_message *m, size_t *idx) {
ssize_t k;
size_t n;
unsigned j;
+ int r;
assert(bus);
assert(m);
@@ -758,7 +794,9 @@ int bus_socket_write_message(sd_bus *bus, sd_bus_message *m, size_t *idx) {
if (*idx >= BUS_MESSAGE_SIZE(m))
return 0;
- bus_message_setup_iovec(m);
+ r = bus_message_setup_iovec(m);
+ if (r < 0)
+ return r;
n = m->n_iovec * sizeof(struct iovec);
iov = alloca(n);
diff --git a/src/libsystemd-bus/bus-type.c b/src/libsystemd-bus/bus-type.c
index 0557328085..6354c84f2c 100644
--- a/src/libsystemd-bus/bus-type.c
+++ b/src/libsystemd-bus/bus-type.c
@@ -92,6 +92,23 @@ bool bus_type_is_basic(char c) {
return !!memchr(valid, c, sizeof(valid));
}
+bool bus_type_is_trivial(char c) {
+ static const char valid[] = {
+ SD_BUS_TYPE_BYTE,
+ SD_BUS_TYPE_BOOLEAN,
+ SD_BUS_TYPE_INT16,
+ SD_BUS_TYPE_UINT16,
+ SD_BUS_TYPE_INT32,
+ SD_BUS_TYPE_UINT32,
+ SD_BUS_TYPE_INT64,
+ SD_BUS_TYPE_UINT64,
+ SD_BUS_TYPE_DOUBLE
+ };
+
+ return !!memchr(valid, c, sizeof(valid));
+}
+
+
bool bus_type_is_container(char c) {
static const char valid[] = {
SD_BUS_TYPE_ARRAY,
diff --git a/src/libsystemd-bus/bus-type.h b/src/libsystemd-bus/bus-type.h
index e261136084..122628c66b 100644
--- a/src/libsystemd-bus/bus-type.h
+++ b/src/libsystemd-bus/bus-type.h
@@ -29,6 +29,7 @@
bool bus_type_is_valid(char c);
bool bus_type_is_valid_in_signature(char c);
bool bus_type_is_basic(char c);
+bool bus_type_is_trivial(char c);
bool bus_type_is_container(char c);
int bus_type_get_alignment(char c);
int bus_type_get_size(char c);
diff --git a/src/libsystemd-bus/kdbus.h b/src/libsystemd-bus/kdbus.h
index db5e243c17..06c2c245f3 100644
--- a/src/libsystemd-bus/kdbus.h
+++ b/src/libsystemd-bus/kdbus.h
@@ -21,6 +21,18 @@
#endif
#define KDBUS_IOC_MAGIC 0x95
+#define KDBUS_SRC_ID_KERNEL (0)
+#define KDBUS_DST_ID_WELL_KNOWN_NAME (0)
+#define KDBUS_MATCH_SRC_ID_ANY (~0ULL)
+#define KDBUS_DST_ID_BROADCAST (~0ULL)
+
+/* Common first elements in a structure which are used to iterate over
+ * a list of elements. */
+#define KDBUS_PART_HEADER \
+ struct { \
+ __u64 size; \
+ __u64 type; \
+ }
/* Message sent from kernel to userspace, when the owner or starter of
* a well-known name changes */
@@ -60,24 +72,35 @@ struct kdbus_timestamp {
__u64 realtime_ns;
};
-#define KDBUS_SRC_ID_KERNEL (0)
-#define KDBUS_DST_ID_WELL_KNOWN_NAME (0)
-#define KDBUS_MATCH_SRC_ID_ANY (~0ULL)
-#define KDBUS_DST_ID_BROADCAST (~0ULL)
+struct kdbus_vec {
+ __u64 size;
+ union {
+ __u64 address;
+ __u64 offset;
+ };
+};
+
+struct kdbus_memfd {
+ __u64 size;
+ int fd;
+ __u32 __pad;
+};
/* Message Item Types */
enum {
- KDBUS_MSG_NULL,
+ _KDBUS_MSG_NULL,
/* Filled in by userspace */
- KDBUS_MSG_PAYLOAD, /* .data, inline memory */
KDBUS_MSG_PAYLOAD_VEC, /* .data_vec, reference to memory area */
- KDBUS_MSG_UNIX_FDS, /* .data_fds of file descriptors */
+ KDBUS_MSG_PAYLOAD_OFF, /* .data_vec, reference to memory area */
+ KDBUS_MSG_PAYLOAD_MEMFD, /* file descriptor of a special data file */
+ KDBUS_MSG_FDS, /* .data_fds of file descriptors */
KDBUS_MSG_BLOOM, /* for broadcasts, carries bloom filter blob in .data */
KDBUS_MSG_DST_NAME, /* destination's well-known name, in .str */
+ KDBUS_MSG_PRIORITY, /* queue priority for message */
/* Filled in by kernelspace */
- KDBUS_MSG_SRC_NAMES = 0x200,/* NUL separated string list with well-known names of source */
+ KDBUS_MSG_SRC_NAMES = 0x400,/* NUL separated string list with well-known names of source */
KDBUS_MSG_TIMESTAMP, /* .timestamp */
KDBUS_MSG_SRC_CREDS, /* .creds */
KDBUS_MSG_SRC_PID_COMM, /* optional, in .str */
@@ -90,7 +113,7 @@ enum {
KDBUS_MSG_SRC_AUDIT, /* .audit */
/* Special messages from kernel, consisting of one and only one of these data blocks */
- KDBUS_MSG_NAME_ADD = 0x400,/* .name_change */
+ KDBUS_MSG_NAME_ADD = 0x800,/* .name_change */
KDBUS_MSG_NAME_REMOVE, /* .name_change */
KDBUS_MSG_NAME_CHANGE, /* .name_change */
KDBUS_MSG_ID_ADD, /* .id_change */
@@ -99,16 +122,6 @@ enum {
KDBUS_MSG_REPLY_DEAD, /* dito */
};
-enum {
- KDBUS_VEC_ALIGNED = 1 << 0,
-};
-
-struct kdbus_vec {
- __u64 address;
- __u64 size;
- __u64 flags;
-};
-
/**
* struct kdbus_item - chain of data blocks
*
@@ -116,8 +129,7 @@ struct kdbus_vec {
* type: kdbus_item type of data
*/
struct kdbus_item {
- __u64 size;
- __u64 type;
+ KDBUS_PART_HEADER;
union {
/* inline data */
__u8 data[0];
@@ -137,6 +149,7 @@ struct kdbus_item {
struct kdbus_timestamp timestamp;
/* specific fields */
+ struct kdbus_memfd memfd;
int fds[0];
struct kdbus_manager_msg_name_change name_change;
struct kdbus_manager_msg_id_change id_change;
@@ -149,7 +162,7 @@ enum {
};
enum {
- KDBUS_PAYLOAD_NULL,
+ KDBUS_PAYLOAD_KERNEL,
KDBUS_PAYLOAD_DBUS1 = 0x4442757356657231ULL, /* 'DBusVer1' */
KDBUS_PAYLOAD_GVARIANT = 0x4756617269616e74ULL, /* 'GVariant' */
};
@@ -180,13 +193,13 @@ struct kdbus_msg {
};
enum {
- KDBUS_POLICY_NULL,
+ _KDBUS_POLICY_NULL,
KDBUS_POLICY_NAME,
KDBUS_POLICY_ACCESS,
};
enum {
- KDBUS_POLICY_ACCESS_NULL,
+ _KDBUS_POLICY_ACCESS_NULL,
KDBUS_POLICY_ACCESS_USER,
KDBUS_POLICY_ACCESS_GROUP,
KDBUS_POLICY_ACCESS_WORLD,
@@ -198,23 +211,25 @@ enum {
KDBUS_POLICY_OWN = 1 << 0,
};
+struct kdbus_policy_access {
+ __u64 type; /* USER, GROUP, WORLD */
+ __u64 bits; /* RECV, SEND, OWN */
+ __u64 id; /* uid, gid, 0 */
+};
+
+//FIXME: convert access to access[]
struct kdbus_policy {
- __u64 size;
- __u64 type; /* NAME or ACCESS */
+ KDBUS_PART_HEADER;
union {
char name[0];
- struct {
- __u32 type; /* USER, GROUP, WORLD */
- __u32 bits; /* RECV, SEND, OWN */
- __u64 id; /* uid, gid, 0 */
- } access;
+ struct kdbus_policy_access access;
};
};
+/* A series of KDBUS_POLICY_NAME, plus one or more KDBUS_POLICY_ACCESS */
struct kdbus_cmd_policy {
__u64 size;
- __u8 buffer[0]; /* a series of KDBUS_POLICY_NAME plus one or
- * more KDBUS_POLICY_ACCESS each. */
+ struct kdbus_policy policies[0];
};
/* Flags for struct kdbus_cmd_hello */
@@ -233,11 +248,6 @@ enum {
KDBUS_HELLO_ATTACH_AUDIT = 1 << 16,
};
-/* Items to append to struct kdbus_cmd_hello */
-enum {
- KDBUS_HELLO_NULL,
-};
-
struct kdbus_cmd_hello {
__u64 size;
@@ -258,6 +268,7 @@ struct kdbus_cmd_hello {
__u64 id; /* id assigned to this connection */
__u64 bloom_size; /* The bloom filter size chosen by the
* bus owner */
+ __u64 pool_size; /* maximum size of pool buffer */
struct kdbus_item items[0];
};
@@ -270,13 +281,11 @@ enum {
/* Items to append to kdbus_cmd_{bus,ep,ns}_make */
enum {
- KDBUS_MAKE_NULL,
+ _KDBUS_MAKE_NULL,
KDBUS_MAKE_NAME,
- KDBUS_MAKE_CGROUP, /* the cgroup hierarchy ID for which to attach
- * cgroup membership paths * to messages. */
KDBUS_MAKE_CRED, /* allow translator services which connect
* to the bus on behalf of somebody else,
- * allow specifying the credentials of the
+ * allow specifiying the credentials of the
* client to connect on behalf on. Needs
* privileges */
};
@@ -293,7 +302,6 @@ struct kdbus_cmd_bus_make {
* KDBUS_CMD_HELLO, later */
__u64 bloom_size; /* size of the bloom filter for this bus */
struct kdbus_item items[0];
-
};
struct kdbus_cmd_ep_make {
@@ -328,10 +336,11 @@ enum {
KDBUS_NAME_IN_QUEUE = 1 << 16,
};
+/* We allow (de)regestration of names of other peers */
struct kdbus_cmd_name {
__u64 size;
- __u64 name_flags;
- __u64 id; /* We allow registration/deregestration of names of other peers */
+ __u64 flags;
+ __u64 id;
__u64 conn_flags;
char name[0];
};
@@ -342,7 +351,7 @@ struct kdbus_cmd_names {
};
enum {
- KDBUS_NAME_INFO_ITEM_NULL,
+ _KDBUS_NAME_INFO_ITEM_NULL,
KDBUS_NAME_INFO_ITEM_NAME, /* userspace → kernel */
KDBUS_NAME_INFO_ITEM_SECLABEL, /* kernel → userspace */
KDBUS_NAME_INFO_ITEM_AUDIT, /* kernel → userspace */
@@ -357,7 +366,7 @@ struct kdbus_cmd_name_info {
};
enum {
- KDBUS_MATCH_NULL,
+ _KDBUS_MATCH_NULL,
KDBUS_MATCH_BLOOM, /* Matches a mask blob against KDBUS_MSG_BLOOM */
KDBUS_MATCH_SRC_NAME, /* Matches a name string against KDBUS_MSG_SRC_NAMES */
KDBUS_MATCH_NAME_ADD, /* Matches a name string against KDBUS_MSG_NAME_ADD */
@@ -377,7 +386,8 @@ struct kdbus_cmd_match {
struct kdbus_cmd_monitor {
__u64 id; /* We allow setting the monitor flag of other peers */
- unsigned int enabled; /* A boolean to enable/disable monitoring */
+ unsigned int enable; /* A boolean to enable/disable monitoring */
+ __u32 __pad;
};
/* FD states:
@@ -390,29 +400,37 @@ struct kdbus_cmd_monitor {
* starter (via KDBUS_CMD_HELLO with KDBUS_CMD_HELLO_STARTER)
* ep owner (via KDBUS_CMD_EP_MAKE)
*/
-enum kdbus_cmd {
+enum {
/* kdbus control node commands: require unset state */
- KDBUS_CMD_BUS_MAKE = _IOWR(KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_bus_make),
- KDBUS_CMD_NS_MAKE = _IOWR(KDBUS_IOC_MAGIC, 0x10, struct kdbus_cmd_ns_make),
+ KDBUS_CMD_BUS_MAKE = _IOW(KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_bus_make),
+ KDBUS_CMD_NS_MAKE = _IOR(KDBUS_IOC_MAGIC, 0x10, struct kdbus_cmd_ns_make),
/* kdbus ep node commands: require unset state */
- KDBUS_CMD_EP_MAKE = _IOWR(KDBUS_IOC_MAGIC, 0x20, struct kdbus_cmd_ep_make),
+ KDBUS_CMD_EP_MAKE = _IOW(KDBUS_IOC_MAGIC, 0x20, struct kdbus_cmd_ep_make),
KDBUS_CMD_HELLO = _IOWR(KDBUS_IOC_MAGIC, 0x30, struct kdbus_cmd_hello),
/* kdbus ep node commands: require connected state */
- KDBUS_CMD_MSG_SEND = _IOWR(KDBUS_IOC_MAGIC, 0x40, struct kdbus_msg),
- KDBUS_CMD_MSG_RECV = _IOWR(KDBUS_IOC_MAGIC, 0x41, struct kdbus_msg),
+ KDBUS_CMD_MSG_SEND = _IOW(KDBUS_IOC_MAGIC, 0x40, struct kdbus_msg),
+ KDBUS_CMD_MSG_RECV = _IOR(KDBUS_IOC_MAGIC, 0x41, __u64 *),
+ KDBUS_CMD_MSG_RELEASE = _IOW(KDBUS_IOC_MAGIC, 0x42, __u64 *),
KDBUS_CMD_NAME_ACQUIRE = _IOWR(KDBUS_IOC_MAGIC, 0x50, struct kdbus_cmd_name),
- KDBUS_CMD_NAME_RELEASE = _IOWR(KDBUS_IOC_MAGIC, 0x51, struct kdbus_cmd_name),
+ KDBUS_CMD_NAME_RELEASE = _IOW(KDBUS_IOC_MAGIC, 0x51, struct kdbus_cmd_name),
KDBUS_CMD_NAME_LIST = _IOWR(KDBUS_IOC_MAGIC, 0x52, struct kdbus_cmd_names),
KDBUS_CMD_NAME_QUERY = _IOWR(KDBUS_IOC_MAGIC, 0x53, struct kdbus_cmd_name_info),
- KDBUS_CMD_MATCH_ADD = _IOWR(KDBUS_IOC_MAGIC, 0x60, struct kdbus_cmd_match),
- KDBUS_CMD_MATCH_REMOVE = _IOWR(KDBUS_IOC_MAGIC, 0x61, struct kdbus_cmd_match),
- KDBUS_CMD_MONITOR = _IOWR(KDBUS_IOC_MAGIC, 0x62, struct kdbus_cmd_monitor),
+ KDBUS_CMD_MATCH_ADD = _IOW(KDBUS_IOC_MAGIC, 0x60, struct kdbus_cmd_match),
+ KDBUS_CMD_MATCH_REMOVE = _IOW(KDBUS_IOC_MAGIC, 0x61, struct kdbus_cmd_match),
+ KDBUS_CMD_MONITOR = _IOW(KDBUS_IOC_MAGIC, 0x62, struct kdbus_cmd_monitor),
/* kdbus ep node commands: require ep owner state */
- KDBUS_CMD_EP_POLICY_SET = _IOWR(KDBUS_IOC_MAGIC, 0x70, struct kdbus_cmd_policy),
+ KDBUS_CMD_EP_POLICY_SET = _IOW(KDBUS_IOC_MAGIC, 0x70, struct kdbus_cmd_policy),
+
+ /* kdbus memfd commands: */
+ KDBUS_CMD_MEMFD_NEW = _IOR(KDBUS_IOC_MAGIC, 0x80, int *),
+ KDBUS_CMD_MEMFD_SIZE_GET = _IOR(KDBUS_IOC_MAGIC, 0x81, __u64 *),
+ KDBUS_CMD_MEMFD_SIZE_SET = _IOW(KDBUS_IOC_MAGIC, 0x82, __u64 *),
+ KDBUS_CMD_MEMFD_SEAL_GET = _IOR(KDBUS_IOC_MAGIC, 0x83, int *),
+ KDBUS_CMD_MEMFD_SEAL_SET = _IO(KDBUS_IOC_MAGIC, 0x84),
};
#endif
diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
index 7d6d848ec5..3f766fb519 100644
--- a/src/libsystemd-bus/sd-bus.c
+++ b/src/libsystemd-bus/sd-bus.c
@@ -26,6 +26,8 @@
#include <netdb.h>
#include <sys/poll.h>
#include <byteswap.h>
+#include <sys/mman.h>
+#include <pthread.h>
#include "util.h"
#include "macro.h"
@@ -43,6 +45,18 @@
static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec);
+static void bus_close_fds(sd_bus *b) {
+ assert(b);
+
+ if (b->input_fd >= 0)
+ close_nointr_nofail(b->input_fd);
+
+ if (b->output_fd >= 0 && b->output_fd != b->input_fd)
+ close_nointr_nofail(b->output_fd);
+
+ b->input_fd = b->output_fd = -1;
+}
+
static void bus_free(sd_bus *b) {
struct filter_callback *f;
struct object_callback *c;
@@ -50,7 +64,10 @@ static void bus_free(sd_bus *b) {
assert(b);
- sd_bus_close(b);
+ bus_close_fds(b);
+
+ if (b->kdbus_buffer)
+ munmap(b->kdbus_buffer, KDBUS_POOL_SIZE);
free(b->rbuffer);
free(b->unique_name);
@@ -86,9 +103,12 @@ static void bus_free(sd_bus *b) {
}
hashmap_free(b->object_callbacks);
-
bus_match_free(&b->match_callbacks);
+ bus_kernel_flush_memfd(b);
+
+ assert_se(pthread_mutex_destroy(&b->memfd_cache_mutex) == 0);
+
free(b);
}
@@ -102,10 +122,13 @@ int sd_bus_new(sd_bus **ret) {
if (!r)
return -ENOMEM;
- r->n_ref = 1;
+ r->n_ref = REFCNT_INIT;
r->input_fd = r->output_fd = -1;
r->message_version = 1;
- r->negotiate_fds = true;
+ r->hello_flags |= KDBUS_HELLO_ACCEPT_FD;
+ r->original_pid = getpid();
+
+ assert_se(pthread_mutex_init(&r->memfd_cache_mutex, NULL) == 0);
/* We guarantee that wqueue always has space for at least one
* entry */
@@ -128,6 +151,8 @@ int sd_bus_set_address(sd_bus *bus, const char *address) {
return -EPERM;
if (!address)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
a = strdup(address);
if (!a)
@@ -148,6 +173,8 @@ int sd_bus_set_fd(sd_bus *bus, int input_fd, int output_fd) {
return -EINVAL;
if (output_fd < 0)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
bus->input_fd = input_fd;
bus->output_fd = output_fd;
@@ -165,6 +192,8 @@ int sd_bus_set_exec(sd_bus *bus, const char *path, char *const argv[]) {
return -EINVAL;
if (strv_isempty(argv))
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
p = strdup(path);
if (!p)
@@ -190,18 +219,106 @@ int sd_bus_set_bus_client(sd_bus *bus, int b) {
return -EINVAL;
if (bus->state != BUS_UNSET)
return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
bus->bus_client = !!b;
return 0;
}
-int sd_bus_set_negotiate_fds(sd_bus *bus, int b) {
+int sd_bus_negotiate_fds(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ACCEPT_FD, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_comm(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_COMM, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_exe(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_EXE, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_cmdline(sd_bus *bus, int b) {
if (!bus)
return -EINVAL;
if (bus->state != BUS_UNSET)
return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
- bus->negotiate_fds = !!b;
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CMDLINE, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_cgroup(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CGROUP, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_caps(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CAPS, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_selinux_context(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_SECLABEL, b);
+ return 0;
+}
+
+int sd_bus_negotiate_attach_audit(sd_bus *bus, int b) {
+ if (!bus)
+ return -EINVAL;
+ if (bus->state != BUS_UNSET)
+ return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_AUDIT, b);
return 0;
}
@@ -212,6 +329,8 @@ int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id) {
return -EINVAL;
if (bus->state != BUS_UNSET)
return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
bus->is_server = !!b;
bus->server_id = server_id;
@@ -223,23 +342,25 @@ int sd_bus_set_anonymous(sd_bus *bus, int b) {
return -EINVAL;
if (bus->state != BUS_UNSET)
return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
bus->anonymous_auth = !!b;
return 0;
}
-static int hello_callback(sd_bus *bus, int error, sd_bus_message *reply, void *userdata) {
+static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata) {
const char *s;
int r;
assert(bus);
assert(bus->state == BUS_HELLO);
-
- if (error != 0)
- return -error;
-
assert(reply);
+ r = bus_message_to_errno(reply);
+ if (r < 0)
+ return r;
+
r = sd_bus_message_read(reply, "s", &s);
if (r < 0)
return r;
@@ -811,6 +932,8 @@ int sd_bus_start(sd_bus *bus) {
return -EINVAL;
if (bus->state != BUS_UNSET)
return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
bus->state = BUS_OPENING;
@@ -920,22 +1043,29 @@ fail:
void sd_bus_close(sd_bus *bus) {
if (!bus)
return;
+ if (bus->state == BUS_CLOSED)
+ return;
+ if (bus_pid_changed(bus))
+ return;
- if (bus->input_fd >= 0)
- close_nointr_nofail(bus->input_fd);
- if (bus->output_fd >= 0 && bus->output_fd != bus->input_fd)
- close_nointr_nofail(bus->output_fd);
+ bus->state = BUS_CLOSED;
- bus->input_fd = bus->output_fd = -1;
+ if (!bus->is_kernel)
+ bus_close_fds(bus);
+
+ /* We'll leave the fd open in case this is a kernel bus, since
+ * there might still be memblocks around that reference this
+ * bus, and they might need to invoke the
+ * KDBUS_CMD_MSG_RELEASE ioctl on the fd when they are
+ * freed. */
}
sd_bus *sd_bus_ref(sd_bus *bus) {
if (!bus)
return NULL;
- assert(bus->n_ref > 0);
+ assert_se(REFCNT_INC(bus->n_ref) >= 2);
- bus->n_ref++;
return bus;
}
@@ -943,10 +1073,7 @@ sd_bus *sd_bus_unref(sd_bus *bus) {
if (!bus)
return NULL;
- assert(bus->n_ref > 0);
- bus->n_ref--;
-
- if (bus->n_ref <= 0)
+ if (REFCNT_DEC(bus->n_ref) <= 0)
bus_free(bus);
return NULL;
@@ -955,8 +1082,10 @@ sd_bus *sd_bus_unref(sd_bus *bus) {
int sd_bus_is_open(sd_bus *bus) {
if (!bus)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
- return bus->state != BUS_UNSET && bus->input_fd >= 0;
+ return BUS_IS_OPEN(bus->state);
}
int sd_bus_can_send(sd_bus *bus, char type) {
@@ -964,11 +1093,13 @@ int sd_bus_can_send(sd_bus *bus, char type) {
if (!bus)
return -EINVAL;
- if (bus->output_fd < 0)
+ if (bus->state == BUS_UNSET)
return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (type == SD_BUS_TYPE_UNIX_FD) {
- if (!bus->negotiate_fds)
+ if (!(bus->hello_flags & KDBUS_HELLO_ACCEPT_FD))
return 0;
r = bus_ensure_running(bus);
@@ -988,6 +1119,8 @@ int sd_bus_get_server_id(sd_bus *bus, sd_id128_t *server_id) {
return -EINVAL;
if (!server_id)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = bus_ensure_running(bus);
if (r < 0)
@@ -1015,9 +1148,6 @@ static int dispatch_wqueue(sd_bus *bus) {
assert(bus);
assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
- if (bus->output_fd < 0)
- return -ENOTCONN;
-
while (bus->wqueue_size > 0) {
if (bus->is_kernel)
@@ -1062,9 +1192,6 @@ static int dispatch_rqueue(sd_bus *bus, sd_bus_message **m) {
assert(m);
assert(bus->state == BUS_RUNNING || bus->state == BUS_HELLO);
- if (bus->input_fd < 0)
- return -ENOTCONN;
-
if (bus->rqueue_size > 0) {
/* Dispatch a queued message */
@@ -1100,12 +1227,12 @@ int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) {
if (!bus)
return -EINVAL;
- if (bus->state == BUS_UNSET)
- return -ENOTCONN;
- if (bus->output_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
if (!m)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (m->n_fds > 0) {
r = sd_bus_can_send(bus, SD_BUS_TYPE_UNIX_FD);
@@ -1213,9 +1340,7 @@ int sd_bus_send_with_reply(
if (!bus)
return -EINVAL;
- if (bus->state == BUS_UNSET)
- return -ENOTCONN;
- if (bus->output_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
if (!m)
return -EINVAL;
@@ -1225,6 +1350,8 @@ int sd_bus_send_with_reply(
return -EINVAL;
if (m->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = hashmap_ensure_allocated(&bus->reply_callbacks, uint64_hash_func, uint64_compare_func);
if (r < 0)
@@ -1280,6 +1407,8 @@ int sd_bus_send_with_reply_cancel(sd_bus *bus, uint64_t serial) {
return -EINVAL;
if (serial == 0)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
c = hashmap_remove(bus->reply_callbacks, &serial);
if (!c)
@@ -1297,11 +1426,8 @@ int bus_ensure_running(sd_bus *bus) {
assert(bus);
- if (bus->input_fd < 0)
- return -ENOTCONN;
- if (bus->state == BUS_UNSET)
+ if (bus->state == BUS_UNSET || bus->state == BUS_CLOSED)
return -ENOTCONN;
-
if (bus->state == BUS_RUNNING)
return 1;
@@ -1334,9 +1460,7 @@ int sd_bus_send_with_reply_and_block(
if (!bus)
return -EINVAL;
- if (bus->output_fd < 0)
- return -ENOTCONN;
- if (bus->state == BUS_UNSET)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
if (!m)
return -EINVAL;
@@ -1346,6 +1470,8 @@ int sd_bus_send_with_reply_and_block(
return -EINVAL;
if (bus_error_is_dirty(error))
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = bus_ensure_running(bus);
if (r < 0)
@@ -1452,10 +1578,12 @@ int sd_bus_send_with_reply_and_block(
int sd_bus_get_fd(sd_bus *bus) {
if (!bus)
return -EINVAL;
- if (bus->input_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
if (bus->input_fd != bus->output_fd)
return -EPERM;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
return bus->input_fd;
}
@@ -1465,10 +1593,10 @@ int sd_bus_get_events(sd_bus *bus) {
if (!bus)
return -EINVAL;
- if (bus->state == BUS_UNSET)
- return -ENOTCONN;
- if (bus->input_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (bus->state == BUS_OPENING)
flags |= POLLOUT;
@@ -1496,10 +1624,10 @@ int sd_bus_get_timeout(sd_bus *bus, uint64_t *timeout_usec) {
return -EINVAL;
if (!timeout_usec)
return -EINVAL;
- if (bus->state == BUS_UNSET)
- return -ENOTCONN;
- if (bus->input_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (bus->state == BUS_AUTHENTICATING) {
*timeout_usec = bus->auth_timeout;
@@ -1522,6 +1650,7 @@ int sd_bus_get_timeout(sd_bus *bus, uint64_t *timeout_usec) {
}
static int process_timeout(sd_bus *bus) {
+ _cleanup_bus_message_unref_ sd_bus_message* m = NULL;
struct reply_callback *c;
usec_t n;
int r;
@@ -1536,10 +1665,18 @@ static int process_timeout(sd_bus *bus) {
if (c->timeout > n)
return 0;
+ r = bus_message_new_synthetic_error(
+ bus,
+ c->serial,
+ &SD_BUS_ERROR_MAKE("org.freedesktop.DBus.Error.Timeout", "Timed out"),
+ &m);
+ if (r < 0)
+ return r;
+
assert_se(prioq_pop(bus->reply_callbacks_prioq) == c);
hashmap_remove(bus->reply_callbacks, &c->serial);
- r = c->callback(bus, ETIMEDOUT, NULL, c->userdata);
+ r = c->callback(bus, m, c->userdata);
free(c);
return r < 0 ? r : 1;
@@ -1589,7 +1726,7 @@ static int process_reply(sd_bus *bus, sd_bus_message *m) {
if (r < 0)
return r;
- r = c->callback(bus, 0, m, c->userdata);
+ r = c->callback(bus, m, c->userdata);
free(c);
return r;
@@ -1620,7 +1757,7 @@ static int process_filter(sd_bus *bus, sd_bus_message *m) {
if (r < 0)
return r;
- r = l->callback(bus, 0, m, l->userdata);
+ r = l->callback(bus, m, l->userdata);
if (r != 0)
return r;
@@ -1640,7 +1777,7 @@ static int process_match(sd_bus *bus, sd_bus_message *m) {
do {
bus->match_callbacks_modified = false;
- r = bus_match_run(bus, &bus->match_callbacks, 0, m);
+ r = bus_match_run(bus, &bus->match_callbacks, m);
if (r != 0)
return r;
@@ -1733,7 +1870,7 @@ static int process_object(sd_bus *bus, sd_bus_message *m) {
if (r < 0)
return r;
- r = c->callback(bus, 0, m, c->userdata);
+ r = c->callback(bus, m, c->userdata);
if (r != 0)
return r;
@@ -1763,7 +1900,7 @@ static int process_object(sd_bus *bus, sd_bus_message *m) {
if (r < 0)
return r;
- r = c->callback(bus, 0, m, c->userdata);
+ r = c->callback(bus, m, c->userdata);
if (r != 0)
return r;
@@ -1986,8 +2123,8 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
if (!bus)
return -EINVAL;
- if (bus->input_fd < 0)
- return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
/* We don't allow recursively invoking sd_bus_process(). */
if (bus->processing)
@@ -1996,6 +2133,7 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
switch (bus->state) {
case BUS_UNSET:
+ case BUS_CLOSED:
return -ENOTCONN;
case BUS_OPENING:
@@ -2036,7 +2174,7 @@ static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec) {
assert(bus);
- if (bus->input_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
e = sd_bus_get_events(bus);
@@ -2082,10 +2220,11 @@ int sd_bus_wait(sd_bus *bus, uint64_t timeout_usec) {
if (!bus)
return -EINVAL;
- if (bus->state == BUS_UNSET)
- return -ENOTCONN;
- if (bus->input_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
if (bus->rqueue_size > 0)
return 0;
@@ -2097,10 +2236,10 @@ int sd_bus_flush(sd_bus *bus) {
if (!bus)
return -EINVAL;
- if (bus->state == BUS_UNSET)
- return -ENOTCONN;
- if (bus->output_fd < 0)
+ if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = bus_ensure_running(bus);
if (r < 0)
@@ -2130,6 +2269,8 @@ int sd_bus_add_filter(sd_bus *bus, sd_bus_message_handler_t callback, void *user
return -EINVAL;
if (!callback)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
f = new0(struct filter_callback, 1);
if (!f)
@@ -2149,6 +2290,8 @@ int sd_bus_remove_filter(sd_bus *bus, sd_bus_message_handler_t callback, void *u
return -EINVAL;
if (!callback)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
LIST_FOREACH(callbacks, f, bus->filter_callbacks) {
if (f->callback == callback && f->userdata == userdata) {
@@ -2178,6 +2321,8 @@ static int bus_add_object(
return -EINVAL;
if (!callback)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = hashmap_ensure_allocated(&bus->object_callbacks, string_hash_func, string_compare_func);
if (r < 0)
@@ -2223,6 +2368,8 @@ static int bus_remove_object(
return -EINVAL;
if (!callback)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
c = hashmap_get(bus->object_callbacks, path);
if (!c)
@@ -2257,51 +2404,68 @@ int sd_bus_remove_fallback(sd_bus *bus, const char *prefix, sd_bus_message_handl
}
int sd_bus_add_match(sd_bus *bus, const char *match, sd_bus_message_handler_t callback, void *userdata) {
+ struct bus_match_component *components = NULL;
+ unsigned n_components = 0;
+ uint64_t cookie = 0;
int r = 0;
if (!bus)
return -EINVAL;
if (!match)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ r = bus_match_parse(match, &components, &n_components);
+ if (r < 0)
+ goto finish;
if (bus->bus_client) {
- r = bus_add_match_internal(bus, match);
+ cookie = ++bus->match_cookie;
+
+ r = bus_add_match_internal(bus, match, components, n_components, cookie);
if (r < 0)
- return r;
+ goto finish;
}
- if (callback) {
- bus->match_callbacks_modified = true;
- r = bus_match_add(&bus->match_callbacks, match, callback, userdata, NULL);
- if (r < 0) {
-
- if (bus->bus_client)
- bus_remove_match_internal(bus, match);
- }
+ bus->match_callbacks_modified = true;
+ r = bus_match_add(&bus->match_callbacks, components, n_components, callback, userdata, cookie, NULL);
+ if (r < 0) {
+ if (bus->bus_client)
+ bus_remove_match_internal(bus, match, cookie);
}
+finish:
+ bus_match_parse_free(components, n_components);
return r;
}
int sd_bus_remove_match(sd_bus *bus, const char *match, sd_bus_message_handler_t callback, void *userdata) {
+ struct bus_match_component *components = NULL;
+ unsigned n_components = 0;
int r = 0, q = 0;
+ uint64_t cookie = 0;
if (!bus)
return -EINVAL;
if (!match)
return -EINVAL;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
+
+ r = bus_match_parse(match, &components, &n_components);
+ if (r < 0)
+ return r;
+
+ bus->match_callbacks_modified = true;
+ r = bus_match_remove(&bus->match_callbacks, components, n_components, callback, userdata, &cookie);
if (bus->bus_client)
- r = bus_remove_match_internal(bus, match);
+ q = bus_remove_match_internal(bus, match, cookie);
- if (callback) {
- bus->match_callbacks_modified = true;
- q = bus_match_remove(&bus->match_callbacks, match, callback, userdata);
- }
+ bus_match_parse_free(components, n_components);
- if (r < 0)
- return r;
- return q;
+ return r < 0 ? r : q;
}
int sd_bus_emit_signal(
@@ -2317,6 +2481,10 @@ int sd_bus_emit_signal(
if (!bus)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = sd_bus_message_new_signal(bus, path, interface, member, &m);
if (r < 0)
@@ -2346,7 +2514,12 @@ int sd_bus_call_method(
int r;
if (!bus)
+
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
r = sd_bus_message_new_method_call(bus, destination, path, interface, member, &m);
if (r < 0)
@@ -2378,6 +2551,10 @@ int sd_bus_reply_method_return(
return -EPERM;
if (call->header->type != SD_BUS_MESSAGE_TYPE_METHOD_CALL)
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0;
@@ -2413,6 +2590,10 @@ int sd_bus_reply_method_error(
return -EINVAL;
if (!sd_bus_error_is_set(e))
return -EINVAL;
+ if (!BUS_IS_OPEN(bus->state))
+ return -ENOTCONN;
+ if (bus_pid_changed(bus))
+ return -ECHILD;
if (call->header->flags & SD_BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0;
@@ -2423,3 +2604,12 @@ int sd_bus_reply_method_error(
return sd_bus_send(bus, m, NULL);
}
+
+bool bus_pid_changed(sd_bus *bus) {
+ assert(bus);
+
+ /* We don't support people creating a bus connection and
+ * keeping it around over a fork(). Let's complain. */
+
+ return bus->original_pid != getpid();
+}
diff --git a/src/libsystemd-bus/sd-memfd.c b/src/libsystemd-bus/sd-memfd.c
new file mode 100644
index 0000000000..bd14da3a70
--- /dev/null
+++ b/src/libsystemd-bus/sd-memfd.c
@@ -0,0 +1,231 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+
+#include "util.h"
+#include "kdbus.h"
+
+#include "sd-memfd.h"
+
+struct sd_memfd {
+ int fd;
+ FILE *f;
+};
+
+int sd_memfd_new(sd_memfd **m) {
+ _cleanup_close_ int kdbus = -1;
+ sd_memfd *n;
+ int fd;
+
+ if (!m)
+ return -EINVAL;
+
+ kdbus = open("/dev/kdbus/control", O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (kdbus < 0)
+ return -errno;
+
+ if (ioctl(kdbus, KDBUS_CMD_MEMFD_NEW, &fd) < 0)
+ return -errno;
+
+ n = new0(struct sd_memfd, 1);
+ if (!n)
+ return -ENOMEM;
+
+ n->fd = fd;
+ *m = n;
+ return 0;
+}
+
+int sd_memfd_make(int fd, sd_memfd **m) {
+ sd_memfd *n;
+ uint64_t sz;
+
+ if (!m)
+ return -EINVAL;
+ if (fd < 0)
+ return -EINVAL;
+
+ /* Check if this is a valid memfd */
+ if (ioctl(fd, KDBUS_CMD_MEMFD_SIZE_GET, &sz) < 0)
+ return -ENOTTY;
+
+ n = new0(struct sd_memfd, 1);
+ if (!n)
+ return -ENOMEM;
+
+ n->fd = fd;
+ *m = n;
+
+ return 0;
+}
+
+void sd_memfd_free(sd_memfd *m) {
+ if (!m)
+ return;
+
+ if (m->f)
+ fclose(m->f);
+ else
+ close_nointr_nofail(m->fd);
+
+ free(m);
+}
+
+int sd_memfd_get_fd(sd_memfd *m) {
+ if (!m)
+ return -EINVAL;
+
+ return m->fd;
+}
+
+int sd_memfd_get_file(sd_memfd *m, FILE **f) {
+ if (!m)
+ return -EINVAL;
+ if (!f)
+ return -EINVAL;
+
+ if (!m->f) {
+ m->f = fdopen(m->fd, "r+");
+ if (!m->f)
+ return -errno;
+ }
+
+ *f = m->f;
+ return 0;
+}
+
+int sd_memfd_dup_fd(sd_memfd *m) {
+ int fd;
+
+ if (!m)
+ return -EINVAL;
+
+ fd = fcntl(m->fd, F_DUPFD_CLOEXEC, 3);
+ if (fd < 0)
+ return -errno;
+
+ return fd;
+}
+
+int sd_memfd_map(sd_memfd *m, uint64_t offset, size_t size, void **p) {
+ void *q;
+ int sealed;
+
+ if (!m)
+ return -EINVAL;
+ if (size <= 0)
+ return -EINVAL;
+ if (!p)
+ return -EINVAL;
+
+ sealed = sd_memfd_get_sealed(m);
+ if (sealed < 0)
+ return sealed;
+
+ q = mmap(NULL, size, sealed ? PROT_READ : PROT_READ|PROT_WRITE, MAP_SHARED, m->fd, offset);
+ if (q == MAP_FAILED)
+ return -errno;
+
+ *p = q;
+ return 0;
+}
+
+int sd_memfd_set_sealed(sd_memfd *m, int b) {
+ int r;
+
+ if (!m)
+ return -EINVAL;
+
+ r = ioctl(m->fd, KDBUS_CMD_MEMFD_SEAL_SET, b);
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+int sd_memfd_get_sealed(sd_memfd *m) {
+ int r, b;
+
+ if (!m)
+ return -EINVAL;
+
+ r = ioctl(m->fd, KDBUS_CMD_MEMFD_SEAL_GET, &b);
+ if (r < 0)
+ return -errno;
+
+ return !!b;
+}
+
+int sd_memfd_get_size(sd_memfd *m, uint64_t *sz) {
+ int r;
+
+ if (!m)
+ return -EINVAL;
+ if (!sz)
+ return -EINVAL;
+
+ r = ioctl(m->fd, KDBUS_CMD_MEMFD_SIZE_GET, sz);
+ if (r < 0)
+ return -errno;
+
+ return r;
+}
+
+int sd_memfd_set_size(sd_memfd *m, uint64_t sz) {
+ int r;
+
+ if (!m)
+ return -EINVAL;
+
+ r = ioctl(m->fd, KDBUS_CMD_MEMFD_SIZE_SET, &sz);
+ if (r < 0)
+ return -errno;
+
+ return r;
+}
+
+int sd_memfd_new_and_map(sd_memfd **m, size_t sz, void **p) {
+ sd_memfd *n;
+ int r;
+
+ r = sd_memfd_new(&n);
+ if (r < 0)
+ return r;
+
+ r = sd_memfd_set_size(n, sz);
+ if (r < 0) {
+ sd_memfd_free(n);
+ return r;
+ }
+
+ r = sd_memfd_map(n, 0, sz, p);
+ if (r < 0) {
+ sd_memfd_free(n);
+ return r;
+ }
+
+ *m = n;
+ return 0;
+}
diff --git a/src/libsystemd-bus/test-bus-chat.c b/src/libsystemd-bus/test-bus-chat.c
index f457c8f88a..f308eddbb0 100644
--- a/src/libsystemd-bus/test-bus-chat.c
+++ b/src/libsystemd-bus/test-bus-chat.c
@@ -35,17 +35,17 @@
#include "bus-match.h"
#include "bus-internal.h"
-static int match_callback(sd_bus *bus, int error, sd_bus_message *m, void *userdata) {
+static int match_callback(sd_bus *bus, sd_bus_message *m, void *userdata) {
log_info("Match triggered! interface=%s member=%s", strna(sd_bus_message_get_interface(m)), strna(sd_bus_message_get_member(m)));
return 0;
}
-static int object_callback(sd_bus *bus, int error, sd_bus_message *m, void *userdata) {
+static int object_callback(sd_bus *bus, sd_bus_message *m, void *userdata) {
int r;
assert(bus);
- if (error != 0)
+ if (sd_bus_message_is_method_error(m, NULL))
return 0;
if (sd_bus_message_is_method_call(m, "org.object.test", "Foobar")) {
@@ -356,10 +356,10 @@ finish:
return INT_TO_PTR(r);
}
-static int quit_callback(sd_bus *b, int ret, sd_bus_message *m, void *userdata) {
+static int quit_callback(sd_bus *b, sd_bus_message *m, void *userdata) {
bool *x = userdata;
- log_error("Quit callback: %s", strerror(ret));
+ log_error("Quit callback: %s", strerror(bus_message_to_errno(m)));
*x = 1;
return 1;
diff --git a/src/libsystemd-bus/test-bus-kernel-benchmark.c b/src/libsystemd-bus/test-bus-kernel-benchmark.c
new file mode 100644
index 0000000000..2e84cd9244
--- /dev/null
+++ b/src/libsystemd-bus/test-bus-kernel-benchmark.c
@@ -0,0 +1,302 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <ctype.h>
+#include <sys/wait.h>
+
+#include "util.h"
+#include "log.h"
+#include "time-util.h"
+
+#include "sd-bus.h"
+#include "bus-message.h"
+#include "bus-error.h"
+#include "bus-kernel.h"
+#include "bus-internal.h"
+
+#define MAX_SIZE (4*1024*1024)
+
+static usec_t arg_loop_usec = 100 * USEC_PER_MSEC;
+
+static void server(sd_bus *b, size_t *result) {
+ int r;
+
+ for (;;) {
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
+
+ r = sd_bus_process(b, &m);
+ assert_se(r >= 0);
+
+ if (r == 0)
+ assert_se(sd_bus_wait(b, (usec_t) -1) >= 0);
+ if (!m)
+ continue;
+
+ if (sd_bus_message_is_method_call(m, "benchmark.server", "Ping"))
+ assert_se(sd_bus_reply_method_return(b, m, NULL) >= 0);
+ else if (sd_bus_message_is_method_call(m, "benchmark.server", "Work")) {
+ const void *p;
+ size_t sz;
+
+ /* Make sure the mmap is mapped */
+ assert_se(sd_bus_message_read_array(m, 'y', &p, &sz) > 0);
+
+ assert_se(sd_bus_reply_method_return(b, m, NULL) >= 0);
+ } else if (sd_bus_message_is_method_call(m, "benchmark.server", "Exit")) {
+ uint64_t res;
+ assert_se(sd_bus_message_read(m, "t", &res) > 0);
+
+ *result = res;
+ return;
+
+ } else
+ assert_not_reached("Unknown method");
+ }
+}
+
+static void transaction(sd_bus *b, size_t sz) {
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
+ uint8_t *p;
+
+ assert_se(sd_bus_message_new_method_call(b, ":1.1", "/", "benchmark.server", "Work", &m) >= 0);
+ assert_se(sd_bus_message_append_array_space(m, 'y', sz, (void**) &p) >= 0);
+
+ memset(p, 0x80, sz);
+
+ assert_se(sd_bus_send_with_reply_and_block(b, m, 0, NULL, &reply) >= 0);
+}
+
+static void client_bisect(const char *address) {
+ _cleanup_bus_message_unref_ sd_bus_message *x = NULL;
+ size_t lsize, rsize, csize;
+ sd_bus *b;
+ int r;
+
+ r = sd_bus_new(&b);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(b, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(b);
+ assert_se(r >= 0);
+
+ assert_se(sd_bus_call_method(b, ":1.1", "/", "benchmark.server", "Ping", NULL, NULL, NULL) >= 0);
+
+ lsize = 1;
+ rsize = MAX_SIZE;
+
+ printf("SIZE\tCOPY\tMEMFD\n");
+
+ for (;;) {
+ usec_t t;
+ unsigned n_copying, n_memfd;
+
+ csize = (lsize + rsize) / 2;
+
+ if (csize <= lsize)
+ break;
+
+ if (csize <= 0)
+ break;
+
+ printf("%zu\t", csize);
+
+ b->use_memfd = 0;
+
+ t = now(CLOCK_MONOTONIC);
+ for (n_copying = 0;; n_copying++) {
+ transaction(b, csize);
+ if (now(CLOCK_MONOTONIC) >= t + arg_loop_usec)
+ break;
+ }
+ printf("%u\t", (unsigned) ((n_copying * USEC_PER_SEC) / arg_loop_usec));
+
+ b->use_memfd = -1;
+
+ t = now(CLOCK_MONOTONIC);
+ for (n_memfd = 0;; n_memfd++) {
+ transaction(b, csize);
+ if (now(CLOCK_MONOTONIC) >= t + arg_loop_usec)
+ break;
+ }
+ printf("%u\n", (unsigned) ((n_memfd * USEC_PER_SEC) / arg_loop_usec));
+
+ if (n_copying == n_memfd)
+ break;
+
+ if (n_copying > n_memfd)
+ lsize = csize;
+ else
+ rsize = csize;
+ }
+
+ b->use_memfd = 1;
+ assert_se(sd_bus_message_new_method_call(b, ":1.1", "/", "benchmark.server", "Exit", &x) >= 0);
+ assert_se(sd_bus_message_append(x, "t", csize) >= 0);
+ assert_se(sd_bus_send(b, x, NULL) >= 0);
+
+ sd_bus_unref(b);
+}
+
+static void client_chart(const char *address) {
+ _cleanup_bus_message_unref_ sd_bus_message *x = NULL;
+ size_t csize;
+ sd_bus *b;
+ int r;
+
+ r = sd_bus_new(&b);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(b, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(b);
+ assert_se(r >= 0);
+
+ assert_se(sd_bus_call_method(b, ":1.1", "/", "benchmark.server", "Ping", NULL, NULL, NULL) >= 0);
+
+ printf("SIZE\tCOPY\tMEMFD\n");
+
+ for (csize = 1; csize <= MAX_SIZE; csize *= 2) {
+ usec_t t;
+ unsigned n_copying, n_memfd;
+
+ printf("%zu\t", csize);
+
+ b->use_memfd = 0;
+
+ t = now(CLOCK_MONOTONIC);
+ for (n_copying = 0;; n_copying++) {
+ transaction(b, csize);
+ if (now(CLOCK_MONOTONIC) >= t + arg_loop_usec)
+ break;
+ }
+
+ printf("%u\t", (unsigned) ((n_copying * USEC_PER_SEC) / arg_loop_usec));
+
+ b->use_memfd = -1;
+
+ t = now(CLOCK_MONOTONIC);
+ for (n_memfd = 0;; n_memfd++) {
+ transaction(b, csize);
+ if (now(CLOCK_MONOTONIC) >= t + arg_loop_usec)
+ break;
+ }
+
+ printf("%u\n", (unsigned) ((n_memfd * USEC_PER_SEC) / arg_loop_usec));
+ }
+
+ b->use_memfd = 1;
+ assert_se(sd_bus_message_new_method_call(b, ":1.1", "/", "benchmark.server", "Exit", &x) >= 0);
+ assert_se(sd_bus_message_append(x, "t", csize) >= 0);
+ assert_se(sd_bus_send(b, x, NULL) >= 0);
+
+ sd_bus_unref(b);
+}
+
+int main(int argc, char *argv[]) {
+ enum {
+ MODE_BISECT,
+ MODE_CHART,
+ } mode = MODE_BISECT;
+ int i;
+ _cleanup_free_ char *bus_name = NULL, *address = NULL;
+ _cleanup_close_ int bus_ref = -1;
+ cpu_set_t cpuset;
+ size_t result;
+ sd_bus *b;
+ pid_t pid;
+ int r;
+
+ log_set_max_level(LOG_DEBUG);
+
+ for (i = 1; i < argc; i++) {
+ if (streq(argv[i], "chart")) {
+ mode = MODE_CHART;
+ continue;
+ }
+
+ assert_se(parse_sec(argv[i], &arg_loop_usec) >= 0);
+ }
+
+ assert_se(arg_loop_usec > 0);
+
+ bus_ref = bus_kernel_create("deine-mutter", &bus_name);
+ if (bus_ref == -ENOENT)
+ exit(EXIT_TEST_SKIP);
+
+ assert_se(bus_ref >= 0);
+
+ address = strappend("kernel:path=", bus_name);
+ assert_se(address);
+
+ r = sd_bus_new(&b);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(b, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(b);
+ assert_se(r >= 0);
+
+ sync();
+ setpriority(PRIO_PROCESS, 0, -19);
+
+ pid = fork();
+ assert_se(pid >= 0);
+
+ if (pid == 0) {
+ CPU_ZERO(&cpuset);
+ CPU_SET(0, &cpuset);
+ pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+
+ close_nointr_nofail(bus_ref);
+ sd_bus_unref(b);
+
+ switch (mode) {
+ case MODE_BISECT:
+ client_bisect(address);
+ break;
+
+ case MODE_CHART:
+ client_chart(address);
+ break;
+ }
+
+ _exit(0);
+ }
+
+ CPU_ZERO(&cpuset);
+ CPU_SET(1, &cpuset);
+ pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+
+ server(b, &result);
+
+ if (mode == MODE_BISECT)
+ printf("Copying/memfd are equally fast at %zu bytes\n", result);
+
+ assert_se(waitpid(pid, NULL, 0) == pid);
+
+ sd_bus_unref(b);
+
+ return 0;
+}
diff --git a/src/libsystemd-bus/test-bus-kernel-bloom.c b/src/libsystemd-bus/test-bus-kernel-bloom.c
new file mode 100644
index 0000000000..5445d3488f
--- /dev/null
+++ b/src/libsystemd-bus/test-bus-kernel-bloom.c
@@ -0,0 +1,112 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "util.h"
+#include "log.h"
+
+#include "sd-bus.h"
+#include "bus-message.h"
+#include "bus-error.h"
+#include "bus-kernel.h"
+
+static void test_one(
+ const char *path,
+ const char *interface,
+ const char *member,
+ const char *arg0,
+ const char *match,
+ bool good) {
+
+ _cleanup_close_ int bus_ref = -1;
+ _cleanup_free_ char *bus_name = NULL, *address = NULL;
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
+ sd_bus *a, *b;
+ int r;
+
+ bus_ref = bus_kernel_create("deine-mutter", &bus_name);
+ if (bus_ref == -ENOENT)
+ exit(EXIT_TEST_SKIP);
+
+ assert_se(bus_ref >= 0);
+
+ address = strappend("kernel:path=", bus_name);
+ assert_se(address);
+
+ r = sd_bus_new(&a);
+ assert_se(r >= 0);
+
+ r = sd_bus_new(&b);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(a, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(b, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(a);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(b);
+ assert_se(r >= 0);
+
+ log_debug("match");
+ r = sd_bus_add_match(b, match, NULL, NULL);
+ assert_se(r >= 0);
+
+ log_debug("signal");
+ r = sd_bus_emit_signal(a, path, interface, member, "s", arg0);
+ assert_se(r >= 0);
+
+ r = sd_bus_process(b, &m);
+ assert_se(r >= 0 && (good == !!m));
+
+ sd_bus_unref(a);
+ sd_bus_unref(b);
+}
+
+int main(int argc, char *argv[]) {
+ log_set_max_level(LOG_DEBUG);
+
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo/tuut'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "interface='waldo.com'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "member='Piep'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "member='Pi_ep'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "arg0='foobar'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "arg0='foo_bar'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo',interface='waldo.com',member='Piep',arg0='foobar'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo',interface='waldo.com',member='Piep',arg0='foobar2'", false);
+
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo/quux'", false);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/foo/bar/waldo'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/foo/bar'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/foo'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/'", true);
+ test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/quux'", false);
+
+ return 0;
+}
diff --git a/src/libsystemd-bus/test-bus-kernel.c b/src/libsystemd-bus/test-bus-kernel.c
index 1095e57e42..680dcde5b4 100644
--- a/src/libsystemd-bus/test-bus-kernel.c
+++ b/src/libsystemd-bus/test-bus-kernel.c
@@ -22,6 +22,7 @@
#include <fcntl.h>
#include "util.h"
+#include "log.h"
#include "sd-bus.h"
#include "bus-message.h"
@@ -36,6 +37,8 @@ int main(int argc, char *argv[]) {
sd_bus *a, *b;
int r, pipe_fds[2];
+ log_set_max_level(LOG_DEBUG);
+
bus_ref = bus_kernel_create("deine-mutter", &bus_name);
if (bus_ref == -ENOENT)
return EXIT_TEST_SKIP;
@@ -57,6 +60,22 @@ int main(int argc, char *argv[]) {
r = sd_bus_set_address(b, address);
assert_se(r >= 0);
+ assert_se(sd_bus_negotiate_attach_comm(a, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_exe(a, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_cmdline(a, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_cgroup(a, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_caps(a, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_selinux_context(a, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_audit(a, 1) >= 0);
+
+ assert_se(sd_bus_negotiate_attach_comm(b, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_exe(b, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_cmdline(b, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_cgroup(b, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_caps(b, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_selinux_context(b, 1) >= 0);
+ assert_se(sd_bus_negotiate_attach_audit(b, 1) >= 0);
+
r = sd_bus_start(a);
assert_se(r >= 0);
@@ -73,19 +92,8 @@ int main(int argc, char *argv[]) {
printf("unique b: %s\n", ub);
- {
- //FIXME:
- struct kdbus_cmd_match cmd_match;
-
- cmd_match.size = sizeof(cmd_match);
- cmd_match.src_id = KDBUS_MATCH_SRC_ID_ANY;
-
- r = ioctl(sd_bus_get_fd(a), KDBUS_CMD_MATCH_ADD, &cmd_match);
- assert_se(r >= 0);
-
- r = ioctl(sd_bus_get_fd(b), KDBUS_CMD_MATCH_ADD, &cmd_match);
- assert_se(r >= 0);
- }
+ r = sd_bus_add_match(b, "interface='waldo.com',member='Piep'", NULL, NULL);
+ assert_se(r >= 0);
r = sd_bus_emit_signal(a, "/foo/bar/waldo", "waldo.com", "Piep", "sss", "I am a string", "/this/is/a/path", "and.this.a.domain.name");
assert_se(r >= 0);
diff --git a/src/libsystemd-bus/test-bus-marshal.c b/src/libsystemd-bus/test-bus-marshal.c
index 20ae723fbe..ef1a77f5fc 100644
--- a/src/libsystemd-bus/test-bus-marshal.c
+++ b/src/libsystemd-bus/test-bus-marshal.c
@@ -43,6 +43,8 @@ int main(int argc, char *argv[]) {
void *buffer = NULL;
size_t sz;
char *h;
+ const int32_t integer_array[] = { -1, -2, 0, 1, 2 }, *return_array;
+ char *s;
r = sd_bus_message_new_method_call(NULL, "foobar.waldo", "/", "foobar.waldo", "Piep", &m);
assert_se(r >= 0);
@@ -77,6 +79,13 @@ int main(int argc, char *argv[]) {
r = sd_bus_message_close_container(m);
assert_se(r >= 0);
+ r = sd_bus_message_append_string_space(m, 5, &s);
+ assert_se(r >= 0);
+ strcpy(s, "hallo");
+
+ r = sd_bus_message_append_array(m, 'i', integer_array, sizeof(integer_array));
+ assert_se(r >= 0);
+
r = bus_message_seal(m, 4711);
assert_se(r >= 0);
@@ -168,6 +177,15 @@ int main(int argc, char *argv[]) {
assert_se(streq(x, "foobar"));
assert_se(streq(y, "waldo"));
+ r = sd_bus_message_read_basic(m, 's', &s);
+ assert_se(r > 0);
+ assert_se(streq(s, "hallo"));
+
+ r = sd_bus_message_read_array(m, 'i', (const void**) &return_array, &sz);
+ assert_se(r > 0);
+ assert_se(sz == sizeof(integer_array));
+ assert_se(memcmp(integer_array, return_array, sz) == 0);
+
r = sd_bus_message_peek_type(m, NULL, NULL);
assert_se(r == 0);
diff --git a/src/libsystemd-bus/test-bus-match.c b/src/libsystemd-bus/test-bus-match.c
index 9cf994009d..db977f726e 100644
--- a/src/libsystemd-bus/test-bus-match.c
+++ b/src/libsystemd-bus/test-bus-match.c
@@ -30,7 +30,7 @@
static bool mask[32];
-static int filter(sd_bus *b, int ret, sd_bus_message *m, void *userdata) {
+static int filter(sd_bus *b, sd_bus_message *m, void *userdata) {
log_info("Ran %i", PTR_TO_INT(userdata));
mask[PTR_TO_INT(userdata)] = true;
return 0;
@@ -55,6 +55,36 @@ static bool mask_contains(unsigned a[], unsigned n) {
return true;
}
+static int match_add(struct bus_match_node *root, const char *match, int value) {
+ struct bus_match_component *components = NULL;
+ unsigned n_components = 0;
+ int r;
+
+ r = bus_match_parse(match, &components, &n_components);
+ if (r < 0)
+ return r;
+
+ r = bus_match_add(root, components, n_components, filter, INT_TO_PTR(value), 0, NULL);
+ bus_match_parse_free(components, n_components);
+
+ return r;
+}
+
+static int match_remove(struct bus_match_node *root, const char *match, int value) {
+ struct bus_match_component *components = NULL;
+ unsigned n_components = 0;
+ int r;
+
+ r = bus_match_parse(match, &components, &n_components);
+ if (r < 0)
+ return r;
+
+ r = bus_match_remove(root, components, n_components, filter, INT_TO_PTR(value), 0);
+ bus_match_parse_free(components, n_components);
+
+ return r;
+}
+
int main(int argc, char *argv[]) {
struct bus_match_node root;
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
@@ -63,20 +93,20 @@ int main(int argc, char *argv[]) {
zero(root);
root.type = BUS_MATCH_ROOT;
- assert_se(bus_match_add(&root, "arg2='wal\\'do',sender='foo',type='signal',interface='bar',", filter, INT_TO_PTR(1), NULL) >= 0);
- assert_se(bus_match_add(&root, "arg2='wal\\'do2',sender='foo',type='signal',interface='bar',", filter, INT_TO_PTR(2), NULL) >= 0);
- assert_se(bus_match_add(&root, "arg3='test',sender='foo',type='signal',interface='bar',", filter, INT_TO_PTR(3), NULL) >= 0);
- assert_se(bus_match_add(&root, "arg3='test',sender='foo',type='method_call',interface='bar',", filter, INT_TO_PTR(4), NULL) >= 0);
- assert_se(bus_match_add(&root, "", filter, INT_TO_PTR(5), NULL) >= 0);
- assert_se(bus_match_add(&root, "interface='quux'", filter, INT_TO_PTR(6), NULL) >= 0);
- assert_se(bus_match_add(&root, "interface='bar'", filter, INT_TO_PTR(7), NULL) >= 0);
- assert_se(bus_match_add(&root, "member='waldo',path='/foo/bar'", filter, INT_TO_PTR(8), NULL) >= 0);
- assert_se(bus_match_add(&root, "path='/foo/bar'", filter, INT_TO_PTR(9), NULL) >= 0);
- assert_se(bus_match_add(&root, "path_namespace='/foo'", filter, INT_TO_PTR(10), NULL) >= 0);
- assert_se(bus_match_add(&root, "path_namespace='/foo/quux'", filter, INT_TO_PTR(11), NULL) >= 0);
- assert_se(bus_match_add(&root, "arg1='two'", filter, INT_TO_PTR(12), NULL) >= 0);
- assert_se(bus_match_add(&root, "member='waldo',arg2path='/prefix/'", filter, INT_TO_PTR(13), NULL) >= 0);
- assert_se(bus_match_add(&root, "member='waldo',path='/foo/bar',arg3namespace='prefix'", filter, INT_TO_PTR(14), NULL) >= 0);
+ assert_se(match_add(&root, "arg2='wal\\'do',sender='foo',type='signal',interface='bar',", 1) >= 0);
+ assert_se(match_add(&root, "arg2='wal\\'do2',sender='foo',type='signal',interface='bar',", 2) >= 0);
+ assert_se(match_add(&root, "arg3='test',sender='foo',type='signal',interface='bar',", 3) >= 0);
+ assert_se(match_add(&root, "arg3='test',sender='foo',type='method_call',interface='bar',", 4) >= 0);
+ assert_se(match_add(&root, "", 5) >= 0);
+ assert_se(match_add(&root, "interface='quux'", 6) >= 0);
+ assert_se(match_add(&root, "interface='bar'", 7) >= 0);
+ assert_se(match_add(&root, "member='waldo',path='/foo/bar'", 8) >= 0);
+ assert_se(match_add(&root, "path='/foo/bar'", 9) >= 0);
+ assert_se(match_add(&root, "path_namespace='/foo'", 10) >= 0);
+ assert_se(match_add(&root, "path_namespace='/foo/quux'", 11) >= 0);
+ assert_se(match_add(&root, "arg1='two'", 12) >= 0);
+ assert_se(match_add(&root, "member='waldo',arg2path='/prefix/'", 13) >= 0);
+ assert_se(match_add(&root, "member='waldo',path='/foo/bar',arg3namespace='prefix'", 14) >= 0);
bus_match_dump(&root, 0);
@@ -85,17 +115,17 @@ int main(int argc, char *argv[]) {
assert_se(bus_message_seal(m, 1) >= 0);
zero(mask);
- assert_se(bus_match_run(NULL, &root, 0, m) == 0);
+ assert_se(bus_match_run(NULL, &root, m) == 0);
assert_se(mask_contains((unsigned[]) { 9, 8, 7, 5, 10, 12, 13, 14 }, 8));
- assert_se(bus_match_remove(&root, "member='waldo',path='/foo/bar'", filter, INT_TO_PTR(8)) > 0);
- assert_se(bus_match_remove(&root, "arg2path='/prefix/',member='waldo'", filter, INT_TO_PTR(13)) > 0);
- assert_se(bus_match_remove(&root, "interface='barxx'", filter, INT_TO_PTR(7)) == 0);
+ assert_se(match_remove(&root, "member='waldo',path='/foo/bar'", 8) > 0);
+ assert_se(match_remove(&root, "arg2path='/prefix/',member='waldo'", 13) > 0);
+ assert_se(match_remove(&root, "interface='barxx'", 7) == 0);
bus_match_dump(&root, 0);
zero(mask);
- assert_se(bus_match_run(NULL, &root, 0, m) == 0);
+ assert_se(bus_match_run(NULL, &root, m) == 0);
assert_se(mask_contains((unsigned[]) { 9, 5, 10, 12, 14, 7 }, 6));
for (i = 0; i < _BUS_MATCH_NODE_TYPE_MAX; i++) {
diff --git a/src/libsystemd-bus/test-bus-memfd.c b/src/libsystemd-bus/test-bus-memfd.c
new file mode 100644
index 0000000000..05ef555f0d
--- /dev/null
+++ b/src/libsystemd-bus/test-bus-memfd.c
@@ -0,0 +1,174 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <sys/mman.h>
+#include <sys/uio.h>
+
+#include "log.h"
+#include "macro.h"
+#include "util.h"
+
+#include "sd-memfd.h"
+
+int main(int argc, char *argv[]) {
+ sd_memfd *m;
+ char *s;
+ uint64_t sz;
+ int r, fd;
+ FILE *f;
+ char buf[3] = {};
+ struct iovec iov[3] = {};
+ char bufv[3][3] = {};
+
+ log_set_max_level(LOG_DEBUG);
+
+ r = sd_memfd_new(&m);
+ if (r == -ENOENT)
+ return EXIT_TEST_SKIP;
+
+ r = sd_memfd_map(m, 0, 12, (void**) &s);
+ assert_se(r >= 0);
+
+ strcpy(s, "----- world");
+
+ r = sd_memfd_set_sealed(m, 1);
+ assert_se(r == -ETXTBSY);
+
+ assert_se(write(sd_memfd_get_fd(m), "he", 2) == 2);
+ assert_se(write(sd_memfd_get_fd(m), "XXX", 3) == 3);
+ assert_se(streq(s, "heXXX world"));
+
+ /* fix "hello" */
+ assert_se(lseek(sd_memfd_get_fd(m), 2, SEEK_SET) == 2);
+ assert_se(write(sd_memfd_get_fd(m), "ll", 2) == 2);
+
+ assert_se(sd_memfd_get_file(m, &f) >= 0);
+ fputc('o', f);
+ fflush(f);
+
+ /* check content */
+ assert_se(streq(s, "hello world"));
+
+ assert_se(munmap(s, 12) == 0);
+
+ r = sd_memfd_get_sealed(m);
+ assert_se(r == 0);
+
+ r = sd_memfd_get_size(m, &sz);
+ assert_se(r >= 0);
+ assert_se(sz = page_size());
+
+ /* truncate it */
+ r = sd_memfd_set_size(m, 6);
+ assert_se(r >= 0);
+
+ /* get back new value */
+ r = sd_memfd_get_size(m, &sz);
+ assert_se(r >= 0);
+ assert_se(sz == 6);
+
+ r = sd_memfd_set_sealed(m, 1);
+ assert_se(r >= 0);
+
+ r = sd_memfd_get_sealed(m);
+ assert_se(r == 1);
+
+ fd = sd_memfd_dup_fd(m);
+ assert_se(fd >= 0);
+
+ sd_memfd_free(m);
+
+ /* new sd_memfd, same underlying memfd */
+ r = sd_memfd_make(fd, &m);
+ assert_se(r >= 0);
+
+ /* we did truncate it to 6 */
+ r = sd_memfd_get_size(m, &sz);
+ assert_se(sz == 6);
+
+ /* map it, check content */
+ r = sd_memfd_map(m, 0, 12, (void **)&s);
+ assert_se(r >= 0);
+
+ /* we only see the truncated size */
+ assert_se(streq(s, "hello "));
+
+ /* it was already sealed */
+ r = sd_memfd_set_sealed(m, 1);
+ assert_se(r == -EALREADY);
+
+ /* we cannot break the seal, it is mapped */
+ r = sd_memfd_set_sealed(m, 0);
+ assert_se(r == -ETXTBSY);
+
+ /* unmap it; become the single owner */
+ assert_se(munmap(s, 12) == 0);
+
+ /* now we can do flip the sealing */
+ r = sd_memfd_set_sealed(m, 0);
+ assert_se(r == 0);
+ r = sd_memfd_get_sealed(m);
+ assert_se(r == 0);
+
+ r = sd_memfd_set_sealed(m, 1);
+ assert_se(r == 0);
+ r = sd_memfd_get_sealed(m);
+ assert_se(r == 1);
+
+ r = sd_memfd_set_sealed(m, 0);
+ assert_se(r == 0);
+ r = sd_memfd_get_sealed(m);
+ assert_se(r == 0);
+
+ /* seek at 2, read() 2 bytes */
+ assert_se(lseek(fd, 2, SEEK_SET) == 2);
+ assert_se(read(fd, buf, 2) == 2);
+
+ /* check content */
+ assert_se(memcmp(buf, "ll", 2) == 0);
+
+ /* writev it out*/
+ iov[0].iov_base = (char *)"ABC";
+ iov[0].iov_len = 3;
+ iov[1].iov_base = (char *)"DEF";
+ iov[1].iov_len = 3;
+ iov[2].iov_base = (char *)"GHI";
+ iov[2].iov_len = 3;
+ assert_se(pwritev(fd, iov, 3, 0) == 9);
+
+ /* readv it back */
+ iov[0].iov_base = bufv[0];
+ iov[0].iov_len = 3;
+ iov[1].iov_base = bufv[1];
+ iov[1].iov_len = 3;
+ iov[2].iov_base = bufv[2];
+ iov[2].iov_len = 3;
+ assert_se(preadv(fd, iov, 3, 0) == 9);
+
+ /* check content */
+ assert_se(memcmp(bufv[0], "ABC", 3) == 0);
+ assert_se(memcmp(bufv[1], "DEF", 3) == 0);
+ assert_se(memcmp(bufv[2], "GHI", 3) == 0);
+
+ sd_memfd_free(m);
+
+ return 0;
+}
diff --git a/src/libsystemd-bus/test-bus-server.c b/src/libsystemd-bus/test-bus-server.c
index a9772624f2..ef26a65d87 100644
--- a/src/libsystemd-bus/test-bus-server.c
+++ b/src/libsystemd-bus/test-bus-server.c
@@ -55,8 +55,8 @@ static void *server(void *p) {
assert_se(sd_bus_new(&bus) >= 0);
assert_se(sd_bus_set_fd(bus, c->fds[0], c->fds[0]) >= 0);
assert_se(sd_bus_set_server(bus, 1, id) >= 0);
- assert_se(sd_bus_set_negotiate_fds(bus, c->server_negotiate_unix_fds) >= 0);
assert_se(sd_bus_set_anonymous(bus, c->server_anonymous_auth) >= 0);
+ assert_se(sd_bus_negotiate_fds(bus, c->server_negotiate_unix_fds) >= 0);
assert_se(sd_bus_start(bus) >= 0);
while (!quit) {
@@ -134,7 +134,7 @@ static int client(struct context *c) {
assert_se(sd_bus_new(&bus) >= 0);
assert_se(sd_bus_set_fd(bus, c->fds[1], c->fds[1]) >= 0);
- assert_se(sd_bus_set_negotiate_fds(bus, c->client_negotiate_unix_fds) >= 0);
+ assert_se(sd_bus_negotiate_fds(bus, c->client_negotiate_unix_fds) >= 0);
assert_se(sd_bus_set_anonymous(bus, c->client_anonymous_auth) >= 0);
assert_se(sd_bus_start(bus) >= 0);
diff --git a/src/libsystemd-bus/test-bus-zero-copy.c b/src/libsystemd-bus/test-bus-zero-copy.c
new file mode 100644
index 0000000000..db3906e274
--- /dev/null
+++ b/src/libsystemd-bus/test-bus-zero-copy.c
@@ -0,0 +1,183 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#include "util.h"
+#include "log.h"
+
+#include "sd-bus.h"
+#include "sd-memfd.h"
+#include "bus-message.h"
+#include "bus-error.h"
+#include "bus-kernel.h"
+
+#define FIRST_ARRAY 17
+#define SECOND_ARRAY 33
+
+#define STRING_SIZE 123
+
+int main(int argc, char *argv[]) {
+ _cleanup_free_ char *bus_name = NULL, *address = NULL;
+ uint8_t *p;
+ sd_bus *a, *b;
+ int r, bus_ref;
+ sd_bus_message *m;
+ sd_memfd *f;
+ uint64_t sz;
+ uint32_t u32;
+ size_t i, l;
+ char *s;
+
+ log_set_max_level(LOG_DEBUG);
+
+ bus_ref = bus_kernel_create("deine-mutter", &bus_name);
+ if (bus_ref == -ENOENT)
+ return EXIT_TEST_SKIP;
+
+ assert_se(bus_ref >= 0);
+
+ address = strappend("kernel:path=", bus_name);
+ assert_se(address);
+
+ r = sd_bus_new(&a);
+ assert_se(r >= 0);
+
+ r = sd_bus_new(&b);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(a, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_set_address(b, address);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(a);
+ assert_se(r >= 0);
+
+ r = sd_bus_start(b);
+ assert_se(r >= 0);
+
+ r = sd_bus_message_new_method_call(b, ":1.1", "/a/path", "an.inter.face", "AMethod", &m);
+ assert_se(r >= 0);
+
+ r = sd_bus_message_open_container(m, 'r', "aysay");
+ assert_se(r >= 0);
+
+ r = sd_bus_message_append_array_space(m, 'y', FIRST_ARRAY, (void**) &p);
+ assert_se(r >= 0);
+
+ memset(p, 'L', FIRST_ARRAY);
+
+ r = sd_memfd_new_and_map(&f, STRING_SIZE, (void**) &s);
+ assert_se(r >= 0);
+
+ for (i = 0; i < STRING_SIZE-1; i++)
+ s[i] = '0' + (i % 10);
+
+ s[STRING_SIZE-1] = 0;
+ munmap(s, STRING_SIZE);
+
+ r = sd_memfd_get_size(f, &sz);
+ assert_se(r >= 0);
+ assert_se(sz == STRING_SIZE);
+
+ r = sd_bus_message_append_string_memfd(m, f);
+ assert_se(r >= 0);
+
+ sd_memfd_free(f);
+
+ r = sd_memfd_new_and_map(&f, SECOND_ARRAY, (void**) &p);
+ assert_se(r >= 0);
+
+ memset(p, 'P', SECOND_ARRAY);
+ munmap(p, SECOND_ARRAY);
+
+ r = sd_memfd_get_size(f, &sz);
+ assert_se(r >= 0);
+ assert_se(sz == SECOND_ARRAY);
+
+ r = sd_bus_message_append_array_memfd(m, 'y', f);
+ assert_se(r >= 0);
+
+ sd_memfd_free(f);
+
+ r = sd_bus_message_close_container(m);
+ assert_se(r >= 0);
+
+ r = sd_bus_message_append(m, "u", 4711);
+ assert_se(r >= 0);
+
+ r = bus_message_seal(m, 55);
+ assert_se(r >= 0);
+
+ bus_message_dump(m);
+
+ r = sd_bus_send(b, m, NULL);
+ assert_se(r >= 0);
+
+ sd_bus_message_unref(m);
+
+ r = sd_bus_process(a, &m);
+ assert_se(r > 0);
+
+ bus_message_dump(m);
+ sd_bus_message_rewind(m, true);
+
+ r = sd_bus_message_enter_container(m, 'r', "aysay");
+ assert_se(r > 0);
+
+ r = sd_bus_message_read_array(m, 'y', (const void**) &p, &l);
+ assert_se(r > 0);
+ assert_se(l == FIRST_ARRAY);
+
+ for (i = 0; i < l; i++)
+ assert_se(p[i] == 'L');
+
+ r = sd_bus_message_read(m, "s", &s);
+ assert_se(r > 0);
+
+ for (i = 0; i < STRING_SIZE-1; i++)
+ assert_se(s[i] == (char) ('0' + (i % 10)));
+ assert_se(s[STRING_SIZE-1] == 0);
+
+ r = sd_bus_message_read_array(m, 'y', (const void**) &p, &l);
+ assert_se(r > 0);
+ assert_se(l == SECOND_ARRAY);
+
+ for (i = 0; i < l; i++)
+ assert_se(p[i] == 'P');
+
+ r = sd_bus_message_exit_container(m);
+ assert_se(r > 0);
+
+ r = sd_bus_message_read(m, "u", &u32);
+ assert_se(r > 0);
+ assert_se(u32 == 4711);
+
+ sd_bus_message_unref(m);
+
+ sd_bus_unref(a);
+ sd_bus_unref(b);
+
+ return 0;
+}
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index 6bb2e41510..a644904757 100644
--- a/src/libudev/libudev-device.c
+++ b/src/libudev/libudev-device.c
@@ -42,7 +42,7 @@
*
* Representation of kernel sys devices. Devices are uniquely identified
* by their syspath, every device has exactly one path in the kernel sys
- * filesystem. Devices usually belong to a kernel subsystem, and and have
+ * filesystem. Devices usually belong to a kernel subsystem, and have
* a unique name inside that subsystem.
*/
@@ -780,7 +780,7 @@ _public_ struct udev_device *udev_device_new_from_devnum(struct udev *udev, char
*
* Returns: a new udev device, or #NULL, if it does not exist
**/
-_public_ struct udev_device *udev_device_new_from_device_id(struct udev *udev, char *id)
+_public_ struct udev_device *udev_device_new_from_device_id(struct udev *udev, const char *id)
{
char type;
int maj, min;
diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c
index 5ccaabdc6c..8146f27e4f 100644
--- a/src/libudev/libudev-enumerate.c
+++ b/src/libudev/libudev-enumerate.c
@@ -270,8 +270,9 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
return NULL;
if (!udev_enumerate->devices_uptodate) {
unsigned int i;
+ int move_later = -1;
unsigned int max;
- struct syspath *prev = NULL, *move_later = NULL;
+ struct syspath *prev = NULL;
size_t move_later_prefix = 0;
udev_list_cleanup(&udev_enumerate->devices_list);
@@ -299,27 +300,29 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume
/* skip to be delayed devices, and move the to
* the point where the prefix changes. We can
* only move one item at a time. */
- if (!move_later) {
+ if (move_later == -1) {
move_later_prefix = devices_delay_later(udev_enumerate->udev, entry->syspath);
if (move_later_prefix > 0) {
- move_later = entry;
+ move_later = i;
continue;
}
}
- if (move_later &&
- !strneq(entry->syspath, move_later->syspath, move_later_prefix)) {
+ if ((move_later >= 0) &&
+ !strneq(entry->syspath, udev_enumerate->devices[move_later].syspath, move_later_prefix)) {
- udev_list_entry_add(&udev_enumerate->devices_list, move_later->syspath, NULL);
- move_later = NULL;
+ udev_list_entry_add(&udev_enumerate->devices_list,
+ udev_enumerate->devices[move_later].syspath, NULL);
+ move_later = -1;
}
udev_list_entry_add(&udev_enumerate->devices_list, entry->syspath, NULL);
}
- if (move_later)
- udev_list_entry_add(&udev_enumerate->devices_list, move_later->syspath, NULL);
+ if (move_later >= 0)
+ udev_list_entry_add(&udev_enumerate->devices_list,
+ udev_enumerate->devices[move_later].syspath, NULL);
/* add and cleanup delayed devices from end of list */
for (i = max; i < udev_enumerate->devices_cur; i++) {
@@ -718,10 +721,14 @@ static bool match_subsystem(struct udev_enumerate *udev_enumerate, const char *s
{
struct udev_list_entry *list_entry;
+ if (!subsystem)
+ return false;
+
udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_nomatch_list)) {
if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0)
return false;
}
+
if (udev_list_get_entry(&udev_enumerate->subsystem_match_list) != NULL) {
udev_list_entry_foreach(list_entry, udev_list_get_entry(&udev_enumerate->subsystem_match_list)) {
if (fnmatch(udev_list_entry_get_name(list_entry), subsystem, 0) == 0)
@@ -729,6 +736,7 @@ static bool match_subsystem(struct udev_enumerate *udev_enumerate, const char *s
}
return false;
}
+
return true;
}
@@ -826,23 +834,27 @@ nomatch:
static int parent_add_child(struct udev_enumerate *enumerate, const char *path)
{
struct udev_device *dev;
+ int r = 0;
dev = udev_device_new_from_syspath(enumerate->udev, path);
if (dev == NULL)
return -ENODEV;
if (!match_subsystem(enumerate, udev_device_get_subsystem(dev)))
- return 0;
+ goto nomatch;
if (!match_sysname(enumerate, udev_device_get_sysname(dev)))
- return 0;
+ goto nomatch;
if (!match_property(enumerate, dev))
- return 0;
+ goto nomatch;
if (!match_sysattr(enumerate, dev))
- return 0;
+ goto nomatch;
syspath_add(enumerate, udev_device_get_syspath(dev));
+ r = 1;
+
+nomatch:
udev_device_unref(dev);
- return 1;
+ return r;
}
static int parent_crawl_children(struct udev_enumerate *enumerate, const char *path, int maxdepth)
diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c
index 42ab6d9a6b..de1cb83188 100644
--- a/src/libudev/libudev-hwdb.c
+++ b/src/libudev/libudev-hwdb.c
@@ -140,9 +140,13 @@ static const struct trie_node_f *node_lookup_f(struct udev_hwdb *hwdb, const str
}
static int hwdb_add_property(struct udev_hwdb *hwdb, const char *key, const char *value) {
- /* TODO: add sub-matches (+) against DMI data */
+ /*
+ * Silently ignore all properties which do not start with a
+ * space; future extensions might use additional prefixes.
+ */
if (key[0] != ' ')
return 0;
+
if (udev_list_entry_add(&hwdb->properties_list, key+1, value) == NULL)
return -ENOMEM;
return 0;
@@ -300,11 +304,11 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
}
log_debug("=== trie on-disk ===\n");
- log_debug("tool version: %llu", (unsigned long long)le64toh(hwdb->head->tool_version));
- log_debug("file size: %8llu bytes\n", (unsigned long long)hwdb->st.st_size);
- log_debug("header size %8llu bytes\n", (unsigned long long)le64toh(hwdb->head->header_size));
- log_debug("strings %8llu bytes\n", (unsigned long long)le64toh(hwdb->head->strings_len));
- log_debug("nodes %8llu bytes\n", (unsigned long long)le64toh(hwdb->head->nodes_len));
+ log_debug("tool version: %"PRIu64, le64toh(hwdb->head->tool_version));
+ log_debug("file size: %8llu bytes\n", (unsigned long long) hwdb->st.st_size);
+ log_debug("header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
+ log_debug("strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
+ log_debug("nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));
return hwdb;
}
@@ -354,7 +358,7 @@ bool udev_hwdb_validate(struct udev_hwdb *hwdb) {
return false;
if (!hwdb->f)
return false;
- if (fstat(fileno(hwdb->f), &st) < 0)
+ if (stat("/etc/udev/hwdb.bin", &st) < 0)
return true;
if (timespec_load(&hwdb->st.st_mtim) != timespec_load(&st.st_mtim))
return true;
diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
index 714dc50ae9..b5b9db67fc 100644
--- a/src/libudev/libudev-util.c
+++ b/src/libudev/libudev-util.c
@@ -32,8 +32,10 @@
#include <sys/stat.h>
#include <sys/param.h>
+#include "device-nodes.h"
#include "libudev.h"
#include "libudev-private.h"
+#include "utf8.h"
/**
* SECTION:libudev-util
@@ -306,129 +308,6 @@ void util_remove_trailing_chars(char *path, char c)
path[--len] = '\0';
}
-/* count of characters used to encode one unicode char */
-static int utf8_encoded_expected_len(const char *str)
-{
- unsigned char c = (unsigned char)str[0];
-
- if (c < 0x80)
- return 1;
- if ((c & 0xe0) == 0xc0)
- return 2;
- if ((c & 0xf0) == 0xe0)
- return 3;
- if ((c & 0xf8) == 0xf0)
- return 4;
- if ((c & 0xfc) == 0xf8)
- return 5;
- if ((c & 0xfe) == 0xfc)
- return 6;
- return 0;
-}
-
-/* decode one unicode char */
-static int utf8_encoded_to_unichar(const char *str)
-{
- int unichar;
- int len;
- int i;
-
- len = utf8_encoded_expected_len(str);
- switch (len) {
- case 1:
- return (int)str[0];
- case 2:
- unichar = str[0] & 0x1f;
- break;
- case 3:
- unichar = (int)str[0] & 0x0f;
- break;
- case 4:
- unichar = (int)str[0] & 0x07;
- break;
- case 5:
- unichar = (int)str[0] & 0x03;
- break;
- case 6:
- unichar = (int)str[0] & 0x01;
- break;
- default:
- return -1;
- }
-
- for (i = 1; i < len; i++) {
- if (((int)str[i] & 0xc0) != 0x80)
- return -1;
- unichar <<= 6;
- unichar |= (int)str[i] & 0x3f;
- }
-
- return unichar;
-}
-
-/* expected size used to encode one unicode char */
-static int utf8_unichar_to_encoded_len(int unichar)
-{
- if (unichar < 0x80)
- return 1;
- if (unichar < 0x800)
- return 2;
- if (unichar < 0x10000)
- return 3;
- if (unichar < 0x200000)
- return 4;
- if (unichar < 0x4000000)
- return 5;
- return 6;
-}
-
-/* check if unicode char has a valid numeric range */
-static int utf8_unichar_valid_range(int unichar)
-{
- if (unichar > 0x10ffff)
- return 0;
- if ((unichar & 0xfffff800) == 0xd800)
- return 0;
- if ((unichar > 0xfdcf) && (unichar < 0xfdf0))
- return 0;
- if ((unichar & 0xffff) == 0xffff)
- return 0;
- return 1;
-}
-
-/* validate one encoded unicode char and return its length */
-static int utf8_encoded_valid_unichar(const char *str)
-{
- int len;
- int unichar;
- int i;
-
- len = utf8_encoded_expected_len(str);
- if (len == 0)
- return -1;
-
- /* ascii is valid */
- if (len == 1)
- return 1;
-
- /* check if expected encoded chars are available */
- for (i = 0; i < len; i++)
- if ((str[i] & 0x80) != 0x80)
- return -1;
-
- unichar = utf8_encoded_to_unichar(str);
-
- /* check if encoded length matches encoded value */
- if (utf8_unichar_to_encoded_len(unichar) != len)
- return -1;
-
- /* check if value has valid range */
- if (!utf8_unichar_valid_range(unichar))
- return -1;
-
- return len;
-}
-
int util_replace_whitespace(const char *str, char *to, size_t len)
{
size_t i, j;
@@ -457,17 +336,6 @@ int util_replace_whitespace(const char *str, char *to, size_t len)
return 0;
}
-static int is_whitelisted(char c, const char *white)
-{
- if ((c >= '0' && c <= '9') ||
- (c >= 'A' && c <= 'Z') ||
- (c >= 'a' && c <= 'z') ||
- strchr("#+-.:=@_", c) != NULL ||
- (white != NULL && strchr(white, c) != NULL))
- return 1;
- return 0;
-}
-
/* allow chars in whitelist, plain ascii, hex-escaping and valid utf8 */
int util_replace_chars(char *str, const char *white)
{
@@ -477,7 +345,7 @@ int util_replace_chars(char *str, const char *white)
while (str[i] != '\0') {
int len;
- if (is_whitelisted(str[i], white)) {
+ if (whitelisted_char_for_devnode(str[i], white)) {
i++;
continue;
}
@@ -525,39 +393,7 @@ int util_replace_chars(char *str, const char *white)
**/
_public_ int udev_util_encode_string(const char *str, char *str_enc, size_t len)
{
- size_t i, j;
-
- if (str == NULL || str_enc == NULL)
- return -1;
-
- for (i = 0, j = 0; str[i] != '\0'; i++) {
- int seqlen;
-
- seqlen = utf8_encoded_valid_unichar(&str[i]);
- if (seqlen > 1) {
- if (len-j < (size_t)seqlen)
- goto err;
- memcpy(&str_enc[j], &str[i], seqlen);
- j += seqlen;
- i += (seqlen-1);
- } else if (str[i] == '\\' || !is_whitelisted(str[i], NULL)) {
- if (len-j < 4)
- goto err;
- sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
- j += 4;
- } else {
- if (len-j < 1)
- goto err;
- str_enc[j] = str[i];
- j++;
- }
- }
- if (len-j < 1)
- goto err;
- str_enc[j] = '\0';
- return 0;
-err:
- return -1;
+ return encode_devnode_name(str, str_enc, len);
}
/*
diff --git a/src/libudev/libudev.h b/src/libudev/libudev.h
index 61567b1d67..b9b8f13e44 100644
--- a/src/libudev/libudev.h
+++ b/src/libudev/libudev.h
@@ -81,7 +81,7 @@ struct udev *udev_device_get_udev(struct udev_device *udev_device);
struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath);
struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum);
struct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev, const char *subsystem, const char *sysname);
-struct udev_device *udev_device_new_from_device_id(struct udev *udev, char *id);
+struct udev_device *udev_device_new_from_device_id(struct udev *udev, const char *id);
struct udev_device *udev_device_new_from_environment(struct udev *udev);
/* udev_device_get_parent_*() does not take a reference on the returned device, it is automatically unref'd with the parent */
struct udev_device *udev_device_get_parent(struct udev_device *udev_device);
diff --git a/src/libudev/libudev.sym b/src/libudev/libudev.sym
index 8e09430aec..1e6f885141 100644
--- a/src/libudev/libudev.sym
+++ b/src/libudev/libudev.sym
@@ -109,5 +109,6 @@ global:
} LIBUDEV_189;
LIBUDEV_199 {
+global:
udev_device_set_sysattr_value;
} LIBUDEV_196;
diff --git a/src/locale/localectl.c b/src/locale/localectl.c
index 50250c4b47..8259c0af5f 100644
--- a/src/locale/localectl.c
+++ b/src/locale/localectl.c
@@ -46,7 +46,8 @@ static enum transport {
TRANSPORT_POLKIT
} arg_transport = TRANSPORT_NORMAL;
static bool arg_ask_password = true;
-static const char *arg_host = NULL;
+static char *arg_host = NULL;
+static char *arg_user = NULL;
static bool arg_convert = true;
static void pager_open_if_enabled(void) {
@@ -223,7 +224,7 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
static int set_locale(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
- dbus_bool_t interactive = true;
+ dbus_bool_t interactive = arg_ask_password;
DBusError error;
DBusMessageIter iter;
int r;
@@ -459,7 +460,7 @@ static int list_locales(DBusConnection *bus, char **args, unsigned n) {
static int set_vconsole_keymap(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true, b;
+ dbus_bool_t interactive = arg_ask_password, b;
const char *map, *toggle_map;
assert(bus);
@@ -537,6 +538,7 @@ static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) {
if (!keymaps)
return log_oom();
+ nftw("/usr/share/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
nftw("/usr/share/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
nftw("/usr/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
nftw("/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS);
@@ -565,7 +567,7 @@ static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) {
static int set_x11_keymap(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true, b;
+ dbus_bool_t interactive = arg_ask_password, b;
const char *layout, *model, *variant, *options;
assert(bus);
@@ -712,6 +714,7 @@ static int help(void) {
" --version Show package version\n"
" --no-convert Don't convert keyboard mappings\n"
" --no-pager Do not pipe output into a pager\n"
+ " -P --privileged Acquire privileges before execution\n"
" --no-ask-password Do not prompt for password\n"
" -H --host=[USER@]HOST Operate on remote host\n\n"
"Commands:\n"
@@ -757,7 +760,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "has:H:P", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "hH:P", options, NULL)) >= 0) {
switch (c) {
@@ -776,7 +779,7 @@ static int parse_argv(int argc, char *argv[]) {
case 'H':
arg_transport = TRANSPORT_SSH;
- arg_host = optarg;
+ parse_user_at_host(optarg, &arg_user, &arg_host);
break;
case ARG_NO_CONVERT:
@@ -787,6 +790,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_no_pager = true;
break;
+ case ARG_NO_ASK_PASSWORD:
+ arg_ask_password = false;
+ break;
+
case '?':
return -EINVAL;
diff --git a/src/login/70-uaccess.rules b/src/login/70-uaccess.rules
index a118f8e887..01484c95f1 100644
--- a/src/login/70-uaccess.rules
+++ b/src/login/70-uaccess.rules
@@ -25,7 +25,8 @@ SUBSYSTEM=="block", ENV{ID_CDROM}=="1", TAG+="uaccess"
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", TAG+="uaccess"
# Sound devices
-SUBSYSTEM=="sound", TAG+="uaccess"
+SUBSYSTEM=="sound", TAG+="uaccess" \
+ OPTIONS+="static_node=snd/timer", OPTIONS+="static_node=snd/seq"
# ffado is an userspace driver for firewire sound cards
SUBSYSTEM=="firewire", ENV{ID_FFADO}=="1", TAG+="uaccess"
diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym
index 925fb91095..54aa91c609 100644
--- a/src/login/libsystemd-login.sym
+++ b/src/login/libsystemd-login.sym
@@ -75,3 +75,13 @@ LIBSYSTEMD_LOGIN_203 {
global:
sd_get_machine_names;
} LIBSYSTEMD_LOGIN_202;
+
+LIBSYSTEMD_LOGIN_205 {
+global:
+ sd_pid_get_slice;
+} LIBSYSTEMD_LOGIN_203;
+
+LIBSYSTEMD_LOGIN_207 {
+global:
+ sd_session_get_vt;
+} LIBSYSTEMD_LOGIN_205;
diff --git a/src/login/login-shared.c b/src/login/login-shared.c
new file mode 100644
index 0000000000..054c77503b
--- /dev/null
+++ b/src/login/login-shared.c
@@ -0,0 +1,29 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "login-shared.h"
+#include "def.h"
+
+bool session_id_valid(const char *id) {
+ assert(id);
+
+ return id[0] && id[strspn(id, LETTERS DIGITS)] == '\0';
+}
diff --git a/src/login/login-shared.h b/src/login/login-shared.h
new file mode 100644
index 0000000000..b2787c9c62
--- /dev/null
+++ b/src/login/login-shared.h
@@ -0,0 +1,24 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdbool.h>
+
+bool session_id_valid(const char *id);
diff --git a/src/login/loginctl.c b/src/login/loginctl.c
index caaea8dfaa..736db6a11b 100644
--- a/src/login/loginctl.c
+++ b/src/login/loginctl.c
@@ -34,8 +34,10 @@
#include "dbus-common.h"
#include "build.h"
#include "strv.h"
-#include "cgroup-show.h"
+#include "unit-name.h"
#include "sysfs-show.h"
+#include "cgroup-show.h"
+#include "cgroup-util.h"
#include "spawn-polkit-agent.h"
static char **arg_property = NULL;
@@ -50,7 +52,8 @@ static enum transport {
TRANSPORT_POLKIT
} arg_transport = TRANSPORT_NORMAL;
static bool arg_ask_password = true;
-static const char *arg_host = NULL;
+static char *arg_host = NULL;
+static char *arg_user = NULL;
static void pager_open_if_enabled(void) {
@@ -260,12 +263,82 @@ static int list_seats(DBusConnection *bus, char **args, unsigned n) {
return 0;
}
+static int show_unit_cgroup(DBusConnection *bus, const char *interface, const char *unit, pid_t leader) {
+ const char *property = "ControlGroup";
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_free_ char *path = NULL;
+ DBusMessageIter iter, sub;
+ const char *cgroup;
+ DBusError error;
+ int r, output_flags;
+ unsigned c;
+
+ assert(bus);
+ assert(unit);
+
+ if (arg_transport == TRANSPORT_SSH)
+ return 0;
+
+ path = unit_dbus_path_from_name(unit);
+ if (!path)
+ return log_oom();
+
+ r = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.systemd1",
+ path,
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ &reply,
+ &error,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &property,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to query ControlGroup: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
+ }
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_get_basic(&sub, &cgroup);
+
+ if (isempty(cgroup))
+ return 0;
+
+ if (cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, cgroup, false) != 0 && leader <= 0)
+ return 0;
+
+ output_flags =
+ arg_all * OUTPUT_SHOW_ALL |
+ arg_full * OUTPUT_FULL_WIDTH;
+
+ c = columns();
+ if (c > 18)
+ c -= 18;
+ else
+ c = 0;
+
+ show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, cgroup, "\t\t ", c, false, &leader, leader > 0, output_flags);
+ return 0;
+}
+
typedef struct SessionStatusInfo {
const char *id;
uid_t uid;
const char *name;
usec_t timestamp;
- const char *default_control_group;
int vtnr;
const char *seat;
const char *tty;
@@ -278,16 +351,17 @@ typedef struct SessionStatusInfo {
const char *type;
const char *class;
const char *state;
+ const char *scope;
} SessionStatusInfo;
typedef struct UserStatusInfo {
uid_t uid;
const char *name;
usec_t timestamp;
- const char *default_control_group;
const char *state;
char **sessions;
const char *display;
+ const char *slice;
} UserStatusInfo;
typedef struct SeatStatusInfo {
@@ -296,7 +370,7 @@ typedef struct SeatStatusInfo {
char **sessions;
} SeatStatusInfo;
-static void print_session_status_info(SessionStatusInfo *i) {
+static void print_session_status_info(DBusConnection *bus, SessionStatusInfo *i) {
char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
char since2[FORMAT_TIMESTAMP_MAX], *s2;
assert(i);
@@ -317,15 +391,13 @@ static void print_session_status_info(SessionStatusInfo *i) {
printf("\t Since: %s\n", s2);
if (i->leader > 0) {
- char *t = NULL;
+ _cleanup_free_ char *t = NULL;
printf("\t Leader: %u", (unsigned) i->leader);
get_process_comm(i->leader, &t);
- if (t) {
+ if (t)
printf(" (%s)", t);
- free(t);
- }
printf("\n");
}
@@ -374,30 +446,13 @@ static void print_session_status_info(SessionStatusInfo *i) {
if (i->state)
printf("\t State: %s\n", i->state);
- if (i->default_control_group) {
- unsigned c;
- int output_flags =
- arg_all * OUTPUT_SHOW_ALL |
- arg_full * OUTPUT_FULL_WIDTH;
-
- printf("\t CGroup: %s\n", i->default_control_group);
-
- if (arg_transport != TRANSPORT_SSH) {
- c = columns();
- if (c > 18)
- c -= 18;
- else
- c = 0;
-
- show_cgroup_and_extra_by_spec(i->default_control_group,
- "\t\t ", c, false, &i->leader,
- i->leader > 0 ? 1 : 0,
- output_flags);
- }
+ if (i->scope) {
+ printf("\t Unit: %s\n", i->scope);
+ show_unit_cgroup(bus, "org.freedesktop.systemd1.Scope", i->scope, i->leader);
}
}
-static void print_user_status_info(UserStatusInfo *i) {
+static void print_user_status_info(DBusConnection *bus, UserStatusInfo *i) {
char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
char since2[FORMAT_TIMESTAMP_MAX], *s2;
assert(i);
@@ -418,6 +473,7 @@ static void print_user_status_info(UserStatusInfo *i) {
if (!isempty(i->state))
printf("\t State: %s\n", i->state);
+
if (!strv_isempty(i->sessions)) {
char **l;
printf("\tSessions:");
@@ -432,24 +488,9 @@ static void print_user_status_info(UserStatusInfo *i) {
printf("\n");
}
- if (i->default_control_group) {
- unsigned c;
- int output_flags =
- arg_all * OUTPUT_SHOW_ALL |
- arg_full * OUTPUT_FULL_WIDTH;
-
- printf("\t CGroup: %s\n", i->default_control_group);
-
- if (arg_transport != TRANSPORT_SSH) {
- c = columns();
- if (c > 18)
- c -= 18;
- else
- c = 0;
-
- show_cgroup_by_path(i->default_control_group, "\t\t ",
- c, false, output_flags);
- }
+ if (i->slice) {
+ printf("\t Unit: %s\n", i->slice);
+ show_unit_cgroup(bus, "org.freedesktop.systemd1.Slice", i->slice, 0);
}
}
@@ -504,8 +545,6 @@ static int status_property_session(const char *name, DBusMessageIter *iter, Sess
i->id = s;
else if (streq(name, "Name"))
i->name = s;
- else if (streq(name, "DefaultControlGroup"))
- i->default_control_group = s;
else if (streq(name, "TTY"))
i->tty = s;
else if (streq(name, "Display"))
@@ -520,6 +559,8 @@ static int status_property_session(const char *name, DBusMessageIter *iter, Sess
i->type = s;
else if (streq(name, "Class"))
i->class = s;
+ else if (streq(name, "Scope"))
+ i->scope = s;
else if (streq(name, "State"))
i->state = s;
}
@@ -603,8 +644,8 @@ static int status_property_user(const char *name, DBusMessageIter *iter, UserSta
if (!isempty(s)) {
if (streq(name, "Name"))
i->name = s;
- else if (streq(name, "DefaultControlGroup"))
- i->default_control_group = s;
+ else if (streq(name, "Slice"))
+ i->slice = s;
else if (streq(name, "State"))
i->state = s;
}
@@ -913,9 +954,9 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
if (!show_properties) {
if (strstr(verb, "session"))
- print_session_status_info(&session_info);
+ print_session_status_info(bus, &session_info);
else if (strstr(verb, "user"))
- print_user_status_info(&user_info);
+ print_user_status_info(bus, &user_info);
else
print_seat_status_info(&seat_info);
}
@@ -980,7 +1021,7 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
}
u = (uint32_t) uid;
- ret = bus_method_call_with_reply (
+ ret = bus_method_call_with_reply(
bus,
"org.freedesktop.login1",
"/org/freedesktop/login1",
@@ -990,9 +1031,10 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
NULL,
DBUS_TYPE_UINT32, &u,
DBUS_TYPE_INVALID);
+
} else {
- ret = bus_method_call_with_reply (
+ ret = bus_method_call_with_reply(
bus,
"org.freedesktop.login1",
"/org/freedesktop/login1",
@@ -1002,8 +1044,10 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
NULL,
DBUS_TYPE_STRING, &args[i],
DBUS_TYPE_INVALID);
+
}
- if (ret)
+
+ if (ret < 0)
goto finish;
if (!dbus_message_get_args(reply, &error,
@@ -1296,7 +1340,7 @@ static int help(void) {
" -p --property=NAME Show only properties by this name\n"
" -a --all Show all properties, including empty ones\n"
" --kill-who=WHO Who to send signal to\n"
- " --full Do not ellipsize output\n"
+ " -l --full Do not ellipsize output\n"
" -s --signal=SIGNAL Which signal to send\n"
" --no-ask-password Don't prompt for password\n"
" -H --host=[USER@]HOST Show information for remote host\n"
@@ -1338,7 +1382,6 @@ static int parse_argv(int argc, char *argv[]) {
ARG_NO_PAGER,
ARG_KILL_WHO,
ARG_NO_ASK_PASSWORD,
- ARG_FULL,
};
static const struct option options[] = {
@@ -1346,13 +1389,13 @@ static int parse_argv(int argc, char *argv[]) {
{ "version", no_argument, NULL, ARG_VERSION },
{ "property", required_argument, NULL, 'p' },
{ "all", no_argument, NULL, 'a' },
+ { "full", no_argument, NULL, 'l' },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "kill-who", required_argument, NULL, ARG_KILL_WHO },
{ "signal", required_argument, NULL, 's' },
{ "host", required_argument, NULL, 'H' },
{ "privileged", no_argument, NULL, 'P' },
{ "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
- { "full", no_argument, NULL, ARG_FULL },
{ NULL, 0, NULL, 0 }
};
@@ -1361,7 +1404,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "hp:as:H:P", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "hp:als:H:P", options, NULL)) >= 0) {
switch (c) {
@@ -1395,6 +1438,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_all = true;
break;
+ case 'l':
+ arg_full = true;
+ break;
+
case ARG_NO_PAGER:
arg_no_pager = true;
break;
@@ -1421,11 +1468,7 @@ static int parse_argv(int argc, char *argv[]) {
case 'H':
arg_transport = TRANSPORT_SSH;
- arg_host = optarg;
- break;
-
- case ARG_FULL:
- arg_full = true;
+ parse_user_at_host(optarg, &arg_user, &arg_host);
break;
case '?':
@@ -1452,29 +1495,29 @@ static int loginctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
const int argc;
int (* const dispatch)(DBusConnection *bus, char **args, unsigned n);
} verbs[] = {
- { "list-sessions", LESS, 1, list_sessions },
- { "session-status", MORE, 2, show },
- { "show-session", MORE, 1, show },
- { "activate", EQUAL, 2, activate },
- { "lock-session", MORE, 2, activate },
- { "unlock-session", MORE, 2, activate },
- { "lock-sessions", EQUAL, 1, lock_sessions },
- { "unlock-sessions", EQUAL, 1, lock_sessions },
- { "terminate-session", MORE, 2, activate },
- { "kill-session", MORE, 2, kill_session },
- { "list-users", EQUAL, 1, list_users },
- { "user-status", MORE, 2, show },
- { "show-user", MORE, 1, show },
- { "enable-linger", MORE, 2, enable_linger },
- { "disable-linger", MORE, 2, enable_linger },
- { "terminate-user", MORE, 2, terminate_user },
- { "kill-user", MORE, 2, kill_user },
- { "list-seats", EQUAL, 1, list_seats },
- { "seat-status", MORE, 2, show },
- { "show-seat", MORE, 1, show },
- { "attach", MORE, 3, attach },
- { "flush-devices", EQUAL, 1, flush_devices },
- { "terminate-seat", MORE, 2, terminate_seat },
+ { "list-sessions", LESS, 1, list_sessions },
+ { "session-status", MORE, 2, show },
+ { "show-session", MORE, 1, show },
+ { "activate", EQUAL, 2, activate },
+ { "lock-session", MORE, 2, activate },
+ { "unlock-session", MORE, 2, activate },
+ { "lock-sessions", EQUAL, 1, lock_sessions },
+ { "unlock-sessions", EQUAL, 1, lock_sessions },
+ { "terminate-session", MORE, 2, activate },
+ { "kill-session", MORE, 2, kill_session },
+ { "list-users", EQUAL, 1, list_users },
+ { "user-status", MORE, 2, show },
+ { "show-user", MORE, 1, show },
+ { "enable-linger", MORE, 2, enable_linger },
+ { "disable-linger", MORE, 2, enable_linger },
+ { "terminate-user", MORE, 2, terminate_user },
+ { "kill-user", MORE, 2, kill_user },
+ { "list-seats", EQUAL, 1, list_seats },
+ { "seat-status", MORE, 2, show },
+ { "show-seat", MORE, 1, show },
+ { "attach", MORE, 3, attach },
+ { "flush-devices", EQUAL, 1, flush_devices },
+ { "terminate-seat", MORE, 2, terminate_seat },
};
int left;
diff --git a/src/login/logind-acl.c b/src/login/logind-acl.c
index cb045a9928..25abcbcf80 100644
--- a/src/login/logind-acl.c
+++ b/src/login/logind-acl.c
@@ -28,6 +28,7 @@
#include "logind-acl.h"
#include "util.h"
#include "acl-util.h"
+#include "set.h"
static int flush_acl(acl_t acl) {
acl_entry_t i;
@@ -179,23 +180,34 @@ int devnode_acl_all(struct udev *udev,
struct udev_list_entry *item = NULL, *first = NULL;
struct udev_enumerate *e;
+ Set *nodes;
+ Iterator i;
+ char *n;
+ _cleanup_closedir_ DIR *dir = NULL;
+ struct dirent *dent;
int r;
assert(udev);
- if (isempty(seat))
- seat = "seat0";
+ nodes = set_new(string_hash_func, string_compare_func);
+ if (!nodes) {
+ return -ENOMEM;
+ }
e = udev_enumerate_new(udev);
- if (!e)
- return -ENOMEM;
+ if (!e) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ if (isempty(seat))
+ seat = "seat0";
/* We can only match by one tag in libudev. We choose
* "uaccess" for that. If we could match for two tags here we
* could add the seat name as second match tag, but this would
* be hardly optimizable in libudev, and hence checking the
* second tag manually in our loop is a good solution. */
-
r = udev_enumerate_add_match_tag(e, "uaccess");
if (r < 0)
goto finish;
@@ -231,18 +243,52 @@ int devnode_acl_all(struct udev *udev,
continue;
}
- log_debug("Fixing up %s for seat %s...", node, sn);
-
- r = devnode_acl(node, flush, del, old_uid, add, new_uid);
+ n = strdup(node);
udev_device_unref(d);
+ if (!n)
+ goto finish;
+ log_debug("Found udev node %s for seat %s", n, seat);
+ r = set_put(nodes, n);
if (r < 0)
goto finish;
}
-finish:
- if (e)
- udev_enumerate_unref(e);
+ /* udev exports "dead" device nodes to allow module on-demand loading,
+ * these devices are not known to the kernel at this moment */
+ dir = opendir("/run/udev/static_node-tags/uaccess");
+ if (dir) {
+ FOREACH_DIRENT(dent, dir, r = -errno; goto finish) {
+ _cleanup_free_ char *unescaped_devname = NULL;
+ unescaped_devname = cunescape(dent->d_name);
+ if (unescaped_devname == NULL) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ n = strappend("/dev/", unescaped_devname);
+ if (!n) {
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ log_debug("Found static node %s for seat %s", n, seat);
+ r = set_put(nodes, n);
+ if (r < 0 && r != -EEXIST)
+ goto finish;
+ else
+ r = 0;
+ }
+ }
+
+ SET_FOREACH(n, nodes, i) {
+ log_debug("Fixing up ACLs at %s for seat %s", n, seat);
+ r = devnode_acl(n, flush, del, old_uid, add, new_uid);
+ }
+
+finish:
+ udev_enumerate_unref(e);
+ set_free_free(nodes);
return r;
}
diff --git a/src/login/logind-action.c b/src/login/logind-action.c
index c930591023..74114ee0a1 100644
--- a/src/login/logind-action.c
+++ b/src/login/logind-action.c
@@ -81,7 +81,7 @@ int manager_handle_action(
else if (handle == HANDLE_HYBRID_SLEEP)
supported = can_sleep("hybrid-sleep") > 0;
else if (handle == HANDLE_KEXEC)
- supported = access("/sbin/kexec", X_OK) >= 0;
+ supported = access(KEXEC, X_OK) >= 0;
else
supported = true;
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
new file mode 100644
index 0000000000..36999ace40
--- /dev/null
+++ b/src/login/logind-core.c
@@ -0,0 +1,514 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2011 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <unistd.h>
+#include <linux/vt.h>
+
+#include "logind.h"
+#include "dbus-common.h"
+#include "strv.h"
+
+int manager_add_device(Manager *m, const char *sysfs, bool master, Device **_device) {
+ Device *d;
+
+ assert(m);
+ assert(sysfs);
+
+ d = hashmap_get(m->devices, sysfs);
+ if (d) {
+ if (_device)
+ *_device = d;
+
+ /* we support adding master-flags, but not removing them */
+ d->master = d->master || master;
+
+ return 0;
+ }
+
+ d = device_new(m, sysfs, master);
+ if (!d)
+ return -ENOMEM;
+
+ if (_device)
+ *_device = d;
+
+ return 0;
+}
+
+int manager_add_seat(Manager *m, const char *id, Seat **_seat) {
+ Seat *s;
+
+ assert(m);
+ assert(id);
+
+ s = hashmap_get(m->seats, id);
+ if (s) {
+ if (_seat)
+ *_seat = s;
+
+ return 0;
+ }
+
+ s = seat_new(m, id);
+ if (!s)
+ return -ENOMEM;
+
+ if (_seat)
+ *_seat = s;
+
+ return 0;
+}
+
+int manager_add_session(Manager *m, const char *id, Session **_session) {
+ Session *s;
+
+ assert(m);
+ assert(id);
+
+ s = hashmap_get(m->sessions, id);
+ if (s) {
+ if (_session)
+ *_session = s;
+
+ return 0;
+ }
+
+ s = session_new(m, id);
+ if (!s)
+ return -ENOMEM;
+
+ if (_session)
+ *_session = s;
+
+ return 0;
+}
+
+int manager_add_user(Manager *m, uid_t uid, gid_t gid, const char *name, User **_user) {
+ User *u;
+
+ assert(m);
+ assert(name);
+
+ u = hashmap_get(m->users, ULONG_TO_PTR((unsigned long) uid));
+ if (u) {
+ if (_user)
+ *_user = u;
+
+ return 0;
+ }
+
+ u = user_new(m, uid, gid, name);
+ if (!u)
+ return -ENOMEM;
+
+ if (_user)
+ *_user = u;
+
+ return 0;
+}
+
+int manager_add_user_by_name(Manager *m, const char *name, User **_user) {
+ uid_t uid;
+ gid_t gid;
+ int r;
+
+ assert(m);
+ assert(name);
+
+ r = get_user_creds(&name, &uid, &gid, NULL, NULL);
+ if (r < 0)
+ return r;
+
+ return manager_add_user(m, uid, gid, name, _user);
+}
+
+int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user) {
+ struct passwd *p;
+
+ assert(m);
+
+ errno = 0;
+ p = getpwuid(uid);
+ if (!p)
+ return errno ? -errno : -ENOENT;
+
+ return manager_add_user(m, uid, p->pw_gid, p->pw_name, _user);
+}
+
+int manager_add_inhibitor(Manager *m, const char* id, Inhibitor **_inhibitor) {
+ Inhibitor *i;
+
+ assert(m);
+ assert(id);
+
+ i = hashmap_get(m->inhibitors, id);
+ if (i) {
+ if (_inhibitor)
+ *_inhibitor = i;
+
+ return 0;
+ }
+
+ i = inhibitor_new(m, id);
+ if (!i)
+ return -ENOMEM;
+
+ if (_inhibitor)
+ *_inhibitor = i;
+
+ return 0;
+}
+
+int manager_add_button(Manager *m, const char *name, Button **_button) {
+ Button *b;
+
+ assert(m);
+ assert(name);
+
+ b = hashmap_get(m->buttons, name);
+ if (b) {
+ if (_button)
+ *_button = b;
+
+ return 0;
+ }
+
+ b = button_new(m, name);
+ if (!b)
+ return -ENOMEM;
+
+ if (_button)
+ *_button = b;
+
+ return 0;
+}
+
+int manager_watch_busname(Manager *m, const char *name) {
+ char *n;
+ int r;
+
+ assert(m);
+ assert(name);
+
+ if (hashmap_get(m->busnames, name))
+ return 0;
+
+ n = strdup(name);
+ if (!n)
+ return -ENOMEM;
+
+ r = hashmap_put(m->busnames, n, n);
+ if (r < 0) {
+ free(n);
+ return r;
+ }
+
+ return 0;
+}
+
+void manager_drop_busname(Manager *m, const char *name) {
+ Session *session;
+ Iterator i;
+ char *key;
+
+ assert(m);
+ assert(name);
+
+ if (!hashmap_get(m->busnames, name))
+ return;
+
+ /* keep it if the name still owns a controller */
+ HASHMAP_FOREACH(session, m->sessions, i)
+ if (session_is_controller(session, name))
+ return;
+
+ key = hashmap_remove(m->busnames, name);
+ if (key)
+ free(key);
+}
+
+int manager_process_seat_device(Manager *m, struct udev_device *d) {
+ Device *device;
+ int r;
+
+ assert(m);
+
+ if (streq_ptr(udev_device_get_action(d), "remove")) {
+
+ device = hashmap_get(m->devices, udev_device_get_syspath(d));
+ if (!device)
+ return 0;
+
+ seat_add_to_gc_queue(device->seat);
+ device_free(device);
+
+ } else {
+ const char *sn;
+ Seat *seat = NULL;
+ bool master;
+
+ sn = udev_device_get_property_value(d, "ID_SEAT");
+ if (isempty(sn))
+ sn = "seat0";
+
+ if (!seat_name_is_valid(sn)) {
+ log_warning("Device with invalid seat name %s found, ignoring.", sn);
+ return 0;
+ }
+
+ /* ignore non-master devices for unknown seats */
+ master = udev_device_has_tag(d, "master-of-seat");
+ if (!master && !(seat = hashmap_get(m->seats, sn)))
+ return 0;
+
+ r = manager_add_device(m, udev_device_get_syspath(d), master, &device);
+ if (r < 0)
+ return r;
+
+ if (!seat) {
+ r = manager_add_seat(m, sn, &seat);
+ if (r < 0) {
+ if (!device->seat)
+ device_free(device);
+
+ return r;
+ }
+ }
+
+ device_attach(device, seat);
+ seat_start(seat);
+ }
+
+ return 0;
+}
+
+int manager_process_button_device(Manager *m, struct udev_device *d) {
+ Button *b;
+
+ int r;
+
+ assert(m);
+
+ if (streq_ptr(udev_device_get_action(d), "remove")) {
+
+ b = hashmap_get(m->buttons, udev_device_get_sysname(d));
+ if (!b)
+ return 0;
+
+ button_free(b);
+
+ } else {
+ const char *sn;
+
+ r = manager_add_button(m, udev_device_get_sysname(d), &b);
+ if (r < 0)
+ return r;
+
+ sn = udev_device_get_property_value(d, "ID_SEAT");
+ if (isempty(sn))
+ sn = "seat0";
+
+ button_set_seat(b, sn);
+ button_open(b);
+ }
+
+ return 0;
+}
+
+int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
+ _cleanup_free_ char *unit = NULL;
+ Session *s;
+ int r;
+
+ assert(m);
+ assert(session);
+
+ if (pid < 1)
+ return -EINVAL;
+
+ r = cg_pid_get_unit(pid, &unit);
+ if (r < 0)
+ return r;
+
+ s = hashmap_get(m->session_units, unit);
+ if (!s)
+ return 0;
+
+ *session = s;
+ return 1;
+}
+
+int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) {
+ _cleanup_free_ char *unit = NULL;
+ User *u;
+ int r;
+
+ assert(m);
+ assert(user);
+
+ if (pid < 1)
+ return -EINVAL;
+
+ r = cg_pid_get_slice(pid, &unit);
+ if (r < 0)
+ return r;
+
+ u = hashmap_get(m->user_units, unit);
+ if (!u)
+ return 0;
+
+ *user = u;
+ return 1;
+}
+
+int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
+ Session *s;
+ bool idle_hint;
+ dual_timestamp ts = { 0, 0 };
+ Iterator i;
+
+ assert(m);
+
+ idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0);
+
+ HASHMAP_FOREACH(s, m->sessions, i) {
+ dual_timestamp k;
+ int ih;
+
+ ih = session_get_idle_hint(s, &k);
+ if (ih < 0)
+ return ih;
+
+ if (!ih) {
+ if (!idle_hint) {
+ if (k.monotonic < ts.monotonic)
+ ts = k;
+ } else {
+ idle_hint = false;
+ ts = k;
+ }
+ } else if (idle_hint) {
+
+ if (k.monotonic > ts.monotonic)
+ ts = k;
+ }
+ }
+
+ if (t)
+ *t = ts;
+
+ return idle_hint;
+}
+
+bool manager_shall_kill(Manager *m, const char *user) {
+ assert(m);
+ assert(user);
+
+ if (!m->kill_user_processes)
+ return false;
+
+ if (strv_contains(m->kill_exclude_users, user))
+ return false;
+
+ if (strv_isempty(m->kill_only_users))
+ return true;
+
+ return strv_contains(m->kill_only_users, user);
+}
+
+static int vt_is_busy(int vtnr) {
+ struct vt_stat vt_stat;
+ int r = 0, fd;
+
+ assert(vtnr >= 1);
+
+ /* We explicitly open /dev/tty1 here instead of /dev/tty0. If
+ * we'd open the latter we'd open the foreground tty which
+ * hence would be unconditionally busy. By opening /dev/tty1
+ * we avoid this. Since tty1 is special and needs to be an
+ * explicitly loaded getty or DM this is safe. */
+
+ fd = open_terminal("/dev/tty1", O_RDWR|O_NOCTTY|O_CLOEXEC);
+ if (fd < 0)
+ return -errno;
+
+ if (ioctl(fd, VT_GETSTATE, &vt_stat) < 0)
+ r = -errno;
+ else
+ r = !!(vt_stat.v_state & (1 << vtnr));
+
+ close_nointr_nofail(fd);
+
+ return r;
+}
+
+int manager_spawn_autovt(Manager *m, int vtnr) {
+ int r;
+ char *name = NULL;
+ const char *mode = "fail";
+
+ assert(m);
+ assert(vtnr >= 1);
+
+ if ((unsigned) vtnr > m->n_autovts &&
+ (unsigned) vtnr != m->reserve_vt)
+ return 0;
+
+ if ((unsigned) vtnr != m->reserve_vt) {
+ /* If this is the reserved TTY, we'll start the getty
+ * on it in any case, but otherwise only if it is not
+ * busy. */
+
+ r = vt_is_busy(vtnr);
+ if (r < 0)
+ return r;
+ else if (r > 0)
+ return -EBUSY;
+ }
+
+ if (asprintf(&name, "autovt@tty%i.service", vtnr) < 0) {
+ log_error("Could not allocate service name.");
+ r = -ENOMEM;
+ goto finish;
+ }
+
+ r = bus_method_call_with_reply (
+ m->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StartUnit",
+ NULL,
+ NULL,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_STRING, &mode,
+ DBUS_TYPE_INVALID);
+
+finish:
+ free(name);
+
+ return r;
+}
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index 4a84b860f1..bb85c7d4af 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -36,6 +36,10 @@
#include "systemd/sd-messages.h"
#include "fileio-label.h"
#include "label.h"
+#include "utf8.h"
+#include "unit-name.h"
+#include "bus-errors.h"
+#include "virt.h"
#define BUS_MANAGER_INTERFACE \
" <interface name=\"org.freedesktop.login1.Manager\">\n" \
@@ -51,6 +55,10 @@
" <arg name=\"uid\" type=\"u\" direction=\"in\"/>\n" \
" <arg name=\"user\" type=\"o\" direction=\"out\"/>\n" \
" </method>\n" \
+ " <method name=\"GetUserByPID\">\n" \
+ " <arg name=\"pid\" type=\"u\" direction=\"in\"/>\n" \
+ " <arg name=\"user\" type=\"o\" direction=\"out\"/>\n" \
+ " </method>\n" \
" <method name=\"GetSeat\">\n" \
" <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
" <arg name=\"seat\" type=\"o\" direction=\"out\"/>\n" \
@@ -77,9 +85,7 @@
" <arg name=\"remote\" type=\"b\" direction=\"in\"/>\n" \
" <arg name=\"remote_user\" type=\"s\" direction=\"in\"/>\n" \
" <arg name=\"remote_host\" type=\"s\" direction=\"in\"/>\n" \
- " <arg name=\"controllers\" type=\"as\" direction=\"in\"/>\n" \
- " <arg name=\"reset_controllers\" type=\"as\" direction=\"in\"/>\n" \
- " <arg name=\"kill_processes\" type=\"b\" direction=\"in\"/>\n" \
+ " <arg name=\"scope_properties\" type=\"a(sv)\" direction=\"in\"/>\n" \
" <arg name=\"id\" type=\"s\" direction=\"out\"/>\n" \
" <arg name=\"path\" type=\"o\" direction=\"out\"/>\n" \
" <arg name=\"runtime_path\" type=\"o\" direction=\"out\"/>\n" \
@@ -207,9 +213,6 @@
" <signal name=\"PrepareForSleep\">\n" \
" <arg name=\"active\" type=\"b\"/>\n" \
" </signal>\n" \
- " <property name=\"ControlGroupHierarchy\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"Controllers\" type=\"as\" access=\"read\"/>\n" \
- " <property name=\"ResetControllers\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"NAutoVTs\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"KillOnlyUsers\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"KillExcludeUsers\" type=\"as\" access=\"read\"/>\n" \
@@ -308,27 +311,24 @@ static int bus_manager_append_preparing(DBusMessageIter *i, const char *property
return 0;
}
-static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMessage **_reply) {
+static int bus_manager_create_session(Manager *m, DBusMessage *message) {
+
const char *type, *class, *cseat, *tty, *display, *remote_user, *remote_host, *service;
uint32_t uid, leader, audit_id = 0;
- dbus_bool_t remote, kill_processes, exists;
- _cleanup_strv_free_ char **controllers = NULL, **reset_controllers = NULL;
- _cleanup_free_ char *cgroup = NULL, *id = NULL, *p = NULL;
- SessionType t;
- SessionClass c;
- DBusMessageIter iter;
- int r;
- uint32_t vtnr = 0;
- _cleanup_close_ int fifo_fd = -1;
- _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_free_ char *id = NULL;
Session *session = NULL;
User *user = NULL;
Seat *seat = NULL;
+ DBusMessageIter iter;
+ dbus_bool_t remote;
+ uint32_t vtnr = 0;
+ SessionType t;
+ SessionClass c;
bool b;
+ int r;
assert(m);
assert(message);
- assert(_reply);
if (!dbus_message_iter_init(message, &iter) ||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
@@ -342,8 +342,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
dbus_message_iter_get_basic(&iter, &leader);
- if (leader <= 0 ||
- !dbus_message_iter_next(&iter) ||
+ if (!dbus_message_iter_next(&iter) ||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
return -EINVAL;
@@ -405,8 +404,8 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
int v;
if (!seat)
- seat = m->vtconsole;
- else if (seat != m->vtconsole)
+ seat = m->seat0;
+ else if (seat != m->seat0)
return -EINVAL;
v = vtnr_from_tty(tty);
@@ -421,8 +420,8 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
} else if (tty_is_console(tty)) {
if (!seat)
- seat = m->vtconsole;
- else if (seat != m->vtconsole)
+ seat = m->seat0;
+ else if (seat != m->seat0)
return -EINVAL;
if (vtnr != 0)
@@ -430,7 +429,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
}
if (seat) {
- if (seat_can_multi_session(seat)) {
+ if (seat_has_vts(seat)) {
if (vtnr > 63)
return -EINVAL;
} else {
@@ -479,61 +478,37 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
dbus_message_iter_get_basic(&iter, &remote_host);
- if (!dbus_message_iter_next(&iter) ||
- dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
- dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING)
- return -EINVAL;
-
- r = bus_parse_strv_iter(&iter, &controllers);
- if (r < 0)
- return -EINVAL;
-
- if (!dbus_message_iter_next(&iter) ||
- dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
- dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRING) {
- r = -EINVAL;
- goto fail;
- }
-
- r = bus_parse_strv_iter(&iter, &reset_controllers);
- if (r < 0)
- goto fail;
-
- if (!dbus_message_iter_next(&iter) ||
- dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN) {
- r = -EINVAL;
- goto fail;
+ if (leader <= 0) {
+ leader = bus_get_unix_process_id(m->bus, dbus_message_get_sender(message), NULL);
+ if (leader == 0)
+ return -EINVAL;
}
- dbus_message_iter_get_basic(&iter, &kill_processes);
-
- r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, leader, &cgroup);
- if (r < 0)
- goto fail;
+ r = manager_get_session_by_pid(m, leader, &session);
+ if (session) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_free_ char *path = NULL;
+ _cleanup_close_ int fifo_fd = -1;
+ dbus_bool_t exists;
- r = manager_get_session_by_cgroup(m, cgroup, &session);
- if (r < 0)
- goto fail;
+ /* Session already exists, client is probably
+ * something like "su" which changes uid but is still
+ * the same session */
- if (session) {
fifo_fd = session_create_fifo(session);
if (fifo_fd < 0) {
r = fifo_fd;
goto fail;
}
- /* Session already exists, client is probably
- * something like "su" which changes uid but
- * is still the same audit session */
-
- reply = dbus_message_new_method_return(message);
- if (!reply) {
+ path = session_bus_path(session);
+ if (!path) {
r = -ENOMEM;
goto fail;
}
- p = session_bus_path(session);
- if (!p) {
+ reply = dbus_message_new_method_return(message);
+ if (!reply) {
r = -ENOMEM;
goto fail;
}
@@ -545,7 +520,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
b = dbus_message_append_args(
reply,
DBUS_TYPE_STRING, &session->id,
- DBUS_TYPE_OBJECT_PATH, &p,
+ DBUS_TYPE_OBJECT_PATH, &path,
DBUS_TYPE_STRING, &session->user->runtime_path,
DBUS_TYPE_UNIX_FD, &fifo_fd,
DBUS_TYPE_STRING, &cseat,
@@ -557,8 +532,10 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
goto fail;
}
- *_reply = reply;
- reply = NULL;
+ if (!dbus_connection_send(m->bus, reply, NULL)) {
+ r = -ENOMEM;
+ goto fail;
+ }
return 0;
}
@@ -577,6 +554,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
* the audit data and let's better register a new
* ID */
if (hashmap_get(m->sessions, id)) {
+ log_warning("Existing logind session ID %s used by new audit session, ignoring", id);
audit_id = 0;
free(id);
@@ -601,22 +579,19 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
if (r < 0)
goto fail;
- r = manager_add_session(m, user, id, &session);
+ r = manager_add_session(m, id, &session);
if (r < 0)
goto fail;
+ session_set_user(session, user);
+
session->leader = leader;
session->audit_id = audit_id;
session->type = t;
session->class = c;
session->remote = remote;
- session->kill_processes = kill_processes;
session->vtnr = vtnr;
- session->controllers = cg_shorten_controllers(controllers);
- session->reset_controllers = cg_shorten_controllers(reset_controllers);
- controllers = reset_controllers = NULL;
-
if (!isempty(tty)) {
session->tty = strdup(tty);
if (!session->tty) {
@@ -657,12 +632,6 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
}
}
- fifo_fd = session_create_fifo(session);
- if (fifo_fd < 0) {
- r = fifo_fd;
- goto fail;
- }
-
if (seat) {
r = seat_attach_session(seat, session);
if (r < 0)
@@ -673,38 +642,11 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
if (r < 0)
goto fail;
- reply = dbus_message_new_method_return(message);
- if (!reply) {
- r = -ENOMEM;
- goto fail;
- }
-
- p = session_bus_path(session);
- if (!p) {
- r = -ENOMEM;
- goto fail;
- }
-
- cseat = seat ? seat->id : "";
- exists = false;
- b = dbus_message_append_args(
- reply,
- DBUS_TYPE_STRING, &session->id,
- DBUS_TYPE_OBJECT_PATH, &p,
- DBUS_TYPE_STRING, &session->user->runtime_path,
- DBUS_TYPE_UNIX_FD, &fifo_fd,
- DBUS_TYPE_STRING, &cseat,
- DBUS_TYPE_UINT32, &vtnr,
- DBUS_TYPE_BOOLEAN, &exists,
- DBUS_TYPE_INVALID);
-
- if (!b) {
- r = -ENOMEM;
- goto fail;
- }
+ session->create_message = dbus_message_ref(message);
- *_reply = reply;
- reply = NULL;
+ /* Now, let's wait until the slice unit and stuff got
+ * created. We send the reply back from
+ * session_send_create_reply().*/
return 0;
@@ -1015,6 +957,7 @@ static int have_multiple_sessions(
* count, and non-login sessions do not count either. */
HASHMAP_FOREACH(session, m->sessions, i)
if (session->class == SESSION_USER &&
+ !session->closing &&
session->user->uid != uid)
return true;
@@ -1387,9 +1330,6 @@ static int bus_manager_do_shutdown_or_sleep(
static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_manager_append_handle_action, handle_action, HandleAction);
static const BusProperty bus_login_manager_properties[] = {
- { "ControlGroupHierarchy", bus_property_append_string, "s", offsetof(Manager, cgroup_path), true },
- { "Controllers", bus_property_append_strv, "as", offsetof(Manager, controllers), true },
- { "ResetControllers", bus_property_append_strv, "as", offsetof(Manager, reset_controllers), true },
{ "NAutoVTs", bus_property_append_unsigned, "u", offsetof(Manager, n_autovts) },
{ "KillOnlyUsers", bus_property_append_strv, "as", offsetof(Manager, kill_only_users), true },
{ "KillExcludeUsers", bus_property_append_strv, "as", offsetof(Manager, kill_exclude_users), true },
@@ -1530,6 +1470,40 @@ static DBusHandlerResult manager_message_handler(
if (!b)
goto oom;
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "GetUserByPID")) {
+ uint32_t pid;
+ char *p;
+ User *user;
+ bool b;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_UINT32, &pid,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ r = manager_get_user_by_pid(m, pid, &user);
+ if (r <= 0)
+ return bus_send_error_reply(connection, message, NULL, r < 0 ? r : -ENOENT);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ p = user_bus_path(user);
+ if (!p)
+ goto oom;
+
+ b = dbus_message_append_args(
+ reply,
+ DBUS_TYPE_OBJECT_PATH, &p,
+ DBUS_TYPE_INVALID);
+ free(p);
+
+ if (!b)
+ goto oom;
+
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "GetSeat")) {
const char *name;
char *p;
@@ -1612,7 +1586,6 @@ static DBusHandlerResult manager_message_handler(
goto oom;
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ListUsers")) {
- char *p;
User *user;
Iterator i;
DBusMessageIter iter, sub;
@@ -1627,6 +1600,7 @@ static DBusHandlerResult manager_message_handler(
goto oom;
HASHMAP_FOREACH(user, m->users, i) {
+ _cleanup_free_ char *p = NULL;
DBusMessageIter sub2;
uint32_t uid;
@@ -1646,8 +1620,6 @@ static DBusHandlerResult manager_message_handler(
goto oom;
}
- free(p);
-
if (!dbus_message_iter_close_container(&sub, &sub2))
goto oom;
}
@@ -1656,7 +1628,6 @@ static DBusHandlerResult manager_message_handler(
goto oom;
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ListSeats")) {
- char *p;
Seat *seat;
Iterator i;
DBusMessageIter iter, sub;
@@ -1671,6 +1642,7 @@ static DBusHandlerResult manager_message_handler(
goto oom;
HASHMAP_FOREACH(seat, m->seats, i) {
+ _cleanup_free_ char *p = NULL;
DBusMessageIter sub2;
if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2))
@@ -1686,8 +1658,6 @@ static DBusHandlerResult manager_message_handler(
goto oom;
}
- free(p);
-
if (!dbus_message_iter_close_container(&sub, &sub2))
goto oom;
}
@@ -1739,6 +1709,7 @@ static DBusHandlerResult manager_message_handler(
if (!dbus_message_iter_close_container(&iter, &sub))
goto oom;
+
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "Inhibit")) {
r = bus_manager_inhibit(m, connection, message, &error, &reply);
@@ -1749,7 +1720,7 @@ static DBusHandlerResult manager_message_handler(
} else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "CreateSession")) {
- r = bus_manager_create_session(m, message, &reply);
+ r = bus_manager_create_session(m, message);
/* Don't delay the work on OOM here, since it might be
* triggered by a low RLIMIT_NOFILE here (since we
@@ -2286,7 +2257,7 @@ static DBusHandlerResult manager_message_handler(
}
HASHMAP_FOREACH(user, m->users, i)
- fprintf(f, "<node name=\"user/%llu\"/>", (unsigned long long) user->uid);
+ fprintf(f, "<node name=\"user/_%llu\"/>", (unsigned long long) user->uid);
HASHMAP_FOREACH(session, m->sessions, i) {
p = bus_path_escape(session->id);
@@ -2326,7 +2297,7 @@ static DBusHandlerResult manager_message_handler(
if (reply) {
if (!bus_maybe_send_reply(connection, message, reply))
- goto oom;
+ goto oom;
}
return DBUS_HANDLER_RESULT_HANDLED;
@@ -2355,29 +2326,23 @@ DBusHandlerResult bus_message_filter(
dbus_error_init(&error);
- if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Agent", "Released")) {
- const char *cgroup;
-
- if (!dbus_message_get_args(message, &error,
- DBUS_TYPE_STRING, &cgroup,
- DBUS_TYPE_INVALID))
- log_error("Failed to parse Released message: %s", bus_error_message(&error));
- else
- manager_cgroup_notify_empty(m, cgroup);
+ log_debug("Got message: %s %s %s", strna(dbus_message_get_sender(message)), strna(dbus_message_get_interface(message)), strna(dbus_message_get_member(message)));
- } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
- uint32_t id;
+ if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
const char *path, *result, *unit;
+ uint32_t id;
if (!dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &id,
DBUS_TYPE_OBJECT_PATH, &path,
DBUS_TYPE_STRING, &unit,
DBUS_TYPE_STRING, &result,
- DBUS_TYPE_INVALID))
+ DBUS_TYPE_INVALID)) {
log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
+ goto finish;
+ }
- else if (m->action_job && streq(m->action_job, path)) {
+ if (m->action_job && streq(m->action_job, path)) {
log_info("Operation finished.");
/* Tell people that they now may take a lock again */
@@ -2387,9 +2352,141 @@ DBusHandlerResult bus_message_filter(
m->action_job = NULL;
m->action_unit = NULL;
m->action_what = 0;
+
+ } else {
+ Session *s;
+ User *u;
+
+ s = hashmap_get(m->session_units, unit);
+ if (s) {
+ if (streq_ptr(path, s->scope_job)) {
+ free(s->scope_job);
+ s->scope_job = NULL;
+
+ if (s->started) {
+ if (streq(result, "done"))
+ session_send_create_reply(s, NULL);
+ else {
+ dbus_set_error(&error, BUS_ERROR_JOB_FAILED, "Start job for unit %s failed with '%s'", unit, result);
+ session_send_create_reply(s, &error);
+ }
+ } else
+ session_save(s);
+ }
+
+ session_add_to_gc_queue(s);
+ }
+
+ u = hashmap_get(m->user_units, unit);
+ if (u) {
+ if (streq_ptr(path, u->service_job)) {
+ free(u->service_job);
+ u->service_job = NULL;
+ }
+
+ if (streq_ptr(path, u->slice_job)) {
+ free(u->slice_job);
+ u->slice_job = NULL;
+ }
+
+ user_save(u);
+ user_add_to_gc_queue(u);
+ }
+ }
+
+ } else if (dbus_message_is_signal(message, "org.freedesktop.DBus.Properties", "PropertiesChanged")) {
+
+ _cleanup_free_ char *unit = NULL;
+ const char *path;
+
+ path = dbus_message_get_path(message);
+ if (!path)
+ goto finish;
+
+ unit_name_from_dbus_path(path, &unit);
+ if (unit) {
+ Session *s;
+ User *u;
+
+ s = hashmap_get(m->session_units, unit);
+ if (s)
+ session_add_to_gc_queue(s);
+
+ u = hashmap_get(m->user_units, unit);
+ if (u)
+ user_add_to_gc_queue(u);
+ }
+
+ } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "UnitRemoved")) {
+
+ const char *path, *unit;
+ Session *session;
+ User *user;
+
+ if (!dbus_message_get_args(message, &error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse UnitRemoved message: %s", bus_error_message(&error));
+ goto finish;
+ }
+
+ session = hashmap_get(m->session_units, unit);
+ if (session)
+ session_add_to_gc_queue(session);
+
+ user = hashmap_get(m->user_units, unit);
+ if (user)
+ user_add_to_gc_queue(user);
+
+ } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "Reloading")) {
+ dbus_bool_t b;
+
+ if (!dbus_message_get_args(message, &error,
+ DBUS_TYPE_BOOLEAN, &b,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse Reloading message: %s", bus_error_message(&error));
+ goto finish;
+ }
+
+ /* systemd finished reloading, let's recheck all our sessions */
+ if (!b) {
+ Session *session;
+ Iterator i;
+
+ log_debug("System manager has been reloaded, rechecking sessions...");
+
+ HASHMAP_FOREACH(session, m->sessions, i)
+ session_add_to_gc_queue(session);
+ }
+
+ } else if (dbus_message_is_signal(message, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
+ const char *name, *old, *new;
+ char *key;
+
+ if (!dbus_message_get_args(message, &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_STRING, &old,
+ DBUS_TYPE_STRING, &new,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse NameOwnerChanged message: %s", bus_error_message(&error));
+ goto finish;
+ }
+
+ /* drop all controllers owned by this name */
+ if (*old && !*new && (key = hashmap_remove(m->busnames, old))) {
+ Session *session;
+ Iterator i;
+
+ free(key);
+
+ HASHMAP_FOREACH(session, m->sessions, i)
+ if (session_is_controller(session, old))
+ session_drop_controller(session);
}
}
+finish:
dbus_error_free(&error);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -2444,3 +2541,356 @@ int manager_dispatch_delayed(Manager *manager) {
return 1;
}
+
+int manager_start_scope(
+ Manager *manager,
+ const char *scope,
+ pid_t pid,
+ const char *slice,
+ const char *description,
+ const char *after,
+ const char *kill_mode,
+ DBusError *error,
+ char **job) {
+
+ const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs";
+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+ DBusMessageIter iter, sub, sub2, sub3, sub4;
+ uint64_t timeout = 500 * USEC_PER_MSEC;
+ dbus_bool_t send_sighup = true;
+ const char *fail = "fail";
+ uint32_t u;
+
+ assert(manager);
+ assert(scope);
+ assert(pid > 1);
+
+ if (!slice)
+ slice = "";
+
+ m = dbus_message_new_method_call(
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StartTransientUnit");
+ if (!m)
+ return log_oom();
+
+ dbus_message_iter_init_append(m, &iter);
+
+ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &scope) ||
+ !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &fail) ||
+ !dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sv)", &sub))
+ return log_oom();
+
+ if (!isempty(slice)) {
+ const char *slice_property = "Slice";
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &slice_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &slice) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+ }
+
+ if (!isempty(description)) {
+ const char *description_property = "Description";
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &description_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &description) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+ }
+
+ if (!isempty(after)) {
+ const char *after_property = "After";
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &after_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "as", &sub3) ||
+ !dbus_message_iter_open_container(&sub3, DBUS_TYPE_ARRAY, "s", &sub4) ||
+ !dbus_message_iter_append_basic(&sub4, DBUS_TYPE_STRING, &after) ||
+ !dbus_message_iter_close_container(&sub3, &sub4) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+ }
+
+ if (!isempty(kill_mode)) {
+ const char *kill_mode_property = "KillMode";
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &kill_mode_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &kill_mode) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+ }
+
+ /* cgroup empty notification is not available in containers
+ * currently. To make this less problematic, let's shorten the
+ * stop timeout for sessions, so that we don't wait
+ * forever. */
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &timeout_stop_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "t", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_UINT64, &timeout) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ /* Make sure that the session shells are terminated with
+ * SIGHUP since bash and friends tend to ignore SIGTERM */
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &send_sighup_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "b", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_BOOLEAN, &send_sighup) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ u = pid;
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &pids_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "au", &sub3) ||
+ !dbus_message_iter_open_container(&sub3, DBUS_TYPE_ARRAY, "u", &sub4) ||
+ !dbus_message_iter_append_basic(&sub4, DBUS_TYPE_UINT32, &u) ||
+ !dbus_message_iter_close_container(&sub3, &sub4) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ if (!dbus_message_iter_close_container(&iter, &sub))
+ return log_oom();
+
+ reply = dbus_connection_send_with_reply_and_block(manager->bus, m, -1, error);
+ if (!reply)
+ return -EIO;
+
+ if (job) {
+ const char *j;
+ char *copy;
+
+ if (!dbus_message_get_args(reply, error, DBUS_TYPE_OBJECT_PATH, &j, DBUS_TYPE_INVALID))
+ return -EIO;
+
+ copy = strdup(j);
+ if (!copy)
+ return -ENOMEM;
+
+ *job = copy;
+ }
+
+ return 0;
+}
+
+int manager_start_unit(Manager *manager, const char *unit, DBusError *error, char **job) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *fail = "fail";
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StartUnit",
+ &reply,
+ error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_STRING, &fail,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to start unit %s: %s", unit, bus_error(error, r));
+ return r;
+ }
+
+ if (job) {
+ const char *j;
+ char *copy;
+
+ if (!dbus_message_get_args(reply, error,
+ DBUS_TYPE_OBJECT_PATH, &j,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ copy = strdup(j);
+ if (!copy)
+ return -ENOMEM;
+
+ *job = copy;
+ }
+
+ return 0;
+}
+
+int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *fail = "fail";
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StopUnit",
+ &reply,
+ error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_STRING, &fail,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ if (dbus_error_has_name(error, BUS_ERROR_NO_SUCH_UNIT) ||
+ dbus_error_has_name(error, BUS_ERROR_LOAD_FAILED)) {
+
+ if (job)
+ *job = NULL;
+
+ dbus_error_free(error);
+ return 0;
+ }
+
+ log_error("Failed to stop unit %s: %s", unit, bus_error(error, r));
+ return r;
+ }
+
+ if (job) {
+ const char *j;
+ char *copy;
+
+ if (!dbus_message_get_args(reply, error,
+ DBUS_TYPE_OBJECT_PATH, &j,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ copy = strdup(j);
+ if (!copy)
+ return -ENOMEM;
+
+ *job = copy;
+ }
+
+ return 1;
+}
+
+int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *w;
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ w = who == KILL_LEADER ? "process" : "cgroup";
+ assert_cc(sizeof(signo) == sizeof(int32_t));
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "KillUnit",
+ &reply,
+ error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_STRING, &w,
+ DBUS_TYPE_INT32, &signo,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to stop unit %s: %s", unit, bus_error(error, r));
+ return r;
+ }
+
+ return 0;
+}
+
+int manager_unit_is_active(Manager *manager, const char *unit) {
+
+ const char *interface = "org.freedesktop.systemd1.Unit";
+ const char *property = "ActiveState";
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_free_ char *path = NULL;
+ DBusMessageIter iter, sub;
+ const char *state;
+ DBusError error;
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ dbus_error_init(&error);
+
+ path = unit_dbus_path_from_name(unit);
+ if (!path)
+ return -ENOMEM;
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ path,
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ &reply,
+ &error,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &property,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ if (dbus_error_has_name(&error, DBUS_ERROR_NO_REPLY) ||
+ dbus_error_has_name(&error, DBUS_ERROR_DISCONNECTED)) {
+ /* systemd might have droppped off
+ * momentarily, let's not make this an
+ * error */
+
+ dbus_error_free(&error);
+ return true;
+ }
+
+ if (dbus_error_has_name(&error, BUS_ERROR_NO_SUCH_UNIT) ||
+ dbus_error_has_name(&error, BUS_ERROR_LOAD_FAILED)) {
+ /* If the unit is already unloaded then it's
+ * not active */
+
+ dbus_error_free(&error);
+ return false;
+ }
+
+ log_error("Failed to query ActiveState: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
+ }
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_get_basic(&sub, &state);
+
+ return !streq(state, "inactive") && !streq(state, "failed");
+}
diff --git a/src/login/logind-device.c b/src/login/logind-device.c
index 51b15358ba..95c2307baf 100644
--- a/src/login/logind-device.c
+++ b/src/login/logind-device.c
@@ -25,7 +25,7 @@
#include "logind-device.h"
#include "util.h"
-Device* device_new(Manager *m, const char *sysfs) {
+Device* device_new(Manager *m, const char *sysfs, bool master) {
Device *d;
assert(m);
@@ -48,6 +48,7 @@ Device* device_new(Manager *m, const char *sysfs) {
}
d->manager = m;
+ d->master = master;
dual_timestamp_get(&d->timestamp);
return d;
@@ -66,20 +67,29 @@ void device_free(Device *d) {
void device_detach(Device *d) {
Seat *s;
+ SessionDevice *sd;
assert(d);
if (!d->seat)
return;
+ while ((sd = d->session_devices))
+ session_device_free(sd);
+
s = d->seat;
LIST_REMOVE(Device, devices, d->seat->devices, d);
d->seat = NULL;
- seat_add_to_gc_queue(s);
- seat_send_changed(s, "CanGraphical\0");
+ if (!seat_has_master_device(s)) {
+ seat_add_to_gc_queue(s);
+ seat_send_changed(s, "CanGraphical\0");
+ }
}
void device_attach(Device *d, Seat *s) {
+ Device *i;
+ bool had_master;
+
assert(d);
assert(s);
@@ -90,7 +100,26 @@ void device_attach(Device *d, Seat *s) {
device_detach(d);
d->seat = s;
- LIST_PREPEND(Device, devices, s->devices, d);
+ had_master = seat_has_master_device(s);
+
+ /* We keep the device list sorted by the "master" flag. That is, master
+ * devices are at the front, other devices at the tail. As there is no
+ * way to easily add devices at the list-tail, we need to iterate the
+ * list to find the first non-master device when adding non-master
+ * devices. We assume there is only a few (normally 1) master devices
+ * per seat, so we iterate only a few times. */
+
+ if (d->master || !s->devices)
+ LIST_PREPEND(Device, devices, s->devices, d);
+ else {
+ LIST_FOREACH(devices, i, s->devices) {
+ if (!i->devices_next || !i->master) {
+ LIST_INSERT_AFTER(Device, devices, s->devices, i, d);
+ break;
+ }
+ }
+ }
- seat_send_changed(s, "CanGraphical\0");
+ if (!had_master && d->master)
+ seat_send_changed(s, "CanGraphical\0");
}
diff --git a/src/login/logind-device.h b/src/login/logind-device.h
index 3b153568cb..fa6eda7e55 100644
--- a/src/login/logind-device.h
+++ b/src/login/logind-device.h
@@ -27,19 +27,22 @@ typedef struct Device Device;
#include "util.h"
#include "logind.h"
#include "logind-seat.h"
+#include "logind-session-device.h"
struct Device {
Manager *manager;
char *sysfs;
Seat *seat;
+ bool master;
dual_timestamp timestamp;
LIST_FIELDS(struct Device, devices);
+ LIST_HEAD(SessionDevice, session_devices);
};
-Device* device_new(Manager *m, const char *sysfs);
+Device* device_new(Manager *m, const char *sysfs, bool master);
void device_free(Device *d);
void device_attach(Device *d, Seat *s);
void device_detach(Device *d);
diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf
index 735d2dbc9c..845302a54d 100644
--- a/src/login/logind-gperf.gperf
+++ b/src/login/logind-gperf.gperf
@@ -19,8 +19,6 @@ Login.ReserveVT, config_parse_unsigned, 0, offsetof(Manag
Login.KillUserProcesses, config_parse_bool, 0, offsetof(Manager, kill_user_processes)
Login.KillOnlyUsers, config_parse_strv, 0, offsetof(Manager, kill_only_users)
Login.KillExcludeUsers, config_parse_strv, 0, offsetof(Manager, kill_exclude_users)
-Login.Controllers, config_parse_strv, 0, offsetof(Manager, controllers)
-Login.ResetControllers, config_parse_strv, 0, offsetof(Manager, reset_controllers)
Login.InhibitDelayMaxSec, config_parse_sec, 0, offsetof(Manager, inhibit_delay_max)
Login.HandlePowerKey, config_parse_handle_action, 0, offsetof(Manager, handle_power_key)
Login.HandleSuspendKey, config_parse_handle_action, 0, offsetof(Manager, handle_suspend_key)
diff --git a/src/login/logind-seat-dbus.c b/src/login/logind-seat-dbus.c
index 5c535ba0ec..230f7f082a 100644
--- a/src/login/logind-seat-dbus.c
+++ b/src/login/logind-seat-dbus.c
@@ -209,8 +209,8 @@ static int bus_seat_append_idle_hint_since(DBusMessageIter *i, const char *prope
}
static int get_seat_for_path(Manager *m, const char *path, Seat **_s) {
+ _cleanup_free_ char *id = NULL;
Seat *s;
- char *id;
assert(m);
assert(path);
@@ -224,8 +224,6 @@ static int get_seat_for_path(Manager *m, const char *path, Seat **_s) {
return -ENOMEM;
s = hashmap_get(m->seats, id);
- free(id);
-
if (!s)
return -ENOENT;
@@ -348,7 +346,7 @@ const DBusObjectPathVTable bus_seat_vtable = {
};
char *seat_bus_path(Seat *s) {
- _cleanup_free_ char *t;
+ _cleanup_free_ char *t = NULL;
assert(s);
diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
index 470d08bc05..feebcf4558 100644
--- a/src/login/logind-seat.c
+++ b/src/login/logind-seat.c
@@ -105,11 +105,11 @@ int seat_save(Seat *s) {
fprintf(f,
"# This is private data. Do not parse.\n"
- "IS_VTCONSOLE=%i\n"
+ "IS_SEAT0=%i\n"
"CAN_MULTI_SESSION=%i\n"
"CAN_TTY=%i\n"
"CAN_GRAPHICAL=%i\n",
- seat_is_vtconsole(s),
+ seat_is_seat0(s),
seat_can_multi_session(s),
seat_can_tty(s),
seat_can_graphical(s));
@@ -201,7 +201,7 @@ int seat_preallocate_vts(Seat *s) {
if (s->manager->n_autovts <= 0)
return 0;
- if (!seat_can_multi_session(s))
+ if (!seat_has_vts(s))
return 0;
for (i = 1; i <= s->manager->n_autovts; i++) {
@@ -246,10 +246,17 @@ int seat_set_active(Seat *s, Session *session) {
old_active = s->active;
s->active = session;
+ if (old_active) {
+ session_device_pause_all(old_active);
+ session_send_changed(old_active, "Active\0");
+ }
+
seat_apply_acls(s, old_active);
- if (session && session->started)
+ if (session && session->started) {
session_send_changed(session, "Active\0");
+ session_device_resume_all(session);
+ }
if (!session || session->started)
seat_send_changed(s, "ActiveSession\0");
@@ -277,7 +284,7 @@ int seat_active_vt_changed(Seat *s, int vtnr) {
assert(s);
assert(vtnr >= 1);
- if (!seat_can_multi_session(s))
+ if (!seat_has_vts(s))
return -EINVAL;
log_debug("VT changed to %i", vtnr);
@@ -301,7 +308,7 @@ int seat_read_active_vt(Seat *s) {
assert(s);
- if (!seat_can_multi_session(s))
+ if (!seat_has_vts(s))
return 0;
lseek(s->manager->console_active_fd, SEEK_SET, 0);
@@ -412,46 +419,64 @@ int seat_attach_session(Seat *s, Session *session) {
seat_send_changed(s, "Sessions\0");
- /* Note that even if a seat is not multi-session capable it
- * still might have multiple sessions on it since old, dead
- * sessions might continue to be tracked until all their
- * processes are gone. The most recently added session
- * (i.e. the first in s->sessions) is the one that matters. */
-
- if (!seat_can_multi_session(s))
+ /* On seats with VTs, the VT logic defines which session is active. On
+ * seats without VTs, we automatically activate the first session. */
+ if (!seat_has_vts(s) && !s->active)
seat_set_active(s, session);
return 0;
}
-bool seat_is_vtconsole(Seat *s) {
+void seat_complete_switch(Seat *s) {
+ Session *session;
+
assert(s);
- return s->manager->vtconsole == s;
+ /* if no session-switch is pending or if it got canceled, do nothing */
+ if (!s->pending_switch)
+ return;
+
+ session = s->pending_switch;
+ s->pending_switch = NULL;
+
+ seat_set_active(s, session);
}
-bool seat_can_multi_session(Seat *s) {
+bool seat_has_vts(Seat *s) {
assert(s);
- if (!seat_is_vtconsole(s))
- return false;
+ return seat_is_seat0(s) && s->manager->console_active_fd >= 0;
+}
- /* If we can't watch which VT is in the foreground, we don't
- * support VT switching */
+bool seat_is_seat0(Seat *s) {
+ assert(s);
- return s->manager->console_active_fd >= 0;
+ return s->manager->seat0 == s;
+}
+
+bool seat_can_multi_session(Seat *s) {
+ assert(s);
+
+ return seat_has_vts(s);
}
bool seat_can_tty(Seat *s) {
assert(s);
- return seat_is_vtconsole(s);
+ return seat_has_vts(s);
+}
+
+bool seat_has_master_device(Seat *s) {
+ assert(s);
+
+ /* device list is ordered by "master" flag */
+ return !!s->devices && s->devices->master;
}
bool seat_can_graphical(Seat *s) {
assert(s);
- return !!s->devices;
+ return seat_has_master_device(s);
}
int seat_get_idle_hint(Seat *s, dual_timestamp *t) {
@@ -496,10 +521,10 @@ int seat_check_gc(Seat *s, bool drop_not_started) {
if (drop_not_started && !s->started)
return 0;
- if (seat_is_vtconsole(s))
+ if (seat_is_seat0(s))
return 1;
- return !!s->devices;
+ return seat_has_master_device(s);
}
void seat_add_to_gc_queue(Seat *s) {
diff --git a/src/login/logind-seat.h b/src/login/logind-seat.h
index c8ab17f7cf..be6db6eed1 100644
--- a/src/login/logind-seat.h
+++ b/src/login/logind-seat.h
@@ -38,6 +38,7 @@ struct Seat {
LIST_HEAD(Device, devices);
Session *active;
+ Session *pending_switch;
LIST_HEAD(Session, sessions);
bool in_gc_queue:1;
@@ -59,10 +60,13 @@ int seat_read_active_vt(Seat *s);
int seat_preallocate_vts(Seat *s);
int seat_attach_session(Seat *s, Session *session);
+void seat_complete_switch(Seat *s);
-bool seat_is_vtconsole(Seat *s);
+bool seat_has_vts(Seat *s);
+bool seat_is_seat0(Seat *s);
bool seat_can_multi_session(Seat *s);
bool seat_can_tty(Seat *s);
+bool seat_has_master_device(Seat *s);
bool seat_can_graphical(Seat *s);
int seat_get_idle_hint(Seat *s, dual_timestamp *t);
diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
index ec823af547..5f6bafbc6a 100644
--- a/src/login/logind-session-dbus.c
+++ b/src/login/logind-session-dbus.c
@@ -24,6 +24,7 @@
#include "logind.h"
#include "logind-session.h"
+#include "logind-session-device.h"
#include "dbus-common.h"
#include "util.h"
@@ -40,6 +41,34 @@
" <arg name=\"who\" type=\"s\"/>\n" \
" <arg name=\"signal\" type=\"s\"/>\n" \
" </method>\n" \
+ " <method name=\"TakeControl\"/>\n" \
+ " <arg name=\"force\" type=\"b\"/>\n" \
+ " </method>\n" \
+ " <method name=\"ReleaseControl\"/>\n" \
+ " <method name=\"TakeDevice\">\n" \
+ " <arg name=\"major\" type=\"u\" direction=\"in\"/>\n" \
+ " <arg name=\"minor\" type=\"u\" direction=\"in\"/>\n" \
+ " <arg name=\"fd\" type=\"h\" direction=\"out\"/>\n" \
+ " <arg name=\"paused\" type=\"b\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"ReleaseDevice\">\n" \
+ " <arg name=\"major\" type=\"u\"/>\n" \
+ " <arg name=\"minor\" type=\"u\"/>\n" \
+ " </method>\n" \
+ " <method name=\"PauseDeviceComplete\">\n" \
+ " <arg name=\"major\" type=\"u\"/>\n" \
+ " <arg name=\"minor\" type=\"u\"/>\n" \
+ " </method>\n" \
+ " <signal name=\"PauseDevice\">\n" \
+ " <arg name=\"major\" type=\"u\"/>\n" \
+ " <arg name=\"minor\" type=\"u\"/>\n" \
+ " <arg name=\"type\" type=\"s\"/>\n" \
+ " </signal>\n" \
+ " <signal name=\"ResumeDevice\">\n" \
+ " <arg name=\"major\" type=\"u\"/>\n" \
+ " <arg name=\"minor\" type=\"u\"/>\n" \
+ " <arg name=\"fd\" type=\"h\"/>\n" \
+ " </signal>\n" \
" <signal name=\"Lock\"/>\n" \
" <signal name=\"Unlock\"/>\n" \
" <property name=\"Id\" type=\"s\" access=\"read\"/>\n" \
@@ -47,7 +76,6 @@
" <property name=\"Name\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Timestamp\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"TimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
- " <property name=\"DefaultControlGroup\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"VTNr\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"Seat\" type=\"(so)\" access=\"read\"/>\n" \
" <property name=\"TTY\" type=\"s\" access=\"read\"/>\n" \
@@ -56,15 +84,13 @@
" <property name=\"RemoteHost\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"RemoteUser\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Service\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"Scope\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Leader\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"Audit\" type=\"u\" access=\"read\"/>\n" \
" <property name=\"Type\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Class\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Active\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"State\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"Controllers\" type=\"as\" access=\"read\"/>\n" \
- " <property name=\"ResetControllers\" type=\"as\" access=\"read\"/>\n" \
- " <property name=\"KillProcesses\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"IdleHint\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"IdleSinceHint\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"IdleSinceHintMonotonic\" type=\"t\" access=\"read\"/>\n" \
@@ -195,24 +221,6 @@ static int bus_session_append_idle_hint_since(DBusMessageIter *i, const char *pr
return 0;
}
-static int bus_session_append_default_cgroup(DBusMessageIter *i, const char *property, void *data) {
- Session *s = data;
- _cleanup_free_ char *t = NULL;
- int r;
- bool success;
-
- assert(i);
- assert(property);
- assert(s);
-
- r = cg_join_spec(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, &t);
- if (r < 0)
- return r;
-
- success = dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &t);
- return success ? 0 : -ENOMEM;
-}
-
static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_session_append_type, session_type, SessionType);
static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_session_append_class, session_class, SessionClass);
@@ -233,8 +241,8 @@ static int bus_session_append_state(DBusMessageIter *i, const char *property, vo
}
static int get_session_for_path(Manager *m, const char *path, Session **_s) {
+ _cleanup_free_ char *id = NULL;
Session *s;
- char *id;
assert(m);
assert(path);
@@ -248,8 +256,6 @@ static int get_session_for_path(Manager *m, const char *path, Session **_s) {
return -ENOMEM;
s = hashmap_get(m->sessions, id);
- free(id);
-
if (!s)
return -ENOENT;
@@ -261,7 +267,6 @@ static const BusProperty bus_login_session_properties[] = {
{ "Id", bus_property_append_string, "s", offsetof(Session, id), true },
{ "Timestamp", bus_property_append_usec, "t", offsetof(Session, timestamp.realtime) },
{ "TimestampMonotonic", bus_property_append_usec, "t", offsetof(Session, timestamp.monotonic) },
- { "DefaultControlGroup", bus_session_append_default_cgroup, "s", 0, },
{ "VTNr", bus_property_append_uint32, "u", offsetof(Session, vtnr) },
{ "Seat", bus_session_append_seat, "(so)", 0 },
{ "TTY", bus_property_append_string, "s", offsetof(Session, tty), true },
@@ -270,15 +275,13 @@ static const BusProperty bus_login_session_properties[] = {
{ "RemoteUser", bus_property_append_string, "s", offsetof(Session, remote_user), true },
{ "RemoteHost", bus_property_append_string, "s", offsetof(Session, remote_host), true },
{ "Service", bus_property_append_string, "s", offsetof(Session, service), true },
+ { "Scope", bus_property_append_string, "s", offsetof(Session, scope), true },
{ "Leader", bus_property_append_pid, "u", offsetof(Session, leader) },
{ "Audit", bus_property_append_uint32, "u", offsetof(Session, audit_id) },
{ "Type", bus_session_append_type, "s", offsetof(Session, type) },
{ "Class", bus_session_append_class, "s", offsetof(Session, class) },
{ "Active", bus_session_append_active, "b", 0 },
{ "State", bus_session_append_state, "s", 0 },
- { "Controllers", bus_property_append_strv, "as", offsetof(Session, controllers), true },
- { "ResetControllers", bus_property_append_strv, "as", offsetof(Session, reset_controllers), true },
- { "KillProcesses", bus_property_append_bool, "b", offsetof(Session, kill_processes) },
{ "IdleHint", bus_session_append_idle_hint, "b", 0 },
{ "IdleSinceHint", bus_session_append_idle_hint_since, "t", 0 },
{ "IdleSinceHintMonotonic", bus_session_append_idle_hint_since, "t", 0 },
@@ -392,6 +395,147 @@ static DBusHandlerResult session_message_dispatch(
if (!reply)
goto oom;
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Session", "TakeControl")) {
+ dbus_bool_t force;
+ unsigned long ul;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_BOOLEAN, &force,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ ul = dbus_bus_get_unix_user(connection, dbus_message_get_sender(message), &error);
+ if (ul == (unsigned long) -1)
+ return bus_send_error_reply(connection, message, &error, -EIO);
+
+ if (ul != 0 && (force || ul != s->user->uid))
+ return bus_send_error_reply(connection, message, NULL, -EPERM);
+
+ r = session_set_controller(s, bus_message_get_sender_with_fallback(message), force);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Session", "ReleaseControl")) {
+ const char *sender = bus_message_get_sender_with_fallback(message);
+
+ if (!session_is_controller(s, sender))
+ return bus_send_error_reply(connection, message, NULL, -EPERM);
+
+ session_drop_controller(s);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Session", "TakeDevice")) {
+ SessionDevice *sd;
+ bool b;
+ dbus_bool_t paused;
+ uint32_t major, minor;
+ dev_t dev;
+
+ if (!session_is_controller(s, bus_message_get_sender_with_fallback(message)))
+ return bus_send_error_reply(connection, message, NULL, -EPERM);
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_UINT32, &major,
+ DBUS_TYPE_UINT32, &minor,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ dev = makedev(major, minor);
+ sd = hashmap_get(s->devices, &dev);
+ if (sd) {
+ /* We don't allow retrieving a device multiple times.
+ * The related ReleaseDevice call is not ref-counted.
+ * The caller should use dup() if it requires more than
+ * one fd (it would be functionally equivalent). */
+ return bus_send_error_reply(connection, message, &error, -EBUSY);
+ }
+
+ r = session_device_new(s, dev, &sd);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply) {
+ session_device_free(sd);
+ goto oom;
+ }
+
+ paused = !sd->active;
+ b = dbus_message_append_args(
+ reply,
+ DBUS_TYPE_UNIX_FD, &sd->fd,
+ DBUS_TYPE_BOOLEAN, &paused,
+ DBUS_TYPE_INVALID);
+ if (!b) {
+ session_device_free(sd);
+ return bus_send_error_reply(connection, message, NULL, -ENOMEM);
+ }
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Session", "ReleaseDevice")) {
+ SessionDevice *sd;
+ uint32_t major, minor;
+ dev_t dev;
+
+ if (!session_is_controller(s, bus_message_get_sender_with_fallback(message)))
+ return bus_send_error_reply(connection, message, NULL, -EPERM);
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_UINT32, &major,
+ DBUS_TYPE_UINT32, &minor,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ dev = makedev(major, minor);
+ sd = hashmap_get(s->devices, &dev);
+ if (!sd)
+ return bus_send_error_reply(connection, message, NULL, -ENODEV);
+
+ session_device_free(sd);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Session", "PauseDeviceComplete")) {
+ SessionDevice *sd;
+ uint32_t major, minor;
+ dev_t dev;
+
+ if (!session_is_controller(s, bus_message_get_sender_with_fallback(message)))
+ return bus_send_error_reply(connection, message, NULL, -EPERM);
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_UINT32, &major,
+ DBUS_TYPE_UINT32, &minor,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ dev = makedev(major, minor);
+ sd = hashmap_get(s->devices, &dev);
+ if (!sd)
+ return bus_send_error_reply(connection, message, NULL, -ENODEV);
+
+ session_device_complete_pause(sd);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
} else {
const BusBoundProperties bps[] = {
{ "org.freedesktop.login1.Session", bus_login_session_properties, s },
@@ -448,7 +592,7 @@ const DBusObjectPathVTable bus_session_vtable = {
};
char *session_bus_path(Session *s) {
- _cleanup_free_ char *t;
+ _cleanup_free_ char *t = NULL;
assert(s);
@@ -552,3 +696,81 @@ int session_send_lock_all(Manager *m, bool lock) {
return r;
}
+
+int session_send_create_reply(Session *s, DBusError *error) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+
+ assert(s);
+
+ if (!s->create_message)
+ return 0;
+
+ /* This is called after the session scope was successfully
+ * created, and finishes where bus_manager_create_session()
+ * left off. */
+
+ if (error) {
+ DBusError buffer;
+
+ dbus_error_init(&buffer);
+
+ if (!dbus_error_is_set(error)) {
+ dbus_set_error_const(&buffer, DBUS_ERROR_INVALID_ARGS, "Invalid Arguments");
+ error = &buffer;
+ }
+
+ reply = dbus_message_new_error(s->create_message, error->name, error->message);
+ dbus_error_free(&buffer);
+
+ if (!reply)
+ return log_oom();
+ } else {
+ _cleanup_close_ int fifo_fd = -1;
+ _cleanup_free_ char *path = NULL;
+ const char *cseat;
+ uint32_t vtnr;
+ dbus_bool_t exists;
+
+ fifo_fd = session_create_fifo(s);
+ if (fifo_fd < 0) {
+ log_error("Failed to create fifo: %s", strerror(-fifo_fd));
+ return fifo_fd;
+ }
+
+ path = session_bus_path(s);
+ if (!path)
+ return log_oom();
+
+ reply = dbus_message_new_method_return(s->create_message);
+ if (!reply)
+ return log_oom();
+
+ cseat = s->seat ? s->seat->id : "";
+ vtnr = s->vtnr;
+ exists = false;
+
+ if (!dbus_message_append_args(
+ reply,
+ DBUS_TYPE_STRING, &s->id,
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_STRING, &s->user->runtime_path,
+ DBUS_TYPE_UNIX_FD, &fifo_fd,
+ DBUS_TYPE_STRING, &cseat,
+ DBUS_TYPE_UINT32, &vtnr,
+ DBUS_TYPE_BOOLEAN, &exists,
+ DBUS_TYPE_INVALID))
+ return log_oom();
+ }
+
+ /* Update the state file before we notify the client about the
+ * result */
+ session_save(s);
+
+ if (!dbus_connection_send(s->manager->bus, reply, NULL))
+ return log_oom();
+
+ dbus_message_unref(s->create_message);
+ s->create_message = NULL;
+
+ return 0;
+}
diff --git a/src/login/logind-session-device.c b/src/login/logind-session-device.c
new file mode 100644
index 0000000000..6605935f3c
--- /dev/null
+++ b/src/login/logind-session-device.c
@@ -0,0 +1,483 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 David Herrmann
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <assert.h>
+#include <fcntl.h>
+#include <libudev.h>
+#include <linux/input.h>
+#include <linux/ioctl.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "dbus-common.h"
+#include "logind-session-device.h"
+#include "util.h"
+#include "missing.h"
+
+enum SessionDeviceNotifications {
+ SESSION_DEVICE_RESUME,
+ SESSION_DEVICE_TRY_PAUSE,
+ SESSION_DEVICE_PAUSE,
+ SESSION_DEVICE_RELEASE,
+};
+
+static void session_device_notify(SessionDevice *sd, enum SessionDeviceNotifications type) {
+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL;
+ _cleanup_free_ char *path = NULL;
+ const char *t = NULL;
+ uint32_t major, minor;
+
+ assert(sd);
+
+ major = major(sd->dev);
+ minor = minor(sd->dev);
+
+ if (!sd->session->controller)
+ return;
+
+ path = session_bus_path(sd->session);
+ if (!path)
+ return;
+
+ m = dbus_message_new_signal(path,
+ "org.freedesktop.login1.Session",
+ (type == SESSION_DEVICE_RESUME) ? "ResumeDevice" : "PauseDevice");
+ if (!m)
+ return;
+
+ if (!dbus_message_set_destination(m, sd->session->controller))
+ return;
+
+ switch (type) {
+ case SESSION_DEVICE_RESUME:
+ if (!dbus_message_append_args(m,
+ DBUS_TYPE_UINT32, &major,
+ DBUS_TYPE_UINT32, &minor,
+ DBUS_TYPE_UNIX_FD, &sd->fd,
+ DBUS_TYPE_INVALID))
+ return;
+ break;
+ case SESSION_DEVICE_TRY_PAUSE:
+ t = "pause";
+ break;
+ case SESSION_DEVICE_PAUSE:
+ t = "force";
+ break;
+ case SESSION_DEVICE_RELEASE:
+ t = "gone";
+ break;
+ default:
+ return;
+ }
+
+ if (t && !dbus_message_append_args(m,
+ DBUS_TYPE_UINT32, &major,
+ DBUS_TYPE_UINT32, &minor,
+ DBUS_TYPE_STRING, &t,
+ DBUS_TYPE_INVALID))
+ return;
+
+ dbus_connection_send(sd->session->manager->bus, m, NULL);
+}
+
+static int sd_eviocrevoke(int fd) {
+ static bool warned;
+ int r;
+
+ assert(fd >= 0);
+
+ r = ioctl(fd, EVIOCREVOKE, 1);
+ if (r < 0) {
+ r = -errno;
+ if (r == -EINVAL && !warned) {
+ warned = true;
+ log_warning("kernel does not support evdev-revocation");
+ }
+ }
+
+ return 0;
+}
+
+static int sd_drmsetmaster(int fd) {
+ int r;
+
+ assert(fd >= 0);
+
+ r = ioctl(fd, DRM_IOCTL_SET_MASTER, 0);
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+static int sd_drmdropmaster(int fd) {
+ int r;
+
+ assert(fd >= 0);
+
+ r = ioctl(fd, DRM_IOCTL_DROP_MASTER, 0);
+ if (r < 0)
+ return -errno;
+
+ return 0;
+}
+
+static int session_device_open(SessionDevice *sd, bool active) {
+ int fd, r;
+
+ assert(sd->type != DEVICE_TYPE_UNKNOWN);
+
+ /* open device and try to get an udev_device from it */
+ fd = open(sd->node, O_RDWR|O_CLOEXEC|O_NOCTTY|O_NONBLOCK);
+ if (fd < 0)
+ return -errno;
+
+ switch (sd->type) {
+ case DEVICE_TYPE_DRM:
+ if (active) {
+ /* Weird legacy DRM semantics might return an error
+ * even though we're master. No way to detect that so
+ * fail at all times and let caller retry in inactive
+ * state. */
+ r = sd_drmsetmaster(fd);
+ if (r < 0) {
+ close(fd);
+ return r;
+ }
+ } else {
+ /* DRM-Master is granted to the first user who opens a
+ * device automatically (ughh, racy!). Hence, we just
+ * drop DRM-Master in case we were the first. */
+ sd_drmdropmaster(fd);
+ }
+ break;
+ case DEVICE_TYPE_EVDEV:
+ if (!active)
+ sd_eviocrevoke(fd);
+ break;
+ case DEVICE_TYPE_UNKNOWN:
+ default:
+ /* fallback for devices wihout synchronizations */
+ break;
+ }
+
+ return fd;
+}
+
+static int session_device_start(SessionDevice *sd) {
+ int r;
+
+ assert(sd);
+ assert(session_is_active(sd->session));
+
+ if (sd->active)
+ return 0;
+
+ switch (sd->type) {
+ case DEVICE_TYPE_DRM:
+ /* Device is kept open. Simply call drmSetMaster() and hope
+ * there is no-one else. In case it fails, we keep the device
+ * paused. Maybe at some point we have a drmStealMaster(). */
+ r = sd_drmsetmaster(sd->fd);
+ if (r < 0)
+ return r;
+ break;
+ case DEVICE_TYPE_EVDEV:
+ /* Evdev devices are revoked while inactive. Reopen it and we
+ * are fine. */
+ r = session_device_open(sd, true);
+ if (r < 0)
+ return r;
+ close_nointr_nofail(sd->fd);
+ sd->fd = r;
+ break;
+ case DEVICE_TYPE_UNKNOWN:
+ default:
+ /* fallback for devices wihout synchronizations */
+ break;
+ }
+
+ sd->active = true;
+ return 0;
+}
+
+static void session_device_stop(SessionDevice *sd) {
+ assert(sd);
+
+ if (!sd->active)
+ return;
+
+ switch (sd->type) {
+ case DEVICE_TYPE_DRM:
+ /* On DRM devices we simply drop DRM-Master but keep it open.
+ * This allows the user to keep resources allocated. The
+ * CAP_SYS_ADMIN restriction to DRM-Master prevents users from
+ * circumventing this. */
+ sd_drmdropmaster(sd->fd);
+ break;
+ case DEVICE_TYPE_EVDEV:
+ /* Revoke access on evdev file-descriptors during deactivation.
+ * This will basically prevent any operations on the fd and
+ * cannot be undone. Good side is: it needs no CAP_SYS_ADMIN
+ * protection this way. */
+ sd_eviocrevoke(sd->fd);
+ break;
+ case DEVICE_TYPE_UNKNOWN:
+ default:
+ /* fallback for devices without synchronization */
+ break;
+ }
+
+ sd->active = false;
+}
+
+static DeviceType detect_device_type(struct udev_device *dev) {
+ const char *sysname, *subsystem;
+ DeviceType type;
+
+ sysname = udev_device_get_sysname(dev);
+ subsystem = udev_device_get_subsystem(dev);
+ type = DEVICE_TYPE_UNKNOWN;
+
+ if (streq_ptr(subsystem, "drm")) {
+ if (startswith(sysname, "card"))
+ type = DEVICE_TYPE_DRM;
+ } else if (streq_ptr(subsystem, "input")) {
+ if (startswith(sysname, "event"))
+ type = DEVICE_TYPE_EVDEV;
+ }
+
+ return type;
+}
+
+static int session_device_verify(SessionDevice *sd) {
+ struct udev_device *dev, *p = NULL;
+ const char *sp, *node;
+ int r;
+
+ dev = udev_device_new_from_devnum(sd->session->manager->udev, 'c', sd->dev);
+ if (!dev)
+ return -ENODEV;
+
+ sp = udev_device_get_syspath(dev);
+ node = udev_device_get_devnode(dev);
+ if (!node) {
+ r = -EINVAL;
+ goto err_dev;
+ }
+
+ /* detect device type so we can find the correct sysfs parent */
+ sd->type = detect_device_type(dev);
+ if (sd->type == DEVICE_TYPE_UNKNOWN) {
+ r = -ENODEV;
+ goto err_dev;
+ } else if (sd->type == DEVICE_TYPE_EVDEV) {
+ /* for evdev devices we need the parent node as device */
+ p = dev;
+ dev = udev_device_get_parent_with_subsystem_devtype(p, "input", NULL);
+ if (!dev) {
+ r = -ENODEV;
+ goto err_dev;
+ }
+ sp = udev_device_get_syspath(dev);
+ } else if (sd->type != DEVICE_TYPE_DRM) {
+ /* Prevent opening unsupported devices. Especially devices of
+ * subsystem "input" must be opened via the evdev node as
+ * we require EVIOCREVOKE. */
+ r = -ENODEV;
+ goto err_dev;
+ }
+
+ /* search for an existing seat device and return it if available */
+ sd->device = hashmap_get(sd->session->manager->devices, sp);
+ if (!sd->device) {
+ /* The caller might have gotten the udev event before we were
+ * able to process it. Hence, fake the "add" event and let the
+ * logind-manager handle the new device. */
+ r = manager_process_seat_device(sd->session->manager, dev);
+ if (r < 0)
+ goto err_dev;
+
+ /* if it's still not available, then the device is invalid */
+ sd->device = hashmap_get(sd->session->manager->devices, sp);
+ if (!sd->device) {
+ r = -ENODEV;
+ goto err_dev;
+ }
+ }
+
+ if (sd->device->seat != sd->session->seat) {
+ r = -EPERM;
+ goto err_dev;
+ }
+
+ sd->node = strdup(node);
+ if (!sd->node) {
+ r = -ENOMEM;
+ goto err_dev;
+ }
+
+ r = 0;
+err_dev:
+ udev_device_unref(p ? : dev);
+ return r;
+}
+
+int session_device_new(Session *s, dev_t dev, SessionDevice **out) {
+ SessionDevice *sd;
+ int r;
+
+ assert(s);
+ assert(out);
+
+ if (!s->seat)
+ return -EPERM;
+
+ sd = new0(SessionDevice, 1);
+ if (!sd)
+ return -ENOMEM;
+
+ sd->session = s;
+ sd->dev = dev;
+ sd->fd = -1;
+ sd->type = DEVICE_TYPE_UNKNOWN;
+
+ r = session_device_verify(sd);
+ if (r < 0)
+ goto error;
+
+ r = hashmap_put(s->devices, &sd->dev, sd);
+ if (r < 0) {
+ r = -ENOMEM;
+ goto error;
+ }
+
+ /* Open the device for the first time. We need a valid fd to pass back
+ * to the caller. If the session is not active, this _might_ immediately
+ * revoke access and thus invalidate the fd. But this is still needed
+ * to pass a valid fd back. */
+ sd->active = session_is_active(s);
+ r = session_device_open(sd, sd->active);
+ if (r < 0) {
+ /* EINVAL _may_ mean a master is active; retry inactive */
+ if (sd->active && r == -EINVAL) {
+ sd->active = false;
+ r = session_device_open(sd, false);
+ }
+ if (r < 0)
+ goto error;
+ }
+ sd->fd = r;
+
+ LIST_PREPEND(SessionDevice, sd_by_device, sd->device->session_devices, sd);
+
+ *out = sd;
+ return 0;
+
+error:
+ hashmap_remove(s->devices, &sd->dev);
+ free(sd->node);
+ free(sd);
+ return r;
+}
+
+void session_device_free(SessionDevice *sd) {
+ assert(sd);
+
+ session_device_stop(sd);
+ session_device_notify(sd, SESSION_DEVICE_RELEASE);
+ close_nointr_nofail(sd->fd);
+
+ LIST_REMOVE(SessionDevice, sd_by_device, sd->device->session_devices, sd);
+
+ hashmap_remove(sd->session->devices, &sd->dev);
+
+ free(sd->node);
+ free(sd);
+}
+
+void session_device_complete_pause(SessionDevice *sd) {
+ SessionDevice *iter;
+ Iterator i;
+
+ if (!sd->active)
+ return;
+
+ session_device_stop(sd);
+
+ /* if not all devices are paused, wait for further completion events */
+ HASHMAP_FOREACH(iter, sd->session->devices, i)
+ if (iter->active)
+ return;
+
+ /* complete any pending session switch */
+ seat_complete_switch(sd->session->seat);
+}
+
+void session_device_resume_all(Session *s) {
+ SessionDevice *sd;
+ Iterator i;
+ int r;
+
+ assert(s);
+
+ HASHMAP_FOREACH(sd, s->devices, i) {
+ if (!sd->active) {
+ r = session_device_start(sd);
+ if (!r)
+ session_device_notify(sd, SESSION_DEVICE_RESUME);
+ }
+ }
+}
+
+void session_device_pause_all(Session *s) {
+ SessionDevice *sd;
+ Iterator i;
+
+ assert(s);
+
+ HASHMAP_FOREACH(sd, s->devices, i) {
+ if (sd->active) {
+ session_device_stop(sd);
+ session_device_notify(sd, SESSION_DEVICE_PAUSE);
+ }
+ }
+}
+
+unsigned int session_device_try_pause_all(Session *s) {
+ SessionDevice *sd;
+ Iterator i;
+ unsigned int num_pending = 0;
+
+ assert(s);
+
+ HASHMAP_FOREACH(sd, s->devices, i) {
+ if (sd->active) {
+ session_device_notify(sd, SESSION_DEVICE_TRY_PAUSE);
+ ++num_pending;
+ }
+ }
+
+ return num_pending;
+}
diff --git a/src/login/logind-session-device.h b/src/login/logind-session-device.h
new file mode 100644
index 0000000000..61a843d09d
--- /dev/null
+++ b/src/login/logind-session-device.h
@@ -0,0 +1,59 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 David Herrmann
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+typedef enum DeviceType DeviceType;
+typedef struct SessionDevice SessionDevice;
+
+#include "list.h"
+#include "util.h"
+#include "logind.h"
+#include "logind-device.h"
+#include "logind-seat.h"
+#include "logind-session.h"
+
+enum DeviceType {
+ DEVICE_TYPE_UNKNOWN,
+ DEVICE_TYPE_DRM,
+ DEVICE_TYPE_EVDEV,
+};
+
+struct SessionDevice {
+ Session *session;
+ Device *device;
+
+ dev_t dev;
+ char *node;
+ int fd;
+ bool active;
+ DeviceType type;
+
+ LIST_FIELDS(struct SessionDevice, sd_by_device);
+};
+
+int session_device_new(Session *s, dev_t dev, SessionDevice **out);
+void session_device_free(SessionDevice *sd);
+void session_device_complete_pause(SessionDevice *sd);
+
+void session_device_resume_all(Session *s);
+void session_device_pause_all(Session *s);
+unsigned int session_device_try_pause_all(Session *s);
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index 662273b07f..27aa335142 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -25,21 +25,38 @@
#include <sys/epoll.h>
#include <fcntl.h>
-#include "systemd/sd-id128.h"
-#include "systemd/sd-messages.h"
+#include <systemd/sd-id128.h>
+#include <systemd/sd-messages.h>
+
#include "strv.h"
#include "util.h"
#include "mkdir.h"
#include "path-util.h"
-#include "cgroup-util.h"
-#include "logind-session.h"
#include "fileio.h"
+#include "dbus-common.h"
+#include "logind-session.h"
+
+static unsigned devt_hash_func(const void *p) {
+ uint64_t u = *(const dev_t*)p;
+
+ return uint64_hash_func(&u);
+}
+
+static int devt_compare_func(const void *_a, const void *_b) {
+ dev_t a, b;
-Session* session_new(Manager *m, User *u, const char *id) {
+ a = *(const dev_t*) _a;
+ b = *(const dev_t*) _b;
+
+ return a < b ? -1 : (a > b ? 1 : 0);
+}
+
+Session* session_new(Manager *m, const char *id) {
Session *s;
assert(m);
assert(id);
+ assert(session_id_valid(id));
s = new0(Session, 1);
if (!s)
@@ -51,9 +68,17 @@ Session* session_new(Manager *m, User *u, const char *id) {
return NULL;
}
+ s->devices = hashmap_new(devt_hash_func, devt_compare_func);
+ if (!s->devices) {
+ free(s->state_file);
+ free(s);
+ return NULL;
+ }
+
s->id = path_get_file_name(s->state_file);
if (hashmap_put(m->sessions, s->id, s) < 0) {
+ hashmap_free(s->devices);
free(s->state_file);
free(s);
return NULL;
@@ -61,19 +86,25 @@ Session* session_new(Manager *m, User *u, const char *id) {
s->manager = m;
s->fifo_fd = -1;
- s->user = u;
-
- LIST_PREPEND(Session, sessions_by_user, u->sessions, s);
return s;
}
void session_free(Session *s) {
+ SessionDevice *sd;
+
assert(s);
if (s->in_gc_queue)
LIST_REMOVE(Session, gc_queue, s->manager->session_gc_queue, s);
+ session_drop_controller(s);
+
+ while ((sd = hashmap_first(s->devices)))
+ session_device_free(sd);
+
+ hashmap_free(s->devices);
+
if (s->user) {
LIST_REMOVE(Session, sessions_by_user, s->user->sessions, s);
@@ -84,15 +115,21 @@ void session_free(Session *s) {
if (s->seat) {
if (s->seat->active == s)
s->seat->active = NULL;
+ if (s->seat->pending_switch == s)
+ s->seat->pending_switch = NULL;
LIST_REMOVE(Session, sessions_by_seat, s->seat->sessions, s);
}
- if (s->cgroup_path)
- hashmap_remove(s->manager->session_cgroups, s->cgroup_path);
+ if (s->scope) {
+ hashmap_remove(s->manager->session_units, s->scope);
+ free(s->scope);
+ }
+
+ free(s->scope_job);
- free(s->cgroup_path);
- strv_free(s->controllers);
+ if (s->create_message)
+ dbus_message_unref(s->create_message);
free(s->tty);
free(s->display);
@@ -107,13 +144,24 @@ void session_free(Session *s) {
free(s);
}
+void session_set_user(Session *s, User *u) {
+ assert(s);
+ assert(!s->user);
+
+ s->user = u;
+ LIST_PREPEND(Session, sessions_by_user, u->sessions, s);
+}
+
int session_save(Session *s) {
- FILE *f;
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_free_ char *temp_path = NULL;
int r = 0;
- char *temp_path;
assert(s);
+ if (!s->user)
+ return -ESTALE;
+
if (!s->started)
return 0;
@@ -135,79 +183,61 @@ int session_save(Session *s) {
"USER=%s\n"
"ACTIVE=%i\n"
"STATE=%s\n"
- "REMOTE=%i\n"
- "KILL_PROCESSES=%i\n",
+ "REMOTE=%i\n",
(unsigned long) s->user->uid,
s->user->name,
session_is_active(s),
session_state_to_string(session_get_state(s)),
- s->remote,
- s->kill_processes);
+ s->remote);
if (s->type >= 0)
- fprintf(f,
- "TYPE=%s\n",
- session_type_to_string(s->type));
+ fprintf(f, "TYPE=%s\n", session_type_to_string(s->type));
if (s->class >= 0)
- fprintf(f,
- "CLASS=%s\n",
- session_class_to_string(s->class));
+ fprintf(f, "CLASS=%s\n", session_class_to_string(s->class));
- if (s->cgroup_path)
- fprintf(f,
- "CGROUP=%s\n",
- s->cgroup_path);
+ if (s->scope)
+ fprintf(f, "SCOPE=%s\n", s->scope);
+
+ if (s->scope_job)
+ fprintf(f, "SCOPE_JOB=%s\n", s->scope_job);
if (s->fifo_path)
- fprintf(f,
- "FIFO=%s\n",
- s->fifo_path);
+ fprintf(f, "FIFO=%s\n", s->fifo_path);
if (s->seat)
- fprintf(f,
- "SEAT=%s\n",
- s->seat->id);
+ fprintf(f, "SEAT=%s\n", s->seat->id);
if (s->tty)
- fprintf(f,
- "TTY=%s\n",
- s->tty);
+ fprintf(f, "TTY=%s\n", s->tty);
if (s->display)
- fprintf(f,
- "DISPLAY=%s\n",
- s->display);
+ fprintf(f, "DISPLAY=%s\n", s->display);
if (s->remote_host)
- fprintf(f,
- "REMOTE_HOST=%s\n",
- s->remote_host);
+ fprintf(f, "REMOTE_HOST=%s\n", s->remote_host);
if (s->remote_user)
- fprintf(f,
- "REMOTE_USER=%s\n",
- s->remote_user);
+ fprintf(f, "REMOTE_USER=%s\n", s->remote_user);
if (s->service)
- fprintf(f,
- "SERVICE=%s\n",
- s->service);
+ fprintf(f, "SERVICE=%s\n", s->service);
- if (s->seat && seat_can_multi_session(s->seat))
- fprintf(f,
- "VTNR=%i\n",
- s->vtnr);
+ if (s->seat && seat_has_vts(s->seat))
+ fprintf(f, "VTNR=%i\n", s->vtnr);
if (s->leader > 0)
- fprintf(f,
- "LEADER=%lu\n",
- (unsigned long) s->leader);
+ fprintf(f, "LEADER=%lu\n", (unsigned long) s->leader);
if (s->audit_id > 0)
+ fprintf(f, "AUDIT=%"PRIu32"\n", s->audit_id);
+
+ if (dual_timestamp_is_set(&s->timestamp))
fprintf(f,
- "AUDIT=%llu\n",
- (unsigned long long) s->audit_id);
+ "REALTIME=%llu\n"
+ "MONOTONIC=%llu\n",
+ (unsigned long long) s->timestamp.realtime,
+ (unsigned long long) s->timestamp.monotonic);
fflush(f);
@@ -217,9 +247,6 @@ int session_save(Session *s) {
unlink(temp_path);
}
- fclose(f);
- free(temp_path);
-
finish:
if (r < 0)
log_error("Failed to save session data for %s: %s", s->id, strerror(-r));
@@ -228,14 +255,15 @@ finish:
}
int session_load(Session *s) {
- char *remote = NULL,
- *kill_processes = NULL,
+ _cleanup_free_ char *remote = NULL,
*seat = NULL,
*vtnr = NULL,
*leader = NULL,
- *audit_id = NULL,
*type = NULL,
- *class = NULL;
+ *class = NULL,
+ *uid = NULL,
+ *realtime = NULL,
+ *monotonic = NULL;
int k, r;
@@ -243,8 +271,8 @@ int session_load(Session *s) {
r = parse_env_file(s->state_file, NEWLINE,
"REMOTE", &remote,
- "KILL_PROCESSES", &kill_processes,
- "CGROUP", &s->cgroup_path,
+ "SCOPE", &s->scope,
+ "SCOPE_JOB", &s->scope_job,
"FIFO", &s->fifo_path,
"SEAT", &seat,
"TTY", &s->tty,
@@ -256,10 +284,39 @@ int session_load(Session *s) {
"LEADER", &leader,
"TYPE", &type,
"CLASS", &class,
+ "UID", &uid,
+ "REALTIME", &realtime,
+ "MONOTONIC", &monotonic,
NULL);
- if (r < 0)
- goto finish;
+ if (r < 0) {
+ log_error("Failed to read %s: %s", s->state_file, strerror(-r));
+ return r;
+ }
+
+ if (!s->user) {
+ uid_t u;
+ User *user;
+
+ if (!uid) {
+ log_error("UID not specified for session %s", s->id);
+ return -ENOENT;
+ }
+
+ r = parse_uid(uid, &u);
+ if (r < 0) {
+ log_error("Failed to parse UID value %s for session %s.", uid, s->id);
+ return r;
+ }
+
+ user = hashmap_get(s->manager->users, ULONG_TO_PTR((unsigned long) u));
+ if (!user) {
+ log_error("User of session %s not known.", s->id);
+ return -ENOENT;
+ }
+
+ session_set_user(s, user);
+ }
if (remote) {
k = parse_boolean(remote);
@@ -267,12 +324,6 @@ int session_load(Session *s) {
s->remote = k;
}
- if (kill_processes) {
- k = parse_boolean(kill_processes);
- if (k >= 0)
- s->kill_processes = k;
- }
-
if (seat && !s->seat) {
Seat *o;
@@ -281,7 +332,7 @@ int session_load(Session *s) {
seat_attach_session(o, s);
}
- if (vtnr && s->seat && seat_can_multi_session(s->seat)) {
+ if (vtnr && s->seat && seat_has_vts(s->seat)) {
int v;
k = safe_atoi(vtnr, &v);
@@ -324,25 +375,26 @@ int session_load(Session *s) {
close_nointr_nofail(fd);
}
-finish:
- free(remote);
- free(kill_processes);
- free(seat);
- free(vtnr);
- free(leader);
- free(audit_id);
- free(class);
+ if (realtime) {
+ unsigned long long l;
+ if (sscanf(realtime, "%llu", &l) > 0)
+ s->timestamp.realtime = l;
+ }
+
+ if (monotonic) {
+ unsigned long long l;
+ if (sscanf(monotonic, "%llu", &l) > 0)
+ s->timestamp.monotonic = l;
+ }
return r;
}
int session_activate(Session *s) {
- int r;
+ unsigned int num_pending;
assert(s);
-
- if (s->vtnr < 0)
- return -ENOTSUP;
+ assert(s->user);
if (!s->seat)
return -ENOTSUP;
@@ -350,17 +402,34 @@ int session_activate(Session *s) {
if (s->seat->active == s)
return 0;
- assert(seat_is_vtconsole(s->seat));
+ /* on seats with VTs, we let VTs manage session-switching */
+ if (seat_has_vts(s->seat)) {
+ if (s->vtnr <= 0)
+ return -ENOTSUP;
- r = chvt(s->vtnr);
- if (r < 0)
- return r;
+ return chvt(s->vtnr);
+ }
+
+ /* On seats without VTs, we implement session-switching in logind. We
+ * try to pause all session-devices and wait until the session
+ * controller acknowledged them. Once all devices are asleep, we simply
+ * switch the active session and be done.
+ * We save the session we want to switch to in seat->pending_switch and
+ * seat_complete_switch() will perform the final switch. */
- return seat_set_active(s->seat, s);
+ s->seat->pending_switch = s;
+
+ /* if no devices are running, immediately perform the session switch */
+ num_pending = session_device_try_pause_all(s);
+ if (!num_pending)
+ seat_complete_switch(s->seat);
+
+ return 0;
}
static int session_link_x11_socket(Session *s) {
- char *t, *f, *c;
+ _cleanup_free_ char *t = NULL, *f = NULL;
+ char *c;
size_t k;
assert(s);
@@ -384,7 +453,6 @@ static int session_link_x11_socket(Session *s) {
if (access(f, F_OK) < 0) {
log_warning("Session %s has display %s with non-existing socket %s.", s->id, s->display, f);
- free(f);
return -ENOENT;
}
@@ -393,10 +461,8 @@ static int session_link_x11_socket(Session *s) {
* path is owned by the user */
t = strappend(s->user->runtime_path, "/X11-display");
- if (!t) {
- free(f);
+ if (!t)
return log_oom();
- }
if (link(f, t) < 0) {
if (errno == EEXIST) {
@@ -416,128 +482,60 @@ static int session_link_x11_socket(Session *s) {
}
log_error("Failed to link %s to %s: %m", f, t);
- free(f);
- free(t);
return -errno;
}
}
done:
log_info("Linked %s to %s.", f, t);
- free(f);
- free(t);
-
s->user->display = s;
return 0;
}
-static int session_create_one_group(Session *s, const char *controller, const char *path) {
- int r;
-
- assert(s);
- assert(path);
-
- if (s->leader > 0) {
- r = cg_create_and_attach(controller, path, s->leader);
- if (r < 0)
- r = cg_create(controller, path, NULL);
- } else
- r = cg_create(controller, path, NULL);
-
- if (r < 0)
- return r;
-
- r = cg_set_task_access(controller, path, 0644, s->user->uid, s->user->gid, -1);
- if (r >= 0)
- r = cg_set_group_access(controller, path, 0755, s->user->uid, s->user->gid);
-
- return r;
-}
-
-static int session_create_cgroup(Session *s) {
- char **k;
- char *p;
+static int session_start_scope(Session *s) {
+ DBusError error;
int r;
assert(s);
assert(s->user);
- assert(s->user->cgroup_path);
+ assert(s->user->slice);
- if (!s->cgroup_path) {
- _cleanup_free_ char *name = NULL, *escaped = NULL;
+ dbus_error_init(&error);
- name = strappend(s->id, ".session");
- if (!name)
- return log_oom();
+ if (!s->scope) {
+ _cleanup_free_ char *description = NULL;
+ const char *kill_mode;
+ char *scope, *job;
- escaped = cg_escape(name);
- if (!escaped)
+ description = strjoin("Session ", s->id, " of user ", s->user->name, NULL);
+ if (!description)
return log_oom();
- p = strjoin(s->user->cgroup_path, "/", escaped, NULL);
- if (!p)
+ scope = strjoin("session-", s->id, ".scope", NULL);
+ if (!scope)
return log_oom();
- } else
- p = s->cgroup_path;
-
- r = session_create_one_group(s, SYSTEMD_CGROUP_CONTROLLER, p);
- if (r < 0) {
- log_error("Failed to create "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r));
- free(p);
- s->cgroup_path = NULL;
- return r;
- }
-
- s->cgroup_path = p;
- STRV_FOREACH(k, s->controllers) {
+ kill_mode = manager_shall_kill(s->manager, s->user->name) ? "control-group" : "none";
- if (strv_contains(s->reset_controllers, *k))
- continue;
+ r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-user-sessions.service", kill_mode, &error, &job);
+ if (r < 0) {
+ log_error("Failed to start session scope %s: %s %s",
+ scope, bus_error(&error, r), error.name);
+ dbus_error_free(&error);
- r = session_create_one_group(s, *k, p);
- if (r < 0)
- log_warning("Failed to create %s:%s: %s", *k, p, strerror(-r));
- }
-
- STRV_FOREACH(k, s->manager->controllers) {
-
- if (strv_contains(s->reset_controllers, *k) ||
- strv_contains(s->manager->reset_controllers, *k) ||
- strv_contains(s->controllers, *k))
- continue;
-
- r = session_create_one_group(s, *k, p);
- if (r < 0)
- log_warning("Failed to create %s:%s: %s", *k, p, strerror(-r));
- }
-
- if (s->leader > 0) {
-
- STRV_FOREACH(k, s->reset_controllers) {
- r = cg_attach(*k, "/", s->leader);
- if (r < 0)
- log_warning("Failed to reset controller %s: %s", *k, strerror(-r));
-
- }
-
- STRV_FOREACH(k, s->manager->reset_controllers) {
-
- if (strv_contains(s->reset_controllers, *k) ||
- strv_contains(s->controllers, *k))
- continue;
-
- r = cg_attach(*k, "/", s->leader);
- if (r < 0)
- log_warning("Failed to reset controller %s: %s", *k, strerror(-r));
+ free(scope);
+ return r;
+ } else {
+ s->scope = scope;
+ free(s->scope_job);
+ s->scope_job = job;
}
}
- r = hashmap_put(s->manager->session_cgroups, s->cgroup_path, s);
- if (r < 0)
- log_warning("Failed to create mapping between cgroup and session");
+ if (s->scope)
+ hashmap_put(s->manager->session_units, s->scope, s);
return 0;
}
@@ -546,7 +544,9 @@ int session_start(Session *s) {
int r;
assert(s);
- assert(s->user);
+
+ if (!s->user)
+ return -ESTALE;
if (s->started)
return 0;
@@ -555,6 +555,11 @@ int session_start(Session *s) {
if (r < 0)
return r;
+ /* Create cgroup */
+ r = session_start_scope(s);
+ if (r < 0)
+ return r;
+
log_struct(s->type == SESSION_TTY || s->type == SESSION_X11 ? LOG_INFO : LOG_DEBUG,
MESSAGE_ID(SD_MESSAGE_SESSION_START),
"SESSION_ID=%s", s->id,
@@ -563,15 +568,11 @@ int session_start(Session *s) {
"MESSAGE=New session %s of user %s.", s->id, s->user->name,
NULL);
- /* Create cgroup */
- r = session_create_cgroup(s);
- if (r < 0)
- return r;
-
/* Create X11 symlink */
session_link_x11_socket(s);
- dual_timestamp_get(&s->timestamp);
+ if (!dual_timestamp_is_set(&s->timestamp))
+ dual_timestamp_get(&s->timestamp);
if (s->seat)
seat_read_active_vt(s->seat);
@@ -598,79 +599,33 @@ int session_start(Session *s) {
return 0;
}
-static bool session_shall_kill(Session *s) {
- assert(s);
-
- if (!s->kill_processes)
- return false;
-
- if (strv_contains(s->manager->kill_exclude_users, s->user->name))
- return false;
-
- if (strv_isempty(s->manager->kill_only_users))
- return true;
-
- return strv_contains(s->manager->kill_only_users, s->user->name);
-}
-
-static int session_terminate_cgroup(Session *s) {
+static int session_stop_scope(Session *s) {
+ DBusError error;
+ char *job;
int r;
- char **k;
assert(s);
- if (!s->cgroup_path)
- return 0;
-
- cg_trim(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, false);
+ dbus_error_init(&error);
- if (session_shall_kill(s)) {
-
- r = cg_kill_recursive_and_wait(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, true);
- if (r < 0)
- log_error("Failed to kill session cgroup: %s", strerror(-r));
-
- } else {
- if (s->leader > 0) {
- Session *t;
-
- /* We still send a HUP to the leader process,
- * even if we are not supposed to kill the
- * whole cgroup. But let's first check the
- * leader still exists and belongs to our
- * session... */
-
- r = manager_get_session_by_pid(s->manager, s->leader, &t);
- if (r > 0 && t == s) {
- kill(s->leader, SIGTERM); /* for normal processes */
- kill(s->leader, SIGHUP); /* for shells */
- kill(s->leader, SIGCONT); /* in case they are stopped */
- }
- }
+ if (!s->scope)
+ return 0;
- r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, true);
- if (r < 0)
- log_error("Failed to check session cgroup: %s", strerror(-r));
- else if (r > 0) {
- r = cg_delete(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path);
- if (r < 0)
- log_error("Failed to delete session cgroup: %s", strerror(-r));
- }
+ r = manager_stop_unit(s->manager, s->scope, &error, &job);
+ if (r < 0) {
+ log_error("Failed to stop session scope: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
}
- STRV_FOREACH(k, s->user->manager->controllers)
- cg_trim(*k, s->cgroup_path, true);
-
- hashmap_remove(s->manager->session_cgroups, s->cgroup_path);
-
- free(s->cgroup_path);
- s->cgroup_path = NULL;
+ free(s->scope_job);
+ s->scope_job = job;
return 0;
}
static int session_unlink_x11_socket(Session *s) {
- char *t;
+ _cleanup_free_ char *t = NULL;
int r;
assert(s);
@@ -686,16 +641,34 @@ static int session_unlink_x11_socket(Session *s) {
return log_oom();
r = unlink(t);
- free(t);
-
return r < 0 ? -errno : 0;
}
int session_stop(Session *s) {
- int r = 0, k;
+ int r;
+
+ assert(s);
+
+ if (!s->user)
+ return -ESTALE;
+
+ /* Kill cgroup */
+ r = session_stop_scope(s);
+
+ session_save(s);
+
+ return r;
+}
+
+int session_finalize(Session *s) {
+ int r = 0;
+ SessionDevice *sd;
assert(s);
+ if (!s->user)
+ return -ESTALE;
+
if (s->started)
log_struct(s->type == SESSION_TTY || s->type == SESSION_X11 ? LOG_INFO : LOG_DEBUG,
MESSAGE_ID(SD_MESSAGE_SESSION_STOP),
@@ -705,10 +678,9 @@ int session_stop(Session *s) {
"MESSAGE=Removed session %s.", s->id,
NULL);
- /* Kill cgroup */
- k = session_terminate_cgroup(s);
- if (k < 0)
- r = k;
+ /* Kill session devices */
+ while ((sd = hashmap_first(s->devices)))
+ session_device_free(sd);
/* Remove X11 symlink */
session_unlink_x11_socket(s);
@@ -717,10 +689,10 @@ int session_stop(Session *s) {
session_add_to_gc_queue(s);
user_add_to_gc_queue(s->user);
- if (s->started)
+ if (s->started) {
session_send_signal(s, false);
-
- s->started = false;
+ s->started = false;
+ }
if (s->seat) {
if (s->seat->active == s)
@@ -817,28 +789,6 @@ int session_get_idle_hint(Session *s, dual_timestamp *t) {
goto found_atime;
}
- /* For other TTY sessions, let's find the most recent atime of
- * the ttys of any of the processes of the session */
- if (s->cgroup_path) {
- _cleanup_fclose_ FILE *f = NULL;
-
- if (cg_enumerate_processes(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, &f) >= 0) {
- pid_t pid;
-
- atime = 0;
- while (cg_read_pid(f, &pid) > 0) {
- usec_t a;
-
- if (get_process_ctty_atime(pid, &a) >= 0)
- if (atime == 0 || atime < a)
- atime = a;
- }
-
- if (atime != 0)
- goto found_atime;
- }
- }
-
dont_know:
if (t)
*t = s->idle_hint_timestamp;
@@ -961,8 +911,10 @@ int session_check_gc(Session *s, bool drop_not_started) {
if (drop_not_started && !s->started)
return 0;
- if (s->fifo_fd >= 0) {
+ if (!s->user)
+ return 0;
+ if (s->fifo_fd >= 0) {
r = pipe_eof(s->fifo_fd);
if (r < 0)
return r;
@@ -971,15 +923,11 @@ int session_check_gc(Session *s, bool drop_not_started) {
return 1;
}
- if (s->cgroup_path) {
+ if (s->scope_job)
+ return 1;
- r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, false);
- if (r < 0)
- return r;
-
- if (r <= 0)
- return 1;
- }
+ if (s->scope)
+ return manager_unit_is_active(s->manager, s->scope) != 0;
return 0;
}
@@ -997,6 +945,12 @@ void session_add_to_gc_queue(Session *s) {
SessionState session_get_state(Session *s) {
assert(s);
+ if (s->closing)
+ return SESSION_CLOSING;
+
+ if (s->scope_job)
+ return SESSION_OPENING;
+
if (s->fifo_fd < 0)
return SESSION_CLOSING;
@@ -1007,47 +961,69 @@ SessionState session_get_state(Session *s) {
}
int session_kill(Session *s, KillWho who, int signo) {
- int r = 0;
- Set *pid_set = NULL;
-
assert(s);
- if (!s->cgroup_path)
+ if (!s->scope)
return -ESRCH;
- if (s->leader <= 0 && who == KILL_LEADER)
- return -ESRCH;
+ return manager_kill_unit(s->manager, s->scope, who, signo, NULL);
+}
- if (s->leader > 0)
- if (kill(s->leader, signo) < 0)
- r = -errno;
+bool session_is_controller(Session *s, const char *sender)
+{
+ assert(s);
+
+ return streq_ptr(s->controller, sender);
+}
- if (who == KILL_ALL) {
- int q;
+int session_set_controller(Session *s, const char *sender, bool force) {
+ char *t;
+ int r;
- pid_set = set_new(trivial_hash_func, trivial_compare_func);
- if (!pid_set)
- return -ENOMEM;
+ assert(s);
+ assert(sender);
- if (s->leader > 0) {
- q = set_put(pid_set, LONG_TO_PTR(s->leader));
- if (q < 0)
- r = q;
- }
+ if (session_is_controller(s, sender))
+ return 0;
+ if (s->controller && !force)
+ return -EBUSY;
- q = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, s->cgroup_path, signo, false, true, false, pid_set);
- if (q < 0)
- if (q != -EAGAIN && q != -ESRCH && q != -ENOENT)
- r = q;
+ t = strdup(sender);
+ if (!t)
+ return -ENOMEM;
+
+ r = manager_watch_busname(s->manager, sender);
+ if (r) {
+ free(t);
+ return r;
}
- if (pid_set)
- set_free(pid_set);
+ session_drop_controller(s);
- return r;
+ s->controller = t;
+ return 0;
+}
+
+void session_drop_controller(Session *s) {
+ SessionDevice *sd;
+
+ assert(s);
+
+ if (!s->controller)
+ return;
+
+ manager_drop_busname(s->manager, s->controller);
+ free(s->controller);
+ s->controller = NULL;
+
+ /* Drop all devices as they're now unused. Do that after the controller
+ * is released to avoid sending out useles dbus signals. */
+ while ((sd = hashmap_first(s->devices)))
+ session_device_free(sd);
}
-static const char* const session_state_table[_SESSION_TYPE_MAX] = {
+static const char* const session_state_table[_SESSION_STATE_MAX] = {
+ [SESSION_OPENING] = "opening",
[SESSION_ONLINE] = "online",
[SESSION_ACTIVE] = "active",
[SESSION_CLOSING] = "closing"
diff --git a/src/login/logind-session.h b/src/login/logind-session.h
index a73df3a3bc..f175a8995e 100644
--- a/src/login/logind-session.h
+++ b/src/login/logind-session.h
@@ -22,17 +22,21 @@
***/
typedef struct Session Session;
+typedef enum KillWho KillWho;
#include "list.h"
#include "util.h"
#include "logind.h"
#include "logind-seat.h"
+#include "logind-session-device.h"
#include "logind-user.h"
+#include "login-shared.h"
typedef enum SessionState {
+ SESSION_OPENING, /* Session scope is being created */
SESSION_ONLINE, /* Logged in */
SESSION_ACTIVE, /* Logged in and in the fg */
- SESSION_CLOSING, /* Logged out, but processes still remain */
+ SESSION_CLOSING, /* Logged out, but scope is still there */
_SESSION_STATE_MAX,
_SESSION_STATE_INVALID = -1
} SessionState;
@@ -54,12 +58,12 @@ typedef enum SessionType {
_SESSION_TYPE_INVALID = -1
} SessionType;
-typedef enum KillWho {
+enum KillWho {
KILL_LEADER,
KILL_ALL,
_KILL_WHO_MAX,
_KILL_WHO_INVALID = -1
-} KillWho;
+};
struct Session {
Manager *manager;
@@ -80,9 +84,11 @@ struct Session {
bool remote;
char *remote_user;
char *remote_host;
-
char *service;
+ char *scope;
+ char *scope_job;
+
int vtnr;
Seat *seat;
@@ -92,15 +98,17 @@ struct Session {
int fifo_fd;
char *fifo_path;
- char *cgroup_path;
- char **controllers, **reset_controllers;
-
bool idle_hint;
dual_timestamp idle_hint_timestamp;
- bool kill_processes;
bool in_gc_queue:1;
bool started:1;
+ bool closing:1;
+
+ DBusMessage *create_message;
+
+ char *controller;
+ Hashmap *devices;
LIST_FIELDS(Session, sessions_by_user);
LIST_FIELDS(Session, sessions_by_seat);
@@ -108,8 +116,9 @@ struct Session {
LIST_FIELDS(Session, gc_queue);
};
-Session *session_new(Manager *m, User *u, const char *id);
+Session *session_new(Manager *m, const char *id);
void session_free(Session *s);
+void session_set_user(Session *s, User *u);
int session_check_gc(Session *s, bool drop_not_started);
void session_add_to_gc_queue(Session *s);
int session_activate(Session *s);
@@ -120,6 +129,7 @@ int session_create_fifo(Session *s);
void session_remove_fifo(Session *s);
int session_start(Session *s);
int session_stop(Session *s);
+int session_finalize(Session *s);
int session_save(Session *s);
int session_load(Session *s);
int session_kill(Session *s, KillWho who, int signo);
@@ -135,6 +145,8 @@ int session_send_changed(Session *s, const char *properties);
int session_send_lock(Session *s, bool lock);
int session_send_lock_all(Manager *m, bool lock);
+int session_send_create_reply(Session *s, DBusError *error);
+
const char* session_state_to_string(SessionState t) _const_;
SessionState session_state_from_string(const char *s) _pure_;
@@ -146,3 +158,7 @@ SessionClass session_class_from_string(const char *s) _pure_;
const char *kill_who_to_string(KillWho k) _const_;
KillWho kill_who_from_string(const char *s) _pure_;
+
+bool session_is_controller(Session *s, const char *sender);
+int session_set_controller(Session *s, const char *sender, bool force);
+void session_drop_controller(Session *s);
diff --git a/src/login/logind-user-dbus.c b/src/login/logind-user-dbus.c
index 3ec3ff8e61..fa2ecba53c 100644
--- a/src/login/logind-user-dbus.c
+++ b/src/login/logind-user-dbus.c
@@ -38,15 +38,15 @@
" <property name=\"Timestamp\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"TimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"RuntimePath\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"DefaultControlGroup\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Service\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"Slice\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Display\" type=\"(so)\" access=\"read\"/>\n" \
" <property name=\"State\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"Sessions\" type=\"a(so)\" access=\"read\"/>\n" \
" <property name=\"IdleHint\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"IdleSinceHint\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"IdleSinceHintMonotonic\" type=\"t\" access=\"read\"/>\n" \
- " </interface>\n" \
+ " </interface>\n"
#define INTROSPECTION \
DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
@@ -185,24 +185,6 @@ static int bus_user_append_idle_hint_since(DBusMessageIter *i, const char *prope
return 0;
}
-static int bus_user_append_default_cgroup(DBusMessageIter *i, const char *property, void *data) {
- User *u = data;
- _cleanup_free_ char *t = NULL;
- int r;
- bool success;
-
- assert(i);
- assert(property);
- assert(u);
-
- r = cg_join_spec(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, &t);
- if (r < 0)
- return r;
-
- success = dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &t);
- return success ? 0 : -ENOMEM;
-}
-
static int get_user_for_path(Manager *m, const char *path, User **_u) {
User *u;
unsigned long lu;
@@ -212,10 +194,10 @@ static int get_user_for_path(Manager *m, const char *path, User **_u) {
assert(path);
assert(_u);
- if (!startswith(path, "/org/freedesktop/login1/user/"))
+ if (!startswith(path, "/org/freedesktop/login1/user/_"))
return -EINVAL;
- r = safe_atolu(path + 29, &lu);
+ r = safe_atolu(path + 30, &lu);
if (r < 0)
return r;
@@ -234,8 +216,8 @@ static const BusProperty bus_login_user_properties[] = {
{ "Timestamp", bus_property_append_usec, "t", offsetof(User, timestamp.realtime) },
{ "TimestampMonotonic", bus_property_append_usec, "t", offsetof(User, timestamp.monotonic) },
{ "RuntimePath", bus_property_append_string, "s", offsetof(User, runtime_path), true },
- { "DefaultControlGroup", bus_user_append_default_cgroup, "s", 0 },
{ "Service", bus_property_append_string, "s", offsetof(User, service), true },
+ { "Slice", bus_property_append_string, "s", offsetof(User, slice), true },
{ "Display", bus_user_append_display, "(so)", 0 },
{ "State", bus_user_append_state, "s", 0 },
{ "Sessions", bus_user_append_sessions, "a(so)", 0 },
@@ -348,7 +330,7 @@ char *user_bus_path(User *u) {
assert(u);
- if (asprintf(&s, "/org/freedesktop/login1/user/%llu", (unsigned long long) u->uid) < 0)
+ if (asprintf(&s, "/org/freedesktop/login1/user/_%llu", (unsigned long long) u->uid) < 0)
return NULL;
return s;
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
index 9e2cbf646b..adbe638d46 100644
--- a/src/login/logind-user.c
+++ b/src/login/logind-user.c
@@ -23,13 +23,16 @@
#include <unistd.h>
#include <errno.h>
-#include "logind-user.h"
#include "util.h"
#include "mkdir.h"
#include "cgroup-util.h"
#include "hashmap.h"
#include "strv.h"
#include "fileio.h"
+#include "special.h"
+#include "unit-name.h"
+#include "dbus-common.h"
+#include "logind-user.h"
User* user_new(Manager *m, uid_t uid, gid_t gid, const char *name) {
User *u;
@@ -42,29 +45,27 @@ User* user_new(Manager *m, uid_t uid, gid_t gid, const char *name) {
return NULL;
u->name = strdup(name);
- if (!u->name) {
- free(u);
- return NULL;
- }
+ if (!u->name)
+ goto fail;
- if (asprintf(&u->state_file, "/run/systemd/users/%lu", (unsigned long) uid) < 0) {
- free(u->name);
- free(u);
- return NULL;
- }
+ if (asprintf(&u->state_file, "/run/systemd/users/%lu", (unsigned long) uid) < 0)
+ goto fail;
- if (hashmap_put(m->users, ULONG_TO_PTR((unsigned long) uid), u) < 0) {
- free(u->state_file);
- free(u->name);
- free(u);
- return NULL;
- }
+ if (hashmap_put(m->users, ULONG_TO_PTR((unsigned long) uid), u) < 0)
+ goto fail;
u->manager = m;
u->uid = uid;
u->gid = gid;
return u;
+
+fail:
+ free(u->state_file);
+ free(u->name);
+ free(u);
+
+ return NULL;
}
void user_free(User *u) {
@@ -76,11 +77,19 @@ void user_free(User *u) {
while (u->sessions)
session_free(u->sessions);
- if (u->cgroup_path)
- hashmap_remove(u->manager->user_cgroups, u->cgroup_path);
- free(u->cgroup_path);
+ if (u->slice) {
+ hashmap_remove(u->manager->user_units, u->slice);
+ free(u->slice);
+ }
+
+ if (u->service) {
+ hashmap_remove(u->manager->user_units, u->service);
+ free(u->service);
+ }
+
+ free(u->slice_job);
+ free(u->service_job);
- free(u->service);
free(u->runtime_path);
hashmap_remove(u->manager->users, ULONG_TO_PTR((unsigned long) u->uid));
@@ -91,9 +100,9 @@ void user_free(User *u) {
}
int user_save(User *u) {
- FILE *f;
+ _cleanup_free_ char *temp_path = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
int r;
- char *temp_path;
assert(u);
assert(u->state_file);
@@ -118,25 +127,28 @@ int user_save(User *u) {
u->name,
user_state_to_string(user_get_state(u)));
- if (u->cgroup_path)
- fprintf(f,
- "CGROUP=%s\n",
- u->cgroup_path);
-
if (u->runtime_path)
- fprintf(f,
- "RUNTIME=%s\n",
- u->runtime_path);
+ fprintf(f, "RUNTIME=%s\n", u->runtime_path);
if (u->service)
- fprintf(f,
- "SERVICE=%s\n",
- u->service);
+ fprintf(f, "SERVICE=%s\n", u->service);
+ if (u->service_job)
+ fprintf(f, "SERVICE_JOB=%s\n", u->service_job);
+
+ if (u->slice)
+ fprintf(f, "SLICE=%s\n", u->slice);
+ if (u->slice_job)
+ fprintf(f, "SLICE_JOB=%s\n", u->slice_job);
if (u->display)
+ fprintf(f, "DISPLAY=%s\n", u->display->id);
+
+ if (dual_timestamp_is_set(&u->timestamp))
fprintf(f,
- "DISPLAY=%s\n",
- u->display->id);
+ "REALTIME=%llu\n"
+ "MONOTONIC=%llu\n",
+ (unsigned long long) u->timestamp.realtime,
+ (unsigned long long) u->timestamp.monotonic);
if (u->sessions) {
Session *i;
@@ -233,9 +245,6 @@ int user_save(User *u) {
unlink(temp_path);
}
- fclose(f);
- free(temp_path);
-
finish:
if (r < 0)
log_error("Failed to save user data for %s: %s", u->name, strerror(-r));
@@ -244,21 +253,23 @@ finish:
}
int user_load(User *u) {
- int r;
- char *display = NULL;
+ _cleanup_free_ char *display = NULL, *realtime = NULL, *monotonic = NULL;
Session *s = NULL;
+ int r;
assert(u);
r = parse_env_file(u->state_file, NEWLINE,
- "CGROUP", &u->cgroup_path,
- "RUNTIME", &u->runtime_path,
- "SERVICE", &u->service,
- "DISPLAY", &display,
+ "RUNTIME", &u->runtime_path,
+ "SERVICE", &u->service,
+ "SERVICE_JOB", &u->service_job,
+ "SLICE", &u->slice,
+ "SLICE_JOB", &u->slice_job,
+ "DISPLAY", &display,
+ "REALTIME", &realtime,
+ "MONOTONIC", &monotonic,
NULL);
if (r < 0) {
- free(display);
-
if (r == -ENOENT)
return 0;
@@ -266,14 +277,24 @@ int user_load(User *u) {
return r;
}
- if (display) {
+ if (display)
s = hashmap_get(u->manager->sessions, display);
- free(display);
- }
if (s && s->display && display_is_local(s->display))
u->display = s;
+ if (realtime) {
+ unsigned long long l;
+ if (sscanf(realtime, "%llu", &l) > 0)
+ u->timestamp.realtime = l;
+ }
+
+ if (monotonic) {
+ unsigned long long l;
+ if (sscanf(monotonic, "%llu", &l) > 0)
+ u->timestamp.monotonic = l;
+ }
+
return r;
}
@@ -307,60 +328,76 @@ static int user_mkdir_runtime_path(User *u) {
return 0;
}
-static int user_create_cgroup(User *u) {
- char **k;
- char *p;
+static int user_start_slice(User *u) {
+ DBusError error;
+ char *job;
int r;
assert(u);
- if (!u->cgroup_path) {
- _cleanup_free_ char *name = NULL, *escaped = NULL;
-
- if (asprintf(&name, "%lu.user", (unsigned long) u->uid) < 0)
- return log_oom();
-
- escaped = cg_escape(name);
- if (!escaped)
- return log_oom();
-
- p = strjoin(u->manager->cgroup_path, "/", escaped, NULL);
- if (!p)
- return log_oom();
- } else
- p = u->cgroup_path;
+ dbus_error_init(&error);
- r = cg_create(SYSTEMD_CGROUP_CONTROLLER, p, NULL);
- if (r < 0) {
- log_error("Failed to create cgroup "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r));
- free(p);
- u->cgroup_path = NULL;
- return r;
- }
+ if (!u->slice) {
+ char lu[DECIMAL_STR_MAX(unsigned long) + 1], *slice;
+ sprintf(lu, "%lu", (unsigned long) u->uid);
- u->cgroup_path = p;
+ r = build_subslice(SPECIAL_USER_SLICE, lu, &slice);
+ if (r < 0)
+ return r;
- STRV_FOREACH(k, u->manager->controllers) {
+ r = manager_start_unit(u->manager, slice, &error, &job);
+ if (r < 0) {
+ log_error("Failed to start user slice: %s", bus_error(&error, r));
+ dbus_error_free(&error);
- if (strv_contains(u->manager->reset_controllers, *k))
- continue;
+ free(slice);
+ } else {
+ u->slice = slice;
- r = cg_create(*k, p, NULL);
- if (r < 0)
- log_warning("Failed to create cgroup %s:%s: %s", *k, p, strerror(-r));
+ free(u->slice_job);
+ u->slice_job = job;
+ }
}
- r = hashmap_put(u->manager->user_cgroups, u->cgroup_path, u);
- if (r < 0)
- log_warning("Failed to create mapping between cgroup and user");
+ if (u->slice)
+ hashmap_put(u->manager->user_units, u->slice, u);
return 0;
}
static int user_start_service(User *u) {
+ DBusError error;
+ char *job;
+ int r;
+
assert(u);
- /* FIXME: Fill me in later ... */
+ dbus_error_init(&error);
+
+ if (!u->service) {
+ char lu[DECIMAL_STR_MAX(unsigned long) + 1], *service;
+ sprintf(lu, "%lu", (unsigned long) u->uid);
+
+ service = unit_name_build("user", lu, ".service");
+ if (!service)
+ return log_oom();
+
+ r = manager_start_unit(u->manager, service, &error, &job);
+ if (r < 0) {
+ log_error("Failed to start user service: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+
+ free(service);
+ } else {
+ u->service = service;
+
+ free(u->service_job);
+ u->service_job = job;
+ }
+ }
+
+ if (u->service)
+ hashmap_put(u->manager->user_units, u->service, u);
return 0;
}
@@ -381,7 +418,7 @@ int user_start(User *u) {
return r;
/* Create cgroup */
- r = user_create_cgroup(u);
+ r = user_start_slice(u);
if (r < 0)
return r;
@@ -390,7 +427,8 @@ int user_start(User *u) {
if (r < 0)
return r;
- dual_timestamp_get(&u->timestamp);
+ if (!dual_timestamp_is_set(&u->timestamp))
+ dual_timestamp_get(&u->timestamp);
u->started = true;
@@ -402,66 +440,52 @@ int user_start(User *u) {
return 0;
}
-static int user_stop_service(User *u) {
- assert(u);
-
- if (!u->service)
- return 0;
-
- return 0;
-}
+static int user_stop_slice(User *u) {
+ DBusError error;
+ char *job;
+ int r;
-static int user_shall_kill(User *u) {
assert(u);
- if (!u->manager->kill_user_processes)
- return false;
+ dbus_error_init(&error);
+
+ if (!u->slice)
+ return 0;
- if (strv_contains(u->manager->kill_exclude_users, u->name))
- return false;
+ r = manager_stop_unit(u->manager, u->slice, &error, &job);
+ if (r < 0) {
+ log_error("Failed to stop user slice: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
+ }
- if (strv_isempty(u->manager->kill_only_users))
- return true;
+ free(u->slice_job);
+ u->slice_job = job;
- return strv_contains(u->manager->kill_only_users, u->name);
+ return r;
}
-static int user_terminate_cgroup(User *u) {
+static int user_stop_service(User *u) {
+ DBusError error;
+ char *job;
int r;
- char **k;
assert(u);
- if (!u->cgroup_path)
- return 0;
-
- cg_trim(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, false);
-
- if (user_shall_kill(u)) {
+ dbus_error_init(&error);
- r = cg_kill_recursive_and_wait(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, true);
- if (r < 0)
- log_error("Failed to kill user cgroup: %s", strerror(-r));
- } else {
+ if (!u->service)
+ return 0;
- r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, true);
- if (r < 0)
- log_error("Failed to check user cgroup: %s", strerror(-r));
- else if (r > 0) {
- r = cg_delete(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path);
- if (r < 0)
- log_error("Failed to delete user cgroup: %s", strerror(-r));
- } else
- r = -EBUSY;
+ r = manager_stop_unit(u->manager, u->service, &error, &job);
+ if (r < 0) {
+ log_error("Failed to stop user service: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
}
- STRV_FOREACH(k, u->manager->controllers)
- cg_trim(*k, u->cgroup_path, true);
-
- hashmap_remove(u->manager->user_cgroups, u->cgroup_path);
-
- free(u->cgroup_path);
- u->cgroup_path = NULL;
+ free(u->service_job);
+ u->service_job = job;
return r;
}
@@ -489,9 +513,6 @@ int user_stop(User *u) {
int r = 0, k;
assert(u);
- if (u->started)
- log_debug("User %s logged out.", u->name);
-
LIST_FOREACH(sessions_by_user, s, u->sessions) {
k = session_stop(s);
if (k < 0)
@@ -504,10 +525,30 @@ int user_stop(User *u) {
r = k;
/* Kill cgroup */
- k = user_terminate_cgroup(u);
+ k = user_stop_slice(u);
if (k < 0)
r = k;
+ user_save(u);
+
+ return r;
+}
+
+int user_finalize(User *u) {
+ Session *s;
+ int r = 0, k;
+
+ assert(u);
+
+ if (u->started)
+ log_debug("User %s logged out.", u->name);
+
+ LIST_FOREACH(sessions_by_user, s, u->sessions) {
+ k = session_finalize(s);
+ if (k < 0)
+ r = k;
+ }
+
/* Kill XDG_RUNTIME_DIR */
k = user_remove_runtime_path(u);
if (k < 0)
@@ -516,10 +557,10 @@ int user_stop(User *u) {
unlink(u->state_file);
user_add_to_gc_queue(u);
- if (u->started)
+ if (u->started) {
user_send_signal(u, false);
-
- u->started = false;
+ u->started = false;
+ }
return r;
}
@@ -574,8 +615,6 @@ static int user_check_linger_file(User *u) {
}
int user_check_gc(User *u, bool drop_not_started) {
- int r;
-
assert(u);
if (drop_not_started && !u->started)
@@ -587,14 +626,14 @@ int user_check_gc(User *u, bool drop_not_started) {
if (user_check_linger_file(u) > 0)
return 1;
- if (u->cgroup_path) {
- r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, false);
- if (r < 0)
- return r;
+ if (u->slice_job || u->service_job)
+ return 1;
- if (r <= 0)
- return 1;
- }
+ if (u->slice && manager_unit_is_active(u->manager, u->slice) != 0)
+ return 1;
+
+ if (u->service && manager_unit_is_active(u->manager, u->service) != 0)
+ return 1;
return 0;
}
@@ -615,6 +654,11 @@ UserState user_get_state(User *u) {
assert(u);
+ if (u->closing)
+ return USER_CLOSING;
+
+ if (u->slice_job || u->service_job)
+ return USER_OPENING;
LIST_FOREACH(sessions_by_user, i, u->sessions) {
if (session_is_active(i))
@@ -633,31 +677,17 @@ UserState user_get_state(User *u) {
}
int user_kill(User *u, int signo) {
- int r = 0, q;
- Set *pid_set = NULL;
-
assert(u);
- if (!u->cgroup_path)
+ if (!u->slice)
return -ESRCH;
- pid_set = set_new(trivial_hash_func, trivial_compare_func);
- if (!pid_set)
- return -ENOMEM;
-
- q = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, signo, false, true, false, pid_set);
- if (q < 0)
- if (q != -EAGAIN && q != -ESRCH && q != -ENOENT)
- r = q;
-
- if (pid_set)
- set_free(pid_set);
-
- return r;
+ return manager_kill_unit(u->manager, u->slice, KILL_ALL, signo, NULL);
}
static const char* const user_state_table[_USER_STATE_MAX] = {
[USER_OFFLINE] = "offline",
+ [USER_OPENING] = "opening",
[USER_LINGERING] = "lingering",
[USER_ONLINE] = "online",
[USER_ACTIVE] = "active",
diff --git a/src/login/logind-user.h b/src/login/logind-user.h
index 080354da74..b9171d345d 100644
--- a/src/login/logind-user.h
+++ b/src/login/logind-user.h
@@ -30,6 +30,7 @@ typedef struct User User;
typedef enum UserState {
USER_OFFLINE, /* Not logged in at all */
+ USER_OPENING, /* Is logging in */
USER_LINGERING, /* Lingering has been enabled by the admin for this user */
USER_ONLINE, /* User logged in */
USER_ACTIVE, /* User logged in and has a session in the fg */
@@ -47,8 +48,12 @@ struct User {
char *state_file;
char *runtime_path;
+
char *service;
- char *cgroup_path;
+ char *slice;
+
+ char *service_job;
+ char *slice_job;
Session *display;
@@ -56,6 +61,7 @@ struct User {
bool in_gc_queue:1;
bool started:1;
+ bool closing:1;
LIST_HEAD(Session, sessions);
LIST_FIELDS(User, gc_queue);
@@ -67,6 +73,7 @@ int user_check_gc(User *u, bool drop_not_started);
void user_add_to_gc_queue(User *u);
int user_start(User *u);
int user_stop(User *u);
+int user_finalize(User *u);
UserState user_get_state(User *u);
int user_get_idle_hint(User *u, dual_timestamp *t);
int user_save(User *u);
diff --git a/src/login/logind.c b/src/login/logind.c
index 5a394401dc..0628032ae5 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -20,13 +20,11 @@
***/
#include <errno.h>
-#include <pwd.h>
#include <libudev.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/epoll.h>
-#include <sys/ioctl.h>
#include <linux/vt.h>
#include <sys/timerfd.h>
@@ -74,24 +72,24 @@ Manager *manager_new(void) {
m->users = hashmap_new(trivial_hash_func, trivial_compare_func);
m->inhibitors = hashmap_new(string_hash_func, string_compare_func);
m->buttons = hashmap_new(string_hash_func, string_compare_func);
+ m->busnames = hashmap_new(string_hash_func, string_compare_func);
- m->user_cgroups = hashmap_new(string_hash_func, string_compare_func);
- m->session_cgroups = hashmap_new(string_hash_func, string_compare_func);
+ m->user_units = hashmap_new(string_hash_func, string_compare_func);
+ m->session_units = hashmap_new(string_hash_func, string_compare_func);
m->session_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
m->inhibitor_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
m->button_fds = hashmap_new(trivial_hash_func, trivial_compare_func);
- if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons ||
- !m->user_cgroups || !m->session_cgroups ||
+ if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons || !m->busnames ||
+ !m->user_units || !m->session_units ||
!m->session_fds || !m->inhibitor_fds || !m->button_fds) {
manager_free(m);
return NULL;
}
- m->reset_controllers = strv_new("cpu", NULL);
m->kill_exclude_users = strv_new("root", NULL);
- if (!m->reset_controllers || !m->kill_exclude_users) {
+ if (!m->kill_exclude_users) {
manager_free(m);
return NULL;
}
@@ -102,11 +100,6 @@ Manager *manager_new(void) {
return NULL;
}
- if (cg_get_user_path(&m->cgroup_path) < 0) {
- manager_free(m);
- return NULL;
- }
-
return m;
}
@@ -117,6 +110,7 @@ void manager_free(Manager *m) {
Seat *s;
Inhibitor *i;
Button *b;
+ char *n;
assert(m);
@@ -138,15 +132,19 @@ void manager_free(Manager *m) {
while ((b = hashmap_first(m->buttons)))
button_free(b);
+ while ((n = hashmap_first(m->busnames)))
+ free(hashmap_remove(m->busnames, n));
+
hashmap_free(m->devices);
hashmap_free(m->seats);
hashmap_free(m->sessions);
hashmap_free(m->users);
hashmap_free(m->inhibitors);
hashmap_free(m->buttons);
+ hashmap_free(m->busnames);
- hashmap_free(m->user_cgroups);
- hashmap_free(m->session_cgroups);
+ hashmap_free(m->user_units);
+ hashmap_free(m->session_units);
hashmap_free(m->session_fds);
hashmap_free(m->inhibitor_fds);
@@ -157,6 +155,8 @@ void manager_free(Manager *m) {
if (m->udev_seat_monitor)
udev_monitor_unref(m->udev_seat_monitor);
+ if (m->udev_device_monitor)
+ udev_monitor_unref(m->udev_device_monitor);
if (m->udev_vcsa_monitor)
udev_monitor_unref(m->udev_vcsa_monitor);
if (m->udev_button_monitor)
@@ -183,269 +183,13 @@ void manager_free(Manager *m) {
if (m->idle_action_fd >= 0)
close_nointr_nofail(m->idle_action_fd);
- strv_free(m->controllers);
- strv_free(m->reset_controllers);
strv_free(m->kill_only_users);
strv_free(m->kill_exclude_users);
free(m->action_job);
-
- free(m->cgroup_path);
free(m);
}
-int manager_add_device(Manager *m, const char *sysfs, Device **_device) {
- Device *d;
-
- assert(m);
- assert(sysfs);
-
- d = hashmap_get(m->devices, sysfs);
- if (d) {
- if (_device)
- *_device = d;
-
- return 0;
- }
-
- d = device_new(m, sysfs);
- if (!d)
- return -ENOMEM;
-
- if (_device)
- *_device = d;
-
- return 0;
-}
-
-int manager_add_seat(Manager *m, const char *id, Seat **_seat) {
- Seat *s;
-
- assert(m);
- assert(id);
-
- s = hashmap_get(m->seats, id);
- if (s) {
- if (_seat)
- *_seat = s;
-
- return 0;
- }
-
- s = seat_new(m, id);
- if (!s)
- return -ENOMEM;
-
- if (_seat)
- *_seat = s;
-
- return 0;
-}
-
-int manager_add_session(Manager *m, User *u, const char *id, Session **_session) {
- Session *s;
-
- assert(m);
- assert(id);
-
- s = hashmap_get(m->sessions, id);
- if (s) {
- if (_session)
- *_session = s;
-
- return 0;
- }
-
- s = session_new(m, u, id);
- if (!s)
- return -ENOMEM;
-
- if (_session)
- *_session = s;
-
- return 0;
-}
-
-int manager_add_user(Manager *m, uid_t uid, gid_t gid, const char *name, User **_user) {
- User *u;
-
- assert(m);
- assert(name);
-
- u = hashmap_get(m->users, ULONG_TO_PTR((unsigned long) uid));
- if (u) {
- if (_user)
- *_user = u;
-
- return 0;
- }
-
- u = user_new(m, uid, gid, name);
- if (!u)
- return -ENOMEM;
-
- if (_user)
- *_user = u;
-
- return 0;
-}
-
-int manager_add_user_by_name(Manager *m, const char *name, User **_user) {
- uid_t uid;
- gid_t gid;
- int r;
-
- assert(m);
- assert(name);
-
- r = get_user_creds(&name, &uid, &gid, NULL, NULL);
- if (r < 0)
- return r;
-
- return manager_add_user(m, uid, gid, name, _user);
-}
-
-int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user) {
- struct passwd *p;
-
- assert(m);
-
- errno = 0;
- p = getpwuid(uid);
- if (!p)
- return errno ? -errno : -ENOENT;
-
- return manager_add_user(m, uid, p->pw_gid, p->pw_name, _user);
-}
-
-int manager_add_inhibitor(Manager *m, const char* id, Inhibitor **_inhibitor) {
- Inhibitor *i;
-
- assert(m);
- assert(id);
-
- i = hashmap_get(m->inhibitors, id);
- if (i) {
- if (_inhibitor)
- *_inhibitor = i;
-
- return 0;
- }
-
- i = inhibitor_new(m, id);
- if (!i)
- return -ENOMEM;
-
- if (_inhibitor)
- *_inhibitor = i;
-
- return 0;
-}
-
-int manager_add_button(Manager *m, const char *name, Button **_button) {
- Button *b;
-
- assert(m);
- assert(name);
-
- b = hashmap_get(m->buttons, name);
- if (b) {
- if (_button)
- *_button = b;
-
- return 0;
- }
-
- b = button_new(m, name);
- if (!b)
- return -ENOMEM;
-
- if (_button)
- *_button = b;
-
- return 0;
-}
-
-int manager_process_seat_device(Manager *m, struct udev_device *d) {
- Device *device;
- int r;
-
- assert(m);
-
- if (streq_ptr(udev_device_get_action(d), "remove")) {
-
- device = hashmap_get(m->devices, udev_device_get_syspath(d));
- if (!device)
- return 0;
-
- seat_add_to_gc_queue(device->seat);
- device_free(device);
-
- } else {
- const char *sn;
- Seat *seat;
-
- sn = udev_device_get_property_value(d, "ID_SEAT");
- if (isempty(sn))
- sn = "seat0";
-
- if (!seat_name_is_valid(sn)) {
- log_warning("Device with invalid seat name %s found, ignoring.", sn);
- return 0;
- }
-
- r = manager_add_device(m, udev_device_get_syspath(d), &device);
- if (r < 0)
- return r;
-
- r = manager_add_seat(m, sn, &seat);
- if (r < 0) {
- if (!device->seat)
- device_free(device);
-
- return r;
- }
-
- device_attach(device, seat);
- seat_start(seat);
- }
-
- return 0;
-}
-
-int manager_process_button_device(Manager *m, struct udev_device *d) {
- Button *b;
-
- int r;
-
- assert(m);
-
- if (streq_ptr(udev_device_get_action(d), "remove")) {
-
- b = hashmap_get(m->buttons, udev_device_get_sysname(d));
- if (!b)
- return 0;
-
- button_free(b);
-
- } else {
- const char *sn;
-
- r = manager_add_button(m, udev_device_get_sysname(d), &b);
- if (r < 0)
- return r;
-
- sn = udev_device_get_property_value(d, "ID_SEAT");
- if (isempty(sn))
- sn = "seat0";
-
- button_set_seat(b, sn);
- button_open(b);
- }
-
- return 0;
-}
-
int manager_enumerate_devices(Manager *m) {
struct udev_list_entry *item = NULL, *first = NULL;
struct udev_enumerate *e;
@@ -554,7 +298,7 @@ finish:
}
int manager_enumerate_seats(Manager *m) {
- DIR *d;
+ _cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
int r = 0;
@@ -573,7 +317,7 @@ int manager_enumerate_seats(Manager *m) {
return -errno;
}
- while ((de = readdir(d))) {
+ FOREACH_DIRENT(de, d, return -errno) {
Seat *s;
int k;
@@ -591,66 +335,16 @@ int manager_enumerate_seats(Manager *m) {
r = k;
}
- closedir(d);
-
- return r;
-}
-
-static int manager_enumerate_users_from_cgroup(Manager *m) {
- _cleanup_closedir_ DIR *d = NULL;
- int r = 0, k;
- char *name;
-
- r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_path, &d);
- if (r < 0) {
- if (r == -ENOENT)
- return 0;
-
- log_error("Failed to open %s: %s", m->cgroup_path, strerror(-r));
- return r;
- }
-
- while ((k = cg_read_subgroup(d, &name)) > 0) {
- User *user;
- char *e;
-
- e = endswith(name, ".user");
- if (e) {
- *e = 0;
-
- k = manager_add_user_by_name(m, name, &user);
- if (k < 0) {
- free(name);
- r = k;
- continue;
- }
-
- user_add_to_gc_queue(user);
-
- if (!user->cgroup_path) {
- user->cgroup_path = strjoin(m->cgroup_path, "/", name, NULL);
- if (!user->cgroup_path) {
- k = log_oom();
- free(name);
- break;
- }
- }
- }
-
- free(name);
- }
-
- if (k < 0)
- r = k;
-
return r;
}
static int manager_enumerate_linger_users(Manager *m) {
- DIR *d;
+ _cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
int r = 0;
+ assert(m);
+
d = opendir("/var/lib/systemd/linger");
if (!d) {
if (errno == ENOENT)
@@ -660,7 +354,7 @@ static int manager_enumerate_linger_users(Manager *m) {
return -errno;
}
- while ((de = readdir(d))) {
+ FOREACH_DIRENT(de, d, return -errno) {
int k;
if (!dirent_is_file(de))
@@ -673,27 +367,20 @@ static int manager_enumerate_linger_users(Manager *m) {
}
}
- closedir(d);
-
return r;
}
int manager_enumerate_users(Manager *m) {
- DIR *d;
+ _cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
int r, k;
assert(m);
- /* First, enumerate user cgroups */
- r = manager_enumerate_users_from_cgroup(m);
+ /* Add lingering users */
+ r = manager_enumerate_linger_users(m);
- /* Second, add lingering users on top */
- k = manager_enumerate_linger_users(m);
- if (k < 0)
- r = k;
-
- /* Third, read in user data stored on disk */
+ /* Read in user data stored on disk */
d = opendir("/run/systemd/users");
if (!d) {
if (errno == ENOENT)
@@ -703,88 +390,23 @@ int manager_enumerate_users(Manager *m) {
return -errno;
}
- while ((de = readdir(d))) {
- uid_t uid;
+ FOREACH_DIRENT(de, d, return -errno) {
User *u;
if (!dirent_is_file(de))
continue;
- k = parse_uid(de->d_name, &uid);
+ k = manager_add_user_by_name(m, de->d_name, &u);
if (k < 0) {
- log_error("Failed to parse file name %s: %s", de->d_name, strerror(-k));
- continue;
- }
-
- u = hashmap_get(m->users, ULONG_TO_PTR(uid));
- if (!u) {
- unlinkat(dirfd(d), de->d_name, 0);
- continue;
- }
+ log_error("Failed to add user by file name %s: %s", de->d_name, strerror(-k));
- k = user_load(u);
- if (k < 0)
- r = k;
- }
-
- closedir(d);
-
- return r;
-}
-
-static int manager_enumerate_sessions_from_cgroup(Manager *m) {
- User *u;
- Iterator i;
- int r = 0;
-
- HASHMAP_FOREACH(u, m->users, i) {
- _cleanup_closedir_ DIR *d = NULL;
- char *name;
- int k;
-
- if (!u->cgroup_path)
- continue;
-
- k = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, &d);
- if (k < 0) {
- if (k == -ENOENT)
- continue;
-
- log_error("Failed to open %s: %s", u->cgroup_path, strerror(-k));
r = k;
continue;
}
- while ((k = cg_read_subgroup(d, &name)) > 0) {
- Session *session;
- char *e;
-
- e = endswith(name, ".session");
- if (e) {
- *e = 0;
-
- k = manager_add_session(m, u, name, &session);
- if (k < 0) {
- free(name);
- r = k;
- continue;
- }
-
- session_add_to_gc_queue(session);
-
- if (!session->cgroup_path) {
- session->cgroup_path = strjoin(m->cgroup_path, "/", name, NULL);
- if (!session->cgroup_path) {
- k = log_oom();
- free(name);
- break;
- }
- }
- }
-
- free(name);
- }
+ user_add_to_gc_queue(u);
+ k = user_load(u);
if (k < 0)
r = k;
}
@@ -793,16 +415,13 @@ static int manager_enumerate_sessions_from_cgroup(Manager *m) {
}
int manager_enumerate_sessions(Manager *m) {
- DIR *d;
+ _cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
int r = 0;
assert(m);
- /* First enumerate session cgroups */
- r = manager_enumerate_sessions_from_cgroup(m);
-
- /* Second, read in session data stored on disk */
+ /* Read in session data stored on disk */
d = opendir("/run/systemd/sessions");
if (!d) {
if (errno == ENOENT)
@@ -812,31 +431,39 @@ int manager_enumerate_sessions(Manager *m) {
return -errno;
}
- while ((de = readdir(d))) {
+ FOREACH_DIRENT(de, d, return -errno) {
struct Session *s;
int k;
if (!dirent_is_file(de))
continue;
- s = hashmap_get(m->sessions, de->d_name);
- if (!s) {
- unlinkat(dirfd(d), de->d_name, 0);
+ if (!session_id_valid(de->d_name)) {
+ log_warning("Invalid session file name '%s', ignoring.", de->d_name);
+ r = -EINVAL;
+ continue;
+ }
+
+ k = manager_add_session(m, de->d_name, &s);
+ if (k < 0) {
+ log_error("Failed to add session by file name %s: %s", de->d_name, strerror(-k));
+
+ r = k;
continue;
}
+ session_add_to_gc_queue(s);
+
k = session_load(s);
if (k < 0)
r = k;
}
- closedir(d);
-
return r;
}
int manager_enumerate_inhibitors(Manager *m) {
- DIR *d;
+ _cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
int r = 0;
@@ -851,7 +478,7 @@ int manager_enumerate_inhibitors(Manager *m) {
return -errno;
}
- while ((de = readdir(d))) {
+ FOREACH_DIRENT(de, d, return -errno) {
int k;
Inhibitor *i;
@@ -870,8 +497,6 @@ int manager_enumerate_inhibitors(Manager *m) {
r = k;
}
- closedir(d);
-
return r;
}
@@ -891,6 +516,22 @@ int manager_dispatch_seat_udev(Manager *m) {
return r;
}
+static int manager_dispatch_device_udev(Manager *m) {
+ struct udev_device *d;
+ int r;
+
+ assert(m);
+
+ d = udev_monitor_receive_device(m->udev_device_monitor);
+ if (!d)
+ return -ENOMEM;
+
+ r = manager_process_seat_device(m, d);
+ udev_device_unref(d);
+
+ return r;
+}
+
int manager_dispatch_vcsa_udev(Manager *m) {
struct udev_device *d;
int r = 0;
@@ -908,7 +549,7 @@ int manager_dispatch_vcsa_udev(Manager *m) {
* VTs, to make sure our auto VTs never go away. */
if (name && startswith(name, "vcsa") && streq_ptr(udev_device_get_action(d), "remove"))
- r = seat_preallocate_vts(m->vtconsole);
+ r = seat_preallocate_vts(m->seat0);
udev_device_unref(d);
@@ -933,87 +574,13 @@ int manager_dispatch_button_udev(Manager *m) {
int manager_dispatch_console(Manager *m) {
assert(m);
+ assert(m->seat0);
- if (m->vtconsole)
- seat_read_active_vt(m->vtconsole);
+ seat_read_active_vt(m->seat0);
return 0;
}
-static int vt_is_busy(int vtnr) {
- struct vt_stat vt_stat;
- int r = 0, fd;
-
- assert(vtnr >= 1);
-
- /* We explicitly open /dev/tty1 here instead of /dev/tty0. If
- * we'd open the latter we'd open the foreground tty which
- * hence would be unconditionally busy. By opening /dev/tty1
- * we avoid this. Since tty1 is special and needs to be an
- * explicitly loaded getty or DM this is safe. */
-
- fd = open_terminal("/dev/tty1", O_RDWR|O_NOCTTY|O_CLOEXEC);
- if (fd < 0)
- return -errno;
-
- if (ioctl(fd, VT_GETSTATE, &vt_stat) < 0)
- r = -errno;
- else
- r = !!(vt_stat.v_state & (1 << vtnr));
-
- close_nointr_nofail(fd);
-
- return r;
-}
-
-int manager_spawn_autovt(Manager *m, int vtnr) {
- int r;
- char *name = NULL;
- const char *mode = "fail";
-
- assert(m);
- assert(vtnr >= 1);
-
- if ((unsigned) vtnr > m->n_autovts &&
- (unsigned) vtnr != m->reserve_vt)
- return 0;
-
- if ((unsigned) vtnr != m->reserve_vt) {
- /* If this is the reserved TTY, we'll start the getty
- * on it in any case, but otherwise only if it is not
- * busy. */
-
- r = vt_is_busy(vtnr);
- if (r < 0)
- return r;
- else if (r > 0)
- return -EBUSY;
- }
-
- if (asprintf(&name, "autovt@tty%i.service", vtnr) < 0) {
- log_error("Could not allocate service name.");
- r = -ENOMEM;
- goto finish;
- }
-
- r = bus_method_call_with_reply (
- m->bus,
- "org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.systemd1.Manager",
- "StartUnit",
- NULL,
- NULL,
- DBUS_TYPE_STRING, &name,
- DBUS_TYPE_STRING, &mode,
- DBUS_TYPE_INVALID);
-
-finish:
- free(name);
-
- return r;
-}
-
static int manager_reserve_vt(Manager *m) {
_cleanup_free_ char *p = NULL;
@@ -1037,107 +604,6 @@ static int manager_reserve_vt(Manager *m) {
return 0;
}
-int manager_get_session_by_cgroup(Manager *m, const char *cgroup, Session **session) {
- Session *s;
- char *p;
-
- assert(m);
- assert(cgroup);
- assert(session);
-
- s = hashmap_get(m->session_cgroups, cgroup);
- if (s) {
- *session = s;
- return 1;
- }
-
- p = strdupa(cgroup);
-
- for (;;) {
- char *e;
-
- e = strrchr(p, '/');
- if (!e || e == p) {
- *session = NULL;
- return 0;
- }
-
- *e = 0;
-
- s = hashmap_get(m->session_cgroups, p);
- if (s) {
- *session = s;
- return 1;
- }
- }
-}
-
-int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user) {
- User *u;
- char *p;
-
- assert(m);
- assert(cgroup);
- assert(user);
-
- u = hashmap_get(m->user_cgroups, cgroup);
- if (u) {
- *user = u;
- return 1;
- }
-
- p = strdupa(cgroup);
- if (!p)
- return log_oom();
-
- for (;;) {
- char *e;
-
- e = strrchr(p, '/');
- if (!e || e == p) {
- *user = NULL;
- return 0;
- }
-
- *e = 0;
-
- u = hashmap_get(m->user_cgroups, p);
- if (u) {
- *user = u;
- return 1;
- }
- }
-}
-
-int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
- _cleanup_free_ char *p = NULL;
- int r;
-
- assert(m);
- assert(pid >= 1);
- assert(session);
-
- r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &p);
- if (r < 0)
- return r;
-
- return manager_get_session_by_cgroup(m, p, session);
-}
-
-void manager_cgroup_notify_empty(Manager *m, const char *cgroup) {
- Session *s;
- User *u;
- int r;
-
- r = manager_get_session_by_cgroup(m, cgroup, &s);
- if (r > 0)
- session_add_to_gc_queue(s);
-
- r = manager_get_user_by_cgroup(m, cgroup, &u);
- if (r > 0)
- user_add_to_gc_queue(u);
-}
-
static void manager_dispatch_other(Manager *m, int fd) {
Session *s;
Inhibitor *i;
@@ -1204,15 +670,75 @@ static int manager_connect_bus(Manager *m) {
dbus_bus_add_match(m->bus,
"type='signal',"
- "interface='org.freedesktop.systemd1.Agent',"
- "member='Released',"
- "path='/org/freedesktop/systemd1/agent'",
+ "sender='"DBUS_SERVICE_DBUS"',"
+ "interface='"DBUS_INTERFACE_DBUS"',"
+ "member='NameOwnerChanged',"
+ "path='"DBUS_PATH_DBUS"'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for NameOwnerChanged: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='JobRemoved',"
+ "path='/org/freedesktop/systemd1'",
&error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for JobRemoved: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='UnitRemoved',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
if (dbus_error_is_set(&error)) {
- log_error("Failed to register match: %s", bus_error_message(&error));
- r = -EIO;
- goto fail;
+ log_error("Failed to add match for UnitRemoved: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.DBus.Properties',"
+ "member='PropertiesChanged'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for PropertiesChanged: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='Reloading',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for Reloading: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ r = bus_method_call_with_reply(
+ m->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "Subscribe",
+ NULL,
+ &error,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to enable subscription: %s", bus_error(&error, r));
+ dbus_error_free(&error);
}
r = dbus_bus_request_name(m->bus, "org.freedesktop.login1", DBUS_NAME_FLAG_DO_NOT_QUEUE, &error);
@@ -1289,6 +815,7 @@ static int manager_connect_udev(Manager *m) {
assert(m);
assert(!m->udev_seat_monitor);
+ assert(!m->udev_device_monitor);
assert(!m->udev_vcsa_monitor);
assert(!m->udev_button_monitor);
@@ -1309,6 +836,33 @@ static int manager_connect_udev(Manager *m) {
if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->udev_seat_fd, &ev) < 0)
return -errno;
+ m->udev_device_monitor = udev_monitor_new_from_netlink(m->udev, "udev");
+ if (!m->udev_device_monitor)
+ return -ENOMEM;
+
+ r = udev_monitor_filter_add_match_subsystem_devtype(m->udev_device_monitor, "input", NULL);
+ if (r < 0)
+ return r;
+
+ r = udev_monitor_filter_add_match_subsystem_devtype(m->udev_device_monitor, "graphics", NULL);
+ if (r < 0)
+ return r;
+
+ r = udev_monitor_filter_add_match_subsystem_devtype(m->udev_device_monitor, "drm", NULL);
+ if (r < 0)
+ return r;
+
+ r = udev_monitor_enable_receiving(m->udev_device_monitor);
+ if (r < 0)
+ return r;
+
+ m->udev_device_fd = udev_monitor_get_fd(m->udev_device_monitor);
+ zero(ev);
+ ev.events = EPOLLIN;
+ ev.data.u32 = FD_DEVICE_UDEV;
+ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->udev_device_fd, &ev) < 0)
+ return -errno;
+
/* Don't watch keys if nobody cares */
if (m->handle_power_key != HANDLE_IGNORE ||
m->handle_suspend_key != HANDLE_IGNORE ||
@@ -1390,6 +944,7 @@ void manager_gc(Manager *m, bool drop_not_started) {
if (session_check_gc(session, drop_not_started) == 0) {
session_stop(session);
+ session_finalize(session);
session_free(session);
}
}
@@ -1400,50 +955,12 @@ void manager_gc(Manager *m, bool drop_not_started) {
if (user_check_gc(user, drop_not_started) == 0) {
user_stop(user);
+ user_finalize(user);
user_free(user);
}
}
}
-int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
- Session *s;
- bool idle_hint;
- dual_timestamp ts = { 0, 0 };
- Iterator i;
-
- assert(m);
-
- idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0);
-
- HASHMAP_FOREACH(s, m->sessions, i) {
- dual_timestamp k;
- int ih;
-
- ih = session_get_idle_hint(s, &k);
- if (ih < 0)
- return ih;
-
- if (!ih) {
- if (!idle_hint) {
- if (k.monotonic < ts.monotonic)
- ts = k;
- } else {
- idle_hint = false;
- ts = k;
- }
- } else if (idle_hint) {
-
- if (k.monotonic > ts.monotonic)
- ts = k;
- }
- }
-
- if (t)
- *t = ts;
-
- return idle_hint;
-}
-
int manager_dispatch_idle_action(Manager *m) {
struct dual_timestamp since;
struct itimerspec its = {};
@@ -1526,9 +1043,6 @@ int manager_startup(Manager *m) {
assert(m);
assert(m->epoll_fd <= 0);
- cg_shorten_controllers(m->reset_controllers);
- cg_shorten_controllers(m->controllers);
-
m->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
if (m->epoll_fd < 0)
return -errno;
@@ -1549,17 +1063,34 @@ int manager_startup(Manager *m) {
return r;
/* Instantiate magic seat 0 */
- r = manager_add_seat(m, "seat0", &m->vtconsole);
+ r = manager_add_seat(m, "seat0", &m->seat0);
if (r < 0)
return r;
/* Deserialize state */
- manager_enumerate_devices(m);
- manager_enumerate_seats(m);
- manager_enumerate_users(m);
- manager_enumerate_sessions(m);
- manager_enumerate_inhibitors(m);
- manager_enumerate_buttons(m);
+ r = manager_enumerate_devices(m);
+ if (r < 0)
+ log_warning("Device enumeration failed: %s", strerror(-r));
+
+ r = manager_enumerate_seats(m);
+ if (r < 0)
+ log_warning("Seat enumeration failed: %s", strerror(-r));
+
+ r = manager_enumerate_users(m);
+ if (r < 0)
+ log_warning("User enumeration failed: %s", strerror(-r));
+
+ r = manager_enumerate_sessions(m);
+ if (r < 0)
+ log_warning("Session enumeration failed: %s", strerror(-r));
+
+ r = manager_enumerate_inhibitors(m);
+ if (r < 0)
+ log_warning("Inhibitor enumeration failed: %s", strerror(-r));
+
+ r = manager_enumerate_buttons(m);
+ if (r < 0)
+ log_warning("Button enumeration failed: %s", strerror(-r));
/* Remove stale objects before we start them */
manager_gc(m, false);
@@ -1653,6 +1184,10 @@ int manager_run(Manager *m) {
manager_dispatch_seat_udev(m);
break;
+ case FD_DEVICE_UDEV:
+ manager_dispatch_device_udev(m);
+ break;
+
case FD_VCSA_UDEV:
manager_dispatch_vcsa_udev(m);
break;
diff --git a/src/login/logind.conf b/src/login/logind.conf
index 0861d73e0b..c0abf01b0c 100644
--- a/src/login/logind.conf
+++ b/src/login/logind.conf
@@ -13,8 +13,6 @@
#KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
-#Controllers=
-#ResetControllers=cpu
#InhibitDelayMaxSec=5
#HandlePowerKey=poweroff
#HandleSuspendKey=suspend
diff --git a/src/login/logind.h b/src/login/logind.h
index 904dc20467..9e6296cb7e 100644
--- a/src/login/logind.h
+++ b/src/login/logind.h
@@ -51,15 +51,17 @@ struct Manager {
Hashmap *users;
Hashmap *inhibitors;
Hashmap *buttons;
+ Hashmap *busnames;
LIST_HEAD(Seat, seat_gc_queue);
LIST_HEAD(Session, session_gc_queue);
LIST_HEAD(User, user_gc_queue);
struct udev *udev;
- struct udev_monitor *udev_seat_monitor, *udev_vcsa_monitor, *udev_button_monitor;
+ struct udev_monitor *udev_seat_monitor, *udev_device_monitor, *udev_vcsa_monitor, *udev_button_monitor;
int udev_seat_fd;
+ int udev_device_fd;
int udev_vcsa_fd;
int udev_button_fd;
@@ -72,20 +74,16 @@ struct Manager {
unsigned reserve_vt;
int reserve_vt_fd;
- Seat *vtconsole;
-
- char *cgroup_path;
- char **controllers, **reset_controllers;
+ Seat *seat0;
char **kill_only_users, **kill_exclude_users;
-
bool kill_user_processes;
unsigned long session_counter;
unsigned long inhibit_counter;
- Hashmap *session_cgroups;
- Hashmap *user_cgroups;
+ Hashmap *session_units;
+ Hashmap *user_units;
Hashmap *session_fds;
Hashmap *inhibitor_fds;
@@ -125,6 +123,7 @@ struct Manager {
enum {
FD_SEAT_UDEV,
+ FD_DEVICE_UDEV,
FD_VCSA_UDEV,
FD_BUTTON_UDEV,
FD_CONSOLE,
@@ -136,10 +135,10 @@ enum {
Manager *manager_new(void);
void manager_free(Manager *m);
-int manager_add_device(Manager *m, const char *sysfs, Device **_device);
+int manager_add_device(Manager *m, const char *sysfs, bool master, Device **_device);
int manager_add_button(Manager *m, const char *name, Button **_button);
int manager_add_seat(Manager *m, const char *id, Seat **_seat);
-int manager_add_session(Manager *m, User *u, const char *id, Session **_session);
+int manager_add_session(Manager *m, const char *id, Session **_session);
int manager_add_user(Manager *m, uid_t uid, gid_t gid, const char *name, User **_user);
int manager_add_user_by_name(Manager *m, const char *name, User **_user);
int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user);
@@ -165,14 +164,13 @@ int manager_startup(Manager *m);
int manager_run(Manager *m);
int manager_spawn_autovt(Manager *m, int vtnr);
-void manager_cgroup_notify_empty(Manager *m, const char *cgroup);
-
void manager_gc(Manager *m, bool drop_not_started);
+bool manager_shall_kill(Manager *m, const char *user);
+
int manager_get_idle_hint(Manager *m, dual_timestamp *t);
-int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user);
-int manager_get_session_by_cgroup(Manager *m, const char *cgroup, Session **session);
+int manager_get_user_by_pid(Manager *m, pid_t pid, User **user);
int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session);
extern const DBusObjectPathVTable bus_manager_vtable;
@@ -185,5 +183,14 @@ int manager_send_changed(Manager *manager, const char *properties);
int manager_dispatch_delayed(Manager *manager);
+int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, const char *kill_mode, DBusError *error, char **job);
+int manager_start_unit(Manager *manager, const char *unit, DBusError *error, char **job);
+int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job);
+int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error);
+int manager_unit_is_active(Manager *manager, const char *unit);
+
/* gperf lookup function */
const struct ConfigPerfItem* logind_gperf_lookup(const char *key, unsigned length);
+
+int manager_watch_busname(Manager *manager, const char *name);
+void manager_drop_busname(Manager *manager, const char *name);
diff --git a/src/login/org.freedesktop.login1.conf b/src/login/org.freedesktop.login1.conf
index 6c1f2f57e5..0407609c19 100644
--- a/src/login/org.freedesktop.login1.conf
+++ b/src/login/org.freedesktop.login1.conf
@@ -62,6 +62,10 @@
<allow send_destination="org.freedesktop.login1"
send_interface="org.freedesktop.login1.Manager"
+ send_member="ListMachines"/>
+
+ <allow send_destination="org.freedesktop.login1"
+ send_interface="org.freedesktop.login1.Manager"
send_member="ListSeats"/>
<allow send_destination="org.freedesktop.login1"
diff --git a/src/login/org.freedesktop.login1.policy.in b/src/login/org.freedesktop.login1.policy.in
index 0c551d4f9b..b96d32d526 100644
--- a/src/login/org.freedesktop.login1.policy.in
+++ b/src/login/org.freedesktop.login1.policy.in
@@ -190,7 +190,7 @@
<defaults>
<allow_any>auth_admin_keep</allow_any>
<allow_inactive>auth_admin_keep</allow_inactive>
- <allow_active>auth_admin_keep</allow_active>
+ <allow_active>yes</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.imply">org.freedesktop.login1.reboot</annotate>
</action>
diff --git a/src/login/pam-module.c b/src/login/pam-module.c
index 13290fd8ea..49296b5d63 100644
--- a/src/login/pam-module.c
+++ b/src/login/pam-module.c
@@ -43,11 +43,6 @@
static int parse_argv(pam_handle_t *handle,
int argc, const char **argv,
- char ***controllers,
- char ***reset_controllers,
- bool *kill_processes,
- char ***kill_only_users,
- char ***kill_exclude_users,
const char **class,
bool *debug) {
@@ -59,89 +54,15 @@ static int parse_argv(pam_handle_t *handle,
for (i = 0; i < (unsigned) argc; i++) {
int k;
- if (startswith(argv[i], "kill-session-processes=")) {
- if ((k = parse_boolean(argv[i] + 23)) < 0) {
- pam_syslog(handle, LOG_ERR, "Failed to parse kill-session-processes= argument.");
- return k;
- }
-
- if (kill_processes)
- *kill_processes = k;
-
- } else if (startswith(argv[i], "kill-session=")) {
- /* As compatibility for old versions */
-
- if ((k = parse_boolean(argv[i] + 13)) < 0) {
- pam_syslog(handle, LOG_ERR, "Failed to parse kill-session= argument.");
- return k;
- }
-
- if (kill_processes)
- *kill_processes = k;
-
- } else if (startswith(argv[i], "controllers=")) {
-
- if (controllers) {
- char **l;
-
- if (!(l = strv_split(argv[i] + 12, ","))) {
- pam_syslog(handle, LOG_ERR, "Out of memory.");
- return -ENOMEM;
- }
-
- strv_free(*controllers);
- *controllers = l;
- }
-
- } else if (startswith(argv[i], "reset-controllers=")) {
-
- if (reset_controllers) {
- char **l;
-
- if (!(l = strv_split(argv[i] + 18, ","))) {
- pam_syslog(handle, LOG_ERR, "Out of memory.");
- return -ENOMEM;
- }
-
- strv_free(*reset_controllers);
- *reset_controllers = l;
- }
-
- } else if (startswith(argv[i], "kill-only-users=")) {
-
- if (kill_only_users) {
- char **l;
-
- if (!(l = strv_split(argv[i] + 16, ","))) {
- pam_syslog(handle, LOG_ERR, "Out of memory.");
- return -ENOMEM;
- }
-
- strv_free(*kill_only_users);
- *kill_only_users = l;
- }
-
- } else if (startswith(argv[i], "kill-exclude-users=")) {
-
- if (kill_exclude_users) {
- char **l;
-
- if (!(l = strv_split(argv[i] + 19, ","))) {
- pam_syslog(handle, LOG_ERR, "Out of memory.");
- return -ENOMEM;
- }
-
- strv_free(*kill_exclude_users);
- *kill_exclude_users = l;
- }
-
- } else if (startswith(argv[i], "class=")) {
+ if (startswith(argv[i], "class=")) {
if (class)
*class = argv[i] + 6;
} else if (startswith(argv[i], "debug=")) {
- if ((k = parse_boolean(argv[i] + 6)) < 0) {
+ k = parse_boolean(argv[i] + 6);
+
+ if (k < 0) {
pam_syslog(handle, LOG_ERR, "Failed to parse debug= argument.");
return k;
}
@@ -149,14 +70,9 @@ static int parse_argv(pam_handle_t *handle,
if (debug)
*debug = k;
- } else if (startswith(argv[i], "create-session=") ||
- startswith(argv[i], "kill-user=")) {
-
- pam_syslog(handle, LOG_WARNING, "Option %s not supported anymore, ignoring.", argv[i]);
-
} else {
- pam_syslog(handle, LOG_ERR, "Unknown parameter '%s'.", argv[i]);
- return -EINVAL;
+ pam_syslog(handle, LOG_WARNING, "Unknown parameter '%s', ignoring", argv[i]);
+ return 0;
}
}
@@ -206,55 +122,6 @@ static int get_user_data(
return PAM_SUCCESS;
}
-static bool check_user_lists(
- pam_handle_t *handle,
- uid_t uid,
- char **kill_only_users,
- char **kill_exclude_users) {
-
- const char *name = NULL;
- char **l;
-
- assert(handle);
-
- if (uid == 0)
- name = "root"; /* Avoid obvious NSS requests, to suppress network traffic */
- else {
- struct passwd *pw;
-
- pw = pam_modutil_getpwuid(handle, uid);
- if (pw)
- name = pw->pw_name;
- }
-
- STRV_FOREACH(l, kill_exclude_users) {
- uid_t u;
-
- if (parse_uid(*l, &u) >= 0)
- if (u == uid)
- return false;
-
- if (name && streq(name, *l))
- return false;
- }
-
- if (strv_isempty(kill_only_users))
- return true;
-
- STRV_FOREACH(l, kill_only_users) {
- uid_t u;
-
- if (parse_uid(*l, &u) >= 0)
- if (u == uid)
- return true;
-
- if (name && streq(name, *l))
- return true;
- }
-
- return false;
-}
-
static int get_seat_from_display(const char *display, const char **seat, uint32_t *vtnr) {
_cleanup_free_ char *p = NULL;
int r;
@@ -316,13 +183,11 @@ _public_ PAM_EXTERN int pam_sm_open_session(
int argc, const char **argv) {
struct passwd *pw;
- bool kill_processes = false, debug = false;
+ bool debug = false;
const char *username, *id, *object_path, *runtime_path, *service = NULL, *tty = NULL, *display = NULL, *remote_user = NULL, *remote_host = NULL, *seat = NULL, *type = NULL, *class = NULL, *class_pam = NULL, *cvtnr = NULL;
- char **controllers = NULL, **reset_controllers = NULL, **kill_only_users = NULL, **kill_exclude_users = NULL;
DBusError error;
uint32_t uid, pid;
DBusMessageIter iter;
- dbus_bool_t kp;
int session_fd = -1;
DBusConnection *bus = NULL;
DBusMessage *m = NULL, *reply = NULL;
@@ -342,9 +207,8 @@ _public_ PAM_EXTERN int pam_sm_open_session(
if (parse_argv(handle,
argc, argv,
- &controllers, &reset_controllers,
- &kill_processes, &kill_only_users, &kill_exclude_users,
- &class_pam, &debug) < 0) {
+ &class_pam,
+ &debug) < 0) {
r = PAM_SESSION_ERR;
goto finish;
}
@@ -356,11 +220,11 @@ _public_ PAM_EXTERN int pam_sm_open_session(
/* Make sure we don't enter a loop by talking to
* systemd-logind when it is actually waiting for the
* background to finish start-up. If the service is
- * "systemd-shared" we simply set XDG_RUNTIME_DIR and
+ * "systemd-user" we simply set XDG_RUNTIME_DIR and
* leave. */
pam_get_item(handle, PAM_SERVICE, (const void**) &service);
- if (streq_ptr(service, "systemd-shared")) {
+ if (streq_ptr(service, "systemd-user")) {
char *p, *rt = NULL;
if (asprintf(&p, "/run/systemd/users/%lu", (unsigned long) pw->pw_uid) < 0) {
@@ -393,9 +257,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
goto finish;
}
- if (kill_processes)
- kill_processes = check_user_lists(handle, pw->pw_uid, kill_only_users, kill_exclude_users);
-
dbus_connection_set_change_sigpipe(FALSE);
bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
@@ -510,27 +371,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
dbus_message_iter_init_append(m, &iter);
- r = bus_append_strv_iter(&iter, controllers);
- if (r < 0) {
- pam_syslog(handle, LOG_ERR, "Could not attach parameter to message.");
- r = PAM_BUF_ERR;
- goto finish;
- }
-
- r = bus_append_strv_iter(&iter, reset_controllers);
- if (r < 0) {
- pam_syslog(handle, LOG_ERR, "Could not attach parameter to message.");
- r = PAM_BUF_ERR;
- goto finish;
- }
-
- kp = kill_processes;
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &kp)) {
- pam_syslog(handle, LOG_ERR, "Could not attach parameter to message.");
- r = PAM_BUF_ERR;
- goto finish;
- }
-
if (debug)
pam_syslog(handle, LOG_DEBUG, "Asking logind to create session: "
"uid=%u pid=%u service=%s type=%s class=%s seat=%s vtnr=%u tty=%s display=%s remote=%s remote_user=%s remote_host=%s",
@@ -613,11 +453,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
r = PAM_SUCCESS;
finish:
- strv_free(controllers);
- strv_free(reset_controllers);
- strv_free(kill_only_users);
- strv_free(kill_exclude_users);
-
dbus_error_free(&error);
if (bus) {
diff --git a/src/login/sd-login.c b/src/login/sd-login.c
index d0dc42f685..71d8c2942e 100644
--- a/src/login/sd-login.c
+++ b/src/login/sd-login.c
@@ -31,6 +31,7 @@
#include "sd-login.h"
#include "strv.h"
#include "fileio.h"
+#include "login-shared.h"
_public_ int sd_pid_get_session(pid_t pid, char **session) {
if (pid < 0)
@@ -72,6 +73,16 @@ _public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
return cg_pid_get_machine_name(pid, name);
}
+_public_ int sd_pid_get_slice(pid_t pid, char **slice) {
+
+ if (pid < 0)
+ return -EINVAL;
+ if (!slice)
+ return -EINVAL;
+
+ return cg_pid_get_slice(pid, slice);
+}
+
_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
if (pid < 0)
@@ -216,17 +227,19 @@ static int file_of_session(const char *session, char **_p) {
assert(_p);
- if (session)
+ if (session) {
+ if (!session_id_valid(session))
+ return -EINVAL;
+
p = strappend("/run/systemd/sessions/", session);
- else {
- char *buf;
+ } else {
+ _cleanup_free_ char *buf = NULL;
r = sd_pid_get_session(0, &buf);
if (r < 0)
return r;
p = strappend("/run/systemd/sessions/", buf);
- free(buf);
}
if (!p)
@@ -245,7 +258,6 @@ _public_ int sd_session_is_active(const char *session) {
return r;
r = parse_env_file(p, NEWLINE, "ACTIVE", &s, NULL);
-
if (r < 0)
return r;
@@ -337,6 +349,23 @@ _public_ int sd_session_get_tty(const char *session, char **tty) {
return session_get_string(session, "TTY", tty);
}
+_public_ int sd_session_get_vt(const char *session, unsigned *vtnr) {
+ _cleanup_free_ char *vtnr_string;
+ unsigned u;
+ int r;
+
+ r = session_get_string(session, "VTNr", &vtnr_string);
+ if (r < 0)
+ return r;
+
+ r = safe_atou(vtnr_string, &u);
+ if (r < 0)
+ return r;
+
+ *vtnr = u;
+ return 0;
+}
+
_public_ int sd_session_get_service(const char *session, char **service) {
return session_get_string(session, "SERVICE", service);
}
@@ -592,40 +621,7 @@ _public_ int sd_get_uids(uid_t **users) {
}
_public_ int sd_get_machine_names(char ***machines) {
- _cleanup_closedir_ DIR *d = NULL;
- _cleanup_strv_free_ char **l = NULL;
- _cleanup_free_ char *md = NULL;
- char *n;
- int c = 0, r;
-
- r = cg_get_machine_path(NULL, &md);
- if (r < 0)
- return r;
-
- r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, md, &d);
- if (r < 0)
- return r;
-
- while ((r = cg_read_subgroup(d, &n)) > 0) {
-
- r = strv_push(&l, n);
- if (r < 0) {
- free(n);
- return -ENOMEM;
- }
-
- c++;
- }
-
- if (r < 0)
- return r;
-
- if (machines) {
- *machines = l;
- l = NULL;
- }
-
- return c;
+ return get_files_in_directory("/run/systemd/machines/", machines);
}
static inline int MONITOR_TO_FD(sd_login_monitor *m) {
@@ -678,18 +674,7 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) {
}
if (!category || streq(category, "machine")) {
- _cleanup_free_ char *md = NULL, *p = NULL;
- int r;
-
- r = cg_get_machine_path(NULL, &md);
- if (r < 0)
- return r;
-
- r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, md, NULL, &p);
- if (r < 0)
- return r;
-
- k = inotify_add_watch(fd, p, IN_MOVED_TO|IN_CREATE|IN_DELETE);
+ k = inotify_add_watch(fd, "/run/systemd/machines/", IN_MOVED_TO|IN_DELETE);
if (k < 0) {
close_nointr_nofail(fd);
return -errno;
diff --git a/src/login/systemd-user b/src/login/systemd-user
new file mode 100644
index 0000000000..7b57dbf784
--- /dev/null
+++ b/src/login/systemd-user
@@ -0,0 +1,8 @@
+#%PAM-1.0
+
+# Used by systemd when launching systemd user instances.
+
+account include system-auth
+session include system-auth
+auth required pam_deny.so
+password required pam_deny.so
diff --git a/src/timestamp/timestamp.c b/src/login/test-login-shared.c
index 1152f1b52e..d29d7e7921 100644
--- a/src/timestamp/timestamp.c
+++ b/src/login/test-login-shared.c
@@ -3,7 +3,7 @@
/***
This file is part of systemd.
- Copyright 2010 Lennart Poettering
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
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
@@ -19,21 +19,23 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include <stdio.h>
+#include "macro.h"
+#include "login-shared.h"
-#include "util.h"
+static void test_session_id_valid(void) {
+ assert_se(session_id_valid("c1"));
+ assert_se(session_id_valid("1234"));
-int main(int argc, char *argv[]) {
- struct dual_timestamp t;
+ assert_se(!session_id_valid("1-2"));
+ assert_se(!session_id_valid(""));
+ assert_se(!session_id_valid("\tid"));
+}
- /* This is mostly useful for stuff like init ram disk scripts
- * which want to take a proper timestamp to do minimal bootup
- * profiling. */
+int main(int argc, char* argv[]) {
+ log_parse_environment();
+ log_open();
- dual_timestamp_get(&t);
- printf("%llu %llu\n",
- (unsigned long long) t.realtime,
- (unsigned long long) t.monotonic);
+ test_session_id_valid();
return 0;
}
diff --git a/src/login/test-login-tables.c b/src/login/test-login-tables.c
new file mode 100644
index 0000000000..a4196bf14b
--- /dev/null
+++ b/src/login/test-login-tables.c
@@ -0,0 +1,35 @@
+/***
+ This file is part of systemd
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "logind-action.h"
+#include "logind-session.h"
+
+#include "test-tables.h"
+
+int main(int argc, char **argv) {
+ test_table(handle_action, HANDLE_ACTION);
+ test_table(inhibit_mode, INHIBIT_MODE);
+ test_table(kill_who, KILL_WHO);
+ test_table(session_class, SESSION_CLASS);
+ test_table(session_state, SESSION_STATE);
+ test_table(session_type, SESSION_TYPE);
+ test_table(user_state, USER_STATE);
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/login/test-login.c b/src/login/test-login.c
index 945cb38be9..228ddb2933 100644
--- a/src/login/test-login.c
+++ b/src/login/test-login.c
@@ -27,7 +27,7 @@
#include "util.h"
#include "strv.h"
-int main(int argc, char* argv[]) {
+static void test_login(void) {
int r, k;
uid_t u, u2;
char *seat, *type, *class, *display;
@@ -215,6 +215,13 @@ int main(int argc, char* argv[]) {
}
sd_login_monitor_unref(m);
+}
+
+int main(int argc, char* argv[]) {
+ log_parse_environment();
+ log_open();
+
+ test_login();
return 0;
}
diff --git a/src/login/user-sessions.c b/src/login/user-sessions.c
index 41d32044e9..45fb427671 100644
--- a/src/login/user-sessions.c
+++ b/src/login/user-sessions.c
@@ -25,7 +25,6 @@
#include "log.h"
#include "util.h"
-#include "cgroup-util.h"
#include "fileio.h"
int main(int argc, char*argv[]) {
@@ -67,29 +66,12 @@ int main(int argc, char*argv[]) {
goto finish;
} else if (streq(argv[1], "stop")) {
- int r, q;
- char *cgroup_user_tree = NULL;
+ int r;
r = write_string_file_atomic("/run/nologin", "System is going down.");
if (r < 0)
log_error("Failed to create /run/nologin: %s", strerror(-r));
- q = cg_get_user_path(&cgroup_user_tree);
- if (q < 0) {
- log_error("Failed to determine use path: %s", strerror(-q));
- goto finish;
- }
-
- q = cg_kill_recursive_and_wait(SYSTEMD_CGROUP_CONTROLLER, cgroup_user_tree, true);
- free(cgroup_user_tree);
- if (q < 0) {
- log_error("Failed to kill sessions: %s", strerror(-q));
- goto finish;
- }
-
- if (r < 0)
- goto finish;
-
} else {
log_error("Unknown verb %s.", argv[1]);
goto finish;
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c
new file mode 100644
index 0000000000..ceab96e078
--- /dev/null
+++ b/src/machine/machine-dbus.c
@@ -0,0 +1,364 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2011 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <string.h>
+
+#include "machined.h"
+#include "machine.h"
+#include "dbus-common.h"
+
+#define BUS_MACHINE_INTERFACE \
+ " <interface name=\"org.freedesktop.machine1.Machine\">\n" \
+ " <method name=\"Terminate\"/>\n" \
+ " <method name=\"Kill\">\n" \
+ " <arg name=\"who\" type=\"s\"/>\n" \
+ " <arg name=\"signal\" type=\"s\"/>\n" \
+ " </method>\n" \
+ " <property name=\"Name\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"Id\" type=\"ay\" access=\"read\"/>\n" \
+ " <property name=\"Timestamp\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"TimestampMonotonic\" type=\"t\" access=\"read\"/>\n" \
+ " <property name=\"Service\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"Scope\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"Leader\" type=\"u\" access=\"read\"/>\n" \
+ " <property name=\"Class\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"State\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"RootDirectory\" type=\"s\" access=\"read\"/>\n" \
+ " </interface>\n"
+
+#define INTROSPECTION \
+ DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
+ "<node>\n" \
+ BUS_MACHINE_INTERFACE \
+ BUS_PROPERTIES_INTERFACE \
+ BUS_PEER_INTERFACE \
+ BUS_INTROSPECTABLE_INTERFACE \
+ "</node>\n"
+
+#define INTERFACES_LIST \
+ BUS_GENERIC_INTERFACES_LIST \
+ "org.freedesktop.machine1.Machine\0"
+
+static int bus_machine_append_id(DBusMessageIter *i, const char *property, void *data) {
+ DBusMessageIter sub;
+ Machine *m = data;
+ dbus_bool_t b;
+ void *p;
+
+ assert(i);
+ assert(property);
+ assert(m);
+
+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "y", &sub))
+ return -ENOMEM;
+
+ p = &m->id;
+ b = dbus_message_iter_append_fixed_array(&sub, DBUS_TYPE_BYTE, &p, 16);
+ if (!b)
+ return -ENOMEM;
+
+ if (!dbus_message_iter_close_container(i, &sub))
+ return -ENOMEM;
+
+ return 0;
+}
+
+static int bus_machine_append_state(DBusMessageIter *i, const char *property, void *data) {
+ Machine *m = data;
+ const char *state;
+
+ assert(i);
+ assert(property);
+ assert(m);
+
+ state = machine_state_to_string(machine_get_state(m));
+
+ if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &state))
+ return -ENOMEM;
+
+ return 0;
+}
+
+static int get_machine_for_path(Manager *m, const char *path, Machine **_machine) {
+ _cleanup_free_ char *e = NULL;
+ Machine *machine;
+
+ assert(m);
+ assert(path);
+ assert(_machine);
+
+ if (!startswith(path, "/org/freedesktop/machine1/machine/"))
+ return -EINVAL;
+
+ e = bus_path_unescape(path + 34);
+ if (!e)
+ return -ENOMEM;
+
+ machine = hashmap_get(m->machines, e);
+ if (!machine)
+ return -ENOENT;
+
+ *_machine = machine;
+ return 0;
+}
+
+static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_machine_append_class, machine_class, MachineClass);
+
+static const BusProperty bus_machine_machine_properties[] = {
+ { "Name", bus_property_append_string, "s", offsetof(Machine, name), true },
+ { "Id", bus_machine_append_id, "ay", 0 },
+ { "Timestamp", bus_property_append_usec, "t", offsetof(Machine, timestamp.realtime) },
+ { "TimestampMonotonic", bus_property_append_usec, "t", offsetof(Machine, timestamp.monotonic) },
+ { "Service", bus_property_append_string, "s", offsetof(Machine, service), true },
+ { "Scope", bus_property_append_string, "s", offsetof(Machine, scope), true },
+ { "Leader", bus_property_append_pid, "u", offsetof(Machine, leader) },
+ { "Class", bus_machine_append_class, "s", offsetof(Machine, class) },
+ { "State", bus_machine_append_state, "s", 0 },
+ { "RootDirectory", bus_property_append_string, "s", offsetof(Machine, root_directory), true },
+ { NULL, }
+};
+
+static DBusHandlerResult machine_message_dispatch(
+ Machine *m,
+ DBusConnection *connection,
+ DBusMessage *message) {
+
+ DBusError error;
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ int r;
+
+ assert(m);
+ assert(connection);
+ assert(message);
+
+ if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Machine", "Terminate")) {
+
+ r = machine_stop(m);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Machine", "Kill")) {
+ const char *swho;
+ int32_t signo;
+ KillWho who;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_STRING, &swho,
+ DBUS_TYPE_INT32, &signo,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ if (isempty(swho))
+ who = KILL_ALL;
+ else {
+ who = kill_who_from_string(swho);
+ if (who < 0)
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+ }
+
+ if (signo <= 0 || signo >= _NSIG)
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ r = machine_kill(m, who, signo);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else {
+ const BusBoundProperties bps[] = {
+ { "org.freedesktop.machine1.Machine", bus_machine_machine_properties, m },
+ { NULL, }
+ };
+
+ return bus_default_message_handler(connection, message, INTROSPECTION, INTERFACES_LIST, bps);
+ }
+
+ if (reply) {
+ if (!bus_maybe_send_reply(connection, message, reply))
+ goto oom;
+ }
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+oom:
+ dbus_error_free(&error);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+static DBusHandlerResult machine_message_handler(
+ DBusConnection *connection,
+ DBusMessage *message,
+ void *userdata) {
+
+ Manager *manager = userdata;
+ Machine *m;
+ int r;
+
+ r = get_machine_for_path(manager, dbus_message_get_path(message), &m);
+ if (r < 0) {
+
+ if (r == -ENOMEM)
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+
+ if (r == -ENOENT) {
+ DBusError e;
+
+ dbus_error_init(&e);
+ dbus_set_error_const(&e, DBUS_ERROR_UNKNOWN_OBJECT, "Unknown machine");
+ return bus_send_error_reply(connection, message, &e, r);
+ }
+
+ return bus_send_error_reply(connection, message, NULL, r);
+ }
+
+ return machine_message_dispatch(m, connection, message);
+}
+
+const DBusObjectPathVTable bus_machine_vtable = {
+ .message_function = machine_message_handler
+};
+
+char *machine_bus_path(Machine *m) {
+ _cleanup_free_ char *e = NULL;
+
+ assert(m);
+
+ e = bus_path_escape(m->name);
+ if (!e)
+ return NULL;
+
+ return strappend("/org/freedesktop/machine1/machine/", e);
+}
+
+int machine_send_signal(Machine *m, bool new_machine) {
+ _cleanup_dbus_message_unref_ DBusMessage *msg = NULL;
+ _cleanup_free_ char *p = NULL;
+
+ assert(m);
+
+ msg = dbus_message_new_signal("/org/freedesktop/machine1",
+ "org.freedesktop.machine1.Manager",
+ new_machine ? "MachineNew" : "MachineRemoved");
+
+ if (!m)
+ return -ENOMEM;
+
+ p = machine_bus_path(m);
+ if (!p)
+ return -ENOMEM;
+
+ if (!dbus_message_append_args(
+ msg,
+ DBUS_TYPE_STRING, &m->name,
+ DBUS_TYPE_OBJECT_PATH, &p,
+ DBUS_TYPE_INVALID))
+ return -ENOMEM;
+
+ if (!dbus_connection_send(m->manager->bus, msg, NULL))
+ return -ENOMEM;
+
+ return 0;
+}
+
+int machine_send_changed(Machine *m, const char *properties) {
+ _cleanup_dbus_message_unref_ DBusMessage *msg = NULL;
+ _cleanup_free_ char *p = NULL;
+
+ assert(m);
+
+ if (!m->started)
+ return 0;
+
+ p = machine_bus_path(m);
+ if (!p)
+ return -ENOMEM;
+
+ msg = bus_properties_changed_new(p, "org.freedesktop.machine1.Machine", properties);
+ if (!msg)
+ return -ENOMEM;
+
+ if (!dbus_connection_send(m->manager->bus, msg, NULL))
+ return -ENOMEM;
+
+ return 0;
+}
+
+int machine_send_create_reply(Machine *m, DBusError *error) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+
+ assert(m);
+
+ if (!m->create_message)
+ return 0;
+
+ if (error) {
+ DBusError buffer;
+
+ dbus_error_init(&buffer);
+
+ if (!error || !dbus_error_is_set(error)) {
+ dbus_set_error_const(&buffer, DBUS_ERROR_INVALID_ARGS, "Invalid Arguments");
+ error = &buffer;
+ }
+
+ reply = dbus_message_new_error(m->create_message, error->name, error->message);
+ dbus_error_free(&buffer);
+
+ if (!reply)
+ return log_oom();
+ } else {
+ _cleanup_free_ char *p = NULL;
+
+ p = machine_bus_path(m);
+ if (!p)
+ return log_oom();
+
+ reply = dbus_message_new_method_return(m->create_message);
+ if (!reply)
+ return log_oom();
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &p, DBUS_TYPE_INVALID))
+ return log_oom();
+ }
+
+ /* Update the machine state file before we notify the client
+ * about the result. */
+ machine_save(m);
+
+ if (!dbus_connection_send(m->manager->bus, reply, NULL))
+ return log_oom();
+
+ dbus_message_unref(m->create_message);
+ m->create_message = NULL;
+
+ return 0;
+}
diff --git a/src/machine/machine.c b/src/machine/machine.c
new file mode 100644
index 0000000000..602aa18be6
--- /dev/null
+++ b/src/machine/machine.c
@@ -0,0 +1,414 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2011 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <systemd/sd-messages.h>
+
+#include "util.h"
+#include "mkdir.h"
+#include "hashmap.h"
+#include "strv.h"
+#include "fileio.h"
+#include "special.h"
+#include "unit-name.h"
+#include "dbus-common.h"
+#include "machine.h"
+
+Machine* machine_new(Manager *manager, const char *name) {
+ Machine *m;
+
+ assert(manager);
+ assert(name);
+
+ m = new0(Machine, 1);
+ if (!m)
+ return NULL;
+
+ m->name = strdup(name);
+ if (!m->name)
+ goto fail;
+
+ m->state_file = strappend("/run/systemd/machines/", m->name);
+ if (!m->state_file)
+ goto fail;
+
+ if (hashmap_put(manager->machines, m->name, m) < 0)
+ goto fail;
+
+ m->class = _MACHINE_CLASS_INVALID;
+ m->manager = manager;
+
+ return m;
+
+fail:
+ free(m->state_file);
+ free(m->name);
+ free(m);
+
+ return NULL;
+}
+
+void machine_free(Machine *m) {
+ assert(m);
+
+ if (m->in_gc_queue)
+ LIST_REMOVE(Machine, gc_queue, m->manager->machine_gc_queue, m);
+
+ if (m->scope) {
+ hashmap_remove(m->manager->machine_units, m->scope);
+ free(m->scope);
+ }
+
+ free(m->scope_job);
+
+ hashmap_remove(m->manager->machines, m->name);
+
+ if (m->create_message)
+ dbus_message_unref(m->create_message);
+
+ free(m->name);
+ free(m->state_file);
+ free(m->service);
+ free(m->root_directory);
+ free(m);
+}
+
+int machine_save(Machine *m) {
+ _cleanup_free_ char *temp_path = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ int r;
+
+ assert(m);
+ assert(m->state_file);
+
+ if (!m->started)
+ return 0;
+
+ r = mkdir_safe_label("/run/systemd/machines", 0755, 0, 0);
+ if (r < 0)
+ goto finish;
+
+ r = fopen_temporary(m->state_file, &f, &temp_path);
+ if (r < 0)
+ goto finish;
+
+ fchmod(fileno(f), 0644);
+
+ fprintf(f,
+ "# This is private data. Do not parse.\n"
+ "NAME=%s\n",
+ m->name);
+
+ if (m->scope)
+ fprintf(f, "SCOPE=%s\n", m->scope);
+
+ if (m->scope_job)
+ fprintf(f, "SCOPE_JOB=%s\n", m->scope_job);
+
+ if (m->service)
+ fprintf(f, "SERVICE=%s\n", m->service);
+
+ if (m->root_directory)
+ fprintf(f, "ROOT=%s\n", m->root_directory);
+
+ if (!sd_id128_equal(m->id, SD_ID128_NULL))
+ fprintf(f, "ID=" SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(m->id));
+
+ if (m->leader != 0)
+ fprintf(f, "LEADER=%lu\n", (unsigned long) m->leader);
+
+ if (m->class != _MACHINE_CLASS_INVALID)
+ fprintf(f, "CLASS=%s\n", machine_class_to_string(m->class));
+
+ if (dual_timestamp_is_set(&m->timestamp))
+ fprintf(f,
+ "REALTIME=%llu\n"
+ "MONOTONIC=%llu\n",
+ (unsigned long long) m->timestamp.realtime,
+ (unsigned long long) m->timestamp.monotonic);
+
+ fflush(f);
+
+ if (ferror(f) || rename(temp_path, m->state_file) < 0) {
+ r = -errno;
+ unlink(m->state_file);
+ unlink(temp_path);
+ }
+
+finish:
+ if (r < 0)
+ log_error("Failed to save machine data for %s: %s", m->name, strerror(-r));
+
+ return r;
+}
+
+int machine_load(Machine *m) {
+ _cleanup_free_ char *realtime = NULL, *monotonic = NULL, *id = NULL, *leader = NULL, *class = NULL;
+ int r;
+
+ assert(m);
+
+ r = parse_env_file(m->state_file, NEWLINE,
+ "SCOPE", &m->scope,
+ "SCOPE_JOB", &m->scope_job,
+ "SERVICE", &m->service,
+ "ROOT", &m->root_directory,
+ "ID", &id,
+ "LEADER", &leader,
+ "CLASS", &class,
+ "REALTIME", &realtime,
+ "MONOTONIC", &monotonic,
+ NULL);
+ if (r < 0) {
+ if (r == -ENOENT)
+ return 0;
+
+ log_error("Failed to read %s: %s", m->state_file, strerror(-r));
+ return r;
+ }
+
+ if (id)
+ sd_id128_from_string(id, &m->id);
+
+ if (leader)
+ parse_pid(leader, &m->leader);
+
+ if (class) {
+ MachineClass c;
+
+ c = machine_class_from_string(class);
+ if (c >= 0)
+ m->class = c;
+ }
+
+ if (realtime) {
+ unsigned long long l;
+ if (sscanf(realtime, "%llu", &l) > 0)
+ m->timestamp.realtime = l;
+ }
+
+ if (monotonic) {
+ unsigned long long l;
+ if (sscanf(monotonic, "%llu", &l) > 0)
+ m->timestamp.monotonic = l;
+ }
+
+ return r;
+}
+
+static int machine_start_scope(Machine *m, DBusMessageIter *iter) {
+ _cleanup_free_ char *description = NULL;
+ DBusError error;
+ char *job;
+ int r = 0;
+
+ assert(m);
+
+ dbus_error_init(&error);
+
+ if (!m->scope) {
+ _cleanup_free_ char *escaped = NULL;
+ char *scope;
+
+ escaped = unit_name_escape(m->name);
+ if (!escaped)
+ return log_oom();
+
+ scope = strjoin("machine-", escaped, ".scope", NULL);
+ if (!scope)
+ return log_oom();
+
+ description = strappend(m->class == MACHINE_VM ? "Virtual Machine " : "Container ", m->name);
+
+ r = manager_start_scope(m->manager, scope, m->leader, SPECIAL_MACHINE_SLICE, description, iter, &error, &job);
+ if (r < 0) {
+ log_error("Failed to start machine scope: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+
+ free(scope);
+ return r;
+ } else {
+ m->scope = scope;
+
+ free(m->scope_job);
+ m->scope_job = job;
+ }
+ }
+
+ if (m->scope)
+ hashmap_put(m->manager->machine_units, m->scope, m);
+
+ return r;
+}
+
+int machine_start(Machine *m, DBusMessageIter *iter) {
+ int r;
+
+ assert(m);
+
+ if (m->started)
+ return 0;
+
+ /* Create cgroup */
+ r = machine_start_scope(m, iter);
+ if (r < 0)
+ return r;
+
+ log_struct(LOG_INFO,
+ MESSAGE_ID(SD_MESSAGE_MACHINE_START),
+ "NAME=%s", m->name,
+ "LEADER=%lu", (unsigned long) m->leader,
+ "MESSAGE=New machine %s.", m->name,
+ NULL);
+
+ if (!dual_timestamp_is_set(&m->timestamp))
+ dual_timestamp_get(&m->timestamp);
+
+ m->started = true;
+
+ /* Save new machine data */
+ machine_save(m);
+
+ machine_send_signal(m, true);
+
+ return 0;
+}
+
+static int machine_stop_scope(Machine *m) {
+ DBusError error;
+ char *job;
+ int r;
+
+ assert(m);
+
+ dbus_error_init(&error);
+
+ if (!m->scope)
+ return 0;
+
+ r = manager_stop_unit(m->manager, m->scope, &error, &job);
+ if (r < 0) {
+ log_error("Failed to stop machine scope: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
+ }
+
+ free(m->scope_job);
+ m->scope_job = job;
+
+ return r;
+}
+
+int machine_stop(Machine *m) {
+ int r = 0, k;
+ assert(m);
+
+ if (m->started)
+ log_struct(LOG_INFO,
+ MESSAGE_ID(SD_MESSAGE_MACHINE_STOP),
+ "NAME=%s", m->name,
+ "LEADER=%lu", (unsigned long) m->leader,
+ "MESSAGE=Machine %s terminated.", m->name,
+ NULL);
+
+ /* Kill cgroup */
+ k = machine_stop_scope(m);
+ if (k < 0)
+ r = k;
+
+ unlink(m->state_file);
+ machine_add_to_gc_queue(m);
+
+ if (m->started)
+ machine_send_signal(m, false);
+
+ m->started = false;
+
+ return r;
+}
+
+int machine_check_gc(Machine *m, bool drop_not_started) {
+ assert(m);
+
+ if (drop_not_started && !m->started)
+ return 0;
+
+ if (m->scope_job)
+ return 1;
+
+ if (m->scope)
+ return manager_unit_is_active(m->manager, m->scope) != 0;
+
+ return 0;
+}
+
+void machine_add_to_gc_queue(Machine *m) {
+ assert(m);
+
+ if (m->in_gc_queue)
+ return;
+
+ LIST_PREPEND(Machine, gc_queue, m->manager->machine_gc_queue, m);
+ m->in_gc_queue = true;
+}
+
+MachineState machine_get_state(Machine *s) {
+ assert(s);
+
+ if (s->scope_job)
+ return s->started ? MACHINE_OPENING : MACHINE_CLOSING;
+
+ return MACHINE_RUNNING;
+}
+
+int machine_kill(Machine *m, KillWho who, int signo) {
+ assert(m);
+
+ if (!m->scope)
+ return -ESRCH;
+
+ return manager_kill_unit(m->manager, m->scope, who, signo, NULL);
+}
+
+static const char* const machine_class_table[_MACHINE_CLASS_MAX] = {
+ [MACHINE_CONTAINER] = "container",
+ [MACHINE_VM] = "vm"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(machine_class, MachineClass);
+
+static const char* const machine_state_table[_MACHINE_STATE_MAX] = {
+ [MACHINE_OPENING] = "opening",
+ [MACHINE_RUNNING] = "running",
+ [MACHINE_CLOSING] = "closing"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(machine_state, MachineState);
+
+static const char* const kill_who_table[_KILL_WHO_MAX] = {
+ [KILL_LEADER] = "leader",
+ [KILL_ALL] = "all"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(kill_who, KillWho);
diff --git a/src/machine/machine.h b/src/machine/machine.h
new file mode 100644
index 0000000000..c5d52a968b
--- /dev/null
+++ b/src/machine/machine.h
@@ -0,0 +1,109 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+typedef struct Machine Machine;
+typedef enum KillWho KillWho;
+
+#include "list.h"
+#include "util.h"
+#include "machined.h"
+
+typedef enum MachineState {
+ MACHINE_OPENING, /* Machine is being registered */
+ MACHINE_RUNNING, /* Machine is running */
+ MACHINE_CLOSING, /* Machine is terminating */
+ _MACHINE_STATE_MAX,
+ _MACHINE_STATE_INVALID = -1
+} MachineState;
+
+typedef enum MachineClass {
+ MACHINE_CONTAINER,
+ MACHINE_VM,
+ _MACHINE_CLASS_MAX,
+ _MACHINE_CLASS_INVALID = -1
+} MachineClass;
+
+enum KillWho {
+ KILL_LEADER,
+ KILL_ALL,
+ _KILL_WHO_MAX,
+ _KILL_WHO_INVALID = -1
+};
+
+struct Machine {
+ Manager *manager;
+
+ char *name;
+ sd_id128_t id;
+
+ MachineState state;
+ MachineClass class;
+
+ char *state_file;
+ char *service;
+ char *root_directory;
+
+ char *scope;
+ char *scope_job;
+
+ pid_t leader;
+
+ dual_timestamp timestamp;
+
+ bool in_gc_queue:1;
+ bool started:1;
+
+ DBusMessage *create_message;
+
+ LIST_FIELDS(Machine, gc_queue);
+};
+
+Machine* machine_new(Manager *manager, const char *name);
+void machine_free(Machine *m);
+int machine_check_gc(Machine *m, bool drop_not_started);
+void machine_add_to_gc_queue(Machine *m);
+int machine_start(Machine *m, DBusMessageIter *iter);
+int machine_stop(Machine *m);
+int machine_save(Machine *m);
+int machine_load(Machine *m);
+int machine_kill(Machine *m, KillWho who, int signo);
+
+char *machine_bus_path(Machine *s);
+
+MachineState machine_get_state(Machine *u);
+
+extern const DBusObjectPathVTable bus_machine_vtable;
+
+int machine_send_signal(Machine *m, bool new_machine);
+int machine_send_changed(Machine *m, const char *properties);
+
+int machine_send_create_reply(Machine *m, DBusError *error);
+
+const char* machine_class_to_string(MachineClass t) _const_;
+MachineClass machine_class_from_string(const char *s) _pure_;
+
+const char* machine_state_to_string(MachineState t) _const_;
+MachineState machine_state_from_string(const char *s) _pure_;
+
+const char *kill_who_to_string(KillWho k) _const_;
+KillWho kill_who_from_string(const char *s) _pure_;
diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c
new file mode 100644
index 0000000000..97c2193551
--- /dev/null
+++ b/src/machine/machinectl.c
@@ -0,0 +1,816 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <dbus/dbus.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <locale.h>
+
+#include "log.h"
+#include "util.h"
+#include "macro.h"
+#include "pager.h"
+#include "dbus-common.h"
+#include "build.h"
+#include "strv.h"
+#include "unit-name.h"
+#include "cgroup-show.h"
+#include "cgroup-util.h"
+#include "spawn-polkit-agent.h"
+
+static char **arg_property = NULL;
+static bool arg_all = false;
+static bool arg_full = false;
+static bool arg_no_pager = false;
+static const char *arg_kill_who = NULL;
+static int arg_signal = SIGTERM;
+static enum transport {
+ TRANSPORT_NORMAL,
+ TRANSPORT_SSH,
+ TRANSPORT_POLKIT
+} arg_transport = TRANSPORT_NORMAL;
+static bool arg_ask_password = true;
+static char *arg_host = NULL;
+static char *arg_user = NULL;
+
+static void pager_open_if_enabled(void) {
+
+ /* Cache result before we open the pager */
+ if (arg_no_pager)
+ return;
+
+ pager_open(false);
+}
+
+static int list_machines(DBusConnection *bus, char **args, unsigned n) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ DBusMessageIter iter, sub, sub2;
+ unsigned k = 0;
+ int r;
+
+ pager_open_if_enabled();
+
+ r = bus_method_call_with_reply (
+ bus,
+ "org.freedesktop.machine1",
+ "/org/freedesktop/machine1",
+ "org.freedesktop.machine1.Manager",
+ "ListMachines",
+ &reply,
+ NULL,
+ DBUS_TYPE_INVALID);
+ if (r)
+ return r;
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRUCT) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+
+ if (on_tty())
+ printf("%-32s %-9s %-16s\n", "MACHINE", "CONTAINER", "SERVICE");
+
+ while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
+ const char *name, *class, *service, *object;
+
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRUCT) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &name, true) < 0 ||
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &class, true) < 0 ||
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &service, true) < 0 ||
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_OBJECT_PATH, &object, false) < 0) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ printf("%-32s %-9s %-16s\n", name, class, service);
+
+ k++;
+
+ dbus_message_iter_next(&sub);
+ }
+
+ if (on_tty())
+ printf("\n%u machines listed.\n", k);
+
+ return 0;
+}
+
+static int show_scope_cgroup(DBusConnection *bus, const char *unit, pid_t leader) {
+ const char *interface = "org.freedesktop.systemd1.Scope";
+ const char *property = "ControlGroup";
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_free_ char *path = NULL;
+ DBusMessageIter iter, sub;
+ const char *cgroup;
+ DBusError error;
+ int r, output_flags;
+ unsigned c;
+
+ assert(bus);
+ assert(unit);
+
+ if (arg_transport == TRANSPORT_SSH)
+ return 0;
+
+ path = unit_dbus_path_from_name(unit);
+ if (!path)
+ return log_oom();
+
+ r = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.systemd1",
+ path,
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ &reply,
+ &error,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &property,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to query ControlGroup: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
+ }
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_get_basic(&sub, &cgroup);
+
+ if (isempty(cgroup))
+ return 0;
+
+ if (cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, cgroup, false) != 0 && leader <= 0)
+ return 0;
+
+ output_flags =
+ arg_all * OUTPUT_SHOW_ALL |
+ arg_full * OUTPUT_FULL_WIDTH;
+
+ c = columns();
+ if (c > 18)
+ c -= 18;
+ else
+ c = 0;
+
+ show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, cgroup, "\t\t ", c, false, &leader, leader > 0, output_flags);
+ return 0;
+}
+
+typedef struct MachineStatusInfo {
+ const char *name;
+ sd_id128_t id;
+ const char *class;
+ const char *service;
+ const char *scope;
+ const char *root_directory;
+ pid_t leader;
+ usec_t timestamp;
+} MachineStatusInfo;
+
+static void print_machine_status_info(DBusConnection *bus, MachineStatusInfo *i) {
+ char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
+ char since2[FORMAT_TIMESTAMP_MAX], *s2;
+ assert(i);
+
+ fputs(strna(i->name), stdout);
+
+ if (!sd_id128_equal(i->id, SD_ID128_NULL))
+ printf("(" SD_ID128_FORMAT_STR ")\n", SD_ID128_FORMAT_VAL(i->id));
+ else
+ putchar('\n');
+
+ s1 = format_timestamp_relative(since1, sizeof(since1), i->timestamp);
+ s2 = format_timestamp(since2, sizeof(since2), i->timestamp);
+
+ if (s1)
+ printf("\t Since: %s; %s\n", s2, s1);
+ else if (s2)
+ printf("\t Since: %s\n", s2);
+
+ if (i->leader > 0) {
+ _cleanup_free_ char *t = NULL;
+
+ printf("\t Leader: %u", (unsigned) i->leader);
+
+ get_process_comm(i->leader, &t);
+ if (t)
+ printf(" (%s)", t);
+
+ putchar('\n');
+ }
+
+ if (i->service) {
+ printf("\t Service: %s", i->service);
+
+ if (i->class)
+ printf("; class %s", i->class);
+
+ putchar('\n');
+ } else if (i->class)
+ printf("\t Class: %s\n", i->class);
+
+ if (i->root_directory)
+ printf("\t Root: %s\n", i->root_directory);
+
+ if (i->scope) {
+ printf("\t Unit: %s\n", i->scope);
+ show_scope_cgroup(bus, i->scope, i->leader);
+ }
+}
+
+static int status_property_machine(const char *name, DBusMessageIter *iter, MachineStatusInfo *i) {
+ assert(name);
+ assert(iter);
+ assert(i);
+
+ switch (dbus_message_iter_get_arg_type(iter)) {
+
+ case DBUS_TYPE_STRING: {
+ const char *s;
+
+ dbus_message_iter_get_basic(iter, &s);
+
+ if (!isempty(s)) {
+ if (streq(name, "Name"))
+ i->name = s;
+ else if (streq(name, "Class"))
+ i->class = s;
+ else if (streq(name, "Service"))
+ i->service = s;
+ else if (streq(name, "Scope"))
+ i->scope = s;
+ else if (streq(name, "RootDirectory"))
+ i->root_directory = s;
+ }
+ break;
+ }
+
+ case DBUS_TYPE_UINT32: {
+ uint32_t u;
+
+ dbus_message_iter_get_basic(iter, &u);
+
+ if (streq(name, "Leader"))
+ i->leader = (pid_t) u;
+
+ break;
+ }
+
+ case DBUS_TYPE_UINT64: {
+ uint64_t u;
+
+ dbus_message_iter_get_basic(iter, &u);
+
+ if (streq(name, "Timestamp"))
+ i->timestamp = (usec_t) u;
+
+ break;
+ }
+
+ case DBUS_TYPE_ARRAY: {
+ DBusMessageIter sub;
+
+ dbus_message_iter_recurse(iter, &sub);
+
+ if (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_BYTE && streq(name, "Id")) {
+ void *v;
+ int n;
+
+ dbus_message_iter_get_fixed_array(&sub, &v, &n);
+ if (n == 0)
+ i->id = SD_ID128_NULL;
+ else if (n == 16)
+ memcpy(&i->id, v, n);
+ }
+
+ break;
+ }
+ }
+
+ return 0;
+}
+
+static int print_property(const char *name, DBusMessageIter *iter) {
+ assert(name);
+ assert(iter);
+
+ if (arg_property && !strv_find(arg_property, name))
+ return 0;
+
+ if (generic_print_property(name, iter, arg_all) > 0)
+ return 0;
+
+ if (arg_all)
+ printf("%s=[unprintable]\n", name);
+
+ return 0;
+}
+
+static int show_one(const char *verb, DBusConnection *bus, const char *path, bool show_properties, bool *new_line) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *interface = "";
+ int r;
+ DBusMessageIter iter, sub, sub2, sub3;
+ MachineStatusInfo machine_info = {};
+
+ assert(path);
+ assert(new_line);
+
+ r = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.machine1",
+ path,
+ "org.freedesktop.DBus.Properties",
+ "GetAll",
+ &reply,
+ NULL,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_INVALID);
+ if (r < 0)
+ goto finish;
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_DICT_ENTRY) {
+ log_error("Failed to parse reply.");
+ r = -EIO;
+ goto finish;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+
+ if (*new_line)
+ printf("\n");
+
+ *new_line = true;
+
+ while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
+ const char *name;
+
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_DICT_ENTRY) {
+ log_error("Failed to parse reply.");
+ r = -EIO;
+ goto finish;
+ }
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &name, true) < 0) {
+ log_error("Failed to parse reply.");
+ r = -EIO;
+ goto finish;
+ }
+
+ if (dbus_message_iter_get_arg_type(&sub2) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply.");
+ r = -EIO;
+ goto finish;
+ }
+
+ dbus_message_iter_recurse(&sub2, &sub3);
+
+ if (show_properties)
+ r = print_property(name, &sub3);
+ else
+ r = status_property_machine(name, &sub3, &machine_info);
+
+ if (r < 0) {
+ log_error("Failed to parse reply.");
+ goto finish;
+ }
+
+ dbus_message_iter_next(&sub);
+ }
+
+ if (!show_properties)
+ print_machine_status_info(bus, &machine_info);
+
+ r = 0;
+
+finish:
+
+ return r;
+}
+
+static int show(DBusConnection *bus, char **args, unsigned n) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ int r, ret = 0;
+ DBusError error;
+ unsigned i;
+ bool show_properties, new_line = false;
+
+ assert(bus);
+ assert(args);
+
+ dbus_error_init(&error);
+
+ show_properties = !strstr(args[0], "status");
+
+ pager_open_if_enabled();
+
+ if (show_properties && n <= 1) {
+ /* If not argument is specified inspect the manager
+ * itself */
+
+ ret = show_one(args[0], bus, "/org/freedesktop/machine1", show_properties, &new_line);
+ goto finish;
+ }
+
+ for (i = 1; i < n; i++) {
+ const char *path = NULL;
+
+ ret = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.machine1",
+ "/org/freedesktop/machine1",
+ "org.freedesktop.machine1.Manager",
+ "GetMachine",
+ &reply,
+ NULL,
+ DBUS_TYPE_STRING, &args[i],
+ DBUS_TYPE_INVALID);
+ if (ret < 0)
+ goto finish;
+
+ if (!dbus_message_get_args(reply, &error,
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse reply: %s", bus_error_message(&error));
+ ret = -EIO;
+ goto finish;
+ }
+
+ r = show_one(args[0], bus, path, show_properties, &new_line);
+ if (r != 0)
+ ret = r;
+ }
+
+finish:
+ dbus_error_free(&error);
+
+ return ret;
+}
+
+static int kill_machine(DBusConnection *bus, char **args, unsigned n) {
+ unsigned i;
+
+ assert(args);
+
+ if (!arg_kill_who)
+ arg_kill_who = "all";
+
+ for (i = 1; i < n; i++) {
+ int r;
+
+ r = bus_method_call_with_reply (
+ bus,
+ "org.freedesktop.machine1",
+ "/org/freedesktop/machine1",
+ "org.freedesktop.machine1.Manager",
+ "KillMachine",
+ NULL,
+ NULL,
+ DBUS_TYPE_STRING, &args[i],
+ DBUS_TYPE_STRING, &arg_kill_who,
+ DBUS_TYPE_INT32, &arg_signal,
+ DBUS_TYPE_INVALID);
+ if (r)
+ return r;
+ }
+
+ return 0;
+}
+
+static int terminate_machine(DBusConnection *bus, char **args, unsigned n) {
+ unsigned i;
+
+ assert(args);
+
+ for (i = 1; i < n; i++) {
+ int r;
+
+ r = bus_method_call_with_reply (
+ bus,
+ "org.freedesktop.machine1",
+ "/org/freedesktop/machine1",
+ "org.freedesktop.machine1.Manager",
+ "TerminateMachine",
+ NULL,
+ NULL,
+ DBUS_TYPE_STRING, &args[i],
+ DBUS_TYPE_INVALID);
+ if (r)
+ return r;
+ }
+
+ return 0;
+}
+
+static int help(void) {
+
+ printf("%s [OPTIONS...] {COMMAND} ...\n\n"
+ "Send control commands to or query the virtual machine and container registration manager.\n\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " -p --property=NAME Show only properties by this name\n"
+ " -a --all Show all properties, including empty ones\n"
+ " --kill-who=WHO Who to send signal to\n"
+ " -l --full Do not ellipsize output\n"
+ " -s --signal=SIGNAL Which signal to send\n"
+ " --no-ask-password Don't prompt for password\n"
+ " -H --host=[USER@]HOST Show information for remote host\n"
+ " -P --privileged Acquire privileges before execution\n"
+ " --no-pager Do not pipe output into a pager\n\n"
+ "Commands:\n"
+ " list List running VMs and containers\n"
+ " status [NAME...] Show VM/container status\n"
+ " show [NAME...] Show properties of one or more VMs/containers\n"
+ " terminate [NAME...] Terminate one or more VMs/containers\n"
+ " kill [NAME...] Send signal to processes of a VM/container\n",
+ program_invocation_short_name);
+
+ return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+
+ enum {
+ ARG_VERSION = 0x100,
+ ARG_NO_PAGER,
+ ARG_KILL_WHO,
+ ARG_NO_ASK_PASSWORD,
+ };
+
+ static const struct option options[] = {
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "property", required_argument, NULL, 'p' },
+ { "all", no_argument, NULL, 'a' },
+ { "full", no_argument, NULL, 'l' },
+ { "no-pager", no_argument, NULL, ARG_NO_PAGER },
+ { "kill-who", required_argument, NULL, ARG_KILL_WHO },
+ { "signal", required_argument, NULL, 's' },
+ { "host", required_argument, NULL, 'H' },
+ { "privileged", no_argument, NULL, 'P' },
+ { "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
+ { NULL, 0, NULL, 0 }
+ };
+
+ int c;
+
+ assert(argc >= 0);
+ assert(argv);
+
+ while ((c = getopt_long(argc, argv, "hp:als:H:P", options, NULL)) >= 0) {
+
+ switch (c) {
+
+ case 'h':
+ help();
+ return 0;
+
+ case ARG_VERSION:
+ puts(PACKAGE_STRING);
+ puts(SYSTEMD_FEATURES);
+ return 0;
+
+ case 'p': {
+ char **l;
+
+ l = strv_append(arg_property, optarg);
+ if (!l)
+ return -ENOMEM;
+
+ strv_free(arg_property);
+ arg_property = l;
+
+ /* If the user asked for a particular
+ * property, show it to him, even if it is
+ * empty. */
+ arg_all = true;
+ break;
+ }
+
+ case 'a':
+ arg_all = true;
+ break;
+
+ case 'l':
+ arg_full = true;
+ break;
+
+ case ARG_NO_PAGER:
+ arg_no_pager = true;
+ break;
+
+ case ARG_NO_ASK_PASSWORD:
+ arg_ask_password = false;
+ break;
+
+ case ARG_KILL_WHO:
+ arg_kill_who = optarg;
+ break;
+
+ case 's':
+ arg_signal = signal_from_string_try_harder(optarg);
+ if (arg_signal < 0) {
+ log_error("Failed to parse signal string %s.", optarg);
+ return -EINVAL;
+ }
+ break;
+
+ case 'P':
+ arg_transport = TRANSPORT_POLKIT;
+ break;
+
+ case 'H':
+ arg_transport = TRANSPORT_SSH;
+ parse_user_at_host(optarg, &arg_user, &arg_host);
+ break;
+
+ case '?':
+ return -EINVAL;
+
+ default:
+ log_error("Unknown option code %c", c);
+ return -EINVAL;
+ }
+ }
+
+ return 1;
+}
+
+static int machinectl_main(DBusConnection *bus, int argc, char *argv[], DBusError *error) {
+
+ static const struct {
+ const char* verb;
+ const enum {
+ MORE,
+ LESS,
+ EQUAL
+ } argc_cmp;
+ const int argc;
+ int (* const dispatch)(DBusConnection *bus, char **args, unsigned n);
+ } verbs[] = {
+ { "list", LESS, 1, list_machines },
+ { "status", MORE, 2, show },
+ { "show", MORE, 1, show },
+ { "terminate", MORE, 2, terminate_machine },
+ { "kill", MORE, 2, kill_machine },
+ };
+
+ int left;
+ unsigned i;
+
+ assert(argc >= 0);
+ assert(argv);
+ assert(error);
+
+ left = argc - optind;
+
+ if (left <= 0)
+ /* Special rule: no arguments means "list-sessions" */
+ i = 0;
+ else {
+ if (streq(argv[optind], "help")) {
+ help();
+ return 0;
+ }
+
+ for (i = 0; i < ELEMENTSOF(verbs); i++)
+ if (streq(argv[optind], verbs[i].verb))
+ break;
+
+ if (i >= ELEMENTSOF(verbs)) {
+ log_error("Unknown operation %s", argv[optind]);
+ return -EINVAL;
+ }
+ }
+
+ switch (verbs[i].argc_cmp) {
+
+ case EQUAL:
+ if (left != verbs[i].argc) {
+ log_error("Invalid number of arguments.");
+ return -EINVAL;
+ }
+
+ break;
+
+ case MORE:
+ if (left < verbs[i].argc) {
+ log_error("Too few arguments.");
+ return -EINVAL;
+ }
+
+ break;
+
+ case LESS:
+ if (left > verbs[i].argc) {
+ log_error("Too many arguments.");
+ return -EINVAL;
+ }
+
+ break;
+
+ default:
+ assert_not_reached("Unknown comparison operator.");
+ }
+
+ if (!bus) {
+ log_error("Failed to get D-Bus connection: %s", error->message);
+ return -EIO;
+ }
+
+ return verbs[i].dispatch(bus, argv + optind, left);
+}
+
+int main(int argc, char*argv[]) {
+ int r, retval = EXIT_FAILURE;
+ DBusConnection *bus = NULL;
+ DBusError error;
+
+ dbus_error_init(&error);
+
+ setlocale(LC_ALL, "");
+ log_parse_environment();
+ log_open();
+
+ r = parse_argv(argc, argv);
+ if (r < 0)
+ goto finish;
+ else if (r == 0) {
+ retval = EXIT_SUCCESS;
+ goto finish;
+ }
+
+ if (arg_transport == TRANSPORT_NORMAL)
+ bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
+ else if (arg_transport == TRANSPORT_POLKIT)
+ bus_connect_system_polkit(&bus, &error);
+ else if (arg_transport == TRANSPORT_SSH)
+ bus_connect_system_ssh(NULL, arg_host, &bus, &error);
+ else
+ assert_not_reached("Uh, invalid transport...");
+
+ r = machinectl_main(bus, argc, argv, &error);
+ retval = r < 0 ? EXIT_FAILURE : r;
+
+finish:
+ if (bus) {
+ dbus_connection_flush(bus);
+ dbus_connection_close(bus);
+ dbus_connection_unref(bus);
+ }
+
+ dbus_error_free(&error);
+ dbus_shutdown();
+
+ strv_free(arg_property);
+
+ pager_close();
+
+ return retval;
+}
diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c
new file mode 100644
index 0000000000..22caadfceb
--- /dev/null
+++ b/src/machine/machined-dbus.c
@@ -0,0 +1,1042 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2011 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <pwd.h>
+
+#include <systemd/sd-id128.h>
+#include <systemd/sd-messages.h>
+
+#include "machined.h"
+#include "dbus-common.h"
+#include "strv.h"
+#include "mkdir.h"
+#include "path-util.h"
+#include "special.h"
+#include "sleep-config.h"
+#include "fileio-label.h"
+#include "label.h"
+#include "utf8.h"
+#include "unit-name.h"
+#include "bus-errors.h"
+#include "virt.h"
+#include "cgroup-util.h"
+
+#define BUS_MANAGER_INTERFACE \
+ " <interface name=\"org.freedesktop.machine1.Manager\">\n" \
+ " <method name=\"GetMachine\">\n" \
+ " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"machine\" type=\"o\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"GetMachineByPID\">\n" \
+ " <arg name=\"pid\" type=\"u\" direction=\"in\"/>\n" \
+ " <arg name=\"machine\" type=\"o\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"ListMachines\">\n" \
+ " <arg name=\"machines\" type=\"a(ssso)\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"CreateMachine\">\n" \
+ " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"id\" type=\"ay\" direction=\"in\"/>\n" \
+ " <arg name=\"service\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"class\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"leader\" type=\"u\" direction=\"in\"/>\n" \
+ " <arg name=\"root_directory\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"scope_properties\" type=\"a(sv)\" direction=\"in\"/>\n" \
+ " <arg name=\"path\" type=\"o\" direction=\"out\"/>\n" \
+ " </method>\n" \
+ " <method name=\"KillMachine\">\n" \
+ " <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"who\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"signal\" type=\"s\" direction=\"in\"/>\n" \
+ " </method>\n" \
+ " <method name=\"TerminateMachine\">\n" \
+ " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
+ " </method>\n" \
+ " <signal name=\"MachineNew\">\n" \
+ " <arg name=\"machine\" type=\"s\"/>\n" \
+ " <arg name=\"path\" type=\"o\"/>\n" \
+ " </signal>\n" \
+ " <signal name=\"MachineRemoved\">\n" \
+ " <arg name=\"machine\" type=\"s\"/>\n" \
+ " <arg name=\"path\" type=\"o\"/>\n" \
+ " </signal>\n" \
+ " </interface>\n"
+
+#define INTROSPECTION_BEGIN \
+ DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
+ "<node>\n" \
+ BUS_MANAGER_INTERFACE \
+ BUS_PROPERTIES_INTERFACE \
+ BUS_PEER_INTERFACE \
+ BUS_INTROSPECTABLE_INTERFACE
+
+#define INTROSPECTION_END \
+ "</node>\n"
+
+#define INTERFACES_LIST \
+ BUS_GENERIC_INTERFACES_LIST \
+ "org.freedesktop.machine1.Manager\0"
+
+static bool valid_machine_name(const char *p) {
+ size_t l;
+
+ if (!filename_is_safe(p))
+ return false;
+
+ if (!ascii_is_valid(p))
+ return false;
+
+ l = strlen(p);
+
+ if (l < 1 || l> 64)
+ return false;
+
+ return true;
+}
+
+static int bus_manager_create_machine(Manager *manager, DBusMessage *message) {
+
+ const char *name, *service, *class, *root_directory;
+ DBusMessageIter iter, sub;
+ MachineClass c;
+ uint32_t leader;
+ sd_id128_t id;
+ Machine *m;
+ int n, r;
+ void *v;
+
+ assert(manager);
+ assert(message);
+
+ if (!dbus_message_iter_init(message, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(&iter, &name);
+
+ if (!valid_machine_name(name) ||
+ !dbus_message_iter_next(&iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_BYTE)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(&iter, &sub);
+ dbus_message_iter_get_fixed_array(&sub, &v, &n);
+
+ if (n == 0)
+ id = SD_ID128_NULL;
+ else if (n == 16)
+ memcpy(&id, v, n);
+ else
+ return -EINVAL;
+
+ if (!dbus_message_iter_next(&iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(&iter, &service);
+
+ if (!dbus_message_iter_next(&iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(&iter, &class);
+
+ if (isempty(class))
+ c = _MACHINE_CLASS_INVALID;
+ else {
+ c = machine_class_from_string(class);
+ if (c < 0)
+ return -EINVAL;
+ }
+
+ if (!dbus_message_iter_next(&iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(&iter, &leader);
+ if (!dbus_message_iter_next(&iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(&iter, &root_directory);
+
+ if (!(isempty(root_directory) || path_is_absolute(root_directory)))
+ return -EINVAL;
+
+ if (!dbus_message_iter_next(&iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
+ dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRUCT)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(&iter, &sub);
+
+ if (hashmap_get(manager->machines, name))
+ return -EEXIST;
+
+ if (leader <= 0) {
+ leader = bus_get_unix_process_id(manager->bus, dbus_message_get_sender(message), NULL);
+ if (leader == 0)
+ return -EINVAL;
+ }
+
+ r = manager_add_machine(manager, name, &m);
+ if (r < 0)
+ goto fail;
+
+ m->leader = leader;
+ m->class = c;
+ m->id = id;
+
+ if (!isempty(service)) {
+ m->service = strdup(service);
+ if (!m->service) {
+ r = -ENOMEM;
+ goto fail;
+ }
+ }
+
+ if (!isempty(root_directory)) {
+ m->root_directory = strdup(root_directory);
+ if (!m->root_directory) {
+ r = -ENOMEM;
+ goto fail;
+ }
+ }
+
+ r = machine_start(m, &sub);
+ if (r < 0)
+ goto fail;
+
+ m->create_message = dbus_message_ref(message);
+
+ return 0;
+
+fail:
+ if (m)
+ machine_add_to_gc_queue(m);
+
+ return r;
+}
+
+static DBusHandlerResult manager_message_handler(
+ DBusConnection *connection,
+ DBusMessage *message,
+ void *userdata) {
+
+ Manager *m = userdata;
+
+ DBusError error;
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ int r;
+
+ assert(connection);
+ assert(message);
+ assert(m);
+
+ dbus_error_init(&error);
+
+ if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Manager", "GetMachine")) {
+ Machine *machine;
+ const char *name;
+ char *p;
+ bool b;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ machine = hashmap_get(m->machines, name);
+ if (!machine)
+ return bus_send_error_reply(connection, message, &error, -ENOENT);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ p = machine_bus_path(machine);
+ if (!p)
+ goto oom;
+
+ b = dbus_message_append_args(
+ reply,
+ DBUS_TYPE_OBJECT_PATH, &p,
+ DBUS_TYPE_INVALID);
+ free(p);
+
+ if (!b)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Manager", "GetMachineByPID")) {
+ uint32_t pid;
+ char *p;
+ Machine *machine;
+ bool b;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_UINT32, &pid,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ r = manager_get_machine_by_pid(m, pid, &machine);
+ if (r <= 0)
+ return bus_send_error_reply(connection, message, NULL, r < 0 ? r : -ENOENT);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ p = machine_bus_path(machine);
+ if (!p)
+ goto oom;
+
+ b = dbus_message_append_args(
+ reply,
+ DBUS_TYPE_OBJECT_PATH, &p,
+ DBUS_TYPE_INVALID);
+ free(p);
+
+ if (!b)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Manager", "ListMachines")) {
+ Machine *machine;
+ Iterator i;
+ DBusMessageIter iter, sub;
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ dbus_message_iter_init_append(reply, &iter);
+
+ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(ssso)", &sub))
+ goto oom;
+
+ HASHMAP_FOREACH(machine, m->machines, i) {
+ _cleanup_free_ char *p = NULL;
+ DBusMessageIter sub2;
+ const char *class;
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2))
+ goto oom;
+
+ p = machine_bus_path(machine);
+ if (!p)
+ goto oom;
+
+ class = strempty(machine_class_to_string(machine->class));
+
+ if (!dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &machine->name) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &class) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &machine->service) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_OBJECT_PATH, &p)) {
+ free(p);
+ goto oom;
+ }
+
+ if (!dbus_message_iter_close_container(&sub, &sub2))
+ goto oom;
+ }
+
+ if (!dbus_message_iter_close_container(&iter, &sub))
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Manager", "CreateMachine")) {
+
+ r = bus_manager_create_machine(m, message);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Manager", "KillMachine")) {
+ const char *swho;
+ int32_t signo;
+ KillWho who;
+ const char *name;
+ Machine *machine;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_STRING, &swho,
+ DBUS_TYPE_INT32, &signo,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ if (isempty(swho))
+ who = KILL_ALL;
+ else {
+ who = kill_who_from_string(swho);
+ if (who < 0)
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+ }
+
+ if (signo <= 0 || signo >= _NSIG)
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ machine = hashmap_get(m->machines, name);
+ if (!machine)
+ return bus_send_error_reply(connection, message, &error, -ENOENT);
+
+ r = machine_kill(machine, who, signo);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.machine1.Manager", "TerminateMachine")) {
+ const char *name;
+ Machine *machine;
+
+ if (!dbus_message_get_args(
+ message,
+ &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID))
+ return bus_send_error_reply(connection, message, &error, -EINVAL);
+
+ machine = hashmap_get(m->machines, name);
+ if (!machine)
+ return bus_send_error_reply(connection, message, &error, -ENOENT);
+
+ r = machine_stop(machine);
+ if (r < 0)
+ return bus_send_error_reply(connection, message, NULL, r);
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
+ char *introspection = NULL;
+ FILE *f;
+ Iterator i;
+ Machine *machine;
+ size_t size;
+ char *p;
+
+ reply = dbus_message_new_method_return(message);
+ if (!reply)
+ goto oom;
+
+ /* We roll our own introspection code here, instead of
+ * relying on bus_default_message_handler() because we
+ * need to generate our introspection string
+ * dynamically. */
+
+ f = open_memstream(&introspection, &size);
+ if (!f)
+ goto oom;
+
+ fputs(INTROSPECTION_BEGIN, f);
+
+ HASHMAP_FOREACH(machine, m->machines, i) {
+ p = bus_path_escape(machine->name);
+
+ if (p) {
+ fprintf(f, "<node name=\"machine/%s\"/>", p);
+ free(p);
+ }
+ }
+
+ fputs(INTROSPECTION_END, f);
+
+ if (ferror(f)) {
+ fclose(f);
+ free(introspection);
+ goto oom;
+ }
+
+ fclose(f);
+
+ if (!introspection)
+ goto oom;
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection, DBUS_TYPE_INVALID)) {
+ free(introspection);
+ goto oom;
+ }
+
+ free(introspection);
+ } else
+ return bus_default_message_handler(connection, message, NULL, INTERFACES_LIST, NULL);
+
+ if (reply) {
+ if (!bus_maybe_send_reply(connection, message, reply))
+ goto oom;
+ }
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+oom:
+ dbus_error_free(&error);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+const DBusObjectPathVTable bus_manager_vtable = {
+ .message_function = manager_message_handler
+};
+
+DBusHandlerResult bus_message_filter(
+ DBusConnection *connection,
+ DBusMessage *message,
+ void *userdata) {
+
+ Manager *m = userdata;
+ DBusError error;
+
+ assert(m);
+ assert(connection);
+ assert(message);
+
+ dbus_error_init(&error);
+
+ log_debug("Got message: %s %s %s", strna(dbus_message_get_sender(message)), strna(dbus_message_get_interface(message)), strna(dbus_message_get_member(message)));
+
+ if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
+ const char *path, *result, *unit;
+ Machine *mm;
+ uint32_t id;
+
+ if (!dbus_message_get_args(message, &error,
+ DBUS_TYPE_UINT32, &id,
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_STRING, &result,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
+ goto finish;
+ }
+
+ mm = hashmap_get(m->machine_units, unit);
+ if (mm) {
+ if (streq_ptr(path, mm->scope_job)) {
+ free(mm->scope_job);
+ mm->scope_job = NULL;
+
+ if (mm->started) {
+ if (streq(result, "done"))
+ machine_send_create_reply(mm, NULL);
+ else {
+ dbus_set_error(&error, BUS_ERROR_JOB_FAILED, "Start job for unit %s failed with '%s'", unit, result);
+ machine_send_create_reply(mm, &error);
+ }
+ } else
+ machine_save(mm);
+ }
+
+ machine_add_to_gc_queue(mm);
+ }
+
+ } else if (dbus_message_is_signal(message, "org.freedesktop.DBus.Properties", "PropertiesChanged")) {
+
+ _cleanup_free_ char *unit = NULL;
+ const char *path;
+
+ path = dbus_message_get_path(message);
+ if (!path)
+ goto finish;
+
+ unit_name_from_dbus_path(path, &unit);
+ if (unit) {
+ Machine *mm;
+
+ mm = hashmap_get(m->machine_units, unit);
+ if (mm)
+ machine_add_to_gc_queue(mm);
+ }
+
+ } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "UnitRemoved")) {
+ const char *path, *unit;
+ Machine *mm;
+
+ if (!dbus_message_get_args(message, &error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse UnitRemoved message: %s", bus_error_message(&error));
+ goto finish;
+ }
+
+ mm = hashmap_get(m->machine_units, unit);
+ if (mm)
+ machine_add_to_gc_queue(mm);
+
+ } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "Reloading")) {
+ dbus_bool_t b;
+
+ if (!dbus_message_get_args(message, &error,
+ DBUS_TYPE_BOOLEAN, &b,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse Reloading message: %s", bus_error_message(&error));
+ goto finish;
+ }
+
+ /* systemd finished reloading, let's recheck all our machines */
+ if (!b) {
+ Machine *mm;
+ Iterator i;
+
+ log_debug("System manager has been reloaded, rechecking machines...");
+
+ HASHMAP_FOREACH(mm, m->machines, i)
+ machine_add_to_gc_queue(mm);
+ }
+ }
+
+finish:
+ dbus_error_free(&error);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static int copy_many_fields(DBusMessageIter *dest, DBusMessageIter *src);
+
+static int copy_one_field(DBusMessageIter *dest, DBusMessageIter *src) {
+ int type, r;
+
+ type = dbus_message_iter_get_arg_type(src);
+
+ switch (type) {
+
+ case DBUS_TYPE_STRUCT: {
+ DBusMessageIter dest_sub, src_sub;
+
+ dbus_message_iter_recurse(src, &src_sub);
+
+ if (!dbus_message_iter_open_container(dest, DBUS_TYPE_STRUCT, NULL, &dest_sub))
+ return log_oom();
+
+ r = copy_many_fields(&dest_sub, &src_sub);
+ if (r < 0)
+ return r;
+
+ if (!dbus_message_iter_close_container(dest, &dest_sub))
+ return log_oom();
+
+ return 0;
+ }
+
+ case DBUS_TYPE_ARRAY: {
+ DBusMessageIter dest_sub, src_sub;
+
+ dbus_message_iter_recurse(src, &src_sub);
+
+ if (!dbus_message_iter_open_container(dest, DBUS_TYPE_ARRAY, dbus_message_iter_get_signature(&src_sub), &dest_sub))
+ return log_oom();
+
+ r = copy_many_fields(&dest_sub, &src_sub);
+ if (r < 0)
+ return r;
+
+ if (!dbus_message_iter_close_container(dest, &dest_sub))
+ return log_oom();
+
+ return 0;
+ }
+
+ case DBUS_TYPE_VARIANT: {
+ DBusMessageIter dest_sub, src_sub;
+
+ dbus_message_iter_recurse(src, &src_sub);
+
+ if (!dbus_message_iter_open_container(dest, DBUS_TYPE_VARIANT, dbus_message_iter_get_signature(&src_sub), &dest_sub))
+ return log_oom();
+
+ r = copy_one_field(&dest_sub, &src_sub);
+ if (r < 0)
+ return r;
+
+ if (!dbus_message_iter_close_container(dest, &dest_sub))
+ return log_oom();
+
+ return 0;
+ }
+
+ case DBUS_TYPE_STRING:
+ case DBUS_TYPE_OBJECT_PATH:
+ case DBUS_TYPE_BYTE:
+ case DBUS_TYPE_BOOLEAN:
+ case DBUS_TYPE_UINT16:
+ case DBUS_TYPE_INT16:
+ case DBUS_TYPE_UINT32:
+ case DBUS_TYPE_INT32:
+ case DBUS_TYPE_UINT64:
+ case DBUS_TYPE_INT64:
+ case DBUS_TYPE_DOUBLE:
+ case DBUS_TYPE_SIGNATURE: {
+ const void *p;
+
+ dbus_message_iter_get_basic(src, &p);
+ dbus_message_iter_append_basic(dest, type, &p);
+ return 0;
+ }
+
+ default:
+ return -EINVAL;
+ }
+}
+
+static int copy_many_fields(DBusMessageIter *dest, DBusMessageIter *src) {
+ int r;
+
+ assert(dest);
+ assert(src);
+
+ while (dbus_message_iter_get_arg_type(src) != DBUS_TYPE_INVALID) {
+
+ r = copy_one_field(dest, src);
+ if (r < 0)
+ return r;
+
+ dbus_message_iter_next(src);
+ }
+
+ return 0;
+}
+
+int manager_start_scope(
+ Manager *manager,
+ const char *scope,
+ pid_t pid,
+ const char *slice,
+ const char *description,
+ DBusMessageIter *more_properties,
+ DBusError *error,
+ char **job) {
+
+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+ DBusMessageIter iter, sub, sub2, sub3, sub4;
+ const char *timeout_stop_property = "TimeoutStopUSec";
+ const char *pids_property = "PIDs";
+ uint64_t timeout = 500 * USEC_PER_MSEC;
+ const char *fail = "fail";
+ uint32_t u;
+ int r;
+
+ assert(manager);
+ assert(scope);
+ assert(pid > 1);
+
+ if (!slice)
+ slice = "";
+
+ m = dbus_message_new_method_call(
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StartTransientUnit");
+ if (!m)
+ return log_oom();
+
+ dbus_message_iter_init_append(m, &iter);
+
+ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &scope) ||
+ !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &fail) ||
+ !dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sv)", &sub))
+ return log_oom();
+
+ if (!isempty(slice)) {
+ const char *slice_property = "Slice";
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &slice_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &slice) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+ }
+
+ if (!isempty(description)) {
+ const char *description_property = "Description";
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &description_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &description) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+ }
+
+ /* cgroup empty notification is not available in containers
+ * currently. To make this less problematic, let's shorten the
+ * stop timeout for sessions, so that we don't wait
+ * forever. */
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &timeout_stop_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "t", &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_UINT64, &timeout) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ u = pid;
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) ||
+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &pids_property) ||
+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "au", &sub3) ||
+ !dbus_message_iter_open_container(&sub3, DBUS_TYPE_ARRAY, "u", &sub4) ||
+ !dbus_message_iter_append_basic(&sub4, DBUS_TYPE_UINT32, &u) ||
+ !dbus_message_iter_close_container(&sub3, &sub4) ||
+ !dbus_message_iter_close_container(&sub2, &sub3) ||
+ !dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ if (more_properties) {
+ r = copy_many_fields(&sub, more_properties);
+ if (r < 0)
+ return r;
+ }
+
+ if (!dbus_message_iter_close_container(&iter, &sub))
+ return log_oom();
+
+ reply = dbus_connection_send_with_reply_and_block(manager->bus, m, -1, error);
+ if (!reply)
+ return -EIO;
+
+ if (job) {
+ const char *j;
+ char *copy;
+
+ if (!dbus_message_get_args(reply, error, DBUS_TYPE_OBJECT_PATH, &j, DBUS_TYPE_INVALID))
+ return -EIO;
+
+ copy = strdup(j);
+ if (!copy)
+ return -ENOMEM;
+
+ *job = copy;
+ }
+
+ return 0;
+}
+
+int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *fail = "fail";
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StopUnit",
+ &reply,
+ error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_STRING, &fail,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ if (dbus_error_has_name(error, BUS_ERROR_NO_SUCH_UNIT) ||
+ dbus_error_has_name(error, BUS_ERROR_LOAD_FAILED)) {
+
+ if (job)
+ *job = NULL;
+
+ dbus_error_free(error);
+ return 0;
+ }
+
+ log_error("Failed to stop unit %s: %s", unit, bus_error(error, r));
+ return r;
+ }
+
+ if (job) {
+ const char *j;
+ char *copy;
+
+ if (!dbus_message_get_args(reply, error,
+ DBUS_TYPE_OBJECT_PATH, &j,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse reply.");
+ return -EIO;
+ }
+
+ copy = strdup(j);
+ if (!copy)
+ return -ENOMEM;
+
+ *job = copy;
+ }
+
+ return 1;
+}
+
+int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *w;
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ w = who == KILL_LEADER ? "process" : "cgroup";
+ assert_cc(sizeof(signo) == sizeof(int32_t));
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "KillUnit",
+ &reply,
+ error,
+ DBUS_TYPE_STRING, &unit,
+ DBUS_TYPE_STRING, &w,
+ DBUS_TYPE_INT32, &signo,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to stop unit %s: %s", unit, bus_error(error, r));
+ return r;
+ }
+
+ return 0;
+}
+
+int manager_unit_is_active(Manager *manager, const char *unit) {
+
+ const char *interface = "org.freedesktop.systemd1.Unit";
+ const char *property = "ActiveState";
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_free_ char *path = NULL;
+ DBusMessageIter iter, sub;
+ const char *state;
+ DBusError error;
+ int r;
+
+ assert(manager);
+ assert(unit);
+
+ dbus_error_init(&error);
+
+ path = unit_dbus_path_from_name(unit);
+ if (!path)
+ return -ENOMEM;
+
+ r = bus_method_call_with_reply(
+ manager->bus,
+ "org.freedesktop.systemd1",
+ path,
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ &reply,
+ &error,
+ DBUS_TYPE_STRING, &interface,
+ DBUS_TYPE_STRING, &property,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ if (dbus_error_has_name(&error, DBUS_ERROR_NO_REPLY) ||
+ dbus_error_has_name(&error, DBUS_ERROR_DISCONNECTED)) {
+ dbus_error_free(&error);
+ return true;
+ }
+
+ if (dbus_error_has_name(&error, BUS_ERROR_NO_SUCH_UNIT) ||
+ dbus_error_has_name(&error, BUS_ERROR_LOAD_FAILED)) {
+ dbus_error_free(&error);
+ return false;
+ }
+
+ log_error("Failed to query ActiveState: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ return r;
+ }
+
+ if (!dbus_message_iter_init(reply, &iter) ||
+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_recurse(&iter, &sub);
+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
+ log_error("Failed to parse reply.");
+ return -EINVAL;
+ }
+
+ dbus_message_iter_get_basic(&sub, &state);
+
+ return !streq(state, "inactive") && !streq(state, "failed");
+}
+
+int manager_add_machine(Manager *m, const char *name, Machine **_machine) {
+ Machine *machine;
+
+ assert(m);
+ assert(name);
+
+ machine = hashmap_get(m->machines, name);
+ if (machine) {
+ if (_machine)
+ *_machine = machine;
+
+ return 0;
+ }
+
+ machine = machine_new(m, name);
+ if (!machine)
+ return -ENOMEM;
+
+ if (_machine)
+ *_machine = machine;
+
+ return 0;
+}
+
+int manager_get_machine_by_pid(Manager *m, pid_t pid, Machine **machine) {
+ _cleanup_free_ char *unit = NULL;
+ Machine *mm;
+ int r;
+
+ assert(m);
+ assert(pid >= 1);
+ assert(machine);
+
+ r = cg_pid_get_unit(pid, &unit);
+ if (r < 0)
+ return r;
+
+ mm = hashmap_get(m->machine_units, unit);
+ if (!mm)
+ return 0;
+
+ *machine = mm;
+ return 1;
+}
diff --git a/src/machine/machined.c b/src/machine/machined.c
new file mode 100644
index 0000000000..ad804a1e14
--- /dev/null
+++ b/src/machine/machined.c
@@ -0,0 +1,386 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <errno.h>
+#include <pwd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/epoll.h>
+
+#include <systemd/sd-daemon.h>
+
+#include "machined.h"
+#include "dbus-common.h"
+#include "dbus-loop.h"
+#include "strv.h"
+#include "conf-parser.h"
+#include "mkdir.h"
+
+Manager *manager_new(void) {
+ Manager *m;
+
+ m = new0(Manager, 1);
+ if (!m)
+ return NULL;
+
+ m->bus_fd = -1;
+ m->epoll_fd = -1;
+
+ m->machines = hashmap_new(string_hash_func, string_compare_func);
+ m->machine_units = hashmap_new(string_hash_func, string_compare_func);
+
+ if (!m->machines || !m->machine_units) {
+ manager_free(m);
+ return NULL;
+ }
+
+ return m;
+}
+
+void manager_free(Manager *m) {
+ Machine *machine;
+
+ assert(m);
+
+ while ((machine = hashmap_first(m->machines)))
+ machine_free(machine);
+
+ hashmap_free(m->machines);
+ hashmap_free(m->machine_units);
+
+ if (m->bus) {
+ dbus_connection_flush(m->bus);
+ dbus_connection_close(m->bus);
+ dbus_connection_unref(m->bus);
+ }
+
+ if (m->bus_fd >= 0)
+ close_nointr_nofail(m->bus_fd);
+
+ if (m->epoll_fd >= 0)
+ close_nointr_nofail(m->epoll_fd);
+
+ free(m);
+}
+
+int manager_enumerate_machines(Manager *m) {
+ _cleanup_closedir_ DIR *d = NULL;
+ struct dirent *de;
+ int r = 0;
+
+ assert(m);
+
+ /* Read in machine data stored on disk */
+ d = opendir("/run/systemd/machines");
+ if (!d) {
+ if (errno == ENOENT)
+ return 0;
+
+ log_error("Failed to open /run/systemd/machines: %m");
+ return -errno;
+ }
+
+ FOREACH_DIRENT(de, d, return -errno) {
+ struct Machine *machine;
+ int k;
+
+ if (!dirent_is_file(de))
+ continue;
+
+ k = manager_add_machine(m, de->d_name, &machine);
+ if (k < 0) {
+ log_error("Failed to add machine by file name %s: %s", de->d_name, strerror(-k));
+
+ r = k;
+ continue;
+ }
+
+ machine_add_to_gc_queue(machine);
+
+ k = machine_load(machine);
+ if (k < 0)
+ r = k;
+ }
+
+ return r;
+}
+
+static int manager_connect_bus(Manager *m) {
+ DBusError error;
+ int r;
+ struct epoll_event ev = {
+ .events = EPOLLIN,
+ .data.u32 = FD_BUS,
+ };
+
+ assert(m);
+ assert(!m->bus);
+ assert(m->bus_fd < 0);
+
+ dbus_error_init(&error);
+
+ m->bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
+ if (!m->bus) {
+ log_error("Failed to get system D-Bus connection: %s", bus_error_message(&error));
+ r = -ECONNREFUSED;
+ goto fail;
+ }
+
+ if (!dbus_connection_register_object_path(m->bus, "/org/freedesktop/machine1", &bus_manager_vtable, m) ||
+ !dbus_connection_register_fallback(m->bus, "/org/freedesktop/machine1/machine", &bus_machine_vtable, m) ||
+ !dbus_connection_add_filter(m->bus, bus_message_filter, m, NULL)) {
+ r = log_oom();
+ goto fail;
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='JobRemoved',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for JobRemoved: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='UnitRemoved',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for UnitRemoved: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.DBus.Properties',"
+ "member='PropertiesChanged'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for PropertiesChanged: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='Reloading',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for Reloading: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
+ r = bus_method_call_with_reply(
+ m->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "Subscribe",
+ NULL,
+ &error,
+ DBUS_TYPE_INVALID);
+ if (r < 0) {
+ log_error("Failed to enable subscription: %s", bus_error(&error, r));
+ dbus_error_free(&error);
+ }
+
+ r = dbus_bus_request_name(m->bus, "org.freedesktop.machine1", DBUS_NAME_FLAG_DO_NOT_QUEUE, &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to register name on bus: %s", bus_error_message(&error));
+ r = -EIO;
+ goto fail;
+ }
+
+ if (r != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+ log_error("Failed to acquire name.");
+ r = -EEXIST;
+ goto fail;
+ }
+
+ m->bus_fd = bus_loop_open(m->bus);
+ if (m->bus_fd < 0) {
+ r = m->bus_fd;
+ goto fail;
+ }
+
+ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->bus_fd, &ev) < 0)
+ goto fail;
+
+ return 0;
+
+fail:
+ dbus_error_free(&error);
+
+ return r;
+}
+
+void manager_gc(Manager *m, bool drop_not_started) {
+ Machine *machine;
+
+ assert(m);
+
+ while ((machine = m->machine_gc_queue)) {
+ LIST_REMOVE(Machine, gc_queue, m->machine_gc_queue, machine);
+ machine->in_gc_queue = false;
+
+ if (machine_check_gc(machine, drop_not_started) == 0) {
+ machine_stop(machine);
+ machine_free(machine);
+ }
+ }
+}
+
+int manager_startup(Manager *m) {
+ int r;
+ Machine *machine;
+ Iterator i;
+
+ assert(m);
+ assert(m->epoll_fd <= 0);
+
+ m->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
+ if (m->epoll_fd < 0)
+ return -errno;
+
+ /* Connect to the bus */
+ r = manager_connect_bus(m);
+ if (r < 0)
+ return r;
+
+ /* Deserialize state */
+ manager_enumerate_machines(m);
+
+ /* Remove stale objects before we start them */
+ manager_gc(m, false);
+
+ /* And start everything */
+ HASHMAP_FOREACH(machine, m->machines, i)
+ machine_start(machine, NULL);
+
+ return 0;
+}
+
+int manager_run(Manager *m) {
+ assert(m);
+
+ for (;;) {
+ struct epoll_event event;
+ int n;
+
+ manager_gc(m, true);
+
+ if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE)
+ continue;
+
+ manager_gc(m, true);
+
+ n = epoll_wait(m->epoll_fd, &event, 1, -1);
+ if (n < 0) {
+ if (errno == EINTR || errno == EAGAIN)
+ continue;
+
+ log_error("epoll() failed: %m");
+ return -errno;
+ }
+
+ if (n == 0)
+ continue;
+
+ switch (event.data.u32) {
+
+ case FD_BUS:
+ bus_loop_dispatch(m->bus_fd);
+ break;
+
+ default:
+ assert_not_reached("Unknown fd");
+ }
+ }
+
+ return 0;
+}
+
+int main(int argc, char *argv[]) {
+ Manager *m = NULL;
+ int r;
+
+ log_set_target(LOG_TARGET_AUTO);
+ log_set_facility(LOG_AUTH);
+ log_parse_environment();
+ log_open();
+
+ umask(0022);
+
+ if (argc != 1) {
+ log_error("This program takes no arguments.");
+ r = -EINVAL;
+ goto finish;
+ }
+
+ /* Always create the directories people can create inotify
+ * watches in. Note that some applications might check for the
+ * existence of /run/systemd/seats/ to determine whether
+ * machined is available, so please always make sure this check
+ * stays in. */
+ mkdir_label("/run/systemd/machines", 0755);
+
+ m = manager_new();
+ if (!m) {
+ r = log_oom();
+ goto finish;
+ }
+
+ r = manager_startup(m);
+ if (r < 0) {
+ log_error("Failed to fully start up daemon: %s", strerror(-r));
+ goto finish;
+ }
+
+ log_debug("systemd-machined running as pid %lu", (unsigned long) getpid());
+
+ sd_notify(false,
+ "READY=1\n"
+ "STATUS=Processing requests...");
+
+ r = manager_run(m);
+
+ log_debug("systemd-machined stopped as pid %lu", (unsigned long) getpid());
+
+finish:
+ sd_notify(false,
+ "STATUS=Shutting down...");
+
+ if (m)
+ manager_free(m);
+
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/src/machine/machined.h b/src/machine/machined.h
new file mode 100644
index 0000000000..780f51678c
--- /dev/null
+++ b/src/machine/machined.h
@@ -0,0 +1,73 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdbool.h>
+#include <inttypes.h>
+#include <dbus/dbus.h>
+
+#include "util.h"
+#include "list.h"
+#include "hashmap.h"
+
+typedef struct Manager Manager;
+
+#include "machine.h"
+
+struct Manager {
+ DBusConnection *bus;
+
+ int bus_fd;
+ int epoll_fd;
+
+ Hashmap *machines;
+ Hashmap *machine_units;
+
+ LIST_HEAD(Machine, machine_gc_queue);
+};
+
+enum {
+ FD_BUS
+};
+
+Manager *manager_new(void);
+void manager_free(Manager *m);
+
+int manager_add_machine(Manager *m, const char *name, Machine **_machine);
+
+int manager_enumerate_machines(Manager *m);
+
+int manager_startup(Manager *m);
+int manager_run(Manager *m);
+
+void manager_gc(Manager *m, bool drop_not_started);
+
+int manager_get_machine_by_pid(Manager *m, pid_t pid, Machine **machine);
+
+extern const DBusObjectPathVTable bus_manager_vtable;
+
+DBusHandlerResult bus_message_filter(DBusConnection *c, DBusMessage *message, void *userdata);
+
+int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, DBusMessageIter *more_properties, DBusError *error, char **job);
+int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job);
+int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error);
+int manager_unit_is_active(Manager *manager, const char *unit);
diff --git a/src/machine/org.freedesktop.machine1.conf b/src/machine/org.freedesktop.machine1.conf
new file mode 100644
index 0000000000..b2d6df3121
--- /dev/null
+++ b/src/machine/org.freedesktop.machine1.conf
@@ -0,0 +1,50 @@
+<?xml version="1.0"?> <!--*-nxml-*-->
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+
+<!--
+ 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.
+-->
+
+<busconfig>
+
+ <policy user="root">
+ <allow own="org.freedesktop.machine1"/>
+ <allow send_destination="org.freedesktop.machine1"/>
+ <allow receive_sender="org.freedesktop.machine1"/>
+ </policy>
+
+ <policy context="default">
+ <deny send_destination="org.freedesktop.machine1"/>
+
+ <allow send_destination="org.freedesktop.machine1"
+ send_interface="org.freedesktop.DBus.Introspectable"/>
+
+ <allow send_destination="org.freedesktop.machine1"
+ send_interface="org.freedesktop.DBus.Peer"/>
+
+ <allow send_destination="org.freedesktop.machine1"
+ send_interface="org.freedesktop.DBus.Properties"
+ send_member="Get"/>
+
+ <allow send_destination="org.freedesktop.machine1"
+ send_interface="org.freedesktop.DBus.Properties"
+ send_member="GetAll"/>
+
+ <allow send_destination="org.freedesktop.machine1"
+ send_interface="org.freedesktop.machine1.Manager"
+ send_member="ListMachines"/>
+
+ <allow send_destination="org.freedesktop.machine1"
+ send_interface="org.freedesktop.machine1.Manager"
+ send_member="GetMachine"/>
+
+ <allow receive_sender="org.freedesktop.machine1"/>
+ </policy>
+
+</busconfig>
diff --git a/src/machine/org.freedesktop.machine1.service b/src/machine/org.freedesktop.machine1.service
new file mode 100644
index 0000000000..d3dc99852b
--- /dev/null
+++ b/src/machine/org.freedesktop.machine1.service
@@ -0,0 +1,12 @@
+# 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.
+
+[D-BUS Service]
+Name=org.freedesktop.machine1
+Exec=/bin/false
+User=root
+SystemdService=dbus-org.freedesktop.machine1.service
diff --git a/src/machine/test-machine-tables.c b/src/machine/test-machine-tables.c
new file mode 100644
index 0000000000..4aae426050
--- /dev/null
+++ b/src/machine/test-machine-tables.c
@@ -0,0 +1,30 @@
+/***
+ This file is part of systemd
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "machine.h"
+
+#include "test-tables.h"
+
+int main(int argc, char **argv) {
+ test_table(machine_class, MACHINE_CLASS);
+ test_table(machine_state, MACHINE_STATE);
+ test_table(kill_who, KILL_WHO);
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/notify/notify.c b/src/notify/notify.c
index 1e9766f862..a688a9f879 100644
--- a/src/notify/notify.c
+++ b/src/notify/notify.c
@@ -157,7 +157,8 @@ int main(int argc, char* argv[]) {
log_parse_environment();
log_open();
- if ((r = parse_argv(argc, argv)) <= 0) {
+ r = parse_argv(argc, argv);
+ if (r <= 0) {
retval = r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
goto finish;
}
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 09153c87ce..eb9605c356 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -41,12 +41,10 @@
#include <linux/fs.h>
#include <sys/un.h>
#include <sys/socket.h>
-
-#ifdef HAVE_XATTR
-#include <attr/xattr.h>
-#endif
+#include <linux/netlink.h>
#include <systemd/sd-daemon.h>
+#include <systemd/sd-bus.h>
#include "log.h"
#include "util.h"
@@ -63,6 +61,8 @@
#include "fdset.h"
#include "build.h"
#include "fileio.h"
+#include "bus-internal.h"
+#include "bus-message.h"
#ifndef TTY_GID
#define TTY_GID 5
@@ -77,9 +77,9 @@ typedef enum LinkJournal {
static char *arg_directory = NULL;
static char *arg_user = NULL;
-static char **arg_controllers = NULL;
-static char *arg_uuid = NULL;
+static sd_id128_t arg_uuid = {};
static char *arg_machine = NULL;
+static const char *arg_slice = NULL;
static bool arg_private_network = false;
static bool arg_read_only = false;
static bool arg_boot = false;
@@ -122,10 +122,9 @@ static int help(void) {
" -D --directory=NAME Root directory for the container\n"
" -b --boot Boot up full system (i.e. invoke init)\n"
" -u --user=USER Run the command under specified user or uid\n"
- " -C --controllers=LIST Put the container in specified comma-separated\n"
- " cgroup hierarchies\n"
" --uuid=UUID Set a specific machine UUID for the container\n"
" -M --machine=NAME Set the machine name for the container\n"
+ " -S --slice=SLICE Place the container in the specified slice\n"
" --private-network Disable network in container\n"
" --read-only Mount the root directory read-only\n"
" --capability=CAP In addition to the default, retain specified\n"
@@ -158,7 +157,6 @@ static int parse_argv(int argc, char *argv[]) {
{ "version", no_argument, NULL, ARG_VERSION },
{ "directory", required_argument, NULL, 'D' },
{ "user", required_argument, NULL, 'u' },
- { "controllers", required_argument, NULL, 'C' },
{ "private-network", no_argument, NULL, ARG_PRIVATE_NETWORK },
{ "boot", no_argument, NULL, 'b' },
{ "uuid", required_argument, NULL, ARG_UUID },
@@ -168,15 +166,16 @@ static int parse_argv(int argc, char *argv[]) {
{ "bind", required_argument, NULL, ARG_BIND },
{ "bind-ro", required_argument, NULL, ARG_BIND_RO },
{ "machine", required_argument, NULL, 'M' },
+ { "slice", required_argument, NULL, 'S' },
{ NULL, 0, NULL, 0 }
};
- int c;
+ int c, r;
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "+hD:u:C:bM:j", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "+hD:u:bM:jS:", options, NULL)) >= 0) {
switch (c) {
@@ -207,15 +206,6 @@ static int parse_argv(int argc, char *argv[]) {
break;
- case 'C':
- strv_free(arg_controllers);
- arg_controllers = strv_split(optarg, ",");
- if (!arg_controllers)
- return log_oom();
-
- cg_shorten_controllers(arg_controllers);
- break;
-
case ARG_PRIVATE_NETWORK:
arg_private_network = true;
break;
@@ -225,12 +215,15 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_UUID:
- if (!id128_is_valid(optarg)) {
+ r = sd_id128_from_string(optarg, &arg_uuid);
+ if (r < 0) {
log_error("Invalid UUID: %s", optarg);
- return -EINVAL;
+ return r;
}
+ break;
- arg_uuid = optarg;
+ case 'S':
+ arg_slice = strdup(optarg);
break;
case 'M':
@@ -300,7 +293,6 @@ static int parse_argv(int argc, char *argv[]) {
_cleanup_free_ char *a = NULL, *b = NULL;
char *e;
char ***x;
- int r;
x = c == ARG_BIND ? &arg_bind : &arg_bind_ro;
@@ -419,12 +411,39 @@ static int mount_binds(const char *dest, char **l, unsigned long flags) {
STRV_FOREACH_PAIR(x, y, l) {
_cleanup_free_ char *where = NULL;
+ struct stat source_st, dest_st;
+
+ if (stat(*x, &source_st) < 0) {
+ log_error("failed to stat %s: %m", *x);
+ return -errno;
+ }
where = strjoin(dest, "/", *y, NULL);
if (!where)
return log_oom();
- mkdir_p_label(where, 0755);
+ if (stat(where, &dest_st) == 0) {
+ if ((source_st.st_mode & S_IFMT) != (dest_st.st_mode & S_IFMT)) {
+ log_error("The file types of %s and %s do not match. Refusing bind mount",
+ *x, where);
+ return -EINVAL;
+ }
+ } else {
+ /* Create the mount point, but be conservative -- refuse to create block
+ * and char devices. */
+ if (S_ISDIR(source_st.st_mode))
+ mkdir_p_label(where, 0755);
+ else if (S_ISFIFO(source_st.st_mode))
+ mkfifo(where, 0644);
+ else if (S_ISSOCK(source_st.st_mode))
+ mknod(where, 0644 | S_IFSOCK, 0);
+ else if (S_ISREG(source_st.st_mode))
+ touch(where);
+ else {
+ log_error("Refusing to create mountpoint for file: %s", *x);
+ return -ENOTSUP;
+ }
+ }
if (mount(*x, where, "bind", MS_BIND, NULL) < 0) {
log_error("mount(%s) failed: %m", where);
@@ -911,68 +930,6 @@ static int setup_journal(const char *directory) {
return 0;
}
-static int setup_cgroup(const char *path) {
- char **c;
- int r;
-
- r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, path, 1);
- if (r < 0) {
- log_error("Failed to create cgroup: %s", strerror(-r));
- return r;
- }
-
- STRV_FOREACH(c, arg_controllers) {
- r = cg_create_and_attach(*c, path, 1);
- if (r < 0)
- log_warning("Failed to create cgroup in controller %s: %s", *c, strerror(-r));
- }
-
- return 0;
-}
-
-static int save_attributes(const char *cgroup, pid_t pid, const char *uuid, const char *directory) {
-#ifdef HAVE_XATTR
- _cleanup_free_ char *path = NULL;
- char buf[DECIMAL_STR_MAX(pid_t)];
- int r = 0, k;
-
- assert(cgroup);
- assert(pid >= 0);
- assert(arg_directory);
-
- assert_se(snprintf(buf, sizeof(buf), "%lu", (unsigned long) pid) < (int) sizeof(buf));
-
- r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, cgroup, NULL, &path);
- if (r < 0) {
- log_error("Failed to get path: %s", strerror(-r));
- return r;
- }
-
- r = setxattr(path, "trusted.init_pid", buf, strlen(buf), XATTR_CREATE);
- if (r < 0)
- log_warning("Failed to set %s attribute on %s: %m", "trusted.init_pid", path);
-
- if (uuid) {
- k = setxattr(path, "trusted.machine_id", uuid, strlen(uuid), XATTR_CREATE);
- if (k < 0) {
- log_warning("Failed to set %s attribute on %s: %m", "trusted.machine_id", path);
- if (r == 0)
- r = k;
- }
- }
-
- k = setxattr(path, "trusted.root_directory", directory, strlen(directory), XATTR_CREATE);
- if (k < 0) {
- log_warning("Failed to set %s attribute on %s: %m", "trusted.root_directory", path);
- if (r == 0)
- r = k;
- }
- return r;
-#else
- return 0;
-#endif
-}
-
static int drop_capabilities(void) {
return capability_bounding_set_drop(~arg_retain, false);
}
@@ -1219,10 +1176,55 @@ finish:
return r;
}
+static int register_machine(void) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_bus_unref_ sd_bus *bus = NULL;
+ int r;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0) {
+ log_error("Failed to open system bus: %s", strerror(-r));
+ return r;
+ }
+
+ r = sd_bus_call_method(
+ bus,
+ "org.freedesktop.machine1",
+ "/org/freedesktop/machine1",
+ "org.freedesktop.machine1.Manager",
+ "CreateMachine",
+ &error,
+ NULL,
+ "sayssusa(sv)",
+ arg_machine,
+ SD_BUS_APPEND_ID128(arg_uuid),
+ "nspawn",
+ "container",
+ (uint32_t) 0,
+ strempty(arg_directory),
+ 1, "Slice", "s", strempty(arg_slice));
+ if (r < 0) {
+ log_error("Failed to register machine: %s", error.message ? error.message : strerror(-r));
+ return r;
+ }
+
+ return 0;
+}
+
+static bool audit_enabled(void) {
+ int fd;
+
+ fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_AUDIT);
+ if (fd >= 0) {
+ close_nointr_nofail(fd);
+ return true;
+ }
+ return false;
+}
+
int main(int argc, char *argv[]) {
pid_t pid = 0;
int r = EXIT_FAILURE, k;
- _cleanup_free_ char *newcg = NULL;
_cleanup_close_ int master = -1;
int n_fd_passed;
const char *console = NULL;
@@ -1284,6 +1286,13 @@ int main(int argc, char *argv[]) {
goto finish;
}
+ if (arg_boot && audit_enabled()) {
+ log_warning("The kernel auditing subsystem is known to be incompatible with containers.\n"
+ "Please make sure to turn off auditing with 'audit=0' on the kernel command\n"
+ "line before using systemd-nspawn. Sleeping for 5s...\n");
+ sleep(5);
+ }
+
if (path_equal(arg_directory, "/")) {
log_error("Spawning container on root directory not supported.");
goto finish;
@@ -1306,22 +1315,6 @@ int main(int argc, char *argv[]) {
fdset_close_others(fds);
log_open();
- k = cg_get_machine_path(arg_machine, &newcg);
- if (k < 0) {
- log_error("Failed to determine machine cgroup path: %s", strerror(-k));
- goto finish;
- }
-
- k = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, newcg, true);
- if (k <= 0 && k != -ENOENT) {
- log_error("Container already running.");
-
- free(newcg);
- newcg = NULL;
-
- goto finish;
- }
-
master = posix_openpt(O_RDWR|O_NOCTTY|O_CLOEXEC|O_NDELAY);
if (master < 0) {
log_error("Failed to acquire pseudo tty: %m");
@@ -1465,11 +1458,12 @@ int main(int argc, char *argv[]) {
goto child_fail;
}
- if (setup_cgroup(newcg) < 0)
- goto child_fail;
-
close_pipe(pipefd2);
+ r = register_machine();
+ if (r < 0)
+ goto finish;
+
/* Mark everything as slave, so that we still
* receive mounts from the real root, but don't
* propagate mounts to the real root. */
@@ -1620,8 +1614,8 @@ int main(int argc, char *argv[]) {
goto child_fail;
}
- if (arg_uuid) {
- if (asprintf((char**)(envp + n_env++), "container_uuid=%s", arg_uuid) < 0) {
+ if (!sd_id128_equal(arg_uuid, SD_ID128_NULL)) {
+ if (asprintf((char**)(envp + n_env++), "container_uuid=" SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(arg_uuid)) < 0) {
log_oom();
goto child_fail;
}
@@ -1635,7 +1629,7 @@ int main(int argc, char *argv[]) {
}
if ((asprintf((char **)(envp + n_env++), "LISTEN_FDS=%u", n_fd_passed) < 0) ||
- (asprintf((char **)(envp + n_env++), "LISTEN_PID=%lu", (unsigned long) 1) < 0)) {
+ (asprintf((char **)(envp + n_env++), "LISTEN_PID=1") < 0)) {
log_oom();
goto child_fail;
}
@@ -1683,8 +1677,6 @@ int main(int argc, char *argv[]) {
fd_wait_for_event(pipefd2[0], POLLHUP, -1);
close_nointr_nofail(pipefd2[0]);
- save_attributes(newcg, pid, arg_uuid, arg_directory);
-
fdset_free(fds);
fds = NULL;
@@ -1737,12 +1729,11 @@ finish:
close_pipe(kmsg_socket_pair);
- if (newcg)
- cg_kill_recursive_and_wait(SYSTEMD_CGROUP_CONTROLLER, newcg, true);
+ if (pid > 0)
+ kill(pid, SIGKILL);
free(arg_directory);
free(arg_machine);
- strv_free(arg_controllers);
fdset_free(fds);
diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c
index d3b4807368..6b84fb81c7 100644
--- a/src/python-systemd/_daemon.c
+++ b/src/python-systemd/_daemon.c
@@ -40,43 +40,6 @@ PyDoc_STRVAR(module__doc__,
"running under systemd."
);
-static PyObject* set_error(int r, const char* invalid_message) {
- assert (r < 0);
-
- if (r == -EINVAL && invalid_message)
- PyErr_SetString(PyExc_ValueError, invalid_message);
- else if (r == -ENOMEM)
- PyErr_SetString(PyExc_MemoryError, "Not enough memory");
- else {
- errno = -r;
- PyErr_SetFromErrno(PyExc_OSError);
- }
-
- return NULL;
-}
-
-
-#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 1
-static int Unicode_FSConverter(PyObject* obj, void *_result) {
- PyObject **result = _result;
-
- assert(result);
-
- if (!obj)
- /* cleanup: we don't return Py_CLEANUP_SUPPORTED, so
- * we can assume that it was PyUnicode_FSConverter. */
- return PyUnicode_FSConverter(obj, result);
-
- if (obj == Py_None) {
- *result = NULL;
- return 1;
- }
-
- return PyUnicode_FSConverter(obj, result);
-}
-#endif
-
-
PyDoc_STRVAR(booted__doc__,
"booted() -> bool\n\n"
"Return True iff this system is running under systemd.\n"
@@ -88,8 +51,45 @@ static PyObject* booted(PyObject *self, PyObject *args) {
assert(args == NULL);
r = sd_booted();
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, NULL, NULL))
+ return NULL;
+
+ return PyBool_FromLong(r);
+}
+
+PyDoc_STRVAR(notify__doc__,
+ "notify(status, unset_environment=False) -> bool\n\n"
+ "Send a message to the init system about a status change.\n"
+ "Wraps sd_notify(3).");
+
+static PyObject* notify(PyObject *self, PyObject *args, PyObject *keywds) {
+ int r;
+ const char* msg;
+ int unset = false;
+
+ static const char* const kwlist[] = {
+ "status",
+ "unset_environment",
+ NULL,
+ };
+#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 3
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "s|p:notify",
+ (char**) kwlist, &msg, &unset))
+ return NULL;
+#else
+ PyObject *obj = NULL;
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "s|O:notify",
+ (char**) kwlist, &msg, &obj))
+ return NULL;
+ if (obj != NULL)
+ unset = PyObject_IsTrue(obj);
+ if (unset < 0)
+ return NULL;
+#endif
+
+ r = sd_notify(unset, msg);
+ if (set_error(r, NULL, NULL))
+ return NULL;
return PyBool_FromLong(r);
}
@@ -102,16 +102,19 @@ PyDoc_STRVAR(listen_fds__doc__,
"Wraps sd_listen_fds(3)."
);
-static PyObject* listen_fds(PyObject *self, PyObject *args) {
+static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) {
int r;
int unset = true;
+ static const char* const kwlist[] = {"unset_environment", NULL};
#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 3
- if (!PyArg_ParseTuple(args, "|p:_listen_fds", &unset))
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|p:_listen_fds",
+ (char**) kwlist, &unset))
return NULL;
#else
PyObject *obj = NULL;
- if (!PyArg_ParseTuple(args, "|O:_listen_fds", &obj))
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|O:_listen_fds",
+ (char**) kwlist, &unset, &obj))
return NULL;
if (obj != NULL)
unset = PyObject_IsTrue(obj);
@@ -120,8 +123,8 @@ static PyObject* listen_fds(PyObject *self, PyObject *args) {
#endif
r = sd_listen_fds(unset);
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, NULL, NULL))
+ return NULL;
return long_FromLong(r);
}
@@ -148,8 +151,8 @@ static PyObject* is_fifo(PyObject *self, PyObject *args) {
#endif
r = sd_is_fifo(fd, path);
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, path, NULL))
+ return NULL;
return PyBool_FromLong(r);
}
@@ -176,8 +179,8 @@ static PyObject* is_mq(PyObject *self, PyObject *args) {
#endif
r = sd_is_mq(fd, path);
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, path, NULL))
+ return NULL;
return PyBool_FromLong(r);
}
@@ -200,8 +203,8 @@ static PyObject* is_socket(PyObject *self, PyObject *args) {
return NULL;
r = sd_is_socket(fd, family, type, listening);
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, NULL, NULL))
+ return NULL;
return PyBool_FromLong(r);
}
@@ -221,12 +224,14 @@ static PyObject* is_socket_inet(PyObject *self, PyObject *args) {
&fd, &family, &type, &listening, &port))
return NULL;
- if (port < 0 || port > INT16_MAX)
- return set_error(-EINVAL, "port must fit into uint16_t");
+ if (port < 0 || port > INT16_MAX) {
+ set_error(-EINVAL, NULL, "port must fit into uint16_t");
+ return NULL;
+ }
r = sd_is_socket_inet(fd, family, type, listening, (uint16_t) port);
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, NULL, NULL))
+ return NULL;
return PyBool_FromLong(r);
}
@@ -260,8 +265,8 @@ static PyObject* is_socket_unix(PyObject *self, PyObject *args) {
#endif
r = sd_is_socket_unix(fd, type, listening, path, length);
- if (r < 0)
- return set_error(r, NULL);
+ if (set_error(r, path, NULL))
+ return NULL;
return PyBool_FromLong(r);
}
@@ -269,7 +274,8 @@ static PyObject* is_socket_unix(PyObject *self, PyObject *args) {
static PyMethodDef methods[] = {
{ "booted", booted, METH_NOARGS, booted__doc__},
- { "_listen_fds", listen_fds, METH_VARARGS, listen_fds__doc__},
+ { "notify", (PyCFunction) notify, METH_VARARGS | METH_KEYWORDS, notify__doc__},
+ { "_listen_fds", (PyCFunction) listen_fds, METH_VARARGS | METH_KEYWORDS, listen_fds__doc__},
{ "_is_fifo", is_fifo, METH_VARARGS, is_fifo__doc__},
{ "_is_mq", is_mq, METH_VARARGS, is_mq__doc__},
{ "_is_socket", is_socket, METH_VARARGS, is_socket__doc__},
diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c
index d20c58d2a8..bc5db19049 100644
--- a/src/python-systemd/_reader.c
+++ b/src/python-systemd/_reader.c
@@ -30,6 +30,7 @@
#include "pyutil.h"
#include "macro.h"
#include "util.h"
+#include "strv.h"
#include "build.h"
typedef struct {
@@ -38,20 +39,6 @@ typedef struct {
} Reader;
static PyTypeObject ReaderType;
-static int set_error(int r, const char* path, const char* invalid_message) {
- if (r >= 0)
- return r;
- if (r == -EINVAL && invalid_message)
- PyErr_SetString(PyExc_ValueError, invalid_message);
- else if (r == -ENOMEM)
- PyErr_SetString(PyExc_MemoryError, "Not enough memory");
- else {
- errno = -r;
- PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
- }
- return -1;
-}
-
PyDoc_STRVAR(module__doc__,
"Class to reads the systemd journal similar to journalctl.");
@@ -77,6 +64,70 @@ static PyStructSequence_Desc Monotonic_desc = {
};
#endif
+/**
+ * Convert a Python sequence object into a strv (char**), and
+ * None into a NULL pointer.
+ */
+static int strv_converter(PyObject* obj, void *_result) {
+ char ***result = _result;
+ Py_ssize_t i, len;
+
+ assert(result);
+
+ if (!obj)
+ return 0;
+
+ if (obj == Py_None) {
+ *result = NULL;
+ return 1;
+ }
+
+ if (!PySequence_Check(obj))
+ return 0;
+
+ len = PySequence_Length(obj);
+ *result = new0(char*, len + 1);
+ if (!*result) {
+ set_error(-ENOMEM, NULL, NULL);
+ return 0;
+ }
+
+ for (i = 0; i < len; i++) {
+ PyObject *item;
+#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 1
+ int r;
+ PyObject *bytes;
+#endif
+ char *s, *s2;
+
+ item = PySequence_ITEM(obj, i);
+#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 1
+ r = PyUnicode_FSConverter(item, &bytes);
+ if (r == 0)
+ goto cleanup;
+
+ s = PyBytes_AsString(bytes);
+#else
+ s = PyString_AsString(item);
+#endif
+ if (!s)
+ goto cleanup;
+
+ s2 = strdup(s);
+ if (!s2)
+ log_oom();
+
+ (*result)[i] = s2;
+ }
+
+ return 1;
+
+cleanup:
+ strv_free(*result);
+ *result = NULL;
+
+ return 0;
+}
static void Reader_dealloc(Reader* self)
{
@@ -85,40 +136,45 @@ static void Reader_dealloc(Reader* self)
}
PyDoc_STRVAR(Reader__doc__,
- "_Reader([flags | path]) -> ...\n\n"
+ "_Reader([flags | path | files]) -> ...\n\n"
"_Reader allows filtering and retrieval of Journal entries.\n"
"Note: this is a low-level interface, and probably not what you\n"
"want, use systemd.journal.Reader instead.\n\n"
"Argument `flags` sets open flags of the journal, which can be one\n"
"of, or ORed combination of constants: LOCAL_ONLY (default) opens\n"
"journal on local machine only; RUNTIME_ONLY opens only\n"
- "volatile journal files; and SYSTEM_ONLY opens only\n"
- "journal files of system services and the kernel.\n\n"
- "Argument `path` is the directory of journal files. Note that\n"
- "`flags` and `path` are exclusive.\n\n"
+ "volatile journal files; and SYSTEM opens journal files of\n"
+ "system services and the kernel, and CURRENT_USER opens files\n"
+ "of the current user.\n\n"
+ "Argument `path` is the directory of journal files.\n"
+ "Argument `files` is a list of files. Note that\n"
+ "`flags`, `path`, and `files` are exclusive.\n\n"
"_Reader implements the context manager protocol: the journal\n"
"will be closed when exiting the block.");
static int Reader_init(Reader *self, PyObject *args, PyObject *keywds)
{
int flags = 0, r;
char *path = NULL;
+ char **files = NULL;
+
+ static const char* const kwlist[] = {"flags", "path", "files", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|izO&:__init__", (char**) kwlist,
+ &flags, &path, strv_converter, &files))
+ return -1;
- static const char* const kwlist[] = {"flags", "path", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iz", (char**) kwlist,
- &flags, &path))
+ if (!!flags + !!path + !!files > 1) {
+ PyErr_SetString(PyExc_ValueError, "cannot use more than one of flags, path, and files");
return -1;
+ }
if (!flags)
flags = SD_JOURNAL_LOCAL_ONLY;
- else
- if (path) {
- PyErr_SetString(PyExc_ValueError, "cannot use both flags and path");
- return -1;
- }
Py_BEGIN_ALLOW_THREADS
if (path)
r = sd_journal_open_directory(&self->j, path, 0);
+ else if (files)
+ r = sd_journal_open_files(&self->j, (const char**) files, 0);
else
r = sd_journal_open(&self->j, flags);
Py_END_ALLOW_THREADS
@@ -177,7 +233,7 @@ PyDoc_STRVAR(Reader_get_timeout__doc__,
"Returns a timeout value for usage in poll(), the time since the\n"
"epoch of clock_gettime(2) in microseconds, or None if no timeout\n"
"is necessary.\n\n"
- "The return value must be converted to a relative timeout in \n"
+ "The return value must be converted to a relative timeout in\n"
"milliseconds if it is to be used as an argument for poll().\n"
"See man:sd_journal_get_timeout(3) for further discussion.");
static PyObject* Reader_get_timeout(Reader *self, PyObject *args)
@@ -275,11 +331,7 @@ PyDoc_STRVAR(Reader___exit____doc__,
"Closes the journal.\n");
static PyObject* Reader___exit__(Reader *self, PyObject *args)
{
- assert(self);
-
- sd_journal_close(self->j);
- self->j = NULL;
- Py_RETURN_NONE;
+ return Reader_close(self, args);
}
@@ -869,9 +921,9 @@ static PyObject* Reader_get_catalog(Reader *self, PyObject *args)
r = sd_journal_get_data(self->j, "MESSAGE_ID", &mid, &mid_len);
if (r == 0) {
- const int l = sizeof("MESSAGE_ID");
+ const size_t l = sizeof("MESSAGE_ID");
assert(mid_len > l);
- PyErr_Format(PyExc_KeyError, "%.*s", (int) mid_len - l,
+ PyErr_Format(PyExc_KeyError, "%.*s", (int) (mid_len - l),
(const char*) mid + l);
} else if (r == -ENOENT)
PyErr_SetString(PyExc_IndexError, "no MESSAGE_ID field");
@@ -1007,48 +1059,20 @@ static PyMethodDef Reader_methods[] = {
static PyTypeObject ReaderType = {
PyVarObject_HEAD_INIT(NULL, 0)
- "_reader._Reader", /*tp_name*/
- sizeof(Reader), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- (destructor)Reader_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash */
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
- Reader__doc__, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Reader_methods, /* tp_methods */
- 0, /* tp_members */
- Reader_getsetters, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- (initproc) Reader_init, /* tp_init */
- 0, /* tp_alloc */
- PyType_GenericNew, /* tp_new */
+ .tp_name = "_reader._Reader",
+ .tp_basicsize = sizeof(Reader),
+ .tp_dealloc = (destructor) Reader_dealloc,
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+ .tp_doc = Reader__doc__,
+ .tp_methods = Reader_methods,
+ .tp_getset = Reader_getsetters,
+ .tp_init = (initproc) Reader_init,
+ .tp_new = PyType_GenericNew,
};
static PyMethodDef methods[] = {
{ "_get_catalog", get_catalog, METH_VARARGS, get_catalog__doc__},
- { NULL, NULL, 0, NULL } /* Sentinel */
+ {} /* Sentinel */
};
#if PY_MAJOR_VERSION >= 3
@@ -1058,7 +1082,6 @@ static PyModuleDef module = {
module__doc__,
-1,
methods,
- NULL, NULL, NULL, NULL
};
#endif
@@ -1115,7 +1138,9 @@ init_reader(void)
PyModule_AddIntConstant(m, "INVALIDATE", SD_JOURNAL_INVALIDATE) ||
PyModule_AddIntConstant(m, "LOCAL_ONLY", SD_JOURNAL_LOCAL_ONLY) ||
PyModule_AddIntConstant(m, "RUNTIME_ONLY", SD_JOURNAL_RUNTIME_ONLY) ||
+ PyModule_AddIntConstant(m, "SYSTEM", SD_JOURNAL_SYSTEM) ||
PyModule_AddIntConstant(m, "SYSTEM_ONLY", SD_JOURNAL_SYSTEM_ONLY) ||
+ PyModule_AddIntConstant(m, "CURRENT_USER", SD_JOURNAL_CURRENT_USER) ||
PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) {
#if PY_MAJOR_VERSION >= 3
Py_DECREF(m);
diff --git a/src/python-systemd/daemon.py b/src/python-systemd/daemon.py
index e2829d1671..1c386bb6fc 100644
--- a/src/python-systemd/daemon.py
+++ b/src/python-systemd/daemon.py
@@ -1,5 +1,6 @@
from ._daemon import (__version__,
booted,
+ notify,
_listen_fds,
_is_fifo,
_is_socket,
diff --git a/src/python-systemd/id128-constants.h b/src/python-systemd/id128-constants.h
index aa1cfcf923..907c7b4f60 100644
--- a/src/python-systemd/id128-constants.h
+++ b/src/python-systemd/id128-constants.h
@@ -2,11 +2,14 @@ add_id(m, "SD_MESSAGE_JOURNAL_START", SD_MESSAGE_JOURNAL_START) JOINER
add_id(m, "SD_MESSAGE_JOURNAL_STOP", SD_MESSAGE_JOURNAL_STOP) JOINER
add_id(m, "SD_MESSAGE_JOURNAL_DROPPED", SD_MESSAGE_JOURNAL_DROPPED) JOINER
add_id(m, "SD_MESSAGE_JOURNAL_MISSED", SD_MESSAGE_JOURNAL_MISSED) JOINER
+add_id(m, "SD_MESSAGE_JOURNAL_USAGE", SD_MESSAGE_JOURNAL_USAGE) JOINER
add_id(m, "SD_MESSAGE_COREDUMP", SD_MESSAGE_COREDUMP) JOINER
add_id(m, "SD_MESSAGE_SESSION_START", SD_MESSAGE_SESSION_START) JOINER
add_id(m, "SD_MESSAGE_SESSION_STOP", SD_MESSAGE_SESSION_STOP) JOINER
add_id(m, "SD_MESSAGE_SEAT_START", SD_MESSAGE_SEAT_START) JOINER
add_id(m, "SD_MESSAGE_SEAT_STOP", SD_MESSAGE_SEAT_STOP) JOINER
+add_id(m, "SD_MESSAGE_MACHINE_START", SD_MESSAGE_MACHINE_START) JOINER
+add_id(m, "SD_MESSAGE_MACHINE_STOP", SD_MESSAGE_MACHINE_STOP) JOINER
add_id(m, "SD_MESSAGE_TIME_CHANGE", SD_MESSAGE_TIME_CHANGE) JOINER
add_id(m, "SD_MESSAGE_TIMEZONE_CHANGE", SD_MESSAGE_TIMEZONE_CHANGE) JOINER
add_id(m, "SD_MESSAGE_STARTUP_FINISHED", SD_MESSAGE_STARTUP_FINISHED) JOINER
diff --git a/src/python-systemd/journal.py b/src/python-systemd/journal.py
index 9ef1ede229..d0bcd24d15 100644
--- a/src/python-systemd/journal.py
+++ b/src/python-systemd/journal.py
@@ -33,7 +33,8 @@ from syslog import (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR,
LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG)
from ._journal import __version__, sendv, stream_fd
from ._reader import (_Reader, NOP, APPEND, INVALIDATE,
- LOCAL_ONLY, RUNTIME_ONLY, SYSTEM_ONLY,
+ LOCAL_ONLY, RUNTIME_ONLY,
+ SYSTEM, SYSTEM_ONLY, CURRENT_USER,
_get_catalog)
from . import id128 as _id128
@@ -55,6 +56,9 @@ def _convert_realtime(t):
def _convert_timestamp(s):
return _datetime.datetime.fromtimestamp(int(s) / 1000000)
+def _convert_trivial(x):
+ return x
+
if _sys.version_info >= (3,):
def _convert_uuid(s):
return _uuid.UUID(s.decode())
@@ -87,6 +91,7 @@ DEFAULT_CONVERTERS = {
'__REALTIME_TIMESTAMP': _convert_realtime,
'_SOURCE_MONOTONIC_TIMESTAMP': _convert_source_monotonic,
'__MONOTONIC_TIMESTAMP': _convert_monotonic,
+ '__CURSOR': _convert_trivial,
'COREDUMP': bytes,
'COREDUMP_PID': int,
'COREDUMP_UID': int,
@@ -119,7 +124,7 @@ class Reader(_Reader):
See systemd.journal-fields(7) for more info on typical fields
found in the journal.
"""
- def __init__(self, flags=0, path=None, converters=None):
+ def __init__(self, flags=0, path=None, files=None, converters=None):
"""Create an instance of Reader, which allows filtering and
return of journal entries.
@@ -145,7 +150,7 @@ class Reader(_Reader):
Reader implements the context manager protocol: the journal
will be closed when exiting the block.
"""
- super(Reader, self).__init__(flags, path)
+ super(Reader, self).__init__(flags, path, files)
if _sys.version_info >= (3,3):
self.converters = _ChainMap()
if converters is not None:
@@ -187,18 +192,18 @@ class Reader(_Reader):
"""
return self
- if _sys.version_info >= (3,):
- def __next__(self):
- """Part of iterator protocol.
- Returns self.get_next().
- """
- return self.get_next()
- else:
- def next(self):
- """Part of iterator protocol.
- Returns self.get_next().
- """
- return self.get_next()
+ def __next__(self):
+ """Part of iterator protocol.
+ Returns self.get_next() or raises StopIteration.
+ """
+ ans = self.get_next()
+ if ans:
+ return ans
+ else:
+ raise StopIteration()
+
+ if _sys.version_info < (3,):
+ next = __next__
def add_match(self, *args, **kwargs):
"""Add one or more matches to the filter journal log entries.
diff --git a/src/python-systemd/login.c b/src/python-systemd/login.c
index 1dbe5ac5bf..dd2edbca00 100644
--- a/src/python-systemd/login.c
+++ b/src/python-systemd/login.c
@@ -133,6 +133,200 @@ static PyMethodDef methods[] = {
{} /* Sentinel */
};
+
+typedef struct {
+ PyObject_HEAD
+ sd_login_monitor *monitor;
+} Monitor;
+static PyTypeObject MonitorType;
+
+static void Monitor_dealloc(Monitor* self)
+{
+ sd_login_monitor_unref(self->monitor);
+ Py_TYPE(self)->tp_free((PyObject*)self);
+}
+
+PyDoc_STRVAR(Monitor__doc__,
+ "Monitor([category]) -> ...\n\n"
+ "Monitor may be used to monitor login sessions, users, seats,\n"
+ "and virtual machines/containers. Monitor provides a file\n"
+ "descriptor which can be integrated in an external event loop.\n"
+ "See man:sd_login_monitor_new(3) for the details about what\n"
+ "can be monitored.");
+static int Monitor_init(Monitor *self, PyObject *args, PyObject *keywds)
+{
+ const char *category = NULL;
+ int r;
+
+ static const char* const kwlist[] = {"category", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|z:__init__", (char**) kwlist,
+ &category))
+ return -1;
+
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_login_monitor_new(category, &self->monitor);
+ Py_END_ALLOW_THREADS
+
+ return set_error(r, NULL, "Invalid category");
+}
+
+
+PyDoc_STRVAR(Monitor_fileno__doc__,
+ "fileno() -> int\n\n"
+ "Get a file descriptor to poll for events.\n"
+ "This method wraps sd_login_monitor_get_fd(3).");
+static PyObject* Monitor_fileno(Monitor *self, PyObject *args)
+{
+ int fd = sd_login_monitor_get_fd(self->monitor);
+ set_error(fd, NULL, NULL);
+ if (fd < 0)
+ return NULL;
+ return long_FromLong(fd);
+}
+
+
+PyDoc_STRVAR(Monitor_get_events__doc__,
+ "get_events() -> int\n\n"
+ "Returns a mask of poll() events to wait for on the file\n"
+ "descriptor returned by .fileno().\n\n"
+ "See man:sd_login_monitor_get_events(3) for further discussion.");
+static PyObject* Monitor_get_events(Monitor *self, PyObject *args)
+{
+ int r = sd_login_monitor_get_events(self->monitor);
+ set_error(r, NULL, NULL);
+ if (r < 0)
+ return NULL;
+ return long_FromLong(r);
+}
+
+
+PyDoc_STRVAR(Monitor_get_timeout__doc__,
+ "get_timeout() -> int or None\n\n"
+ "Returns a timeout value for usage in poll(), the time since the\n"
+ "epoch of clock_gettime(2) in microseconds, or None if no timeout\n"
+ "is necessary.\n\n"
+ "The return value must be converted to a relative timeout in\n"
+ "milliseconds if it is to be used as an argument for poll().\n"
+ "See man:sd_login_monitor_get_timeout(3) for further discussion.");
+static PyObject* Monitor_get_timeout(Monitor *self, PyObject *args)
+{
+ int r;
+ uint64_t t;
+
+ r = sd_login_monitor_get_timeout(self->monitor, &t);
+ set_error(r, NULL, NULL);
+ if (r < 0)
+ return NULL;
+
+ if (t == (uint64_t) -1)
+ Py_RETURN_NONE;
+
+ assert_cc(sizeof(unsigned long long) == sizeof(t));
+ return PyLong_FromUnsignedLongLong(t);
+}
+
+
+PyDoc_STRVAR(Monitor_get_timeout_ms__doc__,
+ "get_timeout_ms() -> int\n\n"
+ "Returns a timeout value suitable for usage in poll(), the value\n"
+ "returned by .get_timeout() converted to relative ms, or -1 if\n"
+ "no timeout is necessary.");
+static PyObject* Monitor_get_timeout_ms(Monitor *self, PyObject *args)
+{
+ int r;
+ uint64_t t;
+
+ r = sd_login_monitor_get_timeout(self->monitor, &t);
+ set_error(r, NULL, NULL);
+ if (r < 0)
+ return NULL;
+
+ return absolute_timeout(t);
+}
+
+
+PyDoc_STRVAR(Monitor_close__doc__,
+ "close() -> None\n\n"
+ "Free resources allocated by this Monitor object.\n"
+ "This method invokes sd_login_monitor_unref().\n"
+ "See man:sd_login_monitor_unref(3).");
+static PyObject* Monitor_close(Monitor *self, PyObject *args)
+{
+ assert(self);
+ assert(!args);
+
+ sd_login_monitor_unref(self->monitor);
+ self->monitor = NULL;
+ Py_RETURN_NONE;
+}
+
+
+PyDoc_STRVAR(Monitor_flush__doc__,
+ "flush() -> None\n\n"
+ "Reset the wakeup state of the monitor object.\n"
+ "This method invokes sd_login_monitor_flush().\n"
+ "See man:sd_login_monitor_flush(3).");
+static PyObject* Monitor_flush(Monitor *self, PyObject *args)
+{
+ assert(self);
+ assert(!args);
+
+ Py_BEGIN_ALLOW_THREADS
+ sd_login_monitor_flush(self->monitor);
+ Py_END_ALLOW_THREADS
+ Py_RETURN_NONE;
+}
+
+
+PyDoc_STRVAR(Monitor___enter____doc__,
+ "__enter__() -> self\n\n"
+ "Part of the context manager protocol.\n"
+ "Returns self.\n");
+static PyObject* Monitor___enter__(PyObject *self, PyObject *args)
+{
+ assert(self);
+ assert(!args);
+
+ Py_INCREF(self);
+ return self;
+}
+
+
+PyDoc_STRVAR(Monitor___exit____doc__,
+ "__exit__(type, value, traceback) -> None\n\n"
+ "Part of the context manager protocol.\n"
+ "Closes the monitor..\n");
+static PyObject* Monitor___exit__(Monitor *self, PyObject *args)
+{
+ return Monitor_close(self, args);
+}
+
+
+static PyMethodDef Monitor_methods[] = {
+ {"fileno", (PyCFunction) Monitor_fileno, METH_NOARGS, Monitor_fileno__doc__},
+ {"get_events", (PyCFunction) Monitor_get_events, METH_NOARGS, Monitor_get_events__doc__},
+ {"get_timeout", (PyCFunction) Monitor_get_timeout, METH_NOARGS, Monitor_get_timeout__doc__},
+ {"get_timeout_ms", (PyCFunction) Monitor_get_timeout_ms, METH_NOARGS, Monitor_get_timeout_ms__doc__},
+ {"close", (PyCFunction) Monitor_close, METH_NOARGS, Monitor_close__doc__},
+ {"flush", (PyCFunction) Monitor_flush, METH_NOARGS, Monitor_flush__doc__},
+ {"__enter__", (PyCFunction) Monitor___enter__, METH_NOARGS, Monitor___enter____doc__},
+ {"__exit__", (PyCFunction) Monitor___exit__, METH_VARARGS, Monitor___exit____doc__},
+ {} /* Sentinel */
+};
+
+static PyTypeObject MonitorType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "login.Monitor",
+ .tp_basicsize = sizeof(Monitor),
+ .tp_dealloc = (destructor) Monitor_dealloc,
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+ .tp_doc = Monitor__doc__,
+ .tp_methods = Monitor_methods,
+ .tp_init = (initproc) Monitor_init,
+ .tp_new = PyType_GenericNew,
+};
+
+
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-prototypes"
@@ -141,10 +335,17 @@ static PyMethodDef methods[] = {
PyMODINIT_FUNC initlogin(void) {
PyObject *m;
+ if (PyType_Ready(&MonitorType) < 0)
+ return;
+
m = Py_InitModule3("login", methods, module__doc__);
if (m == NULL)
return;
+
PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION);
+
+ Py_INCREF(&MonitorType);
+ PyModule_AddObject(m, "Monitor", (PyObject *) &MonitorType);
}
#else
@@ -159,6 +360,9 @@ static struct PyModuleDef module = {
PyMODINIT_FUNC PyInit_login(void) {
PyObject *m;
+ if (PyType_Ready(&MonitorType) < 0)
+ return NULL;
+
m = PyModule_Create(&module);
if (m == NULL)
return NULL;
@@ -168,6 +372,13 @@ PyMODINIT_FUNC PyInit_login(void) {
return NULL;
}
+ Py_INCREF(&MonitorType);
+ if (PyModule_AddObject(m, "Monitor", (PyObject *) &MonitorType)) {
+ Py_DECREF(&MonitorType);
+ Py_DECREF(m);
+ return NULL;
+ }
+
return m;
}
diff --git a/src/python-systemd/pyutil.c b/src/python-systemd/pyutil.c
index 9510acdddb..722c4f5b5f 100644
--- a/src/python-systemd/pyutil.c
+++ b/src/python-systemd/pyutil.c
@@ -30,17 +30,51 @@ void cleanup_Py_DECREFp(PyObject **p) {
}
PyObject* absolute_timeout(uint64_t t) {
- if (t == (uint64_t) -1)
- return PyLong_FromLong(-1);
- else {
- struct timespec ts;
- uint64_t n;
- int msec;
-
- clock_gettime(CLOCK_MONOTONIC, &ts);
- n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
- msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
-
- return PyLong_FromLong(msec);
- }
+ if (t == (uint64_t) -1)
+ return PyLong_FromLong(-1);
+ else {
+ struct timespec ts;
+ uint64_t n;
+ int msec;
+
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+ msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
+
+ return PyLong_FromLong(msec);
+ }
+}
+
+int set_error(int r, const char* path, const char* invalid_message) {
+ if (r >= 0)
+ return r;
+ if (r == -EINVAL && invalid_message)
+ PyErr_SetString(PyExc_ValueError, invalid_message);
+ else if (r == -ENOMEM)
+ PyErr_SetString(PyExc_MemoryError, "Not enough memory");
+ else {
+ errno = -r;
+ PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
+ }
+ return -1;
+}
+
+#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 1
+int Unicode_FSConverter(PyObject* obj, void *_result) {
+ PyObject **result = _result;
+
+ assert(result);
+
+ if (!obj)
+ /* cleanup: we don't return Py_CLEANUP_SUPPORTED, so
+ * we can assume that it was PyUnicode_FSConverter. */
+ return PyUnicode_FSConverter(obj, result);
+
+ if (obj == Py_None) {
+ *result = NULL;
+ return 1;
+ }
+
+ return PyUnicode_FSConverter(obj, result);
}
+#endif
diff --git a/src/python-systemd/pyutil.h b/src/python-systemd/pyutil.h
index 5c7ea37cdb..1477e7bf9c 100644
--- a/src/python-systemd/pyutil.h
+++ b/src/python-systemd/pyutil.h
@@ -28,6 +28,11 @@
void cleanup_Py_DECREFp(PyObject **p);
PyObject* absolute_timeout(uint64_t t);
+int set_error(int r, const char* path, const char* invalid_message);
+
+#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 1
+int Unicode_FSConverter(PyObject* obj, void *_result);
+#endif
#define _cleanup_Py_DECREF_ __attribute__((cleanup(cleanup_Py_DECREFp)))
diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c
index fdcaa1e154..afbd5002dd 100644
--- a/src/random-seed/random-seed.c
+++ b/src/random-seed/random-seed.c
@@ -32,11 +32,11 @@
#define POOL_SIZE_MIN 512
int main(int argc, char *argv[]) {
- int seed_fd = -1, random_fd = -1;
- int ret = EXIT_FAILURE;
- void* buf;
+ _cleanup_close_ int seed_fd = -1, random_fd = -1;
+ _cleanup_free_ void* buf = NULL;
size_t buf_size = 0;
- ssize_t r;
+ ssize_t k;
+ int r;
FILE *f;
if (argc != 2) {
@@ -51,7 +51,8 @@ int main(int argc, char *argv[]) {
umask(0022);
/* Read pool size, if possible */
- if ((f = fopen("/proc/sys/kernel/random/poolsize", "re"))) {
+ f = fopen("/proc/sys/kernel/random/poolsize", "re");
+ if (f) {
if (fscanf(f, "%zu", &buf_size) > 0) {
/* poolsize is in bits on 2.6, but we want bytes */
buf_size /= 8;
@@ -63,13 +64,15 @@ int main(int argc, char *argv[]) {
if (buf_size <= POOL_SIZE_MIN)
buf_size = POOL_SIZE_MIN;
- if (!(buf = malloc(buf_size))) {
- log_error("Failed to allocate buffer.");
+ buf = malloc(buf_size);
+ if (!buf) {
+ r = log_oom();
goto finish;
}
- if (mkdir_parents_label(RANDOM_SEED, 0755) < 0) {
- log_error("Failed to create directories parents of %s: %m", RANDOM_SEED);
+ r = mkdir_parents_label(RANDOM_SEED, 0755);
+ if (r < 0) {
+ log_error("Failed to create parent directory of " RANDOM_SEED ": %s", strerror(-r));
goto finish;
}
@@ -79,45 +82,64 @@ int main(int argc, char *argv[]) {
if (streq(argv[1], "load")) {
- if ((seed_fd = open(RANDOM_SEED, O_RDWR|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600)) < 0) {
- if ((seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY)) < 0) {
+ seed_fd = open(RANDOM_SEED, O_RDWR|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
+ if (seed_fd < 0) {
+ seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (seed_fd < 0) {
log_error("Failed to open random seed: %m");
+ r = -errno;
goto finish;
}
}
- if ((random_fd = open("/dev/urandom", O_RDWR|O_CLOEXEC|O_NOCTTY, 0600)) < 0) {
- if ((random_fd = open("/dev/urandom", O_WRONLY|O_CLOEXEC|O_NOCTTY, 0600)) < 0) {
+ random_fd = open("/dev/urandom", O_RDWR|O_CLOEXEC|O_NOCTTY, 0600);
+ if (random_fd < 0) {
+ random_fd = open("/dev/urandom", O_WRONLY|O_CLOEXEC|O_NOCTTY, 0600);
+ if (random_fd < 0) {
log_error("Failed to open /dev/urandom: %m");
+ r = -errno;
goto finish;
}
}
- if ((r = loop_read(seed_fd, buf, buf_size, false)) <= 0) {
+ k = loop_read(seed_fd, buf, buf_size, false);
+ if (k <= 0) {
if (r != 0)
log_error("Failed to read seed file: %m");
+
+ r = k == 0 ? -EIO : (int) k;
+
} else {
lseek(seed_fd, 0, SEEK_SET);
- if ((r = loop_write(random_fd, buf, (size_t) r, false)) <= 0)
- log_error("Failed to write seed to /dev/urandom: %s",
- r < 0 ? strerror(errno) : "short write");
+ k = loop_write(random_fd, buf, (size_t) k, false);
+ if (k <= 0) {
+ log_error("Failed to write seed to /dev/urandom: %s", r < 0 ? strerror(-r) : "short write");
+
+ r = k == 0 ? -EIO : (int) k;
+ }
}
} else if (streq(argv[1], "save")) {
- if ((seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600)) < 0) {
+ seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600);
+ if (seed_fd < 0) {
log_error("Failed to open random seed: %m");
+ r = -errno;
goto finish;
}
- if ((random_fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY)) < 0) {
+ random_fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (random_fd < 0) {
log_error("Failed to open /dev/urandom: %m");
+ r = -errno;
goto finish;
}
+
} else {
log_error("Unknown verb %s.", argv[1]);
+ r = -EINVAL;
goto finish;
}
@@ -127,23 +149,18 @@ int main(int argc, char *argv[]) {
fchmod(seed_fd, 0600);
fchown(seed_fd, 0, 0);
- if ((r = loop_read(random_fd, buf, buf_size, false)) <= 0)
- log_error("Failed to read new seed from /dev/urandom: %s", r < 0 ? strerror(errno) : "EOF");
- else {
- if ((r = loop_write(seed_fd, buf, (size_t) r, false)) <= 0)
- log_error("Failed to write new random seed file: %s", r < 0 ? strerror(errno) : "short write");
+ k = loop_read(random_fd, buf, buf_size, false);
+ if (k <= 0) {
+ log_error("Failed to read new seed from /dev/urandom: %s", r < 0 ? strerror(-r) : "EOF");
+ r = k == 0 ? -EIO : (int) k;
+ } else {
+ r = loop_write(seed_fd, buf, (size_t) k, false);
+ if (r <= 0) {
+ log_error("Failed to write new random seed file: %s", r < 0 ? strerror(-r) : "short write");
+ r = r == 0 ? -EIO : r;
+ }
}
- ret = EXIT_SUCCESS;
-
finish:
- if (random_fd >= 0)
- close_nointr_nofail(random_fd);
-
- if (seed_fd >= 0)
- close_nointr_nofail(seed_fd);
-
- free(buf);
-
- return ret;
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
index ccd8408c1b..32888add01 100644
--- a/src/readahead/readahead-collect.c
+++ b/src/readahead/readahead-collect.c
@@ -44,6 +44,10 @@
#include <sys/inotify.h>
#include <math.h>
+#ifdef HAVE_LINUX_BTRFS_H
+#include <linux/btrfs.h>
+#endif
+
#ifdef HAVE_FANOTIFY_INIT
#include <sys/fanotify.h>
#endif
@@ -506,7 +510,7 @@ done:
on_ssd = fs_on_ssd(root) > 0;
log_debug("On SSD: %s", yes_no(on_ssd));
- on_btrfs = statfs(root, &sfs) >= 0 && F_TYPE_CMP(sfs.f_type, BTRFS_SUPER_MAGIC);
+ on_btrfs = statfs(root, &sfs) >= 0 && F_TYPE_EQUAL(sfs.f_type, BTRFS_SUPER_MAGIC);
log_debug("On btrfs: %s", yes_no(on_btrfs));
if (asprintf(&pack_fn_new, "%s/.readahead.new", root) < 0) {
diff --git a/src/run/run.c b/src/run/run.c
new file mode 100644
index 0000000000..18a4920f03
--- /dev/null
+++ b/src/run/run.c
@@ -0,0 +1,376 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdio.h>
+#include <getopt.h>
+
+#include "sd-bus.h"
+#include "bus-internal.h"
+#include "bus-message.h"
+#include "strv.h"
+#include "build.h"
+#include "unit-name.h"
+#include "path-util.h"
+
+static bool arg_scope = false;
+static bool arg_user = false;
+static bool arg_remain_after_exit = false;
+static const char *arg_unit = NULL;
+static const char *arg_description = NULL;
+static const char *arg_slice = NULL;
+static bool arg_send_sighup = false;
+
+static int help(void) {
+
+ printf("%s [OPTIONS...] COMMAND [ARGS...]\n\n"
+ "Run the specified command in a transient scope or service unit.\n\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " --user Run as user unit\n"
+ " --scope Run this as scope rather than service\n"
+ " --unit=UNIT Run under the specified unit name\n"
+ " --description=TEXT Description for unit\n"
+ " --slice=SLICE Run in the specified slice\n"
+ " -r --remain-after-exit Leave service around until explicitly stopped\n"
+ " --send-sighup Send SIGHUP when terminating\n",
+ program_invocation_short_name);
+
+ return 0;
+}
+
+static int parse_argv(int argc, char *argv[]) {
+
+ enum {
+ ARG_VERSION = 0x100,
+ ARG_USER,
+ ARG_SCOPE,
+ ARG_UNIT,
+ ARG_DESCRIPTION,
+ ARG_SLICE,
+ ARG_SEND_SIGHUP,
+ };
+
+ static const struct option options[] = {
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "user", no_argument, NULL, ARG_USER },
+ { "scope", no_argument, NULL, ARG_SCOPE },
+ { "unit", required_argument, NULL, ARG_UNIT },
+ { "description", required_argument, NULL, ARG_DESCRIPTION },
+ { "slice", required_argument, NULL, ARG_SLICE },
+ { "remain-after-exit", no_argument, NULL, 'r' },
+ { "send-sighup", no_argument, NULL, ARG_SEND_SIGHUP },
+ { NULL, 0, NULL, 0 },
+ };
+
+ int c;
+
+ assert(argc >= 0);
+ assert(argv);
+
+ while ((c = getopt_long(argc, argv, "+hr", options, NULL)) >= 0) {
+
+ switch (c) {
+
+ case 'h':
+ help();
+ return 0;
+
+ case ARG_VERSION:
+ puts(PACKAGE_STRING);
+ puts(SYSTEMD_FEATURES);
+ return 0;
+
+ case ARG_USER:
+ arg_user = true;
+ break;
+
+ case ARG_SCOPE:
+ arg_scope = true;
+ break;
+
+ case ARG_UNIT:
+ arg_unit = optarg;
+ break;
+
+ case ARG_DESCRIPTION:
+ arg_description = optarg;
+ break;
+
+ case ARG_SLICE:
+ arg_slice = optarg;
+ break;
+
+ case ARG_SEND_SIGHUP:
+ arg_send_sighup = true;
+ break;
+
+ case 'r':
+ arg_remain_after_exit = true;
+ break;
+
+ case '?':
+ return -EINVAL;
+
+ default:
+ log_error("Unknown option code %c", c);
+ return -EINVAL;
+ }
+ }
+
+ if (optind >= argc) {
+ log_error("Command line to execute required.");
+ return -EINVAL;
+ }
+
+ return 1;
+}
+
+static int message_start_transient_unit_new(sd_bus *bus, const char *name, sd_bus_message **ret) {
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
+ int r;
+
+ log_info("Running as unit %s.", name);
+
+ r = sd_bus_message_new_method_call(
+ bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StartTransientUnit", &m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "ss", name, "fail");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_open_container(m, 'a', "(sv)");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "(sv)", "Description", "s", arg_description);
+ if (r < 0)
+ return r;
+
+ if (!isempty(arg_slice)) {
+ _cleanup_free_ char *slice;
+
+ slice = unit_name_mangle_with_suffix(arg_slice, ".slice");
+ if (!slice)
+ return -ENOMEM;
+
+ r = sd_bus_message_append(m, "(sv)", "Slice", "s", slice);
+ if (r < 0)
+ return r;
+ }
+
+ r = sd_bus_message_append(m, "(sv)", "SendSIGHUP", "b", arg_send_sighup);
+ if (r < 0)
+ return r;
+
+ *ret = m;
+ m = NULL;
+
+ return 0;
+}
+
+static int message_start_transient_unit_send(sd_bus *bus, sd_bus_message *m, sd_bus_error *error, sd_bus_message **reply) {
+ int r;
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ return sd_bus_send_with_reply_and_block(bus, m, 0, error, reply);
+}
+
+static int start_transient_service(
+ sd_bus *bus,
+ char **argv,
+ sd_bus_error *error) {
+
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
+ _cleanup_free_ char *name = NULL;
+ char **i;
+ int r;
+
+ if (arg_unit)
+ name = unit_name_mangle_with_suffix(arg_unit, ".service");
+ else
+ asprintf(&name, "run-%lu.service", (unsigned long) getpid());
+ if (!name)
+ return -ENOMEM;
+
+ r = message_start_transient_unit_new(bus, name, &m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "(sv)", "RemainAfterExit", "b", arg_remain_after_exit);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_open_container(m, 'r', "sv");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "s", "ExecStart");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_open_container(m, 'v', "a(sasb)");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_open_container(m, 'a', "(sasb)");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_open_container(m, 'r', "sasb");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "s", argv[0]);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_open_container(m, 'a', "s");
+ if (r < 0)
+ return r;
+
+ STRV_FOREACH(i, argv) {
+ r = sd_bus_message_append(m, "s", *i);
+ if (r < 0)
+ return r;
+ }
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "b", false);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_close_container(m);
+ if (r < 0)
+ return r;
+
+ return message_start_transient_unit_send(bus, m, error, &reply);
+}
+
+static int start_transient_scope(
+ sd_bus *bus,
+ char **argv,
+ sd_bus_error *error) {
+
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
+ _cleanup_free_ char *name = NULL;
+ int r;
+
+ if (arg_unit)
+ name = unit_name_mangle_with_suffix(arg_unit, ".scope");
+ else
+ asprintf(&name, "run-%lu.scope", (unsigned long) getpid());
+ if (!name)
+ return -ENOMEM;
+
+ r = message_start_transient_unit_new(bus, name, &m);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append(m, "(sv)", "PIDs", "au", 1, (uint32_t) getpid());
+ if (r < 0)
+ return r;
+
+ r = message_start_transient_unit_send(bus, m, error, &reply);
+ if (r < 0)
+ return r;
+
+ execvp(argv[0], argv);
+ log_error("Failed to execute: %m");
+ return -errno;
+}
+
+int main(int argc, char* argv[]) {
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_bus_unref_ sd_bus *bus = NULL;
+ _cleanup_free_ char *description = NULL, *command = NULL;
+ int r;
+
+ log_parse_environment();
+ log_open();
+
+ r = parse_argv(argc, argv);
+ if (r <= 0)
+ goto fail;
+
+ r = find_binary(argv[optind], &command);
+ if (r < 0) {
+ log_error("Failed to find executable %s: %s", argv[optind], strerror(-r));
+ goto fail;
+ }
+ argv[optind] = command;
+
+ if (!arg_description) {
+ description = strv_join(argv + optind, " ");
+ if (!description) {
+ r = log_oom();
+ goto fail;
+ }
+
+ arg_description = description;
+ }
+
+ if (arg_user)
+ r = sd_bus_open_user(&bus);
+ else
+ r = sd_bus_open_system(&bus);
+ if (r < 0) {
+ log_error("Failed to create new bus connection: %s", strerror(-r));
+ goto fail;
+ }
+
+ if (arg_scope)
+ r = start_transient_scope(bus, argv + optind, &error);
+ else
+ r = start_transient_service(bus, argv + optind, &error);
+ if (r < 0) {
+ log_error("Failed start transient unit: %s", error.message ? error.message : strerror(-r));
+ sd_bus_error_free(&error);
+ goto fail;
+ }
+
+fail:
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c
index 48bb12f46b..fb04e49dc4 100644
--- a/src/shared/acl-util.c
+++ b/src/shared/acl-util.c
@@ -69,6 +69,34 @@ int acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *entry) {
return 0;
}
+int calc_acl_mask_if_needed(acl_t *acl_p) {
+ acl_entry_t i;
+ int found;
+
+ assert(acl_p);
+
+ for (found = acl_get_entry(*acl_p, ACL_FIRST_ENTRY, &i);
+ found > 0;
+ found = acl_get_entry(*acl_p, ACL_NEXT_ENTRY, &i)) {
+
+ acl_tag_t tag;
+
+ if (acl_get_tag_type(i, &tag) < 0)
+ return -errno;
+
+ if (tag == ACL_MASK)
+ return 0;
+ }
+
+ if (found < 0)
+ return -errno;
+
+ if (acl_calc_mask(acl_p) < 0)
+ return -errno;
+
+ return 0;
+}
+
int search_acl_groups(char*** dst, const char* path, bool* belong) {
acl_t acl;
diff --git a/src/shared/acl-util.h b/src/shared/acl-util.h
index 23090d9984..36ef490d7e 100644
--- a/src/shared/acl-util.h
+++ b/src/shared/acl-util.h
@@ -24,4 +24,5 @@
#include <stdbool.h>
int acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *entry);
+int calc_acl_mask_if_needed(acl_t *acl_p);
int search_acl_groups(char*** dst, const char* path, bool* belong);
diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c
new file mode 100644
index 0000000000..b094f34a5f
--- /dev/null
+++ b/src/shared/acpi-fpdt.c
@@ -0,0 +1,155 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+
+#include <util.h>
+#include <fileio.h>
+#include <time-util.h>
+#include <acpi-fpdt.h>
+
+struct acpi_table_header {
+ char signature[4];
+ uint32_t length;
+ uint8_t revision;
+ uint8_t checksum;
+ char oem_id[6];
+ char oem_table_id[8];
+ uint32_t oem_revision;
+ char asl_compiler_id[4];
+ uint32_t asl_compiler_revision;
+};
+
+enum {
+ ACPI_FPDT_TYPE_BOOT = 0,
+ ACPI_FPDT_TYPE_S3PERF = 1,
+};
+
+struct acpi_fpdt_header {
+ uint16_t type;
+ uint8_t length;
+ uint8_t revision;
+ uint8_t reserved[4];
+ uint64_t ptr;
+};
+
+struct acpi_fpdt_boot_header {
+ char signature[4];
+ uint32_t length;
+};
+
+enum {
+ ACPI_FPDT_S3PERF_RESUME_REC = 0,
+ ACPI_FPDT_S3PERF_SUSPEND_REC = 1,
+ ACPI_FPDT_BOOT_REC = 2,
+};
+
+struct acpi_fpdt_boot {
+ uint16_t type;
+ uint8_t length;
+ uint8_t revision;
+ uint8_t reserved[4];
+ uint64_t reset_end;
+ uint64_t load_start;
+ uint64_t startup_start;
+ uint64_t exit_services_entry;
+ uint64_t exit_services_exit;
+};
+
+int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) {
+ char *buf;
+ struct acpi_table_header *tbl;
+ size_t l;
+ struct acpi_fpdt_header *rec;
+ int r;
+ uint64_t ptr = 0;
+ _cleanup_close_ int fd = -1;
+ struct acpi_fpdt_boot_header hbrec;
+ struct acpi_fpdt_boot brec;
+
+ r = read_full_file("/sys/firmware/acpi/tables/FPDT", &buf, &l);
+ if (r < 0)
+ return r;
+
+ if (l < sizeof(struct acpi_table_header) + sizeof(struct acpi_fpdt_header))
+ return -EINVAL;
+
+ tbl = (struct acpi_table_header *)buf;
+ if (l != tbl->length)
+ return -EINVAL;
+
+ if (memcmp(tbl->signature, "FPDT", 4) != 0)
+ return -EINVAL;
+
+ /* find Firmware Basic Boot Performance Pointer Record */
+ for (rec = (struct acpi_fpdt_header *)(buf + sizeof(struct acpi_table_header));
+ (char *)rec < buf + l;
+ rec = (struct acpi_fpdt_header *)((char *)rec + rec->length)) {
+ if (rec->type != ACPI_FPDT_TYPE_BOOT)
+ continue;
+ if (rec->length != sizeof(struct acpi_fpdt_header))
+ continue;
+
+ ptr = rec->ptr;
+ break;
+ }
+
+ if (ptr == 0)
+ return -EINVAL;
+
+ /* read Firmware Basic Boot Performance Data Record */
+ fd = open("/dev/mem", O_CLOEXEC|O_RDONLY);
+ if (fd < 0)
+ return -errno;
+
+ l = pread(fd, &hbrec, sizeof(struct acpi_fpdt_boot_header), ptr);
+ if (l != sizeof(struct acpi_fpdt_boot_header))
+ return -EINVAL;
+
+ if (memcmp(hbrec.signature, "FBPT", 4) != 0)
+ return -EINVAL;
+
+ if (hbrec.length < sizeof(struct acpi_fpdt_boot_header) + sizeof(struct acpi_fpdt_boot))
+ return -EINVAL;
+
+ l = pread(fd, &brec, sizeof(struct acpi_fpdt_boot), ptr + sizeof(struct acpi_fpdt_boot_header));
+ if (l != sizeof(struct acpi_fpdt_boot))
+ return -EINVAL;
+
+ if (brec.length != sizeof(struct acpi_fpdt_boot))
+ return -EINVAL;
+
+ if (brec.type != ACPI_FPDT_BOOT_REC)
+ return -EINVAL;
+
+ if (loader_start)
+ *loader_start = brec.startup_start / 1000;
+ if (loader_exit)
+ *loader_exit = brec.exit_services_exit / 1000;
+
+ return 0;
+}
diff --git a/src/shared/acpi-fpdt.h b/src/shared/acpi-fpdt.h
new file mode 100644
index 0000000000..fc4fe6f10f
--- /dev/null
+++ b/src/shared/acpi-fpdt.h
@@ -0,0 +1,26 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <time-util.h>
+
+int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit);
diff --git a/src/shared/boot-timestamps.c b/src/shared/boot-timestamps.c
new file mode 100644
index 0000000000..944996582e
--- /dev/null
+++ b/src/shared/boot-timestamps.c
@@ -0,0 +1,65 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2012 Lennart Poettering
+ Copyright 2013 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+#include <unistd.h>
+
+#include "boot-timestamps.h"
+#include "acpi-fpdt.h"
+#include "efivars.h"
+
+int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader) {
+ usec_t x, y, a;
+ int r;
+ dual_timestamp _n;
+
+ assert(firmware);
+ assert(loader);
+
+ if (!n) {
+ dual_timestamp_get(&_n);
+ n = &_n;
+ }
+
+ r = acpi_get_boot_usec(&x, &y);
+ if (r < 0) {
+ r = efi_loader_get_boot_usec(&x, &y);
+ if (r < 0)
+ return r;
+ }
+
+ /* Let's convert this to timestamps where the firmware
+ * began/loader began working. To make this more confusing:
+ * since usec_t is unsigned and the kernel's monotonic clock
+ * begins at kernel initialization we'll actually initialize
+ * the monotonic timestamps here as negative of the actual
+ * value. */
+
+ firmware->monotonic = y;
+ loader->monotonic = y - x;
+
+ a = n->monotonic + firmware->monotonic;
+ firmware->realtime = n->realtime > a ? n->realtime - a : 0;
+
+ a = n->monotonic + loader->monotonic;
+ loader->realtime = n->realtime > a ? n->realtime - a : 0;
+
+ return 0;
+}
diff --git a/src/shared/boot-timestamps.h b/src/shared/boot-timestamps.h
new file mode 100644
index 0000000000..a3d2405b56
--- /dev/null
+++ b/src/shared/boot-timestamps.h
@@ -0,0 +1,27 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2012 Lennart Poettering
+ Copyright 2013 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <time-util.h>
+
+int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader);
diff --git a/src/shared/cgroup-label.c b/src/shared/cgroup-label.c
deleted file mode 100644
index 5b5163c250..0000000000
--- a/src/shared/cgroup-label.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
- This file is part of systemd.
-
- Copyright 2010 Lennart Poettering
-
- 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.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-#include <errno.h>
-#include <unistd.h>
-#include <signal.h>
-#include <string.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <ftw.h>
-
-#include "cgroup-util.h"
-#include "log.h"
-#include "set.h"
-#include "macro.h"
-#include "util.h"
-#include "mkdir.h"
-
-int cg_create(const char *controller, const char *path, const char *suffix) {
- _cleanup_free_ char *fs = NULL;
- int r;
-
- r = cg_get_path_and_check(controller, path, suffix, &fs);
- if (r < 0)
- return r;
-
- r = mkdir_parents_label(fs, 0755);
- if (r < 0)
- return r;
-
- if (mkdir(fs, 0755) < 0) {
-
- if (errno == EEXIST)
- return 0;
-
- return -errno;
- }
-
- return 1;
-}
-
-int cg_create_and_attach(const char *controller, const char *path, pid_t pid) {
- int r, q;
-
- assert(pid >= 0);
-
- r = cg_create(controller, path, NULL);
- if (r < 0)
- return r;
-
- q = cg_attach(controller, path, pid);
- if (q < 0)
- return q;
-
- /* This does not remove the cgroup on failure */
- return r;
-}
diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
index 83cc0731b8..e971f36190 100644
--- a/src/shared/cgroup-show.c
+++ b/src/shared/cgroup-show.c
@@ -241,7 +241,6 @@ static int show_extra_pids(const char *controller, const char *path, const char
unsigned i, j;
int r;
- assert(controller);
assert(path);
if (n_pids <= 0)
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
index 43c415d760..8a4eddab7a 100644
--- a/src/shared/cgroup-util.c
+++ b/src/shared/cgroup-util.c
@@ -38,6 +38,8 @@
#include "strv.h"
#include "unit-name.h"
#include "fileio.h"
+#include "special.h"
+#include "mkdir.h"
int cg_enumerate_processes(const char *controller, const char *path, FILE **_f) {
_cleanup_free_ char *fs = NULL;
@@ -58,25 +60,6 @@ int cg_enumerate_processes(const char *controller, const char *path, FILE **_f)
return 0;
}
-int cg_enumerate_tasks(const char *controller, const char *path, FILE **_f) {
- _cleanup_free_ char *fs = NULL;
- FILE *f;
- int r;
-
- assert(_f);
-
- r = cg_get_path(controller, path, "tasks", &fs);
- if (r < 0)
- return r;
-
- f = fopen(fs, "re");
- if (!f)
- return -errno;
-
- *_f = f;
- return 0;
-}
-
int cg_read_pid(FILE *f, pid_t *_pid) {
unsigned long ul;
@@ -150,7 +133,7 @@ int cg_read_subgroup(DIR *d, char **fn) {
return 0;
}
-int cg_rmdir(const char *controller, const char *path, bool honour_sticky) {
+int cg_rmdir(const char *controller, const char *path) {
_cleanup_free_ char *p = NULL;
int r;
@@ -158,22 +141,6 @@ int cg_rmdir(const char *controller, const char *path, bool honour_sticky) {
if (r < 0)
return r;
- if (honour_sticky) {
- char *tasks;
-
- /* If the sticky bit is set don't remove the directory */
-
- tasks = strappend(p, "/tasks");
- if (!tasks)
- return -ENOMEM;
-
- r = file_is_priv_sticky(tasks);
- free(tasks);
-
- if (r > 0)
- return 0;
- }
-
r = rmdir(p);
if (r < 0 && errno != ENOENT)
return -errno;
@@ -304,7 +271,7 @@ int cg_kill_recursive(const char *controller, const char *path, int sig, bool si
ret = r;
if (rem) {
- r = cg_rmdir(controller, path, true);
+ r = cg_rmdir(controller, path);
if (r < 0 && ret >= 0 && r != -ENOENT && r != -EBUSY)
return r;
}
@@ -365,7 +332,7 @@ int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char
pid_t pid = 0;
done = true;
- r = cg_enumerate_tasks(cfrom, pfrom, &f);
+ r = cg_enumerate_processes(cfrom, pfrom, &f);
if (r < 0) {
if (ret >= 0 && r != -ENOENT)
return r;
@@ -413,7 +380,14 @@ int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char
return ret;
}
-int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool rem) {
+int cg_migrate_recursive(
+ const char *cfrom,
+ const char *pfrom,
+ const char *cto,
+ const char *pto,
+ bool ignore_self,
+ bool rem) {
+
_cleanup_closedir_ DIR *d = NULL;
int r, ret = 0;
char *fn;
@@ -454,7 +428,7 @@ int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto,
ret = r;
if (rem) {
- r = cg_rmdir(cfrom, pfrom, true);
+ r = cg_rmdir(cfrom, pfrom);
if (r < 0 && ret >= 0 && r != -ENOENT && r != -EBUSY)
return r;
}
@@ -462,6 +436,37 @@ int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto,
return ret;
}
+int cg_migrate_recursive_fallback(
+ const char *cfrom,
+ const char *pfrom,
+ const char *cto,
+ const char *pto,
+ bool ignore_self,
+ bool rem) {
+
+ int r;
+
+ assert(cfrom);
+ assert(pfrom);
+ assert(cto);
+ assert(pto);
+
+ r = cg_migrate_recursive(cfrom, pfrom, cto, pto, ignore_self, rem);
+ if (r < 0) {
+ char prefix[strlen(pto) + 1];
+
+ /* This didn't work? Then let's try all prefixes of the destination */
+
+ PATH_FOREACH_PREFIX(prefix, pto) {
+ r = cg_migrate_recursive(cfrom, pfrom, cto, prefix, ignore_self, rem);
+ if (r >= 0)
+ break;
+ }
+ }
+
+ return 0;
+}
+
static const char *normalize_controller(const char *controller) {
assert(controller);
@@ -477,19 +482,19 @@ static const char *normalize_controller(const char *controller) {
static int join_path(const char *controller, const char *path, const char *suffix, char **fs) {
char *t = NULL;
- if (controller) {
- if (path && suffix)
+ if (!isempty(controller)) {
+ if (!isempty(path) && !isempty(suffix))
t = strjoin("/sys/fs/cgroup/", controller, "/", path, "/", suffix, NULL);
- else if (path)
+ else if (!isempty(path))
t = strjoin("/sys/fs/cgroup/", controller, "/", path, NULL);
- else if (suffix)
+ else if (!isempty(suffix))
t = strjoin("/sys/fs/cgroup/", controller, "/", suffix, NULL);
else
t = strappend("/sys/fs/cgroup/", controller);
} else {
- if (path && suffix)
+ if (!isempty(path) && !isempty(suffix))
t = strjoin(path, "/", suffix, NULL);
- else if (path)
+ else if (!isempty(path))
t = strdup(path);
else
return -EINVAL;
@@ -564,8 +569,9 @@ int cg_get_path_and_check(const char *controller, const char *path, const char *
}
static int trim_cb(const char *path, const struct stat *sb, int typeflag, struct FTW *ftwbuf) {
- char *p;
- bool is_sticky;
+ assert(path);
+ assert(sb);
+ assert(ftwbuf);
if (typeflag != FTW_DP)
return 0;
@@ -573,18 +579,6 @@ static int trim_cb(const char *path, const struct stat *sb, int typeflag, struct
if (ftwbuf->level < 1)
return 0;
- p = strappend(path, "/tasks");
- if (!p) {
- errno = ENOMEM;
- return 1;
- }
-
- is_sticky = file_is_priv_sticky(p) > 0;
- free(p);
-
- if (is_sticky)
- return 0;
-
rmdir(path);
return 0;
}
@@ -604,19 +598,8 @@ int cg_trim(const char *controller, const char *path, bool delete_root) {
r = errno ? -errno : -EIO;
if (delete_root) {
- bool is_sticky;
- char *p;
-
- p = strappend(fs, "/tasks");
- if (!p)
- return -ENOMEM;
-
- is_sticky = file_is_priv_sticky(p) > 0;
- free(p);
-
- if (!is_sticky)
- if (rmdir(fs) < 0 && errno != ENOENT && r == 0)
- return -errno;
+ if (rmdir(fs) < 0 && errno != ENOENT)
+ return -errno;
}
return r;
@@ -636,6 +619,46 @@ int cg_delete(const char *controller, const char *path) {
return r == -ENOENT ? 0 : r;
}
+int cg_create(const char *controller, const char *path) {
+ _cleanup_free_ char *fs = NULL;
+ int r;
+
+ r = cg_get_path_and_check(controller, path, NULL, &fs);
+ if (r < 0)
+ return r;
+
+ r = mkdir_parents(fs, 0755);
+ if (r < 0)
+ return r;
+
+ if (mkdir(fs, 0755) < 0) {
+
+ if (errno == EEXIST)
+ return 0;
+
+ return -errno;
+ }
+
+ return 1;
+}
+
+int cg_create_and_attach(const char *controller, const char *path, pid_t pid) {
+ int r, q;
+
+ assert(pid >= 0);
+
+ r = cg_create(controller, path);
+ if (r < 0)
+ return r;
+
+ q = cg_attach(controller, path, pid);
+ if (q < 0)
+ return q;
+
+ /* This does not remove the cgroup on failure */
+ return r;
+}
+
int cg_attach(const char *controller, const char *path, pid_t pid) {
_cleanup_free_ char *fs = NULL;
char c[DECIMAL_STR_MAX(pid_t) + 2];
@@ -644,7 +667,7 @@ int cg_attach(const char *controller, const char *path, pid_t pid) {
assert(path);
assert(pid >= 0);
- r = cg_get_path_and_check(controller, path, "tasks", &fs);
+ r = cg_get_path_and_check(controller, path, "cgroup.procs", &fs);
if (r < 0)
return r;
@@ -656,6 +679,30 @@ int cg_attach(const char *controller, const char *path, pid_t pid) {
return write_string_file(fs, c);
}
+int cg_attach_fallback(const char *controller, const char *path, pid_t pid) {
+ int r;
+
+ assert(controller);
+ assert(path);
+ assert(pid >= 0);
+
+ r = cg_attach(controller, path, pid);
+ if (r < 0) {
+ char prefix[strlen(path) + 1];
+
+ /* This didn't work? Then let's try all prefixes of
+ * the destination */
+
+ PATH_FOREACH_PREFIX(prefix, path) {
+ r = cg_attach(controller, prefix, pid);
+ if (r >= 0)
+ break;
+ }
+ }
+
+ return 0;
+}
+
int cg_set_group_access(
const char *controller,
const char *path,
@@ -683,52 +730,30 @@ int cg_set_task_access(
const char *path,
mode_t mode,
uid_t uid,
- gid_t gid,
- int sticky) {
+ gid_t gid) {
_cleanup_free_ char *fs = NULL, *procs = NULL;
int r;
assert(path);
- if (mode == (mode_t) -1 && uid == (uid_t) -1 && gid == (gid_t) -1 && sticky < 0)
+ if (mode == (mode_t) -1 && uid == (uid_t) -1 && gid == (gid_t) -1)
return 0;
if (mode != (mode_t) -1)
mode &= 0666;
- r = cg_get_path(controller, path, "tasks", &fs);
+ r = cg_get_path(controller, path, "cgroup.procs", &fs);
if (r < 0)
return r;
- if (sticky >= 0 && mode != (mode_t) -1)
- /* Both mode and sticky param are passed */
- mode |= (sticky ? S_ISVTX : 0);
- else if ((sticky >= 0 && mode == (mode_t) -1) ||
- (mode != (mode_t) -1 && sticky < 0)) {
- struct stat st;
-
- /* Only one param is passed, hence read the current
- * mode from the file itself */
-
- r = lstat(fs, &st);
- if (r < 0)
- return -errno;
-
- if (mode == (mode_t) -1)
- /* No mode set, we just shall set the sticky bit */
- mode = (st.st_mode & ~S_ISVTX) | (sticky ? S_ISVTX : 0);
- else
- /* Only mode set, leave sticky bit untouched */
- mode = (st.st_mode & ~0777) | mode;
- }
-
r = chmod_and_chown(fs, mode, uid, gid);
if (r < 0)
return r;
- /* Always keep values for "cgroup.procs" in sync with "tasks" */
- r = cg_get_path(controller, path, "cgroup.procs", &procs);
+ /* Compatibility, Always keep values for "tasks" in sync with
+ * "cgroup.procs" */
+ r = cg_get_path(controller, path, "tasks", &procs);
if (r < 0)
return r;
@@ -861,6 +886,32 @@ int cg_install_release_agent(const char *controller, const char *agent) {
return 0;
}
+int cg_uninstall_release_agent(const char *controller) {
+ _cleanup_free_ char *fs = NULL;
+ int r;
+
+ r = cg_get_path(controller, NULL, "notify_on_release", &fs);
+ if (r < 0)
+ return r;
+
+ r = write_string_file(fs, "0");
+ if (r < 0)
+ return r;
+
+ free(fs);
+ fs = NULL;
+
+ r = cg_get_path(controller, NULL, "release_agent", &fs);
+ if (r < 0)
+ return r;
+
+ r = write_string_file(fs, "");
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
int cg_is_empty(const char *controller, const char *path, bool ignore_self) {
_cleanup_fclose_ FILE *f = NULL;
pid_t pid = 0, self_pid;
@@ -869,7 +920,7 @@ int cg_is_empty(const char *controller, const char *path, bool ignore_self) {
assert(path);
- r = cg_enumerate_tasks(controller, path, &f);
+ r = cg_enumerate_processes(controller, path, &f);
if (r < 0)
return r == -ENOENT ? 1 : r;
@@ -993,19 +1044,28 @@ int cg_split_spec(const char *spec, char **controller, char **path) {
return -EINVAL;
}
- u = strdup(e+1);
- if (!u) {
- free(t);
- return -ENOMEM;
- }
- if (!path_is_safe(u) ||
- !path_is_absolute(u)) {
- free(t);
- free(u);
- return -EINVAL;
- }
+ if (streq(e+1, "")) {
+ u = strdup("/");
+ if (!u) {
+ free(t);
+ return -ENOMEM;
+ }
+ } else {
+ u = strdup(e+1);
+ if (!u) {
+ free(t);
+ return -ENOMEM;
+ }
+
+ if (!path_is_safe(u) ||
+ !path_is_absolute(u)) {
+ free(t);
+ free(u);
+ return -EINVAL;
+ }
- path_kill_slashes(u);
+ path_kill_slashes(u);
+ }
if (controller)
*controller = t;
@@ -1075,96 +1135,20 @@ int cg_mangle_path(const char *path, char **result) {
return cg_get_path(c ? c : SYSTEMD_CGROUP_CONTROLLER, p ? p : "/", NULL, result);
}
-int cg_get_system_path(char **path) {
- char *p;
- int r;
-
- assert(path);
-
- r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 1, &p);
- if (r < 0) {
- p = strdup("/system");
- if (!p)
- return -ENOMEM;
- }
-
- if (endswith(p, "/system"))
- *path = p;
- else {
- char *q;
-
- q = strappend(p, "/system");
- free(p);
- if (!q)
- return -ENOMEM;
-
- *path = q;
- }
-
- return 0;
-}
-
int cg_get_root_path(char **path) {
- char *root, *e;
+ char *p, *e;
int r;
assert(path);
- r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 1, &root);
+ r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 1, &p);
if (r < 0)
return r;
- e = endswith(root, "/system");
- if (e == root)
- e[1] = 0;
- else if (e)
+ e = endswith(p, "/" SPECIAL_SYSTEM_SLICE);
+ if (e)
*e = 0;
- *path = root;
- return 0;
-}
-
-int cg_get_user_path(char **path) {
- _cleanup_free_ char *root = NULL;
- char *p;
-
- assert(path);
-
- /* Figure out the place to put user cgroups below. We use the
- * same as PID 1 has but with the "/system" suffix replaced by
- * "/user" */
-
- if (cg_get_root_path(&root) < 0 || streq(root, "/"))
- p = strdup("/user");
- else
- p = strappend(root, "/user");
-
- if (!p)
- return -ENOMEM;
-
- *path = p;
- return 0;
-}
-
-int cg_get_machine_path(const char *machine, char **path) {
- _cleanup_free_ char *root = NULL, *escaped = NULL;
- char *p;
-
- assert(path);
-
- if (machine) {
- const char *name = strappenda(machine, ".nspawn");
-
- escaped = cg_escape(name);
- if (!escaped)
- return -ENOMEM;
- }
-
- p = strjoin(cg_get_root_path(&root) >= 0 && !streq(root, "/") ? root : "",
- "/machine", machine ? "/" : "", machine ? escaped : "", NULL);
- if (!p)
- return -ENOMEM;
-
*path = p;
return 0;
}
@@ -1247,7 +1231,7 @@ int cg_pid_get_path_shifted(pid_t pid, char **root, char **cgroup) {
}
int cg_path_decode_unit(const char *cgroup, char **unit){
- char *p, *e, *c, *s, *k;
+ char *e, *c, *s;
assert(cgroup);
assert(unit);
@@ -1256,33 +1240,31 @@ int cg_path_decode_unit(const char *cgroup, char **unit){
c = strndupa(cgroup, e - cgroup);
c = cg_unescape(c);
- /* Could this be a valid unit name? */
- if (!unit_name_is_valid(c, true))
+ if (!unit_name_is_valid(c, false))
return -EINVAL;
- if (!unit_name_is_template(c))
- s = strdup(c);
- else {
- if (*e != '/')
- return -EINVAL;
+ s = strdup(c);
+ if (!s)
+ return -ENOMEM;
- e += strspn(e, "/");
+ *unit = s;
+ return 0;
+}
- p = strchrnul(e, '/');
- k = strndupa(e, p - e);
- k = cg_unescape(k);
+static const char *skip_slices(const char *p) {
+ /* Skips over all slice assignments */
- if (!unit_name_is_valid(k, false))
- return -EINVAL;
+ for (;;) {
+ size_t n;
- s = strdup(k);
- }
+ p += strspn(p, "/");
- if (!s)
- return -ENOMEM;
+ n = strcspn(p, "/");
+ if (n <= 6 || memcmp(p + n - 6, ".slice", 6) != 0)
+ return p;
- *unit = s;
- return 0;
+ p += n;
+ }
}
int cg_path_get_unit(const char *path, char **unit) {
@@ -1291,9 +1273,7 @@ int cg_path_get_unit(const char *path, char **unit) {
assert(path);
assert(unit);
- e = path_startswith(path, "/system/");
- if (!e)
- return -ENOENT;
+ e = skip_slices(path);
return cg_path_decode_unit(e, unit);
}
@@ -1311,15 +1291,21 @@ int cg_pid_get_unit(pid_t pid, char **unit) {
return cg_path_get_unit(cgroup, unit);
}
-_pure_ static const char *skip_label(const char *e) {
- assert(e);
+static const char *skip_session(const char *p) {
+ size_t n;
- e = strchr(e, '/');
- if (!e)
+ assert(p);
+
+ p += strspn(p, "/");
+
+ n = strcspn(p, "/");
+ if (n <= 12 || memcmp(p, "session-", 8) != 0 || memcmp(p + n - 6, ".scope", 6) != 0)
return NULL;
- e += strspn(e, "/");
- return e;
+ p += n;
+ p += strspn(p, "/");
+
+ return p;
}
int cg_path_get_user_unit(const char *path, char **unit) {
@@ -1332,24 +1318,16 @@ int cg_path_get_user_unit(const char *path, char **unit) {
* cgroups might have arbitrary child cgroups and we shouldn't get
* confused by those */
- e = path_startswith(path, "/user/");
- if (!e)
- return -ENOENT;
-
- /* Skip the user name */
- e = skip_label(e);
- if (!e)
- return -ENOENT;
+ /* Skip slices, if there are any */
+ e = skip_slices(path);
- /* Skip the session ID */
- e = skip_label(e);
+ /* Skip the session scope, require that there is one */
+ e = skip_session(e);
if (!e)
return -ENOENT;
- /* Skip the systemd cgroup */
- e = skip_label(e);
- if (!e)
- return -ENOENT;
+ /* And skip more slices */
+ e = skip_slices(e);
return cg_path_decode_unit(e, unit);
}
@@ -1368,23 +1346,34 @@ int cg_pid_get_user_unit(pid_t pid, char **unit) {
}
int cg_path_get_machine_name(const char *path, char **machine) {
- const char *e, *n;
+ const char *e, *n, *x;
char *s, *r;
+ size_t l;
assert(path);
assert(machine);
- e = path_startswith(path, "/machine/");
- if (!e)
- return -ENOENT;
+ /* Skip slices, if there are any */
+ e = skip_slices(path);
n = strchrnul(e, '/');
if (e == n)
return -ENOENT;
s = strndupa(e, n - e);
+ s = cg_unescape(s);
+
+ x = startswith(s, "machine-");
+ if (!x)
+ return -ENOENT;
+ if (!endswith(x, ".scope"))
+ return -ENOENT;
+
+ l = strlen(x);
+ if (l <= 6)
+ return -ENOENT;
- r = strdup(cg_unescape(s));
+ r = strndup(x, l - 6);
if (!r)
return -ENOMEM;
@@ -1406,32 +1395,38 @@ int cg_pid_get_machine_name(pid_t pid, char **machine) {
}
int cg_path_get_session(const char *path, char **session) {
- const char *e, *n;
- char *s;
+ const char *e, *n, *x;
+ char *s, *r;
+ size_t l;
assert(path);
assert(session);
- e = path_startswith(path, "/user/");
- if (!e)
- return -ENOENT;
+ /* Skip slices, if there are any */
+ e = skip_slices(path);
- /* Skip the user name */
- e = skip_label(e);
- if (!e)
+ n = strchrnul(e, '/');
+ if (e == n)
return -ENOENT;
- n = strchrnul(e, '/');
- if (n - e < 8)
+ s = strndupa(e, n - e);
+ s = cg_unescape(s);
+
+ x = startswith(s, "session-");
+ if (!x)
return -ENOENT;
- if (memcmp(n - 8, ".session", 8) != 0)
+ if (!endswith(x, ".scope"))
return -ENOENT;
- s = strndup(e, n - e - 8);
- if (!s)
+ l = strlen(x);
+ if (l <= 6)
+ return -ENOENT;
+
+ r = strndup(x, l - 6);
+ if (!r)
return -ENOMEM;
- *session = s;
+ *session = r;
return 0;
}
@@ -1449,23 +1444,25 @@ int cg_pid_get_session(pid_t pid, char **session) {
}
int cg_path_get_owner_uid(const char *path, uid_t *uid) {
- const char *e, *n;
+ _cleanup_free_ char *slice = NULL;
+ const char *e;
char *s;
+ int r;
assert(path);
assert(uid);
- e = path_startswith(path, "/user/");
- if (!e)
- return -ENOENT;
+ r = cg_path_get_slice(path, &slice);
+ if (r < 0)
+ return r;
- n = strchrnul(e, '/');
- if (n - e < 5)
+ e = startswith(slice, "user-");
+ if (!e)
return -ENOENT;
- if (memcmp(n - 5, ".user", 5) != 0)
+ if (!endswith(slice, ".slice"))
return -ENOENT;
- s = strndupa(e, n - e - 5);
+ s = strndupa(e, strlen(e) - 6);
if (!s)
return -ENOMEM;
@@ -1485,6 +1482,53 @@ int cg_pid_get_owner_uid(pid_t pid, uid_t *uid) {
return cg_path_get_owner_uid(cgroup, uid);
}
+int cg_path_get_slice(const char *p, char **slice) {
+ const char *e = NULL;
+ size_t m = 0;
+
+ assert(p);
+ assert(slice);
+
+ for (;;) {
+ size_t n;
+
+ p += strspn(p, "/");
+
+ n = strcspn(p, "/");
+ if (n <= 6 || memcmp(p + n - 6, ".slice", 6) != 0) {
+ char *s;
+
+ if (!e)
+ return -ENOENT;
+
+ s = strndup(e, m);
+ if (!s)
+ return -ENOMEM;
+
+ *slice = s;
+ return 0;
+ }
+
+ e = p;
+ m = n;
+
+ p += n;
+ }
+}
+
+int cg_pid_get_slice(pid_t pid, char **slice) {
+ _cleanup_free_ char *cgroup = NULL;
+ int r;
+
+ assert(slice);
+
+ r = cg_pid_get_path_shifted(pid, NULL, &cgroup);
+ if (r < 0)
+ return r;
+
+ return cg_path_get_slice(cgroup, slice);
+}
+
int cg_controller_from_attr(const char *attr, char **controller) {
const char *dot;
char *c;
@@ -1572,9 +1616,7 @@ char *cg_unescape(const char *p) {
}
#define CONTROLLER_VALID \
- "0123456789" \
- "abcdefghijklmnopqrstuvwxyz" \
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+ DIGITS LETTERS \
"_"
bool cg_controller_is_valid(const char *p, bool allow_named) {
@@ -1601,3 +1643,188 @@ bool cg_controller_is_valid(const char *p, bool allow_named) {
return true;
}
+
+int cg_slice_to_path(const char *unit, char **ret) {
+ _cleanup_free_ char *p = NULL, *s = NULL, *e = NULL;
+ const char *dash;
+
+ assert(unit);
+ assert(ret);
+
+ if (!unit_name_is_valid(unit, false))
+ return -EINVAL;
+
+ if (!endswith(unit, ".slice"))
+ return -EINVAL;
+
+ p = unit_name_to_prefix(unit);
+ if (!p)
+ return -ENOMEM;
+
+ dash = strchr(p, '-');
+ while (dash) {
+ _cleanup_free_ char *escaped = NULL;
+ char n[dash - p + sizeof(".slice")];
+
+ strcpy(stpncpy(n, p, dash - p), ".slice");
+
+ if (!unit_name_is_valid(n, false))
+ return -EINVAL;
+
+ escaped = cg_escape(n);
+ if (!escaped)
+ return -ENOMEM;
+
+ if (!strextend(&s, escaped, "/", NULL))
+ return -ENOMEM;
+
+ dash = strchr(dash+1, '-');
+ }
+
+ e = cg_escape(unit);
+ if (!e)
+ return -ENOMEM;
+
+ if (!strextend(&s, e, NULL))
+ return -ENOMEM;
+
+ *ret = s;
+ s = NULL;
+
+ return 0;
+}
+
+int cg_set_attribute(const char *controller, const char *path, const char *attribute, const char *value) {
+ _cleanup_free_ char *p = NULL;
+ int r;
+
+ r = cg_get_path(controller, path, attribute, &p);
+ if (r < 0)
+ return r;
+
+ return write_string_file(p, value);
+}
+
+static const char mask_names[] =
+ "cpu\0"
+ "cpuacct\0"
+ "blkio\0"
+ "memory\0"
+ "devices\0";
+
+int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path) {
+ CGroupControllerMask bit = 1;
+ const char *n;
+ int r;
+
+ /* This one will create a cgroup in our private tree, but also
+ * duplicate it in the trees specified in mask, and remove it
+ * in all others */
+
+ /* First create the cgroup in our own hierarchy. */
+ r = cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
+ if (r < 0)
+ return r;
+
+ /* Then, do the same in the other hierarchies */
+ NULSTR_FOREACH(n, mask_names) {
+ if (mask & bit)
+ cg_create(n, path);
+ else if (supported & bit)
+ cg_trim(n, path, true);
+
+ bit <<= 1;
+ }
+
+ return 0;
+}
+
+int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid) {
+ CGroupControllerMask bit = 1;
+ const char *n;
+ int r;
+
+ r = cg_attach(SYSTEMD_CGROUP_CONTROLLER, path, pid);
+ if (r < 0)
+ return r;
+
+ NULSTR_FOREACH(n, mask_names) {
+ if (supported & bit)
+ cg_attach_fallback(n, path, pid);
+
+ bit <<= 1;
+ }
+
+ return 0;
+}
+
+int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids) {
+ Iterator i;
+ void *pidp;
+ int r = 0;
+
+ SET_FOREACH(pidp, pids, i) {
+ pid_t pid = PTR_TO_LONG(pidp);
+ int q;
+
+ q = cg_attach_everywhere(supported, path, pid);
+ if (q < 0)
+ r = q;
+ }
+
+ return r;
+}
+
+int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to) {
+ CGroupControllerMask bit = 1;
+ const char *n;
+ int r;
+
+ if (!path_equal(from, to)) {
+ r = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, from, SYSTEMD_CGROUP_CONTROLLER, to, false, true);
+ if (r < 0)
+ return r;
+ }
+
+ NULSTR_FOREACH(n, mask_names) {
+ if (supported & bit)
+ cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, n, to, false, false);
+
+ bit <<= 1;
+ }
+
+ return 0;
+}
+
+int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool delete_root) {
+ CGroupControllerMask bit = 1;
+ const char *n;
+ int r;
+
+ r = cg_trim(SYSTEMD_CGROUP_CONTROLLER, path, delete_root);
+ if (r < 0)
+ return r;
+
+ NULSTR_FOREACH(n, mask_names) {
+ if (supported & bit)
+ cg_trim(n, path, delete_root);
+
+ bit <<= 1;
+ }
+
+ return 0;
+}
+
+CGroupControllerMask cg_mask_supported(void) {
+ CGroupControllerMask bit = 1, mask = 0;
+ const char *n;
+
+ NULSTR_FOREACH(n, mask_names) {
+ if (check_hierarchy(n) >= 0)
+ mask |= bit;
+
+ bit <<= 1;
+ }
+
+ return mask;
+}
diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h
index 25dd277ba5..0963450b08 100644
--- a/src/shared/cgroup-util.h
+++ b/src/shared/cgroup-util.h
@@ -28,6 +28,15 @@
#include "set.h"
#include "def.h"
+/* A bit mask of well known cgroup controllers */
+typedef enum CGroupControllerMask {
+ CGROUP_CPU = 1,
+ CGROUP_CPUACCT = 2,
+ CGROUP_BLKIO = 4,
+ CGROUP_MEMORY = 8,
+ CGROUP_DEVICE = 16
+} CGroupControllerMask;
+
/*
* General rules:
*
@@ -44,7 +53,6 @@
*/
int cg_enumerate_processes(const char *controller, const char *path, FILE **_f);
-int cg_enumerate_tasks(const char *controller, const char *path, FILE **_f);
int cg_read_pid(FILE *f, pid_t *_pid);
int cg_enumerate_subgroups(const char *controller, const char *path, DIR **_d);
@@ -56,6 +64,7 @@ int cg_kill_recursive_and_wait(const char *controller, const char *path, bool re
int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self);
int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool remove);
+int cg_migrate_recursive_fallback(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool rem);
int cg_split_spec(const char *spec, char **controller, char **path);
int cg_join_spec(const char *controller, const char *path, char **spec);
@@ -68,32 +77,34 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path);
int cg_trim(const char *controller, const char *path, bool delete_root);
-int cg_rmdir(const char *controller, const char *path, bool honour_sticky);
+int cg_rmdir(const char *controller, const char *path);
int cg_delete(const char *controller, const char *path);
-int cg_create(const char *controller, const char *path, const char *suffix);
+int cg_create(const char *controller, const char *path);
int cg_attach(const char *controller, const char *path, pid_t pid);
+int cg_attach_fallback(const char *controller, const char *path, pid_t pid);
int cg_create_and_attach(const char *controller, const char *path, pid_t pid);
+int cg_set_attribute(const char *controller, const char *path, const char *attribute, const char *value);
+
int cg_set_group_access(const char *controller, const char *path, mode_t mode, uid_t uid, gid_t gid);
-int cg_set_task_access(const char *controller, const char *path, mode_t mode, uid_t uid, gid_t gid, int sticky);
+int cg_set_task_access(const char *controller, const char *path, mode_t mode, uid_t uid, gid_t gid);
int cg_install_release_agent(const char *controller, const char *agent);
+int cg_uninstall_release_agent(const char *controller);
int cg_is_empty(const char *controller, const char *path, bool ignore_self);
int cg_is_empty_by_spec(const char *spec, bool ignore_self);
int cg_is_empty_recursive(const char *controller, const char *path, bool ignore_self);
int cg_get_root_path(char **path);
-int cg_get_system_path(char **path);
-int cg_get_user_path(char **path);
-int cg_get_machine_path(const char *machine, char **path);
int cg_path_get_session(const char *path, char **session);
int cg_path_get_owner_uid(const char *path, uid_t *uid);
int cg_path_get_unit(const char *path, char **unit);
int cg_path_get_user_unit(const char *path, char **unit);
int cg_path_get_machine_name(const char *path, char **machine);
+int cg_path_get_slice(const char *path, char **slice);
int cg_pid_get_path_shifted(pid_t pid, char **root, char **cgroup);
@@ -102,6 +113,7 @@ int cg_pid_get_owner_uid(pid_t pid, uid_t *uid);
int cg_pid_get_unit(pid_t pid, char **unit);
int cg_pid_get_user_unit(pid_t pid, char **unit);
int cg_pid_get_machine_name(pid_t pid, char **machine);
+int cg_pid_get_slice(pid_t pid, char **slice);
int cg_path_decode_unit(const char *cgroup, char **unit);
@@ -113,3 +125,13 @@ char *cg_escape(const char *p);
char *cg_unescape(const char *p) _pure_;
bool cg_controller_is_valid(const char *p, bool allow_named);
+
+int cg_slice_to_path(const char *unit, char **ret);
+
+int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path);
+int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid);
+int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids);
+int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to);
+int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool delete_root);
+
+CGroupControllerMask cg_mask_supported(void);
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 2303d9a50b..6085d33391 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -599,6 +599,7 @@ int config_parse_path(const char *unit,
char **s = data;
char *n;
+ int offset;
assert(filename);
assert(lvalue);
@@ -611,7 +612,9 @@ int config_parse_path(const char *unit,
return 0;
}
- if (!path_is_absolute(rvalue)) {
+ offset = rvalue[0] == '-' && (streq(lvalue, "InaccessibleDirectories") ||
+ streq(lvalue, "ReadOnlyDirectories"));
+ if (!path_is_absolute(rvalue + offset)) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Not an absolute path, ignoring: %s", rvalue);
return 0;
@@ -713,6 +716,7 @@ int config_parse_path_strv(const char *unit,
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
_cleanup_free_ char *n;
+ int offset;
n = strndup(w, l);
if (!n)
@@ -724,7 +728,9 @@ int config_parse_path_strv(const char *unit,
continue;
}
- if (!path_is_absolute(n)) {
+ offset = n[0] == '-' && (streq(lvalue, "InaccessibleDirectories") ||
+ streq(lvalue, "ReadOnlyDirectories"));
+ if (!path_is_absolute(n + offset)) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Not an absolute path, ignoring: %s", rvalue);
continue;
diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c
index b8c15cb9fc..c727cae7cd 100644
--- a/src/shared/dbus-common.c
+++ b/src/shared/dbus-common.c
@@ -178,9 +178,9 @@ int bus_connect_system_ssh(const char *user, const char *host, DBusConnection **
assert(user || host);
if (user && host)
- asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s@%s,argv3=systemd-stdio-bridge", user, host);
+ asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s%%40%s,argv3=systemd-stdio-bridge", user, host);
else if (user)
- asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s@localhost,argv3=systemd-stdio-bridge", user);
+ asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s%%40localhost,argv3=systemd-stdio-bridge", user);
else if (host)
asprintf(&p, "unixexec:path=ssh,argv1=-xT,argv2=%s,argv3=systemd-stdio-bridge", host);
@@ -1383,6 +1383,8 @@ int bus_method_call_with_reply(
r = -EACCES;
else if (dbus_error_has_name(&error, DBUS_ERROR_NO_REPLY))
r = -ETIMEDOUT;
+ else if (dbus_error_has_name(&error, DBUS_ERROR_DISCONNECTED))
+ r = -ECONNRESET;
else
r = -EIO;
goto finish;
diff --git a/src/shared/def.h b/src/shared/def.h
index 5ba170f965..edd0bcf7a4 100644
--- a/src/shared/def.h
+++ b/src/shared/def.h
@@ -32,4 +32,9 @@
#define SYSTEMD_CGROUP_CONTROLLER "name=systemd"
#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
-#define SIGNALS_IGNORE SIGKILL,SIGPIPE
+#define SIGNALS_IGNORE SIGPIPE
+
+#define DIGITS "0123456789"
+#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz"
+#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+#define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS
diff --git a/src/shared/dev-setup.c b/src/shared/dev-setup.c
index b0ac02d461..50a187fda9 100644
--- a/src/shared/dev-setup.c
+++ b/src/shared/dev-setup.c
@@ -54,13 +54,19 @@ void dev_setup(const char *prefix) {
const char *j, *k;
static const char symlinks[] =
- "/proc/kcore\0" "/dev/core\0"
+ "-/proc/kcore\0" "/dev/core\0"
"/proc/self/fd\0" "/dev/fd\0"
"/proc/self/fd/0\0" "/dev/stdin\0"
"/proc/self/fd/1\0" "/dev/stdout\0"
"/proc/self/fd/2\0" "/dev/stderr\0";
NULSTR_FOREACH_PAIR(j, k, symlinks) {
+ if (j[0] == '-') {
+ j++;
+
+ if (access(j, F_OK))
+ continue;
+ }
if (prefix) {
char *linkname;
diff --git a/src/shared/device-nodes.c b/src/shared/device-nodes.c
new file mode 100644
index 0000000000..9837375099
--- /dev/null
+++ b/src/shared/device-nodes.c
@@ -0,0 +1,74 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2008-2011 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+#include "device-nodes.h"
+#include "utf8.h"
+
+int whitelisted_char_for_devnode(char c, const char *white) {
+ if ((c >= '0' && c <= '9') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= 'a' && c <= 'z') ||
+ strchr("#+-.:=@_", c) != NULL ||
+ (white != NULL && strchr(white, c) != NULL))
+ return 1;
+ return 0;
+}
+
+int encode_devnode_name(const char *str, char *str_enc, size_t len) {
+ size_t i, j;
+
+ if (str == NULL || str_enc == NULL)
+ return -1;
+
+ for (i = 0, j = 0; str[i] != '\0'; i++) {
+ int seqlen;
+
+ seqlen = utf8_encoded_valid_unichar(&str[i]);
+ if (seqlen > 1) {
+ if (len-j < (size_t)seqlen)
+ goto err;
+ memcpy(&str_enc[j], &str[i], seqlen);
+ j += seqlen;
+ i += (seqlen-1);
+ } else if (str[i] == '\\' || !whitelisted_char_for_devnode(str[i], NULL)) {
+ if (len-j < 4)
+ goto err;
+ sprintf(&str_enc[j], "\\x%02x", (unsigned char) str[i]);
+ j += 4;
+ } else {
+ if (len-j < 1)
+ goto err;
+ str_enc[j] = str[i];
+ j++;
+ }
+ }
+ if (len-j < 1)
+ goto err;
+ str_enc[j] = '\0';
+ return 0;
+err:
+ return -1;
+}
diff --git a/src/shared/device-nodes.h b/src/shared/device-nodes.h
new file mode 100644
index 0000000000..04ba4897e5
--- /dev/null
+++ b/src/shared/device-nodes.h
@@ -0,0 +1,25 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2012 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+int encode_devnode_name(const char *str, char *str_enc, size_t len);
+int whitelisted_char_for_devnode(char c, const char *additional);
diff --git a/src/shared/efivars.c b/src/shared/efivars.c
index 8d004bad33..1d5b6f9e72 100644
--- a/src/shared/efivars.c
+++ b/src/shared/efivars.c
@@ -24,6 +24,7 @@
#include <fcntl.h>
#include <ctype.h>
+#include "acpi-fpdt.h"
#include "util.h"
#include "utf8.h"
#include "efivars.h"
@@ -413,7 +414,7 @@ static int read_usec(sd_id128_t vendor, const char *name, usec_t *u) {
return 0;
}
-static int get_boot_usec(usec_t *firmware, usec_t *loader) {
+int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) {
uint64_t x, y;
int r;
@@ -440,43 +441,7 @@ static int get_boot_usec(usec_t *firmware, usec_t *loader) {
return 0;
}
-int efi_get_boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader) {
- usec_t x, y, a;
- int r;
- dual_timestamp _n;
-
- assert(firmware);
- assert(loader);
-
- if (!n) {
- dual_timestamp_get(&_n);
- n = &_n;
- }
-
- r = get_boot_usec(&x, &y);
- if (r < 0)
- return r;
-
- /* Let's convert this to timestamps where the firmware
- * began/loader began working. To make this more confusing:
- * since usec_t is unsigned and the kernel's monotonic clock
- * begins at kernel initialization we'll actually initialize
- * the monotonic timestamps here as negative of the actual
- * value. */
-
- firmware->monotonic = y;
- loader->monotonic = y - x;
-
- a = n->monotonic + firmware->monotonic;
- firmware->realtime = n->realtime > a ? n->realtime - a : 0;
-
- a = n->monotonic + loader->monotonic;
- loader->realtime = n->realtime > a ? n->realtime - a : 0;
-
- return 0;
-}
-
-int efi_get_loader_device_part_uuid(sd_id128_t *u) {
+int efi_loader_get_device_part_uuid(sd_id128_t *u) {
_cleanup_free_ char *p = NULL;
int r, parsed[16];
unsigned i;
diff --git a/src/shared/efivars.h b/src/shared/efivars.h
index 2b88c6075c..7921bedc9f 100644
--- a/src/shared/efivars.h
+++ b/src/shared/efivars.h
@@ -42,6 +42,5 @@ int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *partuuid, char **
int efi_get_boot_order(uint16_t **order);
int efi_get_boot_options(uint16_t **options);
-int efi_get_boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_timestamp *loader);
-
-int efi_get_loader_device_part_uuid(sd_id128_t *u);
+int efi_loader_get_device_part_uuid(sd_id128_t *u);
+int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader);
diff --git a/src/shared/env-util.c b/src/shared/env-util.c
index 6a52fb960d..5e29629efd 100644
--- a/src/shared/env-util.c
+++ b/src/shared/env-util.c
@@ -27,11 +27,10 @@
#include "utf8.h"
#include "util.h"
#include "env-util.h"
+#include "def.h"
#define VALID_CHARS_ENV_NAME \
- "0123456789" \
- "abcdefghijklmnopqrstuvwxyz" \
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+ DIGITS LETTERS \
"_"
#ifndef ARG_MAX
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
index ad068bf30d..603a1c7b38 100644
--- a/src/shared/fileio.c
+++ b/src/shared/fileio.c
@@ -23,7 +23,8 @@
#include "fileio.h"
#include "util.h"
#include "strv.h"
-
+#include "utf8.h"
+#include "ctype.h"
int write_string_to_file(FILE *f, const char *line) {
errno = 0;
@@ -178,13 +179,15 @@ int read_full_file(const char *fn, char **contents, size_t *size) {
static int parse_env_file_internal(
const char *fname,
const char *newline,
- int (*push) (const char *key, char *value, void *userdata),
+ int (*push) (const char *filename, unsigned line,
+ const char *key, char *value, void *userdata),
void *userdata) {
_cleanup_free_ char *contents = NULL, *key = NULL;
size_t key_alloc = 0, n_key = 0, value_alloc = 0, n_value = 0, last_value_whitespace = (size_t) -1, last_key_whitespace = (size_t) -1;
char *p, *value = NULL;
int r;
+ unsigned line = 1;
enum {
PRE_KEY,
@@ -231,6 +234,7 @@ static int parse_env_file_internal(
case KEY:
if (strchr(newline, c)) {
state = PRE_KEY;
+ line ++;
n_key = 0;
} else if (c == '=') {
state = PRE_VALUE;
@@ -254,6 +258,7 @@ static int parse_env_file_internal(
case PRE_VALUE:
if (strchr(newline, c)) {
state = PRE_KEY;
+ line ++;
key[n_key] = 0;
if (value)
@@ -263,7 +268,7 @@ static int parse_env_file_internal(
if (last_key_whitespace != (size_t) -1)
key[last_key_whitespace] = 0;
- r = push(key, value, userdata);
+ r = push(fname, line, key, value, userdata);
if (r < 0)
goto fail;
@@ -293,6 +298,7 @@ static int parse_env_file_internal(
case VALUE:
if (strchr(newline, c)) {
state = PRE_KEY;
+ line ++;
key[n_key] = 0;
@@ -307,7 +313,7 @@ static int parse_env_file_internal(
if (last_key_whitespace != (size_t) -1)
key[last_key_whitespace] = 0;
- r = push(key, value, userdata);
+ r = push(fname, line, key, value, userdata);
if (r < 0)
goto fail;
@@ -409,8 +415,10 @@ static int parse_env_file_internal(
case COMMENT:
if (c == '\\')
state = COMMENT_ESCAPE;
- else if (strchr(newline, c))
+ else if (strchr(newline, c)) {
state = PRE_KEY;
+ line ++;
+ }
break;
case COMMENT_ESCAPE:
@@ -440,7 +448,7 @@ static int parse_env_file_internal(
if (last_key_whitespace != (size_t) -1)
key[last_key_whitespace] = 0;
- r = push(key, value, userdata);
+ r = push(fname, line, key, value, userdata);
if (r < 0)
goto fail;
}
@@ -452,27 +460,36 @@ fail:
return r;
}
-static int parse_env_file_push(const char *key, char *value, void *userdata) {
- const char *k;
- va_list* ap = (va_list*) userdata;
- va_list aq;
+static int parse_env_file_push(const char *filename, unsigned line,
+ const char *key, char *value, void *userdata) {
+ assert(utf8_is_valid(key));
+
+ if (value && !utf8_is_valid(value))
+ /* FIXME: filter UTF-8 */
+ log_error("%s:%u: invalid UTF-8 for key %s: '%s', ignoring.",
+ filename, line, key, value);
+ else {
+ const char *k;
+ va_list* ap = (va_list*) userdata;
+ va_list aq;
- va_copy(aq, *ap);
+ va_copy(aq, *ap);
- while ((k = va_arg(aq, const char *))) {
- char **v;
+ while ((k = va_arg(aq, const char *))) {
+ char **v;
- v = va_arg(aq, char **);
+ v = va_arg(aq, char **);
- if (streq(key, k)) {
- va_end(aq);
- free(*v);
- *v = value;
- return 1;
+ if (streq(key, k)) {
+ va_end(aq);
+ free(*v);
+ *v = value;
+ return 1;
+ }
}
- }
- va_end(aq);
+ va_end(aq);
+ }
free(value);
return 0;
@@ -495,19 +512,28 @@ int parse_env_file(
return r;
}
-static int load_env_file_push(const char *key, char *value, void *userdata) {
- char ***m = userdata;
- char *p;
- int r;
+static int load_env_file_push(const char *filename, unsigned line,
+ const char *key, char *value, void *userdata) {
+ assert(utf8_is_valid(key));
- p = strjoin(key, "=", strempty(value), NULL);
- if (!p)
- return -ENOMEM;
+ if (value && !utf8_is_valid(value))
+ /* FIXME: filter UTF-8 */
+ log_error("%s:%u: invalid UTF-8 for key %s: '%s', ignoring.",
+ filename, line, key, value);
+ else {
+ char ***m = userdata;
+ char *p;
+ int r;
- r = strv_push(m, p);
- if (r < 0) {
- free(p);
- return r;
+ p = strjoin(key, "=", strempty(value), NULL);
+ if (!p)
+ return -ENOMEM;
+
+ r = strv_push(m, p);
+ if (r < 0) {
+ free(p);
+ return r;
+ }
}
free(value);
@@ -594,3 +620,79 @@ int write_env_file(const char *fname, char **l) {
return r;
}
+
+int executable_is_script(const char *path, char **interpreter) {
+ int r;
+ char _cleanup_free_ *line = NULL;
+ int len;
+ char *ans;
+
+ assert(path);
+
+ r = read_one_line_file(path, &line);
+ if (r < 0)
+ return r;
+
+ if (!startswith(line, "#!"))
+ return 0;
+
+ ans = strstrip(line + 2);
+ len = strcspn(ans, " \t");
+
+ if (len == 0)
+ return 0;
+
+ ans = strndup(ans, len);
+ if (!ans)
+ return -ENOMEM;
+
+ *interpreter = ans;
+ return 1;
+}
+
+/**
+ * Retrieve one field from a file like /proc/self/status. pattern
+ * should start with '\n' and end with a ':'. Whitespace and zeros
+ * after the ':' will be skipped. field must be freed afterwards.
+ */
+int get_status_field(const char *filename, const char *pattern, char **field) {
+ _cleanup_free_ char *status = NULL;
+ char *t;
+ size_t len;
+ int r;
+
+ assert(filename);
+ assert(field);
+
+ r = read_full_file(filename, &status, NULL);
+ if (r < 0)
+ return r;
+
+ t = strstr(status, pattern);
+ if (!t)
+ return -ENOENT;
+
+ t += strlen(pattern);
+ if (*t) {
+ t += strspn(t, " \t");
+
+ /* Also skip zeros, because when this is used for
+ * capabilities, we don't want the zeros. This way the
+ * same capability set always maps to the same string,
+ * irrespective of the total capability set size. For
+ * other numbers it shouldn't matter. */
+ t += strspn(t, "0");
+ /* Back off one char if there's nothing but whitespace
+ and zeros */
+ if (!*t || isspace(*t))
+ t --;
+ }
+
+ len = strcspn(t, WHITESPACE);
+
+ *field = strndup(t, len);
+ if (!*field)
+ return -ENOMEM;
+
+ return 0;
+}
diff --git a/src/shared/fileio.h b/src/shared/fileio.h
index 0ca6878ea4..59e41502b1 100644
--- a/src/shared/fileio.h
+++ b/src/shared/fileio.h
@@ -35,3 +35,7 @@ int read_full_file(const char *fn, char **contents, size_t *size);
int parse_env_file(const char *fname, const char *separator, ...) _sentinel_;
int load_env_file(const char *fname, const char *separator, char ***l);
int write_env_file(const char *fname, char **l);
+
+int executable_is_script(const char *path, char **interpreter);
+
+int get_status_field(const char *filename, const char *pattern, char **field);
diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c
index 9f7db34397..f06fce6ef3 100644
--- a/src/shared/hashmap.c
+++ b/src/shared/hashmap.c
@@ -24,11 +24,15 @@
#include <string.h>
#include <errno.h>
+#ifdef HAVE_SYS_AUXV_H
+#include <sys/auxv.h>
+#endif
+
#include "util.h"
#include "hashmap.h"
#include "macro.h"
-#define NBUCKETS 127
+#define INITIAL_N_BUCKETS 31
struct hashmap_entry {
const void *key;
@@ -42,13 +46,14 @@ struct Hashmap {
compare_func_t compare_func;
struct hashmap_entry *iterate_list_head, *iterate_list_tail;
- unsigned n_entries;
+ struct hashmap_entry ** buckets;
+ unsigned n_buckets, n_entries;
+
+ unsigned random_xor;
bool from_pool;
};
-#define BY_HASH(h) ((struct hashmap_entry**) ((uint8_t*) (h) + ALIGN(sizeof(Hashmap))))
-
struct pool {
struct pool *next;
unsigned n_tiles;
@@ -64,6 +69,11 @@ static void *first_entry_tile = NULL;
static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size) {
unsigned i;
+ /* When a tile is released we add it to the list and simply
+ * place the next pointer at its offset 0. */
+
+ assert(tile_size >= sizeof(void*));
+
if (*first_tile) {
void *r;
@@ -166,14 +176,19 @@ int uint64_compare_func(const void *_a, const void *_b) {
return a < b ? -1 : (a > b ? 1 : 0);
}
+static unsigned bucket_hash(Hashmap *h, const void *p) {
+ return (h->hash_func(p) ^ h->random_xor) % h->n_buckets;
+}
+
Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
bool b;
Hashmap *h;
size_t size;
+ void *auxv;
b = is_main_thread();
- size = ALIGN(sizeof(Hashmap)) + NBUCKETS * sizeof(struct hashmap_entry*);
+ size = ALIGN(sizeof(Hashmap)) + INITIAL_N_BUCKETS * sizeof(struct hashmap_entry*);
if (b) {
h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size);
@@ -191,23 +206,43 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) {
h->hash_func = hash_func ? hash_func : trivial_hash_func;
h->compare_func = compare_func ? compare_func : trivial_compare_func;
+ h->n_buckets = INITIAL_N_BUCKETS;
h->n_entries = 0;
h->iterate_list_head = h->iterate_list_tail = NULL;
+ h->buckets = (struct hashmap_entry**) ((uint8_t*) h + ALIGN(sizeof(Hashmap)));
+
h->from_pool = b;
+ /* Let's randomize our hash functions a bit so that they are
+ * harder to guess for clients. For this, start out by cheaply
+ * using some bits the kernel passed into the process using
+ * the auxiliary vector. If the hashmap grows later on we will
+ * rehash everything using a new random XOR mask from
+ * /dev/random. */
+#ifdef HAVE_SYS_AUXV_H
+ auxv = (void*) getauxval(AT_RANDOM);
+ h->random_xor = auxv ? *(unsigned*) auxv : random_u();
+#else
+ h->random_xor = random_u();
+#endif
+
return h;
}
int hashmap_ensure_allocated(Hashmap **h, hash_func_t hash_func, compare_func_t compare_func) {
+ Hashmap *q;
+
assert(h);
if (*h)
return 0;
- if (!(*h = hashmap_new(hash_func, compare_func)))
+ q = hashmap_new(hash_func, compare_func);
+ if (!q)
return -ENOMEM;
+ *h = q;
return 0;
}
@@ -216,11 +251,11 @@ static void link_entry(Hashmap *h, struct hashmap_entry *e, unsigned hash) {
assert(e);
/* Insert into hash table */
- e->bucket_next = BY_HASH(h)[hash];
+ e->bucket_next = h->buckets[hash];
e->bucket_previous = NULL;
- if (BY_HASH(h)[hash])
- BY_HASH(h)[hash]->bucket_previous = e;
- BY_HASH(h)[hash] = e;
+ if (h->buckets[hash])
+ h->buckets[hash]->bucket_previous = e;
+ h->buckets[hash] = e;
/* Insert into iteration list */
e->iterate_previous = h->iterate_list_tail;
@@ -260,7 +295,7 @@ static void unlink_entry(Hashmap *h, struct hashmap_entry *e, unsigned hash) {
if (e->bucket_previous)
e->bucket_previous->bucket_next = e->bucket_next;
else
- BY_HASH(h)[hash] = e->bucket_next;
+ h->buckets[hash] = e->bucket_next;
assert(h->n_entries >= 1);
h->n_entries--;
@@ -272,8 +307,7 @@ static void remove_entry(Hashmap *h, struct hashmap_entry *e) {
assert(h);
assert(e);
- hash = h->hash_func(e->key) % NBUCKETS;
-
+ hash = bucket_hash(h, e->key);
unlink_entry(h, e, hash);
if (h->from_pool)
@@ -291,6 +325,9 @@ void hashmap_free(Hashmap*h) {
hashmap_clear(h);
+ if (h->buckets != (struct hashmap_entry**) ((uint8_t*) h + ALIGN(sizeof(Hashmap))))
+ free(h->buckets);
+
if (h->from_pool)
deallocate_tile(&first_hashmap_tile, h);
else
@@ -353,36 +390,91 @@ void hashmap_clear_free_free(Hashmap *h) {
}
}
-
static struct hashmap_entry *hash_scan(Hashmap *h, unsigned hash, const void *key) {
struct hashmap_entry *e;
assert(h);
- assert(hash < NBUCKETS);
+ assert(hash < h->n_buckets);
- for (e = BY_HASH(h)[hash]; e; e = e->bucket_next)
+ for (e = h->buckets[hash]; e; e = e->bucket_next)
if (h->compare_func(e->key, key) == 0)
return e;
return NULL;
}
+static bool resize_buckets(Hashmap *h) {
+ struct hashmap_entry **n, *i;
+ unsigned m, nxor;
+
+ assert(h);
+
+ if (_likely_(h->n_entries*4 < h->n_buckets*3))
+ return false;
+
+ /* Increase by four */
+ m = (h->n_entries+1)*4-1;
+
+ /* If we hit OOM we simply risk packed hashmaps... */
+ n = new0(struct hashmap_entry*, m);
+ if (!n)
+ return false;
+
+ /* Let's use a different randomized xor value for the
+ * extension, so that people cannot guess what we are using
+ * here forever */
+ nxor = random_u();
+
+ for (i = h->iterate_list_head; i; i = i->iterate_next) {
+ unsigned hash, x;
+
+ hash = h->hash_func(i->key);
+
+ /* First, drop from old bucket table */
+ if (i->bucket_next)
+ i->bucket_next->bucket_previous = i->bucket_previous;
+
+ if (i->bucket_previous)
+ i->bucket_previous->bucket_next = i->bucket_next;
+ else
+ h->buckets[(hash ^ h->random_xor) % h->n_buckets] = i->bucket_next;
+
+ /* Then, add to new backet table */
+ x = (hash ^ nxor) % m;
+
+ i->bucket_next = n[x];
+ i->bucket_previous = NULL;
+ if (n[x])
+ n[x]->bucket_previous = i;
+ n[x] = i;
+ }
+
+ if (h->buckets != (struct hashmap_entry**) ((uint8_t*) h + ALIGN(sizeof(Hashmap))))
+ free(h->buckets);
+
+ h->buckets = n;
+ h->n_buckets = m;
+ h->random_xor = nxor;
+
+ return true;
+}
+
int hashmap_put(Hashmap *h, const void *key, void *value) {
struct hashmap_entry *e;
unsigned hash;
assert(h);
- hash = h->hash_func(key) % NBUCKETS;
-
+ hash = bucket_hash(h, key);
e = hash_scan(h, hash, key);
if (e) {
-
if (e->value == value)
return 0;
-
return -EEXIST;
}
+ if (resize_buckets(h))
+ hash = bucket_hash(h, key);
+
if (h->from_pool)
e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry));
else
@@ -405,7 +497,7 @@ int hashmap_replace(Hashmap *h, const void *key, void *value) {
assert(h);
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
e = hash_scan(h, hash, key);
if (e) {
e->key = key;
@@ -422,7 +514,7 @@ int hashmap_update(Hashmap *h, const void *key, void *value) {
assert(h);
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
e = hash_scan(h, hash, key);
if (!e)
return -ENOENT;
@@ -438,7 +530,7 @@ void* hashmap_get(Hashmap *h, const void *key) {
if (!h)
return NULL;
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
e = hash_scan(h, hash, key);
if (!e)
return NULL;
@@ -453,7 +545,7 @@ void* hashmap_get2(Hashmap *h, const void *key, void **key2) {
if (!h)
return NULL;
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
e = hash_scan(h, hash, key);
if (!e)
return NULL;
@@ -470,12 +562,8 @@ bool hashmap_contains(Hashmap *h, const void *key) {
if (!h)
return false;
- hash = h->hash_func(key) % NBUCKETS;
-
- if (!hash_scan(h, hash, key))
- return false;
-
- return true;
+ hash = bucket_hash(h, key);
+ return !!hash_scan(h, hash, key);
}
void* hashmap_remove(Hashmap *h, const void *key) {
@@ -486,9 +574,9 @@ void* hashmap_remove(Hashmap *h, const void *key) {
if (!h)
return NULL;
- hash = h->hash_func(key) % NBUCKETS;
-
- if (!(e = hash_scan(h, hash, key)))
+ hash = bucket_hash(h, key);
+ e = hash_scan(h, hash, key);
+ if (!e)
return NULL;
data = e->value;
@@ -504,11 +592,12 @@ int hashmap_remove_and_put(Hashmap *h, const void *old_key, const void *new_key,
if (!h)
return -ENOENT;
- old_hash = h->hash_func(old_key) % NBUCKETS;
- if (!(e = hash_scan(h, old_hash, old_key)))
+ old_hash = bucket_hash(h, old_key);
+ e = hash_scan(h, old_hash, old_key);
+ if (!e)
return -ENOENT;
- new_hash = h->hash_func(new_key) % NBUCKETS;
+ new_hash = bucket_hash(h, new_key);
if (hash_scan(h, new_hash, new_key))
return -EEXIST;
@@ -529,13 +618,14 @@ int hashmap_remove_and_replace(Hashmap *h, const void *old_key, const void *new_
if (!h)
return -ENOENT;
- old_hash = h->hash_func(old_key) % NBUCKETS;
- if (!(e = hash_scan(h, old_hash, old_key)))
+ old_hash = bucket_hash(h, old_key);
+ e = hash_scan(h, old_hash, old_key);
+ if (!e)
return -ENOENT;
- new_hash = h->hash_func(new_key) % NBUCKETS;
-
- if ((k = hash_scan(h, new_hash, new_key)))
+ new_hash = bucket_hash(h, new_key);
+ k = hash_scan(h, new_hash, new_key);
+ if (k)
if (e != k)
remove_entry(h, k);
@@ -556,9 +646,10 @@ void* hashmap_remove_value(Hashmap *h, const void *key, void *value) {
if (!h)
return NULL;
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
- if (!(e = hash_scan(h, hash, key)))
+ e = hash_scan(h, hash, key);
+ if (!e)
return NULL;
if (e->value != value)
@@ -646,9 +737,10 @@ void *hashmap_iterate_skip(Hashmap *h, const void *key, Iterator *i) {
if (!h)
return NULL;
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
- if (!(e = hash_scan(h, hash, key)))
+ e = hash_scan(h, hash, key);
+ if (!e)
return NULL;
*i = (Iterator) e;
@@ -727,6 +819,14 @@ unsigned hashmap_size(Hashmap *h) {
return h->n_entries;
}
+unsigned hashmap_buckets(Hashmap *h) {
+
+ if (!h)
+ return 0;
+
+ return h->n_buckets;
+}
+
bool hashmap_isempty(Hashmap *h) {
if (!h)
@@ -746,9 +846,9 @@ int hashmap_merge(Hashmap *h, Hashmap *other) {
for (e = other->iterate_list_head; e; e = e->iterate_next) {
int r;
- if ((r = hashmap_put(h, e->key, e->value)) < 0)
- if (r != -EEXIST)
- return r;
+ r = hashmap_put(h, e->key, e->value);
+ if (r < 0 && r != -EEXIST)
+ return r;
}
return 0;
@@ -770,13 +870,11 @@ void hashmap_move(Hashmap *h, Hashmap *other) {
n = e->iterate_next;
- h_hash = h->hash_func(e->key) % NBUCKETS;
-
+ h_hash = bucket_hash(h, e->key);
if (hash_scan(h, h_hash, e->key))
continue;
- other_hash = other->hash_func(e->key) % NBUCKETS;
-
+ other_hash = bucket_hash(other, e->key);
unlink_entry(other, e, other_hash);
link_entry(h, e, h_hash);
}
@@ -791,12 +889,13 @@ int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key) {
assert(h);
- h_hash = h->hash_func(key) % NBUCKETS;
+ h_hash = bucket_hash(h, key);
if (hash_scan(h, h_hash, key))
return -EEXIST;
- other_hash = other->hash_func(key) % NBUCKETS;
- if (!(e = hash_scan(other, other_hash, key)))
+ other_hash = bucket_hash(other, key);
+ e = hash_scan(other, other_hash, key);
+ if (!e)
return -ENOENT;
unlink_entry(other, e, other_hash);
@@ -810,7 +909,8 @@ Hashmap *hashmap_copy(Hashmap *h) {
assert(h);
- if (!(copy = hashmap_new(h->hash_func, h->compare_func)))
+ copy = hashmap_new(h->hash_func, h->compare_func);
+ if (!copy)
return NULL;
if (hashmap_merge(copy, h) < 0) {
@@ -849,7 +949,7 @@ void *hashmap_next(Hashmap *h, const void *key) {
if (!h)
return NULL;
- hash = h->hash_func(key) % NBUCKETS;
+ hash = bucket_hash(h, key);
e = hash_scan(h, hash, key);
if (!e)
return NULL;
diff --git a/src/shared/hashmap.h b/src/shared/hashmap.h
index 15b7e27585..3d4f6721bc 100644
--- a/src/shared/hashmap.h
+++ b/src/shared/hashmap.h
@@ -76,6 +76,7 @@ int hashmap_move_one(Hashmap *h, Hashmap *other, const void *key);
unsigned hashmap_size(Hashmap *h) _pure_;
bool hashmap_isempty(Hashmap *h) _pure_;
+unsigned hashmap_buckets(Hashmap *h) _pure_;
void *hashmap_iterate(Hashmap *h, Iterator *i, const void **key);
void *hashmap_iterate_backwards(Hashmap *h, Iterator *i, const void **key);
diff --git a/src/shared/hwclock.c b/src/shared/hwclock.c
index cc11faa6c3..17f12de51f 100644
--- a/src/shared/hwclock.c
+++ b/src/shared/hwclock.c
@@ -151,7 +151,7 @@ int hwclock_reset_timezone(void) {
/*
* The very first time we set the kernel's timezone, it will warp
* the clock. Do a dummy call here, so the time warping is sealed
- * and we set only the time zone with next call.
+ * and we set only the timezone with next call.
*/
if (settimeofday(tv_null, &tz) < 0)
return -errno;
diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c
index c44459b4e0..1ee1243f4d 100644
--- a/src/shared/install-printf.c
+++ b/src/shared/install-printf.c
@@ -27,21 +27,35 @@
#include "util.h"
#include "install-printf.h"
-static char *specifier_prefix_and_instance(char specifier, void *data, void *userdata) {
+static int specifier_prefix_and_instance(char specifier, void *data, void *userdata, char **ret) {
InstallInfo *i = userdata;
+ char *n;
+
assert(i);
- return unit_name_to_prefix_and_instance(i->name);
+ n = unit_name_to_prefix_and_instance(i->name);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-static char *specifier_prefix(char specifier, void *data, void *userdata) {
+static int specifier_prefix(char specifier, void *data, void *userdata, char **ret) {
InstallInfo *i = userdata;
+ char *n;
+
assert(i);
- return unit_name_to_prefix(i->name);
+ n = unit_name_to_prefix(i->name);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-static char *specifier_instance(char specifier, void *data, void *userdata) {
+static int specifier_instance(char specifier, void *data, void *userdata, char **ret) {
InstallInfo *i = userdata;
char *instance;
int r;
@@ -50,14 +64,19 @@ static char *specifier_instance(char specifier, void *data, void *userdata) {
r = unit_name_to_instance(i->name, &instance);
if (r < 0)
- return NULL;
- if (instance != NULL)
- return instance;
- else
- return strdup("");
+ return r;
+
+ if (!instance) {
+ instance = strdup("");
+ if (!instance)
+ return -ENOMEM;
+ }
+
+ *ret = instance;
+ return 0;
}
-static char *specifier_user_name(char specifier, void *data, void *userdata) {
+static int specifier_user_name(char specifier, void *data, void *userdata, char **ret) {
InstallInfo *i = userdata;
const char *username;
_cleanup_free_ char *tmp = NULL;
@@ -82,18 +101,20 @@ static char *specifier_user_name(char specifier, void *data, void *userdata) {
r = get_user_creds(&username, &uid, NULL, NULL, NULL);
if (r < 0)
- return NULL;
+ return r;
if (asprintf(&printed, "%d", uid) < 0)
- return NULL;
+ return -ENOMEM;
break;
}}
- return printed;
+
+ *ret = printed;
+ return 0;
}
-char *install_full_printf(InstallInfo *i, const char *format) {
+int install_full_printf(InstallInfo *i, const char *format, char **ret) {
/* This is similar to unit_full_printf() but does not support
* anything path-related.
@@ -108,6 +129,7 @@ char *install_full_printf(InstallInfo *i, const char *format) {
* %m the machine ID of the running system
* %H the host name of the running system
* %b the boot ID of the running system
+ * %v `uname -r` of the running system
*/
const Specifier table[] = {
@@ -122,11 +144,13 @@ char *install_full_printf(InstallInfo *i, const char *format) {
{ 'm', specifier_machine_id, NULL },
{ 'H', specifier_host_name, NULL },
{ 'b', specifier_boot_id, NULL },
- { 0, NULL, NULL }
+ { 'v', specifier_kernel_release, NULL },
+ {}
};
assert(i);
assert(format);
+ assert(ret);
- return specifier_printf(format, table, i);
+ return specifier_printf(format, table, i, ret);
}
diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h
index 46f5294d21..6ffa488b1b 100644
--- a/src/shared/install-printf.h
+++ b/src/shared/install-printf.h
@@ -22,4 +22,4 @@
#pragma once
#include "install.h"
-char *install_full_printf(InstallInfo *i, const char *format);
+int install_full_printf(InstallInfo *i, const char *format, char **ret);
diff --git a/src/shared/install.c b/src/shared/install.c
index edf4d2a9fe..9722ed4e1c 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -506,7 +506,7 @@ static int find_symlinks_in_scope(
UnitFileState *state) {
int r;
- _cleanup_free_ char *path = NULL;
+ _cleanup_free_ char *path2 = NULL;
bool same_name_link_runtime = false, same_name_link = false;
assert(scope >= 0);
@@ -514,6 +514,7 @@ static int find_symlinks_in_scope(
assert(name);
if (scope == UNIT_FILE_SYSTEM || scope == UNIT_FILE_GLOBAL) {
+ _cleanup_free_ char *path = NULL;
/* First look in runtime config path */
r = get_config_path(scope, true, root_dir, &path);
@@ -530,11 +531,11 @@ static int find_symlinks_in_scope(
}
/* Then look in the normal config path */
- r = get_config_path(scope, false, root_dir, &path);
+ r = get_config_path(scope, false, root_dir, &path2);
if (r < 0)
return r;
- r = find_symlinks(name, path, &same_name_link);
+ r = find_symlinks(name, path2, &same_name_link);
if (r < 0)
return r;
else if (r > 0) {
@@ -966,14 +967,15 @@ static int config_parse_user(const char *unit,
InstallInfo *i = data;
char* printed;
+ int r;
assert(filename);
assert(lvalue);
assert(rvalue);
- printed = install_full_printf(i, rvalue);
- if (!printed)
- return -ENOMEM;
+ r = install_full_printf(i, rvalue, &printed);
+ if (r < 0)
+ return r;
free(i->user);
i->user = printed;
@@ -1061,8 +1063,8 @@ static int unit_file_search(
info->path = path;
else {
if (r == -ENOENT && unit_name_is_instance(info->name)) {
- /* unit file doesn't exist, however instance enablement was request */
- /* we will check if it is possible to load template unit file */
+ /* Unit file doesn't exist, however instance enablement was requested.
+ * We will check if it is possible to load template unit file. */
char *template = NULL,
*template_path = NULL,
*template_dir = NULL;
@@ -1073,7 +1075,7 @@ static int unit_file_search(
return -ENOMEM;
}
- /* we will reuse path variable since we don't need it anymore */
+ /* We will reuse path variable since we don't need it anymore. */
template_dir = path;
*(strrchr(path, '/') + 1) = '\0';
@@ -1084,7 +1086,7 @@ static int unit_file_search(
return -ENOMEM;
}
- /* let's try to load template unit */
+ /* Let's try to load template unit. */
r = unit_file_load(c, info, template_path, allow_symlink);
if (r >= 0) {
info->path = strdup(template_path);
@@ -1199,9 +1201,9 @@ static int install_info_symlink_alias(
STRV_FOREACH(s, i->aliases) {
_cleanup_free_ char *alias_path = NULL, *dst = NULL;
- dst = install_full_printf(i, *s);
- if (!dst)
- return -ENOMEM;
+ q = install_full_printf(i, *s, &dst);
+ if (q < 0)
+ return q;
alias_path = path_make_absolute(dst, config_path);
if (!alias_path)
@@ -1231,9 +1233,9 @@ static int install_info_symlink_wants(
STRV_FOREACH(s, i->wanted_by) {
_cleanup_free_ char *path = NULL, *dst = NULL;
- dst = install_full_printf(i, *s);
- if (!dst)
- return -ENOMEM;
+ q = install_full_printf(i, *s, &dst);
+ if (q < 0)
+ return q;
if (!unit_name_is_valid(dst, true)) {
r = -EINVAL;
@@ -1268,9 +1270,9 @@ static int install_info_symlink_requires(
STRV_FOREACH(s, i->required_by) {
_cleanup_free_ char *path = NULL, *dst = NULL;
- dst = install_full_printf(i, *s);
- if (!dst)
- return -ENOMEM;
+ q = install_full_printf(i, *s, &dst);
+ if (q < 0)
+ return q;
if (!unit_name_is_valid(dst, true)) {
r = -EINVAL;
@@ -1413,7 +1415,9 @@ static int install_context_mark_for_removal(
assert_se(hashmap_move_one(c->have_installed, c->will_install, i->name) == 0);
q = unit_file_search(c, i, paths, root_dir, false);
- if (q < 0) {
+ if (q == -ENOENT) {
+ /* do nothing */
+ } else if (q < 0) {
if (r >= 0)
r = q;
@@ -1422,16 +1426,30 @@ static int install_context_mark_for_removal(
r += q;
if (unit_name_is_instance(i->name)) {
- char *unit_file = NULL;
+ char *unit_file;
+
+ if (i->path) {
+ unit_file = path_get_file_name(i->path);
+
+ if (unit_name_is_instance(unit_file))
+ /* unit file named as instance exists, thus all symlinks
+ * pointing to it will be removed */
+ q = mark_symlink_for_removal(remove_symlinks_to, i->name);
+ else
+ /* does not exist, thus we will mark for removal symlinks
+ * to template unit file */
+ q = mark_symlink_for_removal(remove_symlinks_to, unit_file);
+ } else {
+ /* If i->path is not set, it means that we didn't actually find
+ * the unit file. But we can still remove symlinks to the
+ * nonexistent template. */
+ unit_file = unit_name_template(i->name);
+ if (!unit_file)
+ return log_oom();
- unit_file = path_get_file_name(i->path);
-
- if (unit_name_is_instance(unit_file))
- /* unit file named as instance exists, thus all symlinks pointing to it, will be removed */
- q = mark_symlink_for_removal(remove_symlinks_to, i->name);
- else
- /* does not exist, thus we will mark for removal symlinks to template unit file */
q = mark_symlink_for_removal(remove_symlinks_to, unit_file);
+ free(unit_file);
+ }
} else
q = mark_symlink_for_removal(remove_symlinks_to, i->name);
@@ -1531,43 +1549,101 @@ int unit_file_reenable(
bool force,
UnitFileChange **changes,
unsigned *n_changes) {
+ int r;
+
+ r = unit_file_disable(scope, runtime, root_dir, files,
+ changes, n_changes);
+ if (r < 0)
+ return r;
+
+ return unit_file_enable(scope, runtime, root_dir, files, force,
+ changes, n_changes);
+}
+
+int unit_file_set_default(
+ UnitFileScope scope,
+ const char *root_dir,
+ char *file,
+ UnitFileChange **changes,
+ unsigned *n_changes) {
_cleanup_lookup_paths_free_ LookupPaths paths = {};
_cleanup_install_context_done_ InstallContext c = {};
- char **i;
_cleanup_free_ char *config_path = NULL;
- _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
- int r, q;
+ char *path;
+ int r;
+ InstallInfo *i = NULL;
assert(scope >= 0);
assert(scope < _UNIT_FILE_SCOPE_MAX);
+ if (unit_name_to_type(file) != UNIT_TARGET)
+ return -EINVAL;
+
r = lookup_paths_init_from_scope(&paths, scope);
if (r < 0)
return r;
- r = get_config_path(scope, runtime, root_dir, &config_path);
+ r = get_config_path(scope, false, root_dir, &config_path);
if (r < 0)
return r;
- STRV_FOREACH(i, files) {
- r = mark_symlink_for_removal(&remove_symlinks_to, *i);
- if (r < 0)
- return r;
+ r = install_info_add_auto(&c, file);
+ if (r < 0)
+ return r;
- r = install_info_add_auto(&c, *i);
- if (r < 0)
+ i = (InstallInfo*)hashmap_first(c.will_install);
+
+ r = unit_file_search(&c, i, &paths, root_dir, false);
+ if (r < 0)
+ return r;
+
+ path = strappenda(config_path, "/default.target");
+ r = create_symlink(i->path, path, true, changes, n_changes);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+int unit_file_get_default(
+ UnitFileScope scope,
+ const char *root_dir,
+ char **name) {
+
+ _cleanup_lookup_paths_free_ LookupPaths paths = {};
+ char **p;
+ int r;
+
+ r = lookup_paths_init_from_scope(&paths, scope);
+ if (r < 0)
+ return r;
+
+ STRV_FOREACH(p, paths.unit_path) {
+ _cleanup_free_ char *path = NULL, *tmp = NULL;
+
+ if (isempty(root_dir))
+ path = strappend(*p, "/default.target");
+ else
+ path = strjoin(root_dir, "/", *p, "/default.target", NULL);
+
+ if (!path)
+ return -ENOMEM;
+
+ r = readlink_malloc(path, &tmp);
+ if (r == -ENOENT)
+ continue;
+ else if (r < 0)
return r;
- }
- r = remove_marked_symlinks(remove_symlinks_to, config_path, changes, n_changes, files);
+ *name = strdup(path_get_file_name(tmp));
+ if (!*name)
+ return -ENOMEM;
- /* Returns number of symlinks that where supposed to be installed. */
- q = install_context_apply(&c, &paths, config_path, root_dir, force, changes, n_changes);
- if (r == 0)
- r = q;
+ return 0;
+ }
- return r;
+ return -ENOENT;
}
UnitFileState unit_file_get_state(
@@ -1609,24 +1685,29 @@ UnitFileState unit_file_get_state(
if (!path)
return -ENOMEM;
+ /*
+ * Search for a unit file in our default paths, to
+ * be sure, that there are no broken symlinks.
+ */
if (lstat(path, &st) < 0) {
r = -errno;
- if (errno == ENOENT)
- continue;
-
- return -errno;
- }
+ if (errno != ENOENT)
+ return r;
- if (!S_ISREG(st.st_mode) && !S_ISLNK(st.st_mode))
- return -ENOENT;
+ if (!unit_name_is_instance(name))
+ continue;
+ } else {
+ if (!S_ISREG(st.st_mode) && !S_ISLNK(st.st_mode))
+ return -ENOENT;
- r = null_or_empty_path(path);
- if (r < 0 && r != -ENOENT)
- return r;
- else if (r > 0) {
- state = path_startswith(*i, "/run") ?
- UNIT_FILE_MASKED_RUNTIME : UNIT_FILE_MASKED;
- return state;
+ r = null_or_empty_path(path);
+ if (r < 0 && r != -ENOENT)
+ return r;
+ else if (r > 0) {
+ state = path_startswith(*i, "/run") ?
+ UNIT_FILE_MASKED_RUNTIME : UNIT_FILE_MASKED;
+ return state;
+ }
}
r = find_symlinks_in_scope(scope, root_dir, name, &state);
diff --git a/src/shared/install.h b/src/shared/install.h
index 94516c9d05..5609d1e8df 100644
--- a/src/shared/install.h
+++ b/src/shared/install.h
@@ -80,6 +80,8 @@ int unit_file_link(UnitFileScope scope, bool runtime, const char *root_dir, char
int unit_file_preset(UnitFileScope scope, bool runtime, const char *root_dir, char *files[], bool force, UnitFileChange **changes, unsigned *n_changes);
int unit_file_mask(UnitFileScope scope, bool runtime, const char *root_dir, char *files[], bool force, UnitFileChange **changes, unsigned *n_changes);
int unit_file_unmask(UnitFileScope scope, bool runtime, const char *root_dir, char *files[], UnitFileChange **changes, unsigned *n_changes);
+int unit_file_set_default(UnitFileScope scope, const char *root_dir, char *file, UnitFileChange **changes, unsigned *n_changes);
+int unit_file_get_default(UnitFileScope scope, const char *root_dir, char **name);
UnitFileState unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename);
diff --git a/src/shared/label.c b/src/shared/label.c
index 1fe4574633..fde39f2259 100644
--- a/src/shared/label.c
+++ b/src/shared/label.c
@@ -257,14 +257,14 @@ void label_free(const char *label) {
#endif
}
-int label_mkdir(const char *path, mode_t mode, bool apply) {
+int label_mkdir(const char *path, mode_t mode) {
/* Creates a directory and labels it according to the SELinux policy */
#ifdef HAVE_SELINUX
int r;
security_context_t fcon = NULL;
- if (!apply || !use_selinux() || !label_hnd)
+ if (!use_selinux() || !label_hnd)
goto skipped;
if (path_is_absolute(path))
diff --git a/src/shared/label.h b/src/shared/label.h
index dda4d1c024..09e15e3c08 100644
--- a/src/shared/label.h
+++ b/src/shared/label.h
@@ -40,7 +40,7 @@ void label_free(const char *label);
int label_get_create_label_from_exe(const char *exe, char **label);
-int label_mkdir(const char *path, mode_t mode, bool apply);
+int label_mkdir(const char *path, mode_t mode);
void label_retest_selinux(void);
diff --git a/src/shared/list.h b/src/shared/list.h
index 47f275a019..476757460a 100644
--- a/src/shared/list.h
+++ b/src/shared/list.h
@@ -81,7 +81,7 @@
(head) = _item; \
} while (false)
-/* Find the head of the list */
+/* Find the tail of the list */
#define LIST_FIND_TAIL(t,name,item,tail) \
do { \
t *_item = (item); \
@@ -123,3 +123,10 @@
#define LIST_FOREACH_AFTER(name,i,p) \
for ((i) = (p)->name##_next; (i); (i) = (i)->name##_next)
+
+/* Loop starting from p->next until p->prev.
+ p can be adjusted meanwhile. */
+#define LIST_LOOP_BUT_ONE(name,i,head,p) \
+ for ((i) = (p)->name##_next ? (p)->name##_next : (head); \
+ (i) != (p); \
+ (i) = (i)->name##_next ? (i)->name##_next : (head))
diff --git a/src/shared/log.c b/src/shared/log.c
index 27317f7ed3..8f4995a0c8 100644
--- a/src/shared/log.c
+++ b/src/shared/log.c
@@ -115,16 +115,20 @@ void log_close_syslog(void) {
static int create_log_socket(int type) {
int fd;
+ struct timeval tv;
- /* All output to the syslog/journal fds we do asynchronously,
- * and if the buffers are full we just drop the messages */
-
- fd = socket(AF_UNIX, type|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
+ fd = socket(AF_UNIX, type|SOCK_CLOEXEC, 0);
if (fd < 0)
return -errno;
fd_inc_sndbuf(fd, SNDBUF_SIZE);
+ /* We need a blocking fd here since we'd otherwise lose
+ messages way too early. However, let's not hang forever in the
+ unlikely case of a deadlock. */
+ timeval_store(&tv, 1*USEC_PER_MINUTE);
+ setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
+
return fd;
}
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index 116dc8a36c..7bb19b4006 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -32,7 +32,11 @@
#include "hashmap.h"
#include "journal-internal.h"
-#define PRINT_THRESHOLD 128
+/* up to three lines (each up to 100 characters),
+ or 300 characters, whichever is less */
+#define PRINT_LINE_THRESHOLD 3
+#define PRINT_CHAR_THRESHOLD 300
+
#define JSON_THRESHOLD 4096
static int print_catalog(FILE *f, sd_journal *j) {
@@ -92,15 +96,91 @@ static bool shall_print(const char *p, size_t l, OutputFlags flags) {
if (flags & OUTPUT_SHOW_ALL)
return true;
- if (l >= PRINT_THRESHOLD)
+ if (l >= PRINT_CHAR_THRESHOLD)
return false;
- if (!utf8_is_printable_n(p, l))
+ if (!utf8_is_printable(p, l))
return false;
return true;
}
+static bool print_multiline(FILE *f, unsigned prefix, unsigned n_columns, OutputFlags flags, int priority, const char* message, size_t message_len) {
+ const char *color_on = "", *color_off = "";
+ const char *pos, *end;
+ bool ellipsized = false;
+ int line = 0;
+
+ if (flags & OUTPUT_COLOR) {
+ if (priority <= LOG_ERR) {
+ color_on = ANSI_HIGHLIGHT_RED_ON;
+ color_off = ANSI_HIGHLIGHT_OFF;
+ } else if (priority <= LOG_NOTICE) {
+ color_on = ANSI_HIGHLIGHT_ON;
+ color_off = ANSI_HIGHLIGHT_OFF;
+ }
+ }
+
+ for (pos = message;
+ pos < message + message_len;
+ pos = end + 1, line++) {
+ bool continuation = line > 0;
+ bool tail_line;
+ int len;
+ for (end = pos; end < message + message_len && *end != '\n'; end++)
+ ;
+ len = end - pos;
+ assert(len >= 0);
+
+ /* We need to figure out when we are showing not-last line, *and*
+ * will skip subsequent lines. In that case, we will put the dots
+ * at the end of the line, instead of putting dots in the middle
+ * or not at all.
+ */
+ tail_line =
+ line + 1 == PRINT_LINE_THRESHOLD ||
+ end + 1 >= message + PRINT_CHAR_THRESHOLD;
+
+ if (flags & (OUTPUT_FULL_WIDTH | OUTPUT_SHOW_ALL) ||
+ (prefix + len + 1 < n_columns && !tail_line)) {
+ fprintf(f, "%*s%s%.*s%s\n",
+ continuation * prefix, "",
+ color_on, len, pos, color_off);
+ continue;
+ }
+
+ /* Beyond this point, ellipsization will happen. */
+ ellipsized = true;
+
+ if (prefix < n_columns && n_columns - prefix >= 3) {
+ if (n_columns - prefix > (unsigned) len + 3)
+ fprintf(f, "%*s%s%.*s...%s\n",
+ continuation * prefix, "",
+ color_on, len, pos, color_off);
+ else {
+ _cleanup_free_ char *e;
+
+ e = ellipsize_mem(pos, len, n_columns - prefix,
+ tail_line ? 100 : 90);
+ if (!e)
+ fprintf(f, "%*s%s%.*s%s\n",
+ continuation * prefix, "",
+ color_on, len, pos, color_off);
+ else
+ fprintf(f, "%*s%s%s%s\n",
+ continuation * prefix, "",
+ color_on, e, color_off);
+ }
+ } else
+ fputs("...\n", f);
+
+ if (tail_line)
+ break;
+ }
+
+ return ellipsized;
+}
+
static int output_short(
FILE *f,
sd_journal *j,
@@ -115,14 +195,20 @@ static int output_short(
_cleanup_free_ char *hostname = NULL, *identifier = NULL, *comm = NULL, *pid = NULL, *fake_pid = NULL, *message = NULL, *realtime = NULL, *monotonic = NULL, *priority = NULL;
size_t hostname_len = 0, identifier_len = 0, comm_len = 0, pid_len = 0, fake_pid_len = 0, message_len = 0, realtime_len = 0, monotonic_len = 0, priority_len = 0;
int p = LOG_INFO;
- const char *color_on = "", *color_off = "";
+ bool ellipsized = false;
assert(f);
assert(j);
- sd_journal_set_data_threshold(j, flags & OUTPUT_SHOW_ALL ? 0 : PRINT_THRESHOLD);
+ /* Set the threshold to one bigger than the actual print
+ * threshold, so that if the line is actually longer than what
+ * we're willing to print, ellipsization will occur. This way
+ * we won't output a misleading line without any indication of
+ * truncation.
+ */
+ sd_journal_set_data_threshold(j, flags & (OUTPUT_SHOW_ALL|OUTPUT_FULL_WIDTH) ? 0 : PRINT_CHAR_THRESHOLD + 1);
- SD_JOURNAL_FOREACH_DATA(j, data, length) {
+ JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
r = parse_field(data, length, "PRIORITY=", &priority, &priority_len);
if (r < 0)
@@ -177,6 +263,9 @@ static int output_short(
return r;
}
+ if (r < 0)
+ return r;
+
if (!message)
return 0;
@@ -199,7 +288,7 @@ static int output_short(
r = sd_journal_get_monotonic_usec(j, &t, &boot_id);
if (r < 0) {
- log_error("Failed to get monotonic: %s", strerror(-r));
+ log_error("Failed to get monotonic timestamp: %s", strerror(-r));
return r;
}
@@ -224,14 +313,30 @@ static int output_short(
r = sd_journal_get_realtime_usec(j, &x);
if (r < 0) {
- log_error("Failed to get realtime: %s", strerror(-r));
+ log_error("Failed to get realtime timestamp: %s", strerror(-r));
return r;
}
t = (time_t) (x / USEC_PER_SEC);
- if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm)) <= 0) {
+
+ switch(mode) {
+ case OUTPUT_SHORT_ISO:
+ r = strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", localtime_r(&t, &tm));
+ break;
+ case OUTPUT_SHORT_PRECISE:
+ r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm));
+ if (r > 0) {
+ snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
+ ".%06llu", x % USEC_PER_SEC);
+ }
+ break;
+ default:
+ r = strftime(buf, sizeof(buf), "%b %d %H:%M:%S", localtime_r(&t, &tm));
+ }
+
+ if (r <= 0) {
log_error("Failed to format time.");
- return r;
+ return -EINVAL;
}
fputs(buf, f);
@@ -260,39 +365,19 @@ static int output_short(
n += fake_pid_len + 2;
}
- if (flags & OUTPUT_COLOR) {
- if (p <= LOG_ERR) {
- color_on = ANSI_HIGHLIGHT_RED_ON;
- color_off = ANSI_HIGHLIGHT_OFF;
- } else if (p <= LOG_NOTICE) {
- color_on = ANSI_HIGHLIGHT_ON;
- color_off = ANSI_HIGHLIGHT_OFF;
- }
- }
-
- if (flags & OUTPUT_SHOW_ALL)
- fprintf(f, ": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
- else if (!utf8_is_printable_n(message, message_len)) {
+ if (!(flags & OUTPUT_SHOW_ALL) && !utf8_is_printable(message, message_len)) {
char bytes[FORMAT_BYTES_MAX];
fprintf(f, ": [%s blob data]\n", format_bytes(bytes, sizeof(bytes), message_len));
- } else if ((flags & OUTPUT_FULL_WIDTH) || (message_len + n + 1 < n_columns))
- fprintf(f, ": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
- else if (n < n_columns && n_columns - n - 2 >= 3) {
- _cleanup_free_ char *e;
-
- e = ellipsize_mem(message, message_len, n_columns - n - 2, 90);
-
- if (!e)
- fprintf(f, ": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
- else
- fprintf(f, ": %s%s%s\n", color_on, e, color_off);
- } else
- fputs("\n", f);
+ } else {
+ fputs(": ", f);
+ ellipsized |=
+ print_multiline(f, n + 2, n_columns, flags, p, message, message_len);
+ }
if (flags & OUTPUT_CATALOG)
print_catalog(f, j);
- return 0;
+ return ellipsized;
}
static int output_verbose(
@@ -306,7 +391,7 @@ static int output_verbose(
size_t length;
_cleanup_free_ char *cursor = NULL;
uint64_t realtime;
- char ts[FORMAT_TIMESTAMP_MAX];
+ char ts[FORMAT_TIMESTAMP_MAX + 7];
int r;
assert(f);
@@ -314,10 +399,35 @@ static int output_verbose(
sd_journal_set_data_threshold(j, 0);
- r = sd_journal_get_realtime_usec(j, &realtime);
- if (r < 0) {
- log_error("Failed to get realtime timestamp: %s", strerror(-r));
+ r = sd_journal_get_data(j, "_SOURCE_REALTIME_TIMESTAMP", &data, &length);
+ if (r == -ENOENT)
+ log_debug("Source realtime timestamp not found");
+ else if (r < 0) {
+ log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR,
+ "Failed to get source realtime timestamp: %s", strerror(-r));
return r;
+ } else {
+ _cleanup_free_ char *value = NULL;
+ size_t size;
+
+ r = parse_field(data, length, "_SOURCE_REALTIME_TIMESTAMP=", &value, &size);
+ if (r < 0)
+ log_debug("_SOURCE_REALTIME_TIMESTAMP invalid: %s", strerror(-r));
+ else {
+ r = safe_atou64(value, &realtime);
+ if (r < 0)
+ log_debug("Failed to parse realtime timestamp: %s",
+ strerror(-r));
+ }
+ }
+
+ if (r < 0) {
+ r = sd_journal_get_realtime_usec(j, &realtime);
+ if (r < 0) {
+ log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR,
+ "Failed to get realtime timestamp: %s", strerror(-r));
+ return r;
+ }
}
r = sd_journal_get_cursor(j, &cursor);
@@ -327,28 +437,47 @@ static int output_verbose(
}
fprintf(f, "%s [%s]\n",
- format_timestamp(ts, sizeof(ts), realtime),
+ format_timestamp_us(ts, sizeof(ts), realtime),
cursor);
- SD_JOURNAL_FOREACH_DATA(j, data, length) {
- if (!shall_print(data, length, flags)) {
- const char *c;
- char bytes[FORMAT_BYTES_MAX];
+ JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
+ const char *c;
+ int fieldlen;
+ const char *on = "", *off = "";
- c = memchr(data, '=', length);
- if (!c) {
- log_error("Invalid field.");
- return -EINVAL;
- }
+ c = memchr(data, '=', length);
+ if (!c) {
+ log_error("Invalid field.");
+ return -EINVAL;
+ }
+ fieldlen = c - (const char*) data;
- fprintf(f, "\t%.*s=[%s blob data]\n",
- (int) (c - (const char*) data),
- (const char*) data,
- format_bytes(bytes, sizeof(bytes), length - (c - (const char *) data) - 1));
- } else
- fprintf(f, "\t%.*s\n", (int) length, (const char*) data);
+ if (flags & OUTPUT_COLOR && startswith(data, "MESSAGE=")) {
+ on = ANSI_HIGHLIGHT_ON;
+ off = ANSI_HIGHLIGHT_OFF;
+ }
+
+ if (flags & OUTPUT_SHOW_ALL ||
+ (((length < PRINT_CHAR_THRESHOLD) || flags & OUTPUT_FULL_WIDTH)
+ && utf8_is_printable(data, length))) {
+ fprintf(f, " %s%.*s=", on, fieldlen, (const char*)data);
+ print_multiline(f, 4 + fieldlen + 1, 0, OUTPUT_FULL_WIDTH, 0, c + 1, length - fieldlen - 1);
+ fputs(off, f);
+ } else {
+ char bytes[FORMAT_BYTES_MAX];
+
+ fprintf(f, " %s%.*s=[%s blob data]%s\n",
+ on,
+ (int) (c - (const char*) data),
+ (const char*) data,
+ format_bytes(bytes, sizeof(bytes), length - (c - (const char *) data) - 1),
+ off);
+ }
}
+ if (r < 0)
+ return r;
+
if (flags & OUTPUT_CATALOG)
print_catalog(f, j);
@@ -402,15 +531,15 @@ static int output_export(
(unsigned long long) monotonic,
sd_id128_to_string(boot_id, sid));
- SD_JOURNAL_FOREACH_DATA(j, data, length) {
+ JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
/* We already printed the boot id, from the data in
* the header, hence let's suppress it here */
if (length >= 9 &&
- memcmp(data, "_BOOT_ID=", 9) == 0)
+ startswith(data, "_BOOT_ID="))
continue;
- if (!utf8_is_printable_n(data, length)) {
+ if (!utf8_is_printable(data, length)) {
const char *c;
uint64_t le64;
@@ -431,6 +560,9 @@ static int output_export(
fputc('\n', f);
}
+ if (r < 0)
+ return r;
+
fputc('\n', f);
return 0;
@@ -449,7 +581,7 @@ void json_escape(
fputs("null", f);
- else if (!utf8_is_printable_n(p, l)) {
+ else if (!utf8_is_printable(p, l)) {
bool not_first = false;
fputs("[ ", f);
@@ -474,7 +606,9 @@ void json_escape(
if (*p == '"' || *p == '\\') {
fputc('\\', f);
fputc(*p, f);
- } else if (*p < ' ')
+ } else if (*p == '\n')
+ fputs("\\n", f);
+ else if (*p < ' ')
fprintf(f, "\\u%04x", *p);
else
fputc(*p, f);
@@ -557,7 +691,7 @@ static int output_json(
return -ENOMEM;
/* First round, iterate through the entry and count how often each field appears */
- SD_JOURNAL_FOREACH_DATA(j, data, length) {
+ JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) {
const char *eq;
char *n;
unsigned u;
@@ -591,6 +725,9 @@ static int output_json(
}
}
+ if (r < 0)
+ return r;
+
separator = true;
do {
done = true;
@@ -747,6 +884,8 @@ static int (*output_funcs[_OUTPUT_MODE_MAX])(
OutputFlags flags) = {
[OUTPUT_SHORT] = output_short,
+ [OUTPUT_SHORT_ISO] = output_short,
+ [OUTPUT_SHORT_PRECISE] = output_short,
[OUTPUT_SHORT_MONOTONIC] = output_short,
[OUTPUT_VERBOSE] = output_verbose,
[OUTPUT_EXPORT] = output_export,
@@ -761,7 +900,8 @@ int output_journal(
sd_journal *j,
OutputMode mode,
unsigned n_columns,
- OutputFlags flags) {
+ OutputFlags flags,
+ bool *ellipsized) {
int ret;
assert(mode >= 0);
@@ -772,6 +912,10 @@ int output_journal(
ret = output_funcs[mode](f, j, mode, n_columns, flags);
fflush(stdout);
+
+ if (ellipsized && ret > 0)
+ *ellipsized = true;
+
return ret;
}
@@ -781,7 +925,8 @@ static int show_journal(FILE *f,
unsigned n_columns,
usec_t not_before,
unsigned how_many,
- OutputFlags flags) {
+ OutputFlags flags,
+ bool *ellipsized) {
int r;
unsigned line = 0;
@@ -832,7 +977,7 @@ static int show_journal(FILE *f,
line ++;
- r = output_journal(f, j, mode, n_columns, flags);
+ r = output_journal(f, j, mode, n_columns, flags, ellipsized);
if (r < 0)
goto finish;
}
@@ -872,15 +1017,15 @@ finish:
int add_matches_for_unit(sd_journal *j, const char *unit) {
int r;
- _cleanup_free_ char *m1 = NULL, *m2 = NULL, *m3 = NULL;
+ char *m1, *m2, *m3, *m4;
assert(j);
assert(unit);
- if (asprintf(&m1, "_SYSTEMD_UNIT=%s", unit) < 0 ||
- asprintf(&m2, "COREDUMP_UNIT=%s", unit) < 0 ||
- asprintf(&m3, "UNIT=%s", unit) < 0)
- return -ENOMEM;
+ m1 = strappenda("_SYSTEMD_UNIT=", unit);
+ m2 = strappenda("COREDUMP_UNIT=", unit);
+ m3 = strappenda("UNIT=", unit);
+ m4 = strappenda("OBJECT_SYSTEMD_UNIT=", unit);
(void)(
/* Look for messages from the service itself */
@@ -888,49 +1033,112 @@ int add_matches_for_unit(sd_journal *j, const char *unit) {
/* Look for coredumps of the service */
(r = sd_journal_add_disjunction(j)) ||
- (r = sd_journal_add_match(j,
- "MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1", 0)) ||
+ (r = sd_journal_add_match(j, "MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1", 0)) ||
+ (r = sd_journal_add_match(j, "_UID=0", 0)) ||
(r = sd_journal_add_match(j, m2, 0)) ||
/* Look for messages from PID 1 about this service */
(r = sd_journal_add_disjunction(j)) ||
(r = sd_journal_add_match(j, "_PID=1", 0)) ||
- (r = sd_journal_add_match(j, m3, 0))
+ (r = sd_journal_add_match(j, m3, 0)) ||
+
+ /* Look for messages from authorized daemons about this service */
+ (r = sd_journal_add_disjunction(j)) ||
+ (r = sd_journal_add_match(j, "_UID=0", 0)) ||
+ (r = sd_journal_add_match(j, m4, 0))
);
+
+ if (r == 0 && endswith(unit, ".slice")) {
+ char *m5 = strappend("_SYSTEMD_SLICE=", unit);
+
+ /* Show all messages belonging to a slice */
+ (void)(
+ (r = sd_journal_add_disjunction(j)) ||
+ (r = sd_journal_add_match(j, m5, 0))
+ );
+ }
+
return r;
}
int add_matches_for_user_unit(sd_journal *j, const char *unit, uid_t uid) {
int r;
- _cleanup_free_ char *m1 = NULL, *m2 = NULL, *m3 = NULL, *m4 = NULL;
+ char *m1, *m2, *m3, *m4;
+ char muid[sizeof("_UID=") + DECIMAL_STR_MAX(uid_t)];
assert(j);
assert(unit);
- if (asprintf(&m1, "_SYSTEMD_USER_UNIT=%s", unit) < 0 ||
- asprintf(&m2, "USER_UNIT=%s", unit) < 0 ||
- asprintf(&m3, "COREDUMP_USER_UNIT=%s", unit) < 0 ||
- asprintf(&m4, "_UID=%d", uid) < 0)
- return -ENOMEM;
+ m1 = strappenda("_SYSTEMD_USER_UNIT=", unit);
+ m2 = strappenda("USER_UNIT=", unit);
+ m3 = strappenda("COREDUMP_USER_UNIT=", unit);
+ m4 = strappenda("OBJECT_SYSTEMD_USER_UNIT=", unit);
+ sprintf(muid, "_UID=%lu", (unsigned long) uid);
(void) (
/* Look for messages from the user service itself */
(r = sd_journal_add_match(j, m1, 0)) ||
- (r = sd_journal_add_match(j, m4, 0)) ||
+ (r = sd_journal_add_match(j, muid, 0)) ||
/* Look for messages from systemd about this service */
(r = sd_journal_add_disjunction(j)) ||
(r = sd_journal_add_match(j, m2, 0)) ||
- (r = sd_journal_add_match(j, m4, 0)) ||
+ (r = sd_journal_add_match(j, muid, 0)) ||
/* Look for coredumps of the service */
(r = sd_journal_add_disjunction(j)) ||
(r = sd_journal_add_match(j, m3, 0)) ||
- (r = sd_journal_add_match(j, m4, 0))
+ (r = sd_journal_add_match(j, muid, 0)) ||
+ (r = sd_journal_add_match(j, "_UID=0", 0)) ||
+
+ /* Look for messages from authorized daemons about this service */
+ (r = sd_journal_add_disjunction(j)) ||
+ (r = sd_journal_add_match(j, m4, 0)) ||
+ (r = sd_journal_add_match(j, muid, 0)) ||
+ (r = sd_journal_add_match(j, "_UID=0", 0))
);
+
+ if (r == 0 && endswith(unit, ".slice")) {
+ char *m5 = strappend("_SYSTEMD_SLICE=", unit);
+
+ /* Show all messages belonging to a slice */
+ (void)(
+ (r = sd_journal_add_disjunction(j)) ||
+ (r = sd_journal_add_match(j, m5, 0)) ||
+ (r = sd_journal_add_match(j, muid, 0))
+ );
+ }
+
return r;
}
+int add_match_this_boot(sd_journal *j) {
+ char match[9+32+1] = "_BOOT_ID=";
+ sd_id128_t boot_id;
+ int r;
+
+ assert(j);
+
+ r = sd_id128_get_boot(&boot_id);
+ if (r < 0) {
+ log_error("Failed to get boot id: %s", strerror(-r));
+ return r;
+ }
+
+ sd_id128_to_string(boot_id, match + 9);
+ r = sd_journal_add_match(j, match, strlen(match));
+ if (r < 0) {
+ log_error("Failed to add match: %s", strerror(-r));
+ return r;
+ }
+
+ r = sd_journal_add_conjunction(j);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
int show_journal_by_unit(
FILE *f,
const char *unit,
@@ -940,11 +1148,12 @@ int show_journal_by_unit(
unsigned how_many,
uid_t uid,
OutputFlags flags,
- bool system) {
+ bool system,
+ bool *ellipsized) {
_cleanup_journal_close_ sd_journal*j = NULL;
int r;
- int jflags = SD_JOURNAL_LOCAL_ONLY | system * SD_JOURNAL_SYSTEM_ONLY;
+ int jflags = SD_JOURNAL_LOCAL_ONLY | system * SD_JOURNAL_SYSTEM;
assert(mode >= 0);
assert(mode < _OUTPUT_MODE_MAX);
@@ -957,6 +1166,10 @@ int show_journal_by_unit(
if (r < 0)
return r;
+ r = add_match_this_boot(j);
+ if (r < 0)
+ return r;
+
if (system)
r = add_matches_for_unit(j, unit);
else
@@ -964,15 +1177,20 @@ int show_journal_by_unit(
if (r < 0)
return r;
- r = show_journal(f, j, mode, n_columns, not_before, how_many, flags);
- if (r < 0)
- return r;
+ if (_unlikely_(log_get_max_level() >= LOG_PRI(LOG_DEBUG))) {
+ _cleanup_free_ char *filter;
- return 0;
+ filter = journal_make_match_string(j);
+ log_debug("Journal filter: %s", filter);
+ }
+
+ return show_journal(f, j, mode, n_columns, not_before, how_many, flags, ellipsized);
}
static const char *const output_mode_table[_OUTPUT_MODE_MAX] = {
[OUTPUT_SHORT] = "short",
+ [OUTPUT_SHORT_ISO] = "short-iso",
+ [OUTPUT_SHORT_PRECISE] = "short-precise",
[OUTPUT_SHORT_MONOTONIC] = "short-monotonic",
[OUTPUT_VERBOSE] = "verbose",
[OUTPUT_EXPORT] = "export",
diff --git a/src/shared/logs-show.h b/src/shared/logs-show.h
index b0f93a661a..11b3b59b7b 100644
--- a/src/shared/logs-show.h
+++ b/src/shared/logs-show.h
@@ -35,7 +35,10 @@ int output_journal(
sd_journal *j,
OutputMode mode,
unsigned n_columns,
- OutputFlags flags);
+ OutputFlags flags,
+ bool *ellipsized);
+
+int add_match_this_boot(sd_journal *j);
int add_matches_for_unit(
sd_journal *j,
@@ -55,7 +58,8 @@ int show_journal_by_unit(
unsigned how_many,
uid_t uid,
OutputFlags flags,
- bool system);
+ bool system,
+ bool *ellipsized);
void json_escape(
FILE *f,
diff --git a/src/shared/macro.h b/src/shared/macro.h
index 0874102ece..d4f92b60ec 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -159,23 +159,25 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
} while (false)
#endif
+#define PTR_TO_INT(p) ((int) ((intptr_t) (p)))
+#define INT_TO_PTR(u) ((void *) ((intptr_t) (u)))
#define PTR_TO_UINT(p) ((unsigned int) ((uintptr_t) (p)))
-#define UINT_TO_PTR(u) ((void*) ((uintptr_t) (u)))
-
-#define PTR_TO_UINT32(p) ((uint32_t) ((uintptr_t) (p)))
-#define UINT32_TO_PTR(u) ((void*) ((uintptr_t) (u)))
+#define UINT_TO_PTR(u) ((void *) ((uintptr_t) (u)))
+#define PTR_TO_LONG(p) ((long) ((intptr_t) (p)))
+#define LONG_TO_PTR(u) ((void *) ((intptr_t) (u)))
#define PTR_TO_ULONG(p) ((unsigned long) ((uintptr_t) (p)))
-#define ULONG_TO_PTR(u) ((void*) ((uintptr_t) (u)))
+#define ULONG_TO_PTR(u) ((void *) ((uintptr_t) (u)))
-#define PTR_TO_INT(p) ((int) ((intptr_t) (p)))
-#define INT_TO_PTR(u) ((void*) ((intptr_t) (u)))
-
-#define TO_INT32(p) ((int32_t) ((intptr_t) (p)))
-#define INT32_TO_PTR(u) ((void*) ((intptr_t) (u)))
+#define PTR_TO_INT32(p) ((int32_t) ((intptr_t) (p)))
+#define INT32_TO_PTR(u) ((void *) ((intptr_t) (u)))
+#define PTR_TO_UINT32(p) ((uint32_t) ((uintptr_t) (p)))
+#define UINT32_TO_PTR(u) ((void *) ((uintptr_t) (u)))
-#define PTR_TO_LONG(p) ((long) ((intptr_t) (p)))
-#define LONG_TO_PTR(u) ((void*) ((intptr_t) (u)))
+#define PTR_TO_INT64(p) ((int64_t) ((intptr_t) (p)))
+#define INT64_TO_PTR(u) ((void *) ((intptr_t) (u)))
+#define PTR_TO_UINT64(p) ((uint64_t) ((uintptr_t) (p)))
+#define UINT64_TO_PTR(u) ((void *) ((uintptr_t) (u)))
#define memzero(x,l) (memset((x), 0, (l)))
#define zero(x) (memzero(&(x), sizeof(x)))
@@ -269,7 +271,7 @@ do { \
* the const magic to the type, otherwise the compiler warns about
* signed/unsigned comparison, because the magic can be 32 bit unsigned.
*/
-#define F_TYPE_CMP(a, b) (a == (typeof(a)) b)
+#define F_TYPE_EQUAL(a, b) (a == (typeof(a)) b)
/* Returns the number of chars needed to format variables of the
@@ -282,4 +284,7 @@ do { \
sizeof(type) <= 4 ? 10 : \
sizeof(type) <= 8 ? 20 : sizeof(int[-2*(sizeof(type) > 8)])))
+#define SET_FLAG(v, flag, b) \
+ (v) = (b) ? ((v) | (flag)) : ((v) & ~(flag))
+
#include "log.h"
diff --git a/src/shared/missing.h b/src/shared/missing.h
index d4ba0d3dcf..6c038d9f08 100644
--- a/src/shared/missing.h
+++ b/src/shared/missing.h
@@ -29,6 +29,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <linux/oom.h>
+#include <linux/input.h>
#ifdef HAVE_AUDIT
#include <libaudit.h>
@@ -138,7 +139,8 @@ static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags)
#ifndef HAVE_FANOTIFY_MARK
static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
int dfd, const char *pathname) {
-#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__
+#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__ \
+ || defined __arm__ && !defined __aarch64__
union {
uint64_t _64;
uint32_t _32[2];
@@ -161,15 +163,55 @@ static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t ma
#define BTRFS_PATH_NAME_MAX 4087
#endif
+#ifndef BTRFS_DEVICE_PATH_NAME_MAX
+#define BTRFS_DEVICE_PATH_NAME_MAX 1024
+#endif
+
+#ifndef BTRFS_FSID_SIZE
+#define BTRFS_FSID_SIZE 16
+#endif
+
+#ifndef BTRFS_UUID_SIZE
+#define BTRFS_UUID_SIZE 16
+#endif
+
+#ifndef HAVE_LINUX_BTRFS_H
struct btrfs_ioctl_vol_args {
int64_t fd;
char name[BTRFS_PATH_NAME_MAX + 1];
};
+struct btrfs_ioctl_dev_info_args {
+ uint64_t devid; /* in/out */
+ uint8_t uuid[BTRFS_UUID_SIZE]; /* in/out */
+ uint64_t bytes_used; /* out */
+ uint64_t total_bytes; /* out */
+ uint64_t unused[379]; /* pad to 4k */
+ char path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
+};
+
+struct btrfs_ioctl_fs_info_args {
+ uint64_t max_id; /* out */
+ uint64_t num_devices; /* out */
+ uint8_t fsid[BTRFS_FSID_SIZE]; /* out */
+ uint64_t reserved[124]; /* pad to 1k */
+};
+#endif
+
#ifndef BTRFS_IOC_DEFRAG
#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, struct btrfs_ioctl_vol_args)
#endif
+#ifndef BTRFS_IOC_DEV_INFO
+#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
+ struct btrfs_ioctl_dev_info_args)
+#endif
+
+#ifndef BTRFS_IOC_FS_INFO
+#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
+ struct btrfs_ioctl_fs_info_args)
+#endif
+
#ifndef BTRFS_SUPER_MAGIC
#define BTRFS_SUPER_MAGIC 0x9123683E
#endif
@@ -265,3 +307,19 @@ static inline int name_to_handle_at(int fd, const char *name, struct file_handle
#ifndef TFD_TIMER_CANCEL_ON_SET
#define TFD_TIMER_CANCEL_ON_SET (1 << 1)
#endif
+
+#ifndef SO_REUSEPORT
+#define SO_REUSEPORT 15
+#endif
+
+#ifndef EVIOCREVOKE
+#define EVIOCREVOKE _IOW('E', 0x91, int)
+#endif
+
+#ifndef DRM_IOCTL_SET_MASTER
+#define DRM_IOCTL_SET_MASTER _IO('d', 0x1e)
+#endif
+
+#ifndef DRM_IOCTL_DROP_MASTER
+#define DRM_IOCTL_DROP_MASTER _IO('d', 0x1f)
+#endif
diff --git a/src/shared/mkdir-label.c b/src/shared/mkdir-label.c
new file mode 100644
index 0000000000..4ee6251bcd
--- /dev/null
+++ b/src/shared/mkdir-label.c
@@ -0,0 +1,53 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+ Copyright 2013 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "label.h"
+#include "util.h"
+#include "path-util.h"
+#include "mkdir.h"
+
+int mkdir_label(const char *path, mode_t mode) {
+ return label_mkdir(path, mode);
+}
+
+int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid) {
+ return mkdir_safe_internal(path, mode, uid, gid, label_mkdir);
+}
+
+int mkdir_parents_label(const char *path, mode_t mode) {
+ return mkdir_parents_internal(NULL, path, mode, label_mkdir);
+}
+
+int mkdir_parents_prefix_label(const char *prefix, const char *path, mode_t mode) {
+ return mkdir_parents_internal(prefix, path, mode, label_mkdir);
+}
+
+int mkdir_p_label(const char *path, mode_t mode) {
+ return mkdir_p_internal(NULL, path, mode, label_mkdir);
+}
diff --git a/src/shared/mkdir.c b/src/shared/mkdir.c
index 0e51b64f69..b7e5c6e67b 100644
--- a/src/shared/mkdir.c
+++ b/src/shared/mkdir.c
@@ -26,18 +26,15 @@
#include <stdlib.h>
#include <stdio.h>
-#include "mkdir.h"
#include "label.h"
#include "util.h"
+#include "path-util.h"
+#include "mkdir.h"
-int mkdir_label(const char *path, mode_t mode) {
- return label_mkdir(path, mode, true);
-}
-
-static int makedir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, bool apply) {
+int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, mkdir_func_t _mkdir) {
struct stat st;
- if (label_mkdir(path, mode, apply) >= 0)
+ if (_mkdir(path, mode) >= 0)
if (chmod_and_chown(path, mode, uid, gid) < 0)
return -errno;
@@ -56,36 +53,46 @@ static int makedir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid, boo
}
int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid) {
- return makedir_safe(path, mode, uid, gid, false);
+ return mkdir_safe_internal(path, mode, uid, gid, false);
}
-int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid) {
- return makedir_safe(path, mode, uid, gid, true);
+static int is_dir(const char* path) {
+ struct stat st;
+
+ if (stat(path, &st) < 0)
+ return -errno;
+
+ return S_ISDIR(st.st_mode);
}
-static int makedir_parents(const char *path, mode_t mode, bool apply) {
- struct stat st;
+int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, mkdir_func_t _mkdir) {
const char *p, *e;
+ int r;
assert(path);
+ if (prefix && !path_startswith(path, prefix))
+ return -ENOTDIR;
+
/* return immediately if directory exists */
e = strrchr(path, '/');
if (!e)
return -EINVAL;
+
+ if (e == path)
+ return 0;
+
p = strndupa(path, e - path);
- if (stat(p, &st) >= 0) {
- if ((st.st_mode & S_IFMT) == S_IFDIR)
- return 0;
- else
- return -ENOTDIR;
- }
+ r = is_dir(p);
+ if (r > 0)
+ return 0;
+ if (r == 0)
+ return -ENOTDIR;
/* create every parent directory in the path, except the last component */
p = path + strspn(path, "/");
for (;;) {
- int r;
- char *t;
+ char t[strlen(path) + 1];
e = p + strcspn(p, "/");
p = e + strspn(e, "/");
@@ -95,43 +102,32 @@ static int makedir_parents(const char *path, mode_t mode, bool apply) {
if (*p == 0)
return 0;
- t = strndup(path, e - path);
- if (!t)
- return -ENOMEM;
+ memcpy(t, path, e - path);
+ t[e-path] = 0;
- r = label_mkdir(t, mode, apply);
- free(t);
+ if (prefix && path_startswith(prefix, t))
+ continue;
+ r = _mkdir(t, mode);
if (r < 0 && errno != EEXIST)
return -errno;
}
}
int mkdir_parents(const char *path, mode_t mode) {
- return makedir_parents(path, mode, false);
-}
-
-int mkdir_parents_label(const char *path, mode_t mode) {
- return makedir_parents(path, mode, true);
-}
-
-static int is_dir(const char* path) {
- struct stat st;
- if (stat(path, &st) < 0)
- return -errno;
- return S_ISDIR(st.st_mode);
+ return mkdir_parents_internal(NULL, path, mode, mkdir);
}
-static int makedir_p(const char *path, mode_t mode, bool apply) {
+int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, mkdir_func_t _mkdir) {
int r;
/* Like mkdir -p */
- r = makedir_parents(path, mode, apply);
+ r = mkdir_parents_internal(prefix, path, mode, _mkdir);
if (r < 0)
return r;
- r = label_mkdir(path, mode, apply);
+ r = _mkdir(path, mode);
if (r < 0 && (errno != EEXIST || is_dir(path) <= 0))
return -errno;
@@ -139,9 +135,9 @@ static int makedir_p(const char *path, mode_t mode, bool apply) {
}
int mkdir_p(const char *path, mode_t mode) {
- return makedir_p(path, mode, false);
+ return mkdir_p_internal(NULL, path, mode, mkdir);
}
-int mkdir_p_label(const char *path, mode_t mode) {
- return makedir_p(path, mode, true);
+int mkdir_p_prefix(const char *prefix, const char *path, mode_t mode) {
+ return mkdir_p_internal(prefix, path, mode, mkdir);
}
diff --git a/src/shared/mkdir.h b/src/shared/mkdir.h
index ce1c35e9ba..5b34db4229 100644
--- a/src/shared/mkdir.h
+++ b/src/shared/mkdir.h
@@ -7,6 +7,7 @@
This file is part of systemd.
Copyright 2010 Lennart Poettering
+ Copyright 2013 Kay Sievers
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
@@ -22,11 +23,23 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-int mkdir_label(const char *path, mode_t mode);
+#include <sys/types.h>
+
int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid);
-int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid);
int mkdir_parents(const char *path, mode_t mode);
-int mkdir_parents_label(const char *path, mode_t mode);
int mkdir_p(const char *path, mode_t mode);
+int mkdir_p_prefix(const char *prefix, const char *path, mode_t mode);
+
+/* selinux versions */
+int mkdir_label(const char *path, mode_t mode);
+int mkdir_safe_label(const char *path, mode_t mode, uid_t uid, gid_t gid);
+int mkdir_parents_label(const char *path, mode_t mode);
int mkdir_p_label(const char *path, mode_t mode);
+int mkdir_parents_prefix_label(const char *prefix, const char *path, mode_t mode);
+
+/* internally used */
+typedef int (*mkdir_func_t)(const char *pathname, mode_t mode);
+int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, mkdir_func_t _mkdir);
+int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, mkdir_func_t _mkdir);
+int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, mkdir_func_t _mkdir);
#endif
diff --git a/src/shared/output-mode.h b/src/shared/output-mode.h
index 0efd430c5d..9da789db76 100644
--- a/src/shared/output-mode.h
+++ b/src/shared/output-mode.h
@@ -23,6 +23,8 @@
typedef enum OutputMode {
OUTPUT_SHORT,
+ OUTPUT_SHORT_ISO,
+ OUTPUT_SHORT_PRECISE,
OUTPUT_SHORT_MONOTONIC,
OUTPUT_VERBOSE,
OUTPUT_EXPORT,
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 0c1b6a0ab0..45099eeda8 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -102,7 +102,8 @@ char **path_split_and_make_absolute(const char *p) {
char **l;
assert(p);
- if (!(l = strv_split(p, ":")))
+ l = strv_split(p, ":");
+ if (!l)
return NULL;
if (!path_strv_make_absolute_cwd(l)) {
@@ -126,7 +127,7 @@ char *path_make_absolute(const char *p, const char *prefix) {
}
char *path_make_absolute_cwd(const char *p) {
- char *cwd, *r;
+ _cleanup_free_ char *cwd = NULL;
assert(p);
@@ -140,10 +141,7 @@ char *path_make_absolute_cwd(const char *p) {
if (!cwd)
return NULL;
- r = path_make_absolute(p, cwd);
- free(cwd);
-
- return r;
+ return path_make_absolute(p, cwd);
}
char **path_strv_make_absolute_cwd(char **l) {
@@ -156,7 +154,8 @@ char **path_strv_make_absolute_cwd(char **l) {
STRV_FOREACH(s, l) {
char *t;
- if (!(t = path_make_absolute_cwd(*s)))
+ t = path_make_absolute_cwd(*s);
+ if (!t)
return NULL;
free(*s);
@@ -426,3 +425,51 @@ int path_is_os_tree(const char *path) {
return r < 0 ? 0 : 1;
}
+
+int find_binary(const char *name, char **filename) {
+ assert(name);
+ if (strchr(name, '/')) {
+ char *p;
+
+ if (path_is_absolute(name))
+ p = strdup(name);
+ else
+ p = path_make_absolute_cwd(name);
+ if (!p)
+ return -ENOMEM;
+
+ *filename = p;
+ return 0;
+ } else {
+ const char *path;
+ char *state, *w;
+ size_t l;
+
+ /**
+ * Plain getenv, not secure_getenv, because we want
+ * to actually allow the user to pick the binary.
+ */
+ path = getenv("PATH");
+ if (!path)
+ path = DEFAULT_PATH;
+
+ FOREACH_WORD_SEPARATOR(w, l, path, ":", state) {
+ char *p;
+
+ if (asprintf(&p, "%.*s/%s", (int) l, w, name) < 0)
+ return -ENOMEM;
+
+ if (access(p, X_OK) < 0) {
+ free(p);
+ continue;
+ }
+
+ path_kill_slashes(p);
+ *filename = p;
+
+ return 0;
+ }
+
+ return -ENOENT;
+ }
+}
diff --git a/src/shared/path-util.h b/src/shared/path-util.h
index d187743769..0a42de7e27 100644
--- a/src/shared/path-util.h
+++ b/src/shared/path-util.h
@@ -25,6 +25,12 @@
#include "macro.h"
+#ifdef HAVE_SPLIT_USR
+# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+#else
+# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
+#endif
+
bool is_path(const char *p) _pure_;
char** path_split_and_make_absolute(const char *p);
char* path_get_file_name(const char *p) _pure_;
@@ -43,3 +49,15 @@ char** path_strv_canonicalize_uniq(char **l);
int path_is_mount_point(const char *path, bool allow_symlink);
int path_is_read_only_fs(const char *path);
int path_is_os_tree(const char *path);
+
+int find_binary(const char *name, char **filename);
+
+/* Iterates through the path prefixes of the specified path, going up
+ * the tree, to root. Also returns "" (and not "/"!) for the root
+ * directory. Excludes the specified directory itself */
+#define PATH_FOREACH_PREFIX(prefix, path) \
+ for (char *_slash = ({ path_kill_slashes(strcpy(prefix, path)); streq(prefix, "/") ? NULL : strrchr(prefix, '/'); }); _slash && !(*_slash = 0); _slash = strrchr((prefix), '/'))
+
+/* Same as PATH_FOREACH_PREFIX but also includes the specified path itself */
+#define PATH_FOREACH_PREFIX_MORE(prefix, path) \
+ for (char *_slash = ({ path_kill_slashes(strcpy(prefix, path)); if (streq(prefix, "/")) prefix[0] = 0; strrchr(prefix, 0); }); _slash && !(*_slash = 0); _slash = strrchr((prefix), '/'))
diff --git a/src/shared/polkit.c b/src/shared/polkit.c
index cea7074ad3..1c5e9e3e0f 100644
--- a/src/shared/polkit.c
+++ b/src/shared/polkit.c
@@ -38,12 +38,8 @@ int verify_polkit(
#ifdef ENABLE_POLKIT
DBusMessage *m = NULL, *reply = NULL;
- const char *unix_process = "unix-process", *pid = "pid", *starttime = "start-time", *cancel_id = "";
+ const char *system_bus_name = "system-bus-name", *name = "name", *cancel_id = "";
uint32_t flags = interactive ? 1 : 0;
- pid_t pid_raw;
- uint32_t pid_u32;
- unsigned long long starttime_raw;
- uint64_t starttime_u64;
DBusMessageIter iter_msg, iter_struct, iter_array, iter_dict, iter_variant;
int r;
dbus_bool_t authorized = FALSE, challenge = FALSE;
@@ -68,14 +64,6 @@ int verify_polkit(
#ifdef ENABLE_POLKIT
- pid_raw = bus_get_unix_process_id(c, sender, error);
- if (pid_raw == 0)
- return -EINVAL;
-
- r = get_starttime_of_pid(pid_raw, &starttime_raw);
- if (r < 0)
- return r;
-
m = dbus_message_new_method_call(
"org.freedesktop.PolicyKit1",
"/org/freedesktop/PolicyKit1/Authority",
@@ -86,22 +74,13 @@ int verify_polkit(
dbus_message_iter_init_append(m, &iter_msg);
- pid_u32 = (uint32_t) pid_raw;
- starttime_u64 = (uint64_t) starttime_raw;
-
if (!dbus_message_iter_open_container(&iter_msg, DBUS_TYPE_STRUCT, NULL, &iter_struct) ||
- !dbus_message_iter_append_basic(&iter_struct, DBUS_TYPE_STRING, &unix_process) ||
+ !dbus_message_iter_append_basic(&iter_struct, DBUS_TYPE_STRING, &system_bus_name) ||
!dbus_message_iter_open_container(&iter_struct, DBUS_TYPE_ARRAY, "{sv}", &iter_array) ||
!dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict) ||
- !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &pid) ||
- !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "u", &iter_variant) ||
- !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT32, &pid_u32) ||
- !dbus_message_iter_close_container(&iter_dict, &iter_variant) ||
- !dbus_message_iter_close_container(&iter_array, &iter_dict) ||
- !dbus_message_iter_open_container(&iter_array, DBUS_TYPE_DICT_ENTRY, NULL, &iter_dict) ||
- !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &starttime) ||
- !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "t", &iter_variant) ||
- !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_UINT64, &starttime_u64) ||
+ !dbus_message_iter_append_basic(&iter_dict, DBUS_TYPE_STRING, &name) ||
+ !dbus_message_iter_open_container(&iter_dict, DBUS_TYPE_VARIANT, "s", &iter_variant) ||
+ !dbus_message_iter_append_basic(&iter_variant, DBUS_TYPE_STRING, &sender) ||
!dbus_message_iter_close_container(&iter_dict, &iter_variant) ||
!dbus_message_iter_close_container(&iter_array, &iter_dict) ||
!dbus_message_iter_close_container(&iter_struct, &iter_array) ||
diff --git a/src/shared/refcnt.h b/src/shared/refcnt.h
new file mode 100644
index 0000000000..0502c20a2e
--- /dev/null
+++ b/src/shared/refcnt.h
@@ -0,0 +1,34 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+/* A type-safe atomic refcounter */
+
+typedef struct {
+ volatile unsigned _value;
+} RefCount;
+
+#define REFCNT_GET(r) ((r)._value)
+#define REFCNT_INC(r) (__sync_add_and_fetch(&(r)._value, 1))
+#define REFCNT_DEC(r) (__sync_sub_and_fetch(&(r)._value, 1))
+
+#define REFCNT_INIT ((RefCount) { ._value = 1 })
diff --git a/src/shared/replace-var.c b/src/shared/replace-var.c
index e11c57a43d..478fc43a38 100644
--- a/src/shared/replace-var.c
+++ b/src/shared/replace-var.c
@@ -24,6 +24,7 @@
#include "macro.h"
#include "util.h"
#include "replace-var.h"
+#include "def.h"
/*
* Generic infrastructure for replacing @FOO@ style variables in
@@ -40,7 +41,7 @@ static int get_variable(const char *b, char **r) {
if (*b != '@')
return 0;
- k = strspn(b + 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ_");
+ k = strspn(b + 1, UPPERCASE_LETTERS "_");
if (k <= 0 || b[k+1] != '@')
return 0;
diff --git a/src/shared/set.c b/src/shared/set.c
index c338dc3a44..5a4bf11bdf 100644
--- a/src/shared/set.c
+++ b/src/shared/set.c
@@ -50,9 +50,12 @@ int set_put(Set *s, void *value) {
}
int set_consume(Set *s, void *value) {
- int r = set_put(s, value);
+ int r;
+
+ r = set_put(s, value);
if (r < 0)
free(value);
+
return r;
}
diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c
index cd3238b405..d068bfce3c 100644
--- a/src/shared/sleep-config.c
+++ b/src/shared/sleep-config.c
@@ -163,6 +163,93 @@ int can_sleep_disk(char **types) {
return false;
}
+#define HIBERNATION_SWAP_THRESHOLD 0.98
+
+static int hibernation_partition_size(size_t *size, size_t *used) {
+ _cleanup_fclose_ FILE *f;
+ int i;
+
+ assert(size);
+ assert(used);
+
+ f = fopen("/proc/swaps", "r");
+ if (!f) {
+ log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
+ "Failed to retrieve open /proc/swaps: %m");
+ assert(errno > 0);
+ return -errno;
+ }
+
+ (void) fscanf(f, "%*s %*s %*s %*s %*s\n");
+
+ for (i = 1;; i++) {
+ _cleanup_free_ char *dev = NULL, *d = NULL, *type = NULL;
+ size_t size_field, used_field;
+ int k;
+
+ k = fscanf(f,
+ "%ms " /* device/file */
+ "%ms " /* type of swap */
+ "%zd " /* swap size */
+ "%zd " /* used */
+ "%*i\n", /* priority */
+ &dev, &type, &size_field, &used_field);
+ if (k != 4) {
+ if (k == EOF)
+ break;
+
+ log_warning("Failed to parse /proc/swaps:%u", i);
+ continue;
+ }
+
+ d = cunescape(dev);
+ if (!d)
+ return -ENOMEM;
+
+ if (!streq(type, "partition")) {
+ log_debug("Partition %s has type %s, ignoring.", d, type);
+ continue;
+ }
+
+ *size = size_field;
+ *used = used_field;
+ return 0;
+ }
+
+ log_debug("No swap partitions were found.");
+ return -ENOSYS;
+}
+
+static bool enough_memory_for_hibernation(void) {
+ _cleanup_free_ char *active = NULL;
+ unsigned long long act;
+ size_t size, used;
+ int r;
+
+ r = hibernation_partition_size(&size, &used);
+ if (r < 0)
+ return false;
+
+ r = get_status_field("/proc/meminfo", "\nActive(anon):", &active);
+ if (r < 0) {
+ log_error("Failed to retrieve Active(anon) from /proc/meminfo: %s", strerror(-r));
+ return false;
+ }
+
+ r = safe_atollu(active, &act);
+ if (r < 0) {
+ log_error("Failed to parse Active(anon) from /proc/meminfo: %s: %s",
+ active, strerror(-r));
+ return false;
+ }
+
+ r = act <= (size - used) * HIBERNATION_SWAP_THRESHOLD;
+ log_debug("Hibernation is %spossible, Active(anon)=%llu kB, size=%zu kB, used=%zu kB, threshold=%.2g%%",
+ r ? "" : "im", act, size, used, 100*HIBERNATION_SWAP_THRESHOLD);
+
+ return r;
+}
+
int can_sleep(const char *verb) {
_cleanup_strv_free_ char **modes = NULL, **states = NULL;
int r;
@@ -175,5 +262,8 @@ int can_sleep(const char *verb) {
if (r < 0)
return false;
- return can_sleep_state(states) && can_sleep_disk(modes);
+ if (!can_sleep_state(states) || !can_sleep_disk(modes))
+ return false;
+
+ return streq(verb, "suspend") || enough_memory_for_hibernation();
}
diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c
index c583d3dfea..9224208244 100644
--- a/src/shared/socket-util.c
+++ b/src/shared/socket-util.c
@@ -486,16 +486,16 @@ bool socket_address_is_netlink(const SocketAddress *a, const char *s) {
return socket_address_equal(a, &b);
}
-bool socket_address_needs_mount(const SocketAddress *a, const char *prefix) {
+const char* socket_address_get_path(const SocketAddress *a) {
assert(a);
if (socket_address_family(a) != AF_UNIX)
- return false;
+ return NULL;
if (a->sockaddr.un.sun_path[0] == 0)
- return false;
+ return NULL;
- return path_startswith(a->sockaddr.un.sun_path, prefix);
+ return a->sockaddr.un.sun_path;
}
bool socket_ipv6_is_supported(void) {
diff --git a/src/shared/socket-util.h b/src/shared/socket-util.h
index 7829a337fc..e0b85adf9f 100644
--- a/src/shared/socket-util.h
+++ b/src/shared/socket-util.h
@@ -92,7 +92,7 @@ int make_socket_fd(const char* address, int flags);
bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) _pure_;
-bool socket_address_needs_mount(const SocketAddress *a, const char *prefix);
+const char* socket_address_get_path(const SocketAddress *a);
const char* socket_address_bind_ipv6_only_to_string(SocketAddressBindIPv6Only b) _const_;
SocketAddressBindIPv6Only socket_address_bind_ipv6_only_from_string(const char *s) _pure_;
diff --git a/src/shared/specifier.c b/src/shared/specifier.c
index 7577c91052..8fbf6db5df 100644
--- a/src/shared/specifier.c
+++ b/src/shared/specifier.c
@@ -20,6 +20,7 @@
***/
#include <string.h>
+#include <sys/utsname.h>
#include "macro.h"
#include "util.h"
@@ -31,21 +32,22 @@
*
*/
-char *specifier_printf(const char *text, const Specifier table[], void *userdata) {
- char *r, *t;
+int specifier_printf(const char *text, const Specifier table[], void *userdata, char **_ret) {
+ char *ret, *t;
const char *f;
bool percent = false;
size_t l;
+ int r;
assert(text);
assert(table);
l = strlen(text);
- r = new(char, l+1);
- if (!r)
- return NULL;
+ ret = new(char, l+1);
+ if (!ret)
+ return -ENOMEM;
- t = r;
+ t = ret;
for (f = text; *f; f++, l--) {
@@ -60,32 +62,31 @@ char *specifier_printf(const char *text, const Specifier table[], void *userdata
break;
if (i->lookup) {
- char *n, *w;
+ _cleanup_free_ char *w = NULL;
+ char *n;
size_t k, j;
- w = i->lookup(i->specifier, i->data, userdata);
- if (!w) {
- free(r);
- return NULL;
+ r = i->lookup(i->specifier, i->data, userdata, &w);
+ if (r < 0) {
+ free(ret);
+ return r;
}
- j = t - r;
+ j = t - ret;
k = strlen(w);
n = new(char, j + k + l + 1);
if (!n) {
- free(r);
- free(w);
- return NULL;
+ free(ret);
+ return -ENOMEM;
}
- memcpy(n, r, j);
+ memcpy(n, ret, j);
memcpy(n + j, w, k);
- free(r);
- free(w);
+ free(ret);
- r = n;
+ ret = n;
t = n + j + k;
} else {
*(t++) = '%';
@@ -101,47 +102,81 @@ char *specifier_printf(const char *text, const Specifier table[], void *userdata
}
*t = 0;
- return r;
+ *_ret = ret;
+ return 0;
}
/* Generic handler for simple string replacements */
-char* specifier_string(char specifier, void *data, void *userdata) {
- return strdup(strempty(data));
+int specifier_string(char specifier, void *data, void *userdata, char **ret) {
+ char *n;
+
+ n = strdup(strempty(data));
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-char *specifier_machine_id(char specifier, void *data, void *userdata) {
+int specifier_machine_id(char specifier, void *data, void *userdata, char **ret) {
sd_id128_t id;
- char *buf;
+ char *n;
int r;
r = sd_id128_get_machine(&id);
if (r < 0)
- return NULL;
+ return r;
- buf = new(char, 33);
- if (!buf)
- return NULL;
+ n = new(char, 33);
+ if (!n)
+ return -ENOMEM;
- return sd_id128_to_string(id, buf);
+ *ret = sd_id128_to_string(id, n);
+ return 0;
}
-char *specifier_boot_id(char specifier, void *data, void *userdata) {
+int specifier_boot_id(char specifier, void *data, void *userdata, char **ret) {
sd_id128_t id;
- char *buf;
+ char *n;
int r;
r = sd_id128_get_boot(&id);
if (r < 0)
- return NULL;
+ return r;
+
+ n = new(char, 33);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = sd_id128_to_string(id, n);
+ return 0;
+}
- buf = new(char, 33);
- if (!buf)
- return NULL;
+int specifier_host_name(char specifier, void *data, void *userdata, char **ret) {
+ char *n;
- return sd_id128_to_string(id, buf);
+ n = gethostname_malloc();
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
-char *specifier_host_name(char specifier, void *data, void *userdata) {
- return gethostname_malloc();
+int specifier_kernel_release(char specifier, void *data, void *userdata, char **ret) {
+ struct utsname uts;
+ char *n;
+ int r;
+
+ r = uname(&uts);
+ if (r < 0)
+ return -errno;
+
+ n = strdup(uts.release);
+ if (!n)
+ return -ENOMEM;
+
+ *ret = n;
+ return 0;
}
diff --git a/src/shared/specifier.h b/src/shared/specifier.h
index 0440dcac48..fca206f665 100644
--- a/src/shared/specifier.h
+++ b/src/shared/specifier.h
@@ -21,7 +21,7 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-typedef char* (*SpecifierCallback)(char specifier, void *data, void *userdata);
+typedef int (*SpecifierCallback)(char specifier, void *data, void *userdata, char **ret);
typedef struct Specifier {
const char specifier;
@@ -29,10 +29,11 @@ typedef struct Specifier {
void *data;
} Specifier;
-char *specifier_printf(const char *text, const Specifier table[], void *userdata);
+int specifier_printf(const char *text, const Specifier table[], void *userdata, char **ret);
-char *specifier_string(char specifier, void *data, void *userdata);
+int specifier_string(char specifier, void *data, void *userdata, char **ret);
-char *specifier_machine_id(char specifier, void *data, void *userdata);
-char *specifier_boot_id(char specifier, void *data, void *userdata);
-char *specifier_host_name(char specifier, void *data, void *userdata);
+int specifier_machine_id(char specifier, void *data, void *userdata, char **ret);
+int specifier_boot_id(char specifier, void *data, void *userdata, char **ret);
+int specifier_host_name(char specifier, void *data, void *userdata, char **ret);
+int specifier_kernel_release(char specifier, void *data, void *userdata, char **ret);
diff --git a/src/shared/strv.c b/src/shared/strv.c
index a5ce7e9593..adeee282b7 100644
--- a/src/shared/strv.c
+++ b/src/shared/strv.c
@@ -356,6 +356,43 @@ char *strv_join(char **l, const char *separator) {
return r;
}
+char *strv_join_quoted(char **l) {
+ char *buf = NULL;
+ char **s;
+ size_t allocated = 0, len = 0;
+
+ STRV_FOREACH(s, l) {
+ /* assuming here that escaped string cannot be more
+ * than twice as long, and reserving space for the
+ * separator and quotes.
+ */
+ _cleanup_free_ char *esc = NULL;
+ size_t needed;
+
+ if (!GREEDY_REALLOC(buf, allocated,
+ len + strlen(*s) * 2 + 3))
+ goto oom;
+
+ esc = cescape(*s);
+ if (!esc)
+ goto oom;
+
+ needed = snprintf(buf + len, allocated - len, "%s\"%s\"",
+ len > 0 ? " " : "", esc);
+ assert(needed < allocated - len);
+ len += needed;
+ }
+
+ if (!buf)
+ buf = malloc0(1);
+
+ return buf;
+
+ oom:
+ free(buf);
+ return NULL;
+}
+
char **strv_append(char **l, const char *s) {
char **r, **k;
diff --git a/src/shared/strv.h b/src/shared/strv.h
index e35118752f..d1f2a0ef32 100644
--- a/src/shared/strv.h
+++ b/src/shared/strv.h
@@ -67,6 +67,7 @@ char **strv_split_quoted(const char *s);
char **strv_split_newlines(const char *s);
char *strv_join(char **l, const char *separator);
+char *strv_join_quoted(char **l);
char **strv_parse_nulstr(const char *s, size_t l);
char **strv_split_nulstr(const char *s);
diff --git a/src/shared/test-tables.h b/src/shared/test-tables.h
new file mode 100644
index 0000000000..3261302077
--- /dev/null
+++ b/src/shared/test-tables.h
@@ -0,0 +1,51 @@
+/***
+ This file is part of systemd
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef const char* (*lookup_t)(int);
+typedef int (*reverse_t)(const char*);
+
+static inline void _test_table(const char *name,
+ lookup_t lookup,
+ reverse_t reverse,
+ int size,
+ bool sparse) {
+ int i;
+
+ for (i = -1; i < size + 1; i++) {
+ const char* val = lookup(i);
+ int rev;
+
+ if (val)
+ rev = reverse(val);
+ else
+ rev = reverse("--no-such--value----");
+
+ printf("%s: %d → %s → %d\n", name, i, val, rev);
+ if (i >= 0 && i < size ?
+ sparse ? rev != i && rev != -1 : val == NULL || rev != i :
+ val != NULL || rev != -1)
+ exit(EXIT_FAILURE);
+ }
+}
+
+#define test_table(lower, upper) \
+ _test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, false)
diff --git a/src/shared/time-util.c b/src/shared/time-util.c
index 9ee711a49e..860be61e8b 100644
--- a/src/shared/time-util.c
+++ b/src/shared/time-util.c
@@ -168,6 +168,28 @@ char *format_timestamp(char *buf, size_t l, usec_t t) {
return buf;
}
+char *format_timestamp_us(char *buf, size_t l, usec_t t) {
+ struct tm tm;
+ time_t sec;
+
+ assert(buf);
+ assert(l > 0);
+
+ if (t <= 0)
+ return NULL;
+
+ sec = (time_t) (t / USEC_PER_SEC);
+ localtime_r(&sec, &tm);
+
+ if (strftime(buf, l, "%a %Y-%m-%d %H:%M:%S", &tm) <= 0)
+ return NULL;
+ snprintf(buf + strlen(buf), l - strlen(buf), ".%06llu", t % USEC_PER_SEC);
+ if (strftime(buf + strlen(buf), l - strlen(buf), " %Z", &tm) <= 0)
+ return NULL;
+
+ return buf;
+}
+
char *format_timestamp_relative(char *buf, size_t l, usec_t t) {
usec_t n, d;
diff --git a/src/shared/time-util.h b/src/shared/time-util.h
index f27a006891..7660fe1872 100644
--- a/src/shared/time-util.h
+++ b/src/shared/time-util.h
@@ -73,6 +73,7 @@ usec_t timeval_load(const struct timeval *tv) _pure_;
struct timeval *timeval_store(struct timeval *tv, usec_t u);
char *format_timestamp(char *buf, size_t l, usec_t t);
+char *format_timestamp_us(char *buf, size_t l, usec_t t);
char *format_timestamp_relative(char *buf, size_t l, usec_t t);
char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
index a809713595..bc8094d112 100644
--- a/src/shared/unit-name.c
+++ b/src/shared/unit-name.c
@@ -26,11 +26,10 @@
#include "path-util.h"
#include "util.h"
#include "unit-name.h"
+#include "def.h"
#define VALID_CHARS \
- "0123456789" \
- "abcdefghijklmnopqrstuvwxyz" \
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+ DIGITS LETTERS \
":-_.\\"
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
@@ -44,6 +43,8 @@ static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
[UNIT_TIMER] = "timer",
[UNIT_SWAP] = "swap",
[UNIT_PATH] = "path",
+ [UNIT_SLICE] = "slice",
+ [UNIT_SCOPE] = "scope"
};
DEFINE_STRING_TABLE_LOOKUP(unit_type, UnitType);
@@ -51,6 +52,7 @@ DEFINE_STRING_TABLE_LOOKUP(unit_type, UnitType);
static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
[UNIT_STUB] = "stub",
[UNIT_LOADED] = "loaded",
+ [UNIT_NOT_FOUND] = "not-found",
[UNIT_ERROR] = "error",
[UNIT_MERGED] = "merged",
[UNIT_MASKED] = "masked"
@@ -184,6 +186,7 @@ char *unit_name_change_suffix(const char *n, const char *suffix) {
assert(n);
assert(unit_name_is_valid(n, true));
assert(suffix);
+ assert(suffix[0] == '.');
assert_se(e = strrchr(n, '.'));
a = e - n;
@@ -298,7 +301,7 @@ char *unit_name_path_escape(const char *f) {
path_kill_slashes(p);
- if (streq(p, "/")) {
+ if (streq(p, "/") || streq(p, "")) {
free(p);
return strdup("-");
}
@@ -401,7 +404,6 @@ char *unit_name_template(const char *f) {
strcpy(mempcpy(r, f, a), e);
return r;
-
}
char *unit_name_from_path(const char *path, const char *suffix) {
@@ -453,7 +455,7 @@ char *unit_name_to_path(const char *name) {
}
char *unit_dbus_path_from_name(const char *name) {
- char *e, *p;
+ _cleanup_free_ char *e = NULL;
assert(name);
@@ -461,10 +463,23 @@ char *unit_dbus_path_from_name(const char *name) {
if (!e)
return NULL;
- p = strappend("/org/freedesktop/systemd1/unit/", e);
- free(e);
+ return strappend("/org/freedesktop/systemd1/unit/", e);
+}
+
+int unit_name_from_dbus_path(const char *path, char **name) {
+ const char *e;
+ char *n;
+
+ e = startswith(path, "/org/freedesktop/systemd1/unit/");
+ if (!e)
+ return -EINVAL;
- return p;
+ n = bus_path_unescape(e);
+ if (!n)
+ return -ENOMEM;
+
+ *name = n;
+ return 0;
}
char *unit_name_mangle(const char *name) {
@@ -506,16 +521,18 @@ char *unit_name_mangle(const char *name) {
return r;
}
-char *snapshot_name_mangle(const char *name) {
+char *unit_name_mangle_with_suffix(const char *name, const char *suffix) {
char *r, *t;
const char *f;
assert(name);
+ assert(suffix);
+ assert(suffix[0] == '.');
/* Similar to unit_name_mangle(), but is called when we know
* that this is about snapshot units. */
- r = new(char, strlen(name) * 4 + 1 + sizeof(".snapshot")-1);
+ r = new(char, strlen(name) * 4 + strlen(suffix) + 1);
if (!r)
return NULL;
@@ -528,8 +545,8 @@ char *snapshot_name_mangle(const char *name) {
*(t++) = *f;
}
- if (!endswith(name, ".snapshot"))
- strcpy(t, ".snapshot");
+ if (!endswith(name, suffix))
+ strcpy(t, suffix);
else
*t = 0;
@@ -547,3 +564,30 @@ UnitType unit_name_to_type(const char *n) {
return unit_type_from_string(e + 1);
}
+
+int build_subslice(const char *slice, const char*name, char **subslice) {
+ char *ret;
+
+ assert(slice);
+ assert(name);
+ assert(subslice);
+
+ if (streq(slice, "-.slice"))
+ ret = strappend(name, ".slice");
+ else {
+ char *e;
+
+ e = endswith(slice, ".slice");
+ if (!e)
+ return -EINVAL;
+
+ ret = new(char, (e - slice) + 1 + strlen(name) + 6 + 1);
+ if (!ret)
+ return -ENOMEM;
+
+ stpcpy(stpcpy(stpcpy(mempcpy(ret, slice, e - slice), "-"), name), ".slice");
+ }
+
+ *subslice = ret;
+ return 0;
+}
diff --git a/src/shared/unit-name.h b/src/shared/unit-name.h
index 9eca8eb3c1..20138df089 100644
--- a/src/shared/unit-name.h
+++ b/src/shared/unit-name.h
@@ -41,6 +41,8 @@ enum UnitType {
UNIT_TIMER,
UNIT_SWAP,
UNIT_PATH,
+ UNIT_SLICE,
+ UNIT_SCOPE,
_UNIT_TYPE_MAX,
_UNIT_TYPE_INVALID = -1
};
@@ -48,6 +50,7 @@ enum UnitType {
enum UnitLoadState {
UNIT_STUB = 0,
UNIT_LOADED,
+ UNIT_NOT_FOUND,
UNIT_ERROR,
UNIT_MERGED,
UNIT_MASKED,
@@ -92,6 +95,9 @@ char *unit_name_from_path_instance(const char *prefix, const char *path, const c
char *unit_name_to_path(const char *name);
char *unit_dbus_path_from_name(const char *name);
+int unit_name_from_dbus_path(const char *path, char **name);
char *unit_name_mangle(const char *name);
-char *snapshot_name_mangle(const char *name);
+char *unit_name_mangle_with_suffix(const char *name, const char *suffix);
+
+int build_subslice(const char *slice, const char*name, char **subslice);
diff --git a/src/shared/utf8.c b/src/shared/utf8.c
index 3964e8b1ce..a8e28accd3 100644
--- a/src/shared/utf8.c
+++ b/src/shared/utf8.c
@@ -3,6 +3,7 @@
/***
This file is part of systemd.
+ Copyright 2008-2011 Kay Sievers
Copyright 2012 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it
@@ -19,7 +20,7 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-/* This file is based on the GLIB utf8 validation functions. The
+/* Parts of this file are based on the GLIB utf8 validation functions. The
* original license text follows. */
/* gutf8.c - Operations on UTF-8 strings.
@@ -51,8 +52,6 @@
#include "utf8.h"
#include "util.h"
-#define FILTER_CHAR '_'
-
static inline bool is_unicode_valid(uint32_t ch) {
if (ch >= 0x110000) /* End of unicode space */
@@ -67,17 +66,6 @@ static inline bool is_unicode_valid(uint32_t ch) {
return true;
}
-static inline bool is_continuation_char(uint8_t ch) {
- if ((ch & 0xc0) != 0x80) /* 10xxxxxx */
- return false;
- return true;
-}
-
-static inline void merge_continuation_char(uint32_t *u_ch, uint8_t ch) {
- *u_ch <<= 6;
- *u_ch |= ch & 0x3f;
-}
-
static bool is_unicode_control(uint32_t ch) {
/*
@@ -86,170 +74,101 @@ static bool is_unicode_control(uint32_t ch) {
'\t' is in C0 range, but more or less harmless and commonly used.
*/
- return (ch < ' ' && ch != '\t') ||
+ return (ch < ' ' && ch != '\t' && ch != '\n') ||
(0x7F <= ch && ch <= 0x9F);
}
-char* utf8_is_printable_n(const char* str, size_t length) {
- uint32_t val = 0;
- uint32_t min = 0;
- const uint8_t *p;
-
- assert(str);
-
- for (p = (const uint8_t*) str; length; p++, length--) {
- if (*p < 128) {
- val = *p;
- } else {
- if ((*p & 0xe0) == 0xc0) { /* 110xxxxx two-char seq. */
- min = 128;
- val = (uint32_t) (*p & 0x1e);
- goto ONE_REMAINING;
- } else if ((*p & 0xf0) == 0xe0) { /* 1110xxxx three-char seq.*/
- min = (1 << 11);
- val = (uint32_t) (*p & 0x0f);
- goto TWO_REMAINING;
- } else if ((*p & 0xf8) == 0xf0) { /* 11110xxx four-char seq */
- min = (1 << 16);
- val = (uint32_t) (*p & 0x07);
- } else
- goto error;
-
- p++;
- length--;
- if (!length || !is_continuation_char(*p))
- goto error;
- merge_continuation_char(&val, *p);
-
- TWO_REMAINING:
- p++;
- length--;
- if (!is_continuation_char(*p))
- goto error;
- merge_continuation_char(&val, *p);
-
- ONE_REMAINING:
- p++;
- length--;
- if (!is_continuation_char(*p))
- goto error;
- merge_continuation_char(&val, *p);
-
- if (val < min)
- goto error;
- }
+/* count of characters used to encode one unicode char */
+static int utf8_encoded_expected_len(const char *str) {
+ unsigned char c = (unsigned char)str[0];
+
+ if (c < 0x80)
+ return 1;
+ if ((c & 0xe0) == 0xc0)
+ return 2;
+ if ((c & 0xf0) == 0xe0)
+ return 3;
+ if ((c & 0xf8) == 0xf0)
+ return 4;
+ if ((c & 0xfc) == 0xf8)
+ return 5;
+ if ((c & 0xfe) == 0xfc)
+ return 6;
+ return 0;
+}
- if (is_unicode_control(val))
- goto error;
+/* decode one unicode char */
+static int utf8_encoded_to_unichar(const char *str) {
+ int unichar;
+ int len;
+ int i;
+
+ len = utf8_encoded_expected_len(str);
+ switch (len) {
+ case 1:
+ return (int)str[0];
+ case 2:
+ unichar = str[0] & 0x1f;
+ break;
+ case 3:
+ unichar = (int)str[0] & 0x0f;
+ break;
+ case 4:
+ unichar = (int)str[0] & 0x07;
+ break;
+ case 5:
+ unichar = (int)str[0] & 0x03;
+ break;
+ case 6:
+ unichar = (int)str[0] & 0x01;
+ break;
+ default:
+ return -1;
}
- return (char*) str;
+ for (i = 1; i < len; i++) {
+ if (((int)str[i] & 0xc0) != 0x80)
+ return -1;
+ unichar <<= 6;
+ unichar |= (int)str[i] & 0x3f;
+ }
-error:
- return NULL;
+ return unichar;
}
-static char* utf8_validate(const char *str, char *output) {
- uint32_t val = 0;
- uint32_t min = 0;
- const uint8_t *p, *last;
- int size;
- uint8_t *o;
+bool utf8_is_printable(const char* str, size_t length) {
+ const uint8_t *p;
assert(str);
- o = (uint8_t*) output;
- for (p = (const uint8_t*) str; *p; p++) {
- if (*p < 128) {
- if (o)
- *o = *p;
- } else {
- last = p;
-
- if ((*p & 0xe0) == 0xc0) { /* 110xxxxx two-char seq. */
- size = 2;
- min = 128;
- val = (uint32_t) (*p & 0x1e);
- goto ONE_REMAINING;
- } else if ((*p & 0xf0) == 0xe0) { /* 1110xxxx three-char seq.*/
- size = 3;
- min = (1 << 11);
- val = (uint32_t) (*p & 0x0f);
- goto TWO_REMAINING;
- } else if ((*p & 0xf8) == 0xf0) { /* 11110xxx four-char seq */
- size = 4;
- min = (1 << 16);
- val = (uint32_t) (*p & 0x07);
- } else
- goto error;
-
- p++;
- if (!is_continuation_char(*p))
- goto error;
- merge_continuation_char(&val, *p);
-
- TWO_REMAINING:
- p++;
- if (!is_continuation_char(*p))
- goto error;
- merge_continuation_char(&val, *p);
-
- ONE_REMAINING:
- p++;
- if (!is_continuation_char(*p))
- goto error;
- merge_continuation_char(&val, *p);
-
- if (val < min)
- goto error;
-
- if (!is_unicode_valid(val))
- goto error;
-
- if (o) {
- memcpy(o, last, (size_t) size);
- o += size;
- }
-
- continue;
-
- error:
- if (o) {
- *o = FILTER_CHAR;
- p = last; /* We retry at the next character */
- } else
- goto failure;
- }
+ for (p = (const uint8_t*) str; length; p++) {
+ int encoded_len = utf8_encoded_valid_unichar((const char *)p);
+ int32_t val = utf8_encoded_to_unichar((const char*)p);
- if (o)
- o++;
- }
+ if (encoded_len < 0 || val < 0 || is_unicode_control(val))
+ return false;
- if (o) {
- *o = '\0';
- return output;
+ length -= encoded_len;
}
- return (char*) str;
-
-failure:
- return NULL;
-}
-
-char* utf8_is_valid (const char *str) {
- return utf8_validate(str, NULL);
+ return true;
}
-char* utf8_filter (const char *str) {
- char *new_str;
+const char *utf8_is_valid(const char *str) {
+ const uint8_t *p;
assert(str);
- new_str = malloc(strlen(str) + 1);
- if (!new_str)
- return NULL;
+ for (p = (const uint8_t*) str; *p; ) {
+ int len = utf8_encoded_valid_unichar((const char *)p);
- return utf8_validate(str, new_str);
+ if (len < 0)
+ return NULL;
+
+ p += len;
+ }
+
+ return str;
}
char *ascii_is_valid(const char *str) {
@@ -320,3 +239,50 @@ char *utf16_to_utf8(const void *s, size_t length) {
return r;
}
+
+/* expected size used to encode one unicode char */
+static int utf8_unichar_to_encoded_len(int unichar) {
+ if (unichar < 0x80)
+ return 1;
+ if (unichar < 0x800)
+ return 2;
+ if (unichar < 0x10000)
+ return 3;
+ if (unichar < 0x200000)
+ return 4;
+ if (unichar < 0x4000000)
+ return 5;
+ return 6;
+}
+
+/* validate one encoded unicode char and return its length */
+int utf8_encoded_valid_unichar(const char *str) {
+ int len;
+ int unichar;
+ int i;
+
+ len = utf8_encoded_expected_len(str);
+ if (len == 0)
+ return -1;
+
+ /* ascii is valid */
+ if (len == 1)
+ return 1;
+
+ /* check if expected encoded chars are available */
+ for (i = 0; i < len; i++)
+ if ((str[i] & 0x80) != 0x80)
+ return -1;
+
+ unichar = utf8_encoded_to_unichar(str);
+
+ /* check if encoded length matches encoded value */
+ if (utf8_unichar_to_encoded_len(unichar) != len)
+ return -1;
+
+ /* check if value has valid range */
+ if (!is_unicode_valid(unichar))
+ return -1;
+
+ return len;
+}
diff --git a/src/shared/utf8.h b/src/shared/utf8.h
index 794ae15ab9..96a03ea7cb 100644
--- a/src/shared/utf8.h
+++ b/src/shared/utf8.h
@@ -21,14 +21,17 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include <stdbool.h>
+
#include "macro.h"
-char *utf8_is_valid(const char *s) _pure_;
+const char *utf8_is_valid(const char *s) _pure_;
char *ascii_is_valid(const char *s) _pure_;
-char *utf8_is_printable_n(const char* str, size_t length) _pure_;
+bool utf8_is_printable(const char* str, size_t length) _pure_;
-char *utf8_filter(const char *s);
char *ascii_filter(const char *s);
char *utf16_to_utf8(const void *s, size_t length);
+
+int utf8_encoded_valid_unichar(const char *str);
diff --git a/src/shared/util.c b/src/shared/util.c
index 673e0da6b6..9be6acfc8f 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -73,6 +73,7 @@
#include "hashmap.h"
#include "env-util.h"
#include "fileio.h"
+#include "device-nodes.h"
int saved_argc = 0;
char **saved_argv = NULL;
@@ -128,40 +129,6 @@ char* endswith(const char *s, const char *postfix) {
return (char*) s + sl - pl;
}
-char* startswith(const char *s, const char *prefix) {
- const char *a, *b;
-
- assert(s);
- assert(prefix);
-
- a = s, b = prefix;
- for (;;) {
- if (*b == 0)
- return (char*) a;
- if (*a != *b)
- return NULL;
-
- a++, b++;
- }
-}
-
-char* startswith_no_case(const char *s, const char *prefix) {
- const char *a, *b;
-
- assert(s);
- assert(prefix);
-
- a = s, b = prefix;
- for (;;) {
- if (*b == 0)
- return (char*) a;
- if (tolower(*a) != tolower(*b))
- return NULL;
-
- a++, b++;
- }
-}
-
bool first_word(const char *s, const char *word) {
size_t sl, wl;
@@ -367,7 +334,7 @@ int safe_atolli(const char *s, long long int *ret_lli) {
int safe_atod(const char *s, double *ret_d) {
char *x = NULL;
- double d;
+ double d = 0;
assert(s);
assert(ret_d);
@@ -726,9 +693,24 @@ int is_kernel_thread(pid_t pid) {
return 0;
}
+int get_process_capeff(pid_t pid, char **capeff) {
+ const char *p;
+
+ assert(capeff);
+ assert(pid >= 0);
+
+ if (pid == 0)
+ p = "/proc/self/status";
+ else
+ p = procfs_file_alloca(pid, "status");
+
+ return get_status_field(p, "\nCapEff:", capeff);
+}
int get_process_exe(pid_t pid, char **name) {
const char *p;
+ char *d;
+ int r;
assert(pid >= 0);
assert(name);
@@ -738,7 +720,15 @@ int get_process_exe(pid_t pid, char **name) {
else
p = procfs_file_alloca(pid, "exe");
- return readlink_malloc(p, name);
+ r = readlink_malloc(p, name);
+ if (r < 0)
+ return r;
+
+ d = endswith(*name, " (deleted)");
+ if (d)
+ *d = '\0';
+
+ return 0;
}
static int get_process_id(pid_t pid, const char *field, uid_t *uid) {
@@ -850,18 +840,18 @@ int readlink_malloc(const char *p, char **r) {
}
int readlink_and_make_absolute(const char *p, char **r) {
- char *target, *k;
+ _cleanup_free_ char *target = NULL;
+ char *k;
int j;
assert(p);
assert(r);
- if ((j = readlink_malloc(p, &target)) < 0)
+ j = readlink_malloc(p, &target);
+ if (j < 0)
return j;
k = file_in_same_dir(p, target);
- free(target);
-
if (!k)
return -ENOMEM;
@@ -1600,6 +1590,7 @@ bool fstype_is_network(const char *fstype) {
"cifs\0"
"smbfs\0"
"ncpfs\0"
+ "ncp\0"
"nfs\0"
"nfs4\0"
"gfs\0"
@@ -1830,8 +1821,10 @@ int open_terminal(const char *name, int mode) {
* https://bugs.launchpad.net/ubuntu/+source/linux/+bug/554172/comments/245
*/
+ assert(!(mode & O_CREAT));
+
for (;;) {
- fd = open(name, mode);
+ fd = open(name, mode, 0);
if (fd >= 0)
break;
@@ -2193,8 +2186,10 @@ ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) {
return n > 0 ? n : -errno;
}
- if (pollfd.revents != POLLIN)
- return n > 0 ? n : -EIO;
+ /* We knowingly ignore the revents value here,
+ * and expect that any error/EOF is reported
+ * via read()/write()
+ */
continue;
}
@@ -2241,8 +2236,10 @@ ssize_t loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) {
return n > 0 ? n : -errno;
}
- if (pollfd.revents != POLLOUT)
- return n > 0 ? n : -EIO;
+ /* We knowingly ignore the revents value here,
+ * and expect that any error/EOF is reported
+ * via read()/write()
+ */
continue;
}
@@ -2261,7 +2258,7 @@ ssize_t loop_write(int fd, const void *buf, size_t nbytes, bool do_poll) {
int parse_bytes(const char *t, off_t *bytes) {
static const struct {
const char *suffix;
- off_t factor;
+ unsigned long long factor;
} table[] = {
{ "B", 1 },
{ "K", 1024ULL },
@@ -2274,7 +2271,7 @@ int parse_bytes(const char *t, off_t *bytes) {
};
const char *p;
- off_t r = 0;
+ unsigned long long r = 0;
assert(t);
assert(bytes);
@@ -2301,7 +2298,17 @@ int parse_bytes(const char *t, off_t *bytes) {
for (i = 0; i < ELEMENTSOF(table); i++)
if (startswith(e, table[i].suffix)) {
- r += (off_t) l * table[i].factor;
+ unsigned long long tmp;
+ if ((unsigned long long) l > ULLONG_MAX / table[i].factor)
+ return -ERANGE;
+ tmp = l * table[i].factor;
+ if (tmp > ULLONG_MAX - r)
+ return -ERANGE;
+
+ r += tmp;
+ if ((unsigned long long) (off_t) r != r)
+ return -ERANGE;
+
p = e + strlen(table[i].suffix);
break;
}
@@ -2309,7 +2316,7 @@ int parse_bytes(const char *t, off_t *bytes) {
if (i >= ELEMENTSOF(table))
return -EINVAL;
- } while (*p != 0);
+ } while (*p);
*bytes = r;
@@ -2417,6 +2424,25 @@ fallback:
return random() * RAND_MAX + random();
}
+unsigned random_u(void) {
+ _cleanup_close_ int fd;
+ unsigned u;
+ ssize_t r;
+
+ fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0)
+ goto fallback;
+
+ r = loop_read(fd, &u, sizeof(u), true);
+ if (r != sizeof(u))
+ goto fallback;
+
+ return u;
+
+fallback:
+ return random() * RAND_MAX + random();
+}
+
void rename_process(const char name[8]) {
assert(name);
@@ -2773,8 +2799,8 @@ int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct
_pure_ static int is_temporary_fs(struct statfs *s) {
assert(s);
return
- F_TYPE_CMP(s->f_type, TMPFS_MAGIC) ||
- F_TYPE_CMP(s->f_type, RAMFS_MAGIC);
+ F_TYPE_EQUAL(s->f_type, TMPFS_MAGIC) ||
+ F_TYPE_EQUAL(s->f_type, RAMFS_MAGIC);
}
int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) {
@@ -3275,7 +3301,7 @@ char *ellipsize_mem(const char *s, size_t old_length, size_t new_length, unsigne
r = new0(char, new_length+1);
if (!r)
- return r;
+ return NULL;
x = (new_length * percent) / 100;
@@ -3465,7 +3491,9 @@ DIR *xopendirat(int fd, const char *name, int flags) {
int nfd;
DIR *d;
- nfd = openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags);
+ assert(!(flags & O_CREAT));
+
+ nfd = openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags, 0);
if (nfd < 0)
return NULL;
@@ -3491,26 +3519,23 @@ int signal_from_string_try_harder(const char *s) {
}
static char *tag_to_udev_node(const char *tagvalue, const char *by) {
- char *dn, *t, *u;
- int r;
-
- /* FIXME: to follow udev's logic 100% we need to leave valid
- * UTF8 chars unescaped */
+ _cleanup_free_ char *t = NULL, *u = NULL;
+ char *dn;
+ size_t enc_len;
u = unquote(tagvalue, "\"\'");
if (u == NULL)
return NULL;
- t = xescape(u, "/ ");
- free(u);
-
+ enc_len = strlen(u) * 4;
+ t = new(char, enc_len);
if (t == NULL)
return NULL;
- r = asprintf(&dn, "/dev/disk/by-%s/%s", by, t);
- free(t);
+ if (encode_devnode_name(u, t, enc_len) < 0)
+ return NULL;
- if (r < 0)
+ if (asprintf(&dn, "/dev/disk/by-%s/%s", by, t) < 0)
return NULL;
return dn;
@@ -4343,7 +4368,7 @@ int in_group(const char *name) {
int glob_exists(const char *path) {
_cleanup_globfree_ glob_t g = {};
- int r, k;
+ int k;
assert(path);
@@ -4351,15 +4376,37 @@ int glob_exists(const char *path) {
k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
if (k == GLOB_NOMATCH)
- r = 0;
+ return 0;
else if (k == GLOB_NOSPACE)
- r = -ENOMEM;
+ return -ENOMEM;
else if (k == 0)
- r = !strv_isempty(g.gl_pathv);
+ return !strv_isempty(g.gl_pathv);
else
- r = errno ? -errno : -EIO;
+ return errno ? -errno : -EIO;
+}
- return r;
+int glob_extend(char ***strv, const char *path) {
+ _cleanup_globfree_ glob_t g = {};
+ int k;
+ char **p;
+
+ errno = 0;
+ k = glob(optarg, GLOB_NOSORT|GLOB_BRACE, NULL, &g);
+
+ if (k == GLOB_NOMATCH)
+ return -ENOENT;
+ else if (k == GLOB_NOSPACE)
+ return -ENOMEM;
+ else if (k != 0 || strv_isempty(g.gl_pathv))
+ return errno ? -errno : -EIO;
+
+ STRV_FOREACH(p, g.gl_pathv) {
+ k = strv_extend(strv, *p);
+ if (k < 0)
+ break;
+ }
+
+ return k;
}
int dirent_ensure_type(DIR *d, struct dirent *de) {
@@ -4388,38 +4435,31 @@ int dirent_ensure_type(DIR *d, struct dirent *de) {
}
int in_search_path(const char *path, char **search) {
- char **i, *parent;
+ char **i;
+ _cleanup_free_ char *parent = NULL;
int r;
r = path_get_parent(path, &parent);
if (r < 0)
return r;
- r = 0;
-
- STRV_FOREACH(i, search) {
- if (path_equal(parent, *i)) {
- r = 1;
- break;
- }
- }
-
- free(parent);
+ STRV_FOREACH(i, search)
+ if (path_equal(parent, *i))
+ return 1;
- return r;
+ return 0;
}
int get_files_in_directory(const char *path, char ***list) {
- DIR *d;
- int r = 0;
- unsigned n = 0;
- char **l = NULL;
+ _cleanup_closedir_ DIR *d = NULL;
+ size_t bufsize = 0, n = 0;
+ _cleanup_strv_free_ char **l = NULL;
assert(path);
/* Returns all files in a directory in *list, and the number
* of files as return value. If list is NULL returns only the
- * number */
+ * number. */
d = opendir(path);
if (!d)
@@ -4431,11 +4471,9 @@ int get_files_in_directory(const char *path, char ***list) {
int k;
k = readdir_r(d, &buf.de, &de);
- if (k != 0) {
- r = -k;
- goto finish;
- }
-
+ assert(k >= 0);
+ if (k > 0)
+ return -k;
if (!de)
break;
@@ -4445,43 +4483,25 @@ int get_files_in_directory(const char *path, char ***list) {
continue;
if (list) {
- if ((unsigned) r >= n) {
- char **t;
-
- n = MAX(16, 2*r);
- t = realloc(l, sizeof(char*) * n);
- if (!t) {
- r = -ENOMEM;
- goto finish;
- }
-
- l = t;
- }
-
- assert((unsigned) r < n);
+ /* one extra slot is needed for the terminating NULL */
+ if (!GREEDY_REALLOC(l, bufsize, n + 2))
+ return -ENOMEM;
- l[r] = strdup(de->d_name);
- if (!l[r]) {
- r = -ENOMEM;
- goto finish;
- }
+ l[n] = strdup(de->d_name);
+ if (!l[n])
+ return -ENOMEM;
- l[++r] = NULL;
+ l[++n] = NULL;
} else
- r++;
+ n++;
}
-finish:
- if (d)
- closedir(d);
-
- if (r >= 0) {
- if (list)
- *list = l;
- } else
- strv_free(l);
+ if (list) {
+ *list = l;
+ l = NULL; /* avoid freeing */
+ }
- return r;
+ return n;
}
char *strjoin(const char *x, ...) {
@@ -5264,13 +5284,17 @@ bool string_is_safe(const char *p) {
return true;
}
+/**
+ * Check if a string contains control characters.
+ * Spaces and tabs are not considered control characters.
+ */
bool string_has_cc(const char *p) {
const char *t;
assert(p);
for (t = p; *t; t++)
- if (*t > 0 && *t < ' ')
+ if (*t > 0 && *t < ' ' && *t != '\t')
return true;
return false;
@@ -5343,20 +5367,24 @@ bool is_locale_utf8(void) {
goto out;
}
- /* For LC_CTYPE=="C" return true,
- * because CTYPE is effectly unset and
- * everything defaults to UTF-8 nowadays. */
-
+ /* For LC_CTYPE=="C" return true, because CTYPE is effectly
+ * unset and everything can do to UTF-8 nowadays. */
set = setlocale(LC_CTYPE, NULL);
if (!set) {
cached_answer = true;
goto out;
}
- cached_answer = streq(set, "C");
+ /* Check result, but ignore the result if C was set
+ * explicitly. */
+ cached_answer =
+ streq(set, "C") &&
+ !getenv("LC_ALL") &&
+ !getenv("LC_CTYPE") &&
+ !getenv("LANG");
out:
- return (bool)cached_answer;
+ return (bool) cached_answer;
}
const char *draw_special_char(DrawSpecialChar ch) {
@@ -5671,7 +5699,7 @@ int search_and_fopen_nulstr(const char *path, const char *mode, const char *sear
int create_tmp_dir(char template[], char** dir_name) {
int r = 0;
- char *d, *dt;
+ char *d = NULL, *dt;
assert(dir_name);
@@ -5847,3 +5875,48 @@ bool id128_is_valid(const char *s) {
return true;
}
+
+void parse_user_at_host(char *arg, char **user, char **host) {
+ assert(arg);
+ assert(user);
+ assert(host);
+
+ *host = strchr(arg, '@');
+ if (*host == NULL)
+ *host = arg;
+ else {
+ *host[0]++ = '\0';
+ *user = arg;
+ }
+}
+
+int split_pair(const char *s, const char *sep, char **l, char **r) {
+ char *x, *a, *b;
+
+ assert(s);
+ assert(sep);
+ assert(l);
+ assert(r);
+
+ if (isempty(sep))
+ return -EINVAL;
+
+ x = strstr(s, sep);
+ if (!x)
+ return -EINVAL;
+
+ a = strndup(s, x - s);
+ if (!a)
+ return -ENOMEM;
+
+ b = strdup(x + strlen(sep));
+ if (!b) {
+ free(a);
+ return -ENOMEM;
+ }
+
+ *l = a;
+ *r = b;
+
+ return 0;
+}
diff --git a/src/shared/util.h b/src/shared/util.h
index 64e63b8c07..1b845b3803 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -106,9 +106,19 @@ static inline bool isempty(const char *p) {
return !p || !p[0];
}
+static inline const char *startswith(const char *s, const char *prefix) {
+ if (strncmp(s, prefix, strlen(prefix)) == 0)
+ return s + strlen(prefix);
+ return NULL;
+}
+
+static inline const char *startswith_no_case(const char *s, const char *prefix) {
+ if (strncasecmp(s, prefix, strlen(prefix)) == 0)
+ return s + strlen(prefix);
+ return NULL;
+}
+
char *endswith(const char *s, const char *postfix) _pure_;
-char *startswith(const char *s, const char *prefix) _pure_;
-char *startswith_no_case(const char *s, const char *prefix) _pure_;
bool first_word(const char *s, const char *word) _pure_;
@@ -210,6 +220,7 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
int get_process_exe(pid_t pid, char **name);
int get_process_uid(pid_t pid, uid_t *uid);
int get_process_gid(pid_t pid, gid_t *gid);
+int get_process_capeff(pid_t pid, char **capeff);
char hexchar(int x) _const_;
int unhexchar(char c) _const_;
@@ -242,6 +253,7 @@ int make_null_stdio(void);
int make_console_stdio(void);
unsigned long long random_ull(void);
+unsigned random_u(void);
/* For basic lookup tables with strictly enumerated entries */
#define __DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \
@@ -373,6 +385,22 @@ void columns_lines_cache_reset(int _unused_ signum);
bool on_tty(void);
+static inline const char *ansi_highlight(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_ON : "";
+}
+
+static inline const char *ansi_highlight_red(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_RED_ON : "";
+}
+
+static inline const char *ansi_highlight_green(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_GREEN_ON : "";
+}
+
+static inline const char *ansi_highlight_off(void) {
+ return on_tty() ? ANSI_HIGHLIGHT_OFF : "";
+}
+
int running_in_chroot(void);
char *ellipsize(const char *s, size_t length, unsigned percent);
@@ -439,6 +467,7 @@ char* uid_to_name(uid_t uid);
char* gid_to_name(gid_t gid);
int glob_exists(const char *path);
+int glob_extend(char ***strv, const char *path);
int dirent_ensure_type(DIR *d, struct dirent *de);
@@ -732,3 +761,6 @@ static inline void _reset_locale_(struct _locale_struct_ *s) {
_saved_locale_.quit = true)
bool id128_is_valid(const char *s) _pure_;
+void parse_user_at_host(char *arg, char **user, char **host);
+
+int split_pair(const char *s, const char *sep, char **l, char **r);
diff --git a/src/shared/virt.c b/src/shared/virt.c
index 1c86a3dd1e..4f8134a773 100644
--- a/src/shared/virt.c
+++ b/src/shared/virt.c
@@ -29,6 +29,8 @@
/* Returns a short identifier for the various VM implementations */
int detect_vm(const char **id) {
+ _cleanup_free_ char *cpuinfo_contents = NULL;
+ int r;
#if defined(__i386__) || defined(__x86_64__)
@@ -67,7 +69,6 @@ int detect_vm(const char **id) {
const char *j, *k;
bool hypervisor;
_cleanup_free_ char *hvtype = NULL;
- int r;
/* Try high-level hypervisor sysfs file first:
*
@@ -164,6 +165,16 @@ int detect_vm(const char **id) {
}
#endif
+
+ /* Detect User-Mode Linux by reading /proc/cpuinfo */
+ r = read_full_file("/proc/cpuinfo", &cpuinfo_contents, NULL);
+ if (r < 0)
+ return r;
+ if (strstr(cpuinfo_contents, "\nvendor_id\t: User Mode Linux\n")) {
+ *id = "uml";
+ return 1;
+ }
+
return 0;
}
diff --git a/src/stdio-bridge/stdio-bridge.c b/src/stdio-bridge/stdio-bridge.c
index a5bdb03416..ab1a43ab1a 100644
--- a/src/stdio-bridge/stdio-bridge.c
+++ b/src/stdio-bridge/stdio-bridge.c
@@ -68,7 +68,7 @@ int main(int argc, char *argv[]) {
goto finish;
}
- r = sd_bus_set_negotiate_fds(a, is_unix);
+ r = sd_bus_negotiate_fds(a, is_unix);
if (r < 0) {
log_error("Failed to set FD negotiation: %s", strerror(-r));
goto finish;
@@ -104,7 +104,7 @@ int main(int argc, char *argv[]) {
goto finish;
}
- r = sd_bus_set_negotiate_fds(b, is_unix);
+ r = sd_bus_negotiate_fds(b, is_unix);
if (r < 0) {
log_error("Failed to set FD negotiation: %s", strerror(-r));
goto finish;
diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
index db18dd9f6e..b5670dbb86 100644
--- a/src/sysctl/sysctl.c
+++ b/src/sysctl/sysctl.c
@@ -135,6 +135,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
log_debug("parse: %s\n", path);
while (!feof(f)) {
char l[LINE_MAX], *p, *value, *new_value, *property, *existing;
+ void *v;
int k;
if (!fgets(l, sizeof(l), f)) {
@@ -167,13 +168,14 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
p = normalize_sysctl(strstrip(p));
value = strstrip(value);
- existing = hashmap_get(sysctl_options, p);
+ existing = hashmap_get2(sysctl_options, p, &v);
if (existing) {
- if (!streq(value, existing))
- log_warning("Duplicate assignment of %s in file '%s', ignoring.",
- p, path);
+ if (streq(value, existing))
+ continue;
- continue;
+ log_info("Overwriting earlier assignment of %s in file '%s'.", p, path);
+ free(hashmap_remove(sysctl_options, p));
+ free(v);
}
property = strdup(p);
@@ -188,7 +190,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno
k = hashmap_put(sysctl_options, property, new_value);
if (k < 0) {
- log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-r));
+ log_error("Failed to add sysctl variable %s to hashmap: %s", property, strerror(-k));
free(property);
free(new_value);
return k;
@@ -304,8 +306,6 @@ int main(int argc, char *argv[]) {
goto finish;
}
- r = parse_file(sysctl_options, "/etc/sysctl.conf", true);
-
STRV_FOREACH(f, files) {
k = parse_file(sysctl_options, *f, true);
if (k < 0 && r == 0)
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 3cca861cf6..bb7ada9f32 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -69,9 +69,10 @@
#include "fileio.h"
static char **arg_types = NULL;
-static char **arg_load_states = NULL;
+static char **arg_states = NULL;
static char **arg_properties = NULL;
static bool arg_all = false;
+static bool original_stdout_is_tty;
static enum dependency {
DEPENDENCY_FORWARD,
DEPENDENCY_REVERSE,
@@ -93,7 +94,6 @@ static bool arg_quiet = false;
static bool arg_full = false;
static int arg_force = 0;
static bool arg_ask_password = true;
-static bool arg_failed = false;
static bool arg_runtime = false;
static char **arg_wall = NULL;
static const char *arg_kill_who = NULL;
@@ -129,7 +129,8 @@ static enum transport {
TRANSPORT_SSH,
TRANSPORT_POLKIT
} arg_transport = TRANSPORT_NORMAL;
-static const char *arg_host = NULL;
+static char *arg_host = NULL;
+static char *arg_user = NULL;
static unsigned arg_lines = 10;
static OutputMode arg_output = OUTPUT_SHORT;
static bool arg_plain = false;
@@ -175,30 +176,6 @@ static void polkit_agent_open_if_enabled(void) {
}
#endif
-static const char *ansi_highlight(bool b) {
-
- if (!on_tty())
- return "";
-
- return b ? ANSI_HIGHLIGHT_ON : ANSI_HIGHLIGHT_OFF;
-}
-
-static const char *ansi_highlight_red(bool b) {
-
- if (!on_tty())
- return "";
-
- return b ? ANSI_HIGHLIGHT_RED_ON : ANSI_HIGHLIGHT_OFF;
-}
-
-static const char *ansi_highlight_green(bool b) {
-
- if (!on_tty())
- return "";
-
- return b ? ANSI_HIGHLIGHT_GREEN_ON : ANSI_HIGHLIGHT_OFF;
-}
-
static int translate_bus_error_to_exit_status(int r, const DBusError *error) {
assert(error);
@@ -300,12 +277,11 @@ static int compare_unit_info(const void *a, const void *b) {
static bool output_show_unit(const struct unit_info *u) {
const char *dot;
- if (arg_failed)
- return streq(u->active_state, "failed");
+ if (!strv_isempty(arg_states))
+ return strv_contains(arg_states, u->load_state) || strv_contains(arg_states, u->sub_state) || strv_contains(arg_states, u->active_state);
return (!arg_types || ((dot = strrchr(u->id, '.')) &&
strv_find(arg_types, dot+1))) &&
- (!arg_load_states || strv_find(arg_load_states, u->load_state)) &&
(arg_all || !(streq(u->active_state, "inactive")
|| u->following[0]) || u->job_id > 0);
}
@@ -334,7 +310,7 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
}
}
- if (!arg_full) {
+ if (!arg_full && original_stdout_is_tty) {
unsigned basic_len;
id_len = MIN(max_id_len, 25u);
basic_len = 5 + id_len + 5 + active_len + sub_len;
@@ -380,15 +356,16 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
n_shown++;
- if (streq(u->load_state, "error")) {
- on_loaded = on = ansi_highlight_red(true);
- off_loaded = off = ansi_highlight_red(false);
+ if (streq(u->load_state, "error") ||
+ streq(u->load_state, "not-found")) {
+ on_loaded = on = ansi_highlight_red();
+ off_loaded = off = ansi_highlight_off();
} else
on_loaded = off_loaded = "";
if (streq(u->active_state, "failed")) {
- on_active = on = ansi_highlight_red(true);
- off_active = off = ansi_highlight_red(false);
+ on_active = on = ansi_highlight_red();
+ off_active = off = ansi_highlight_off();
} else
on_active = off_active = "";
@@ -400,7 +377,7 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
on_active, active_len, u->active_state,
sub_len, u->sub_state, off_active,
job_count ? job_len + 1 : 0, u->job_id ? u->job_type : "");
- if (!arg_full && arg_no_pager)
+ if (desc_len > 0)
printf("%.*s\n", desc_len, u->description);
else
printf("%s\n", u->description);
@@ -416,11 +393,11 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
if (job_count)
printf("JOB = Pending job for the unit.\n");
puts("");
- on = ansi_highlight(true);
- off = ansi_highlight(false);
+ on = ansi_highlight();
+ off = ansi_highlight_off();
} else {
- on = ansi_highlight_red(true);
- off = ansi_highlight_red(false);
+ on = ansi_highlight_red();
+ off = ansi_highlight_off();
}
if (arg_all)
@@ -434,8 +411,12 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
}
}
-static int get_unit_list(DBusConnection *bus, DBusMessage **reply,
- struct unit_info **unit_infos, unsigned *c) {
+static int get_unit_list(
+ DBusConnection *bus,
+ DBusMessage **reply,
+ struct unit_info **unit_infos,
+ unsigned *c) {
+
DBusMessageIter iter, sub;
size_t size = 0;
int r;
@@ -497,9 +478,11 @@ static int list_units(DBusConnection *bus, char **args) {
return 0;
}
-static int get_triggered_units(DBusConnection *bus, const char* unit_path,
- char*** triggered)
-{
+static int get_triggered_units(
+ DBusConnection *bus,
+ const char* unit_path,
+ char*** triggered) {
+
const char *interface = "org.freedesktop.systemd1.Unit",
*triggers_property = "Triggers";
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
@@ -655,11 +638,12 @@ static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
}
if (cs) {
- printf("%-*s %-*.*s%-*s %s\n",
- pathlen, "LISTEN",
- typelen + arg_show_types, typelen + arg_show_types, "TYPE ",
- socklen, "UNIT",
- "ACTIVATES");
+ if (!arg_no_legend)
+ printf("%-*s %-*.*s%-*s %s\n",
+ pathlen, "LISTEN",
+ typelen + arg_show_types, typelen + arg_show_types, "TYPE ",
+ socklen, "UNIT",
+ "ACTIVATES");
for (s = socket_infos; s < socket_infos + cs; s++) {
char **a;
@@ -676,17 +660,20 @@ static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
printf("\n");
}
- on = ansi_highlight(true);
- off = ansi_highlight(false);
- printf("\n");
+ on = ansi_highlight();
+ off = ansi_highlight_off();
+ if (!arg_no_legend)
+ printf("\n");
} else {
- on = ansi_highlight_red(true);
- off = ansi_highlight_red(false);
+ on = ansi_highlight_red();
+ off = ansi_highlight_off();
}
- printf("%s%u sockets listed.%s\n", on, cs, off);
- if (!arg_all)
- printf("Pass --all to see loaded but inactive sockets, too.\n");
+ if (!arg_no_legend) {
+ printf("%s%u sockets listed.%s\n", on, cs, off);
+ if (!arg_all)
+ printf("Pass --all to see loaded but inactive sockets, too.\n");
+ }
return 0;
}
@@ -828,11 +815,11 @@ static void output_unit_file_list(const UnitFileList *units, unsigned c) {
u->state == UNIT_FILE_MASKED_RUNTIME ||
u->state == UNIT_FILE_DISABLED ||
u->state == UNIT_FILE_INVALID) {
- on = ansi_highlight_red(true);
- off = ansi_highlight_red(false);
+ on = ansi_highlight_red();
+ off = ansi_highlight_off();
} else if (u->state == UNIT_FILE_ENABLED) {
- on = ansi_highlight_green(true);
- off = ansi_highlight_green(false);
+ on = ansi_highlight_green();
+ off = ansi_highlight_off();
} else
on = off = "";
@@ -1173,6 +1160,59 @@ static int list_dependencies(DBusConnection *bus, char **args) {
return list_dependencies_one(bus, u, 0, &units, 0);
}
+static int get_default(DBusConnection *bus, char **args) {
+ char *path = NULL;
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ int r;
+ _cleanup_dbus_error_free_ DBusError error;
+
+ dbus_error_init(&error);
+
+ if (!bus || avoid_bus()) {
+ r = unit_file_get_default(arg_scope, arg_root, &path);
+
+ if (r < 0) {
+ log_error("Operation failed: %s", strerror(-r));
+ goto finish;
+ }
+
+ r = 0;
+ } else {
+ r = bus_method_call_with_reply(
+ bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "GetDefaultTarget",
+ &reply,
+ NULL,
+ DBUS_TYPE_INVALID);
+
+ if (r < 0) {
+ log_error("Operation failed: %s", strerror(-r));
+ goto finish;
+ }
+
+ if (!dbus_message_get_args(reply, &error,
+ DBUS_TYPE_STRING, &path,
+ DBUS_TYPE_INVALID)) {
+ log_error("Failed to parse reply: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ return -EIO;
+ }
+ }
+
+ if (path)
+ printf("%s\n", path);
+
+finish:
+ if ((!bus || avoid_bus()) && path)
+ free(path);
+
+ return r;
+
+}
+
struct job_info {
uint32_t id;
char *name, *type, *state;
@@ -1187,8 +1227,8 @@ static void list_jobs_print(struct job_info* jobs, size_t n) {
assert(n == 0 || jobs);
if (n == 0) {
- on = ansi_highlight_green(true);
- off = ansi_highlight_green(false);
+ on = ansi_highlight_green();
+ off = ansi_highlight_off();
printf("%sNo jobs running.%s\n", on, off);
return;
@@ -1224,8 +1264,8 @@ static void list_jobs_print(struct job_info* jobs, size_t n) {
_cleanup_free_ char *e = NULL;
if (streq(j->state, "running")) {
- on = ansi_highlight(true);
- off = ansi_highlight(false);
+ on = ansi_highlight();
+ off = ansi_highlight_off();
} else
on = off = "";
@@ -1238,8 +1278,8 @@ static void list_jobs_print(struct job_info* jobs, size_t n) {
}
}
- on = ansi_highlight(true);
- off = ansi_highlight(false);
+ on = ansi_highlight();
+ off = ansi_highlight_off();
if (on_tty())
printf("\n%s%zu jobs listed%s.\n", on, n, off);
@@ -1325,36 +1365,6 @@ static int list_jobs(DBusConnection *bus, char **args) {
return 0;
}
-static int load_unit(DBusConnection *bus, char **args) {
- char **name;
-
- assert(args);
-
- STRV_FOREACH(name, args+1) {
- _cleanup_free_ char *n = NULL;
- int r;
-
- n = unit_name_mangle(*name);
- if (!n)
- return log_oom();
-
- r = bus_method_call_with_reply(
- bus,
- "org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.systemd1.Manager",
- "LoadUnit",
- NULL,
- NULL,
- DBUS_TYPE_STRING, &n,
- DBUS_TYPE_INVALID);
- if (r < 0)
- return r;
- }
-
- return 0;
-}
-
static int cancel_job(DBusConnection *bus, char **args) {
char **name;
@@ -1390,8 +1400,9 @@ static int cancel_job(DBusConnection *bus, char **args) {
return 0;
}
-static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
+static int need_daemon_reload(DBusConnection *bus, const char *unit) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ _cleanup_dbus_error_free_ DBusError error;
dbus_bool_t b = FALSE;
DBusMessageIter iter, sub;
const char
@@ -1401,6 +1412,8 @@ static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
_cleanup_free_ char *n = NULL;
int r;
+ dbus_error_init(&error);
+
/* We ignore all errors here, since this is used to show a warning only */
n = unit_name_mangle(unit);
@@ -1414,7 +1427,7 @@ static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
"org.freedesktop.systemd1.Manager",
"GetUnit",
&reply,
- NULL,
+ &error,
DBUS_TYPE_STRING, &n,
DBUS_TYPE_INVALID);
if (r < 0)
@@ -1435,7 +1448,7 @@ static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
"org.freedesktop.DBus.Properties",
"Get",
&reply,
- NULL,
+ &error,
DBUS_TYPE_STRING, &interface,
DBUS_TYPE_STRING, &property,
DBUS_TYPE_INVALID);
@@ -1483,6 +1496,7 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
} else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
uint32_t id;
const char *path, *result, *unit;
+ char *r;
if (dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &id,
@@ -1491,7 +1505,11 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
DBUS_TYPE_STRING, &result,
DBUS_TYPE_INVALID)) {
- free(set_remove(d->set, (char*) path));
+ r = set_remove(d->set, (char*) path);
+ if (!r)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ free(r);
if (!isempty(result))
d->result = strdup(result);
@@ -1501,7 +1519,7 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-#ifndef LEGACY
+#ifndef NOLEGACY
dbus_error_free(&error);
if (dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &id,
@@ -1511,7 +1529,11 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
/* Compatibility with older systemd versions <
* 183 during upgrades. This should be dropped
* one day. */
- free(set_remove(d->set, (char*) path));
+ r = set_remove(d->set, (char*) path);
+ if (!r)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ free(r);
if (*result)
d->result = strdup(result);
@@ -1855,9 +1877,9 @@ static int start_unit_one(
return -EIO;
}
- if (need_daemon_reload(bus, n))
- log_warning("Warning: Unit file of %s changed on disk, 'systemctl %s daemon-reload' recommended.",
- n, arg_scope == UNIT_FILE_SYSTEM ? "--system" : "--user");
+ if (need_daemon_reload(bus, n) > 0)
+ log_warning("Warning: Unit file of %s changed on disk, 'systemctl %sdaemon-reload' recommended.",
+ n, arg_scope == UNIT_FILE_SYSTEM ? "" : "--user ");
if (s) {
char *p;
@@ -2320,150 +2342,6 @@ static int kill_unit(DBusConnection *bus, char **args) {
return 0;
}
-static int set_cgroup(DBusConnection *bus, char **args) {
- _cleanup_free_ char *n = NULL;
- const char *method, *runtime;
- char **argument;
- int r;
-
- assert(bus);
- assert(args);
-
- method =
- streq(args[0], "set-cgroup") ? "SetUnitControlGroup" :
- streq(args[0], "unset-cgroup") ? "UnsetUnitControlGroup"
- : "UnsetUnitControlGroupAttribute";
-
- runtime = arg_runtime ? "runtime" : "persistent";
-
- n = unit_name_mangle(args[1]);
- if (!n)
- return log_oom();
-
- STRV_FOREACH(argument, args + 2) {
-
- r = bus_method_call_with_reply(
- bus,
- "org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.systemd1.Manager",
- method,
- NULL,
- NULL,
- DBUS_TYPE_STRING, &n,
- DBUS_TYPE_STRING, argument,
- DBUS_TYPE_STRING, &runtime,
- DBUS_TYPE_INVALID);
- if (r < 0)
- return r;
- }
-
- return 0;
-}
-
-static int set_cgroup_attr(DBusConnection *bus, char **args) {
- _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
- DBusError error;
- DBusMessageIter iter;
- _cleanup_free_ char *n = NULL;
- const char *runtime;
- int r;
-
- assert(bus);
- assert(args);
-
- dbus_error_init(&error);
-
- runtime = arg_runtime ? "runtime" : "persistent";
-
- n = unit_name_mangle(args[1]);
- if (!n)
- return log_oom();
-
- m = dbus_message_new_method_call(
- "org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.systemd1.Manager",
- "SetUnitControlGroupAttribute");
- if (!m)
- return log_oom();
-
- dbus_message_iter_init_append(m, &iter);
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &n) ||
- !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &args[2]))
- return log_oom();
-
- r = bus_append_strv_iter(&iter, args + 3);
- if (r < 0)
- return log_oom();
-
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &runtime))
- return log_oom();
-
- reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
- if (!reply) {
- log_error("Failed to issue method call: %s", bus_error_message(&error));
- dbus_error_free(&error);
- return -EIO;
- }
-
- return 0;
-}
-
-static int get_cgroup_attr(DBusConnection *bus, char **args) {
- _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- _cleanup_free_ char *n = NULL;
- char **argument;
- int r;
-
- assert(bus);
- assert(args);
-
- n = unit_name_mangle(args[1]);
- if (!n)
- return log_oom();
-
- STRV_FOREACH(argument, args + 2) {
- _cleanup_strv_free_ char **list = NULL;
- DBusMessageIter iter;
- char **a;
-
- r = bus_method_call_with_reply(
- bus,
- "org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.systemd1.Manager",
- "GetUnitControlGroupAttribute",
- &reply,
- NULL,
- DBUS_TYPE_STRING, &n,
- DBUS_TYPE_STRING, argument,
- DBUS_TYPE_INVALID);
- if (r < 0)
- return r;
-
- if (!dbus_message_iter_init(reply, &iter)) {
- log_error("Failed to initialize iterator.");
- return -EIO;
- }
-
- r = bus_parse_strv_iter(&iter, &list);
- if (r < 0) {
- log_error("Failed to parse value list.");
- return r;
- }
-
- STRV_FOREACH(a, list) {
- if (endswith(*a, "\n"))
- fputs(*a, stdout);
- else
- puts(*a);
- }
- }
-
- return 0;
-}
-
typedef struct ExecStatusInfo {
char *name;
@@ -2581,7 +2459,7 @@ typedef struct UnitStatusInfo {
const char *fragment_path;
const char *source_path;
- const char *default_control_group;
+ const char *control_group;
char **dropin_paths;
@@ -2600,6 +2478,7 @@ typedef struct UnitStatusInfo {
pid_t main_pid;
pid_t control_pid;
const char *status_text;
+ const char *pid_file;
bool running:1;
usec_t start_timestamp;
@@ -2609,6 +2488,10 @@ typedef struct UnitStatusInfo {
usec_t condition_timestamp;
bool condition_result;
+ bool failed_condition_trigger;
+ bool failed_condition_negate;
+ const char *failed_condition;
+ const char *failed_condition_param;
/* Socket */
unsigned n_accepted;
@@ -2630,7 +2513,8 @@ typedef struct UnitStatusInfo {
LIST_HEAD(ExecStatusInfo, exec);
} UnitStatusInfo;
-static void print_status_info(UnitStatusInfo *i) {
+static void print_status_info(UnitStatusInfo *i,
+ bool *ellipsized) {
ExecStatusInfo *p;
const char *on, *off, *ss;
usec_t timestamp;
@@ -2643,20 +2527,10 @@ static void print_status_info(UnitStatusInfo *i) {
on_tty() * OUTPUT_COLOR |
!arg_quiet * OUTPUT_WARN_CUTOFF |
arg_full * OUTPUT_FULL_WIDTH;
- int maxlen = 8; /* a value that'll suffice most of the time */
char **t, **t2;
assert(i);
- STRV_FOREACH_PAIR(t, t2, i->listen)
- maxlen = MAX(maxlen, (int)(sizeof("Listen") - 1 + strlen(*t)));
- if (i->accept)
- maxlen = MAX(maxlen, (int)sizeof("Accept") - 1);
- if (i->main_pid > 0)
- maxlen = MAX(maxlen, (int)sizeof("Main PID") - 1);
- else if (i->control_pid > 0)
- maxlen = MAX(maxlen, (int)sizeof("Control") - 1);
-
/* This shows pretty information about a unit. See
* print_property() for a low-level property printer */
@@ -2668,28 +2542,28 @@ static void print_status_info(UnitStatusInfo *i) {
printf("\n");
if (i->following)
- printf(" %*s: unit currently follows state of %s\n", maxlen, "Follow", i->following);
+ printf(" Follow: unit currently follows state of %s\n", i->following);
if (streq_ptr(i->load_state, "error")) {
- on = ansi_highlight_red(true);
- off = ansi_highlight_red(false);
+ on = ansi_highlight_red();
+ off = ansi_highlight_off();
} else
on = off = "";
path = i->source_path ? i->source_path : i->fragment_path;
if (i->load_error)
- printf(" %*s: %s%s%s (Reason: %s)\n",
- maxlen, "Loaded", on, strna(i->load_state), off, i->load_error);
+ printf(" Loaded: %s%s%s (Reason: %s)\n",
+ on, strna(i->load_state), off, i->load_error);
else if (path && i->unit_file_state)
- printf(" %*s: %s%s%s (%s; %s)\n",
- maxlen, "Loaded", on, strna(i->load_state), off, path, i->unit_file_state);
+ printf(" Loaded: %s%s%s (%s; %s)\n",
+ on, strna(i->load_state), off, path, i->unit_file_state);
else if (path)
- printf(" %*s: %s%s%s (%s)\n",
- maxlen, "Loaded", on, strna(i->load_state), off, path);
+ printf(" Loaded: %s%s%s (%s)\n",
+ on, strna(i->load_state), off, path);
else
- printf(" %*s: %s%s%s\n",
- maxlen, "Loaded", on, strna(i->load_state), off);
+ printf(" Loaded: %s%s%s\n",
+ on, strna(i->load_state), off);
if (!strv_isempty(i->dropin_paths)) {
char ** dropin;
@@ -2698,7 +2572,7 @@ static void print_status_info(UnitStatusInfo *i) {
STRV_FOREACH(dropin, i->dropin_paths) {
if (! dir || last) {
- printf(" %*s ", maxlen, dir ? "" : "Drop-In:");
+ printf(dir ? " " : " Drop-In: ");
free(dir);
@@ -2707,7 +2581,7 @@ static void print_status_info(UnitStatusInfo *i) {
return;
}
- printf("%s\n %*s %s", dir, maxlen, "",
+ printf("%s\n %s", dir,
draw_special_char(DRAW_TREE_RIGHT));
}
@@ -2722,20 +2596,20 @@ static void print_status_info(UnitStatusInfo *i) {
ss = streq_ptr(i->active_state, i->sub_state) ? NULL : i->sub_state;
if (streq_ptr(i->active_state, "failed")) {
- on = ansi_highlight_red(true);
- off = ansi_highlight_red(false);
+ on = ansi_highlight_red();
+ off = ansi_highlight_off();
} else if (streq_ptr(i->active_state, "active") || streq_ptr(i->active_state, "reloading")) {
- on = ansi_highlight_green(true);
- off = ansi_highlight_green(false);
+ on = ansi_highlight_green();
+ off = ansi_highlight_off();
} else
on = off = "";
if (ss)
- printf(" %*s: %s%s (%s)%s",
- maxlen, "Active", on, strna(i->active_state), ss, off);
+ printf(" Active: %s%s (%s)%s",
+ on, strna(i->active_state), ss, off);
else
- printf(" %*s: %s%s%s",
- maxlen, "Active", on, strna(i->active_state), off);
+ printf(" Active: %s%s%s",
+ on, strna(i->active_state), off);
if (!isempty(i->result) && !streq(i->result, "success"))
printf(" (Result: %s)", i->result);
@@ -2761,27 +2635,32 @@ static void print_status_info(UnitStatusInfo *i) {
s1 = format_timestamp_relative(since1, sizeof(since1), i->condition_timestamp);
s2 = format_timestamp(since2, sizeof(since2), i->condition_timestamp);
- if (s1)
- printf(" %*s start condition failed at %s; %s\n", maxlen, "", s2, s1);
- else if (s2)
- printf(" %*s start condition failed at %s\n", maxlen, "", s2);
+ printf(" start condition failed at %s%s%s\n",
+ s2, s1 ? "; " : "", s1 ? s1 : "");
+ if (i->failed_condition_trigger)
+ printf(" none of the trigger conditions were met\n");
+ else if (i->failed_condition)
+ printf(" %s=%s%s was not met\n",
+ i->failed_condition,
+ i->failed_condition_negate ? "!" : "",
+ i->failed_condition_param);
}
if (i->sysfs_path)
- printf(" %*s: %s\n", maxlen, "Device", i->sysfs_path);
+ printf(" Device: %s\n", i->sysfs_path);
if (i->where)
- printf(" %*s: %s\n", maxlen, "Where", i->where);
+ printf(" Where: %s\n", i->where);
if (i->what)
- printf(" %*s: %s\n", maxlen, "What", i->what);
+ printf(" What: %s\n", i->what);
STRV_FOREACH(t, i->documentation)
- printf(" %*s %s\n", maxlen+1, t == i->documentation ? "Docs:" : "", *t);
+ printf(" %*s %s\n", 9, t == i->documentation ? "Docs:" : "", *t);
STRV_FOREACH_PAIR(t, t2, i->listen)
- printf(" %*s %s (%s)\n", maxlen+1, t == i->listen ? "Listen:" : "", *t2, *t);
+ printf(" %*s %s (%s)\n", 9, t == i->listen ? "Listen:" : "", *t2, *t);
if (i->accept)
- printf(" %*s: %u; Connected: %u\n", maxlen, "Accepted", i->n_accepted, i->n_connections);
+ printf(" Accepted: %u; Connected: %u\n", i->n_accepted, i->n_connections);
LIST_FOREACH(exec, p, i->exec) {
_cleanup_free_ char *argv = NULL;
@@ -2792,12 +2671,12 @@ static void print_status_info(UnitStatusInfo *i) {
continue;
argv = strv_join(p->argv, " ");
- printf(" %*s: %u %s=%s ", maxlen, "Process", p->pid, p->name, strna(argv));
+ printf(" Process: %u %s=%s ", p->pid, p->name, strna(argv));
good = is_clean_exit_lsb(p->code, p->status, NULL);
if (!good) {
- on = ansi_highlight_red(true);
- off = ansi_highlight_red(false);
+ on = ansi_highlight_red();
+ off = ansi_highlight_off();
} else
on = off = "";
@@ -2829,7 +2708,7 @@ static void print_status_info(UnitStatusInfo *i) {
if (i->main_pid > 0 || i->control_pid > 0) {
if (i->main_pid > 0) {
- printf(" %*s: %u", maxlen, "Main PID", (unsigned) i->main_pid);
+ printf(" Main PID: %u", (unsigned) i->main_pid);
if (i->running) {
_cleanup_free_ char *comm = NULL;
@@ -2860,7 +2739,7 @@ static void print_status_info(UnitStatusInfo *i) {
if (i->control_pid > 0) {
_cleanup_free_ char *c = NULL;
- printf(" %*s: %u", i->main_pid ? 0 : maxlen, "Control", (unsigned) i->control_pid);
+ printf(" %8s: %u", i->main_pid ? "" : " Control", (unsigned) i->control_pid);
get_process_comm(i->control_pid, &c);
if (c)
@@ -2871,20 +2750,18 @@ static void print_status_info(UnitStatusInfo *i) {
}
if (i->status_text)
- printf(" %*s: \"%s\"\n", maxlen, "Status", i->status_text);
+ printf(" Status: \"%s\"\n", i->status_text);
- if (i->default_control_group &&
- (i->main_pid > 0 || i->control_pid > 0 || cg_is_empty_by_spec(i->default_control_group, false) == 0)) {
+ if (i->control_group &&
+ (i->main_pid > 0 || i->control_pid > 0 || cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, i->control_group, false) == 0)) {
unsigned c;
- printf(" %*s: %s\n", maxlen, "CGroup", i->default_control_group);
+ printf(" CGroup: %s\n", i->control_group);
if (arg_transport != TRANSPORT_SSH) {
unsigned k = 0;
pid_t extra[2];
- char prefix[maxlen + 4];
- memset(prefix, ' ', sizeof(prefix) - 1);
- prefix[sizeof(prefix) - 1] = '\0';
+ char prefix[] = " ";
c = columns();
if (c > sizeof(prefix) - 1)
@@ -2898,7 +2775,7 @@ static void print_status_info(UnitStatusInfo *i) {
if (i->control_pid > 0)
extra[k++] = i->control_pid;
- show_cgroup_and_extra_by_spec(i->default_control_group, prefix,
+ show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, i->control_group, prefix,
c, false, extra, k, flags);
}
}
@@ -2913,14 +2790,15 @@ static void print_status_info(UnitStatusInfo *i) {
arg_lines,
getuid(),
flags,
- arg_scope == UNIT_FILE_SYSTEM);
+ arg_scope == UNIT_FILE_SYSTEM,
+ ellipsized);
}
if (i->need_daemon_reload)
- printf("\n%sWarning:%s Unit file changed on disk, 'systemctl %s daemon-reload' recommended.\n",
- ansi_highlight_red(true),
- ansi_highlight_red(false),
- arg_scope == UNIT_FILE_SYSTEM ? "--system" : "--user");
+ printf("\n%sWarning:%s Unit file changed on disk, 'systemctl %sdaemon-reload' recommended.\n",
+ ansi_highlight_red(),
+ ansi_highlight_off(),
+ arg_scope == UNIT_FILE_SYSTEM ? "" : "--user ");
}
static void show_unit_help(UnitStatusInfo *i) {
@@ -3007,10 +2885,20 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
i->fragment_path = s;
else if (streq(name, "SourcePath"))
i->source_path = s;
- else if (streq(name, "DefaultControlGroup"))
- i->default_control_group = s;
+#ifndef NOLEGACY
+ else if (streq(name, "DefaultControlGroup")) {
+ const char *e;
+ e = startswith(s, SYSTEMD_CGROUP_CONTROLLER ":");
+ if (e)
+ i->control_group = e;
+ }
+#endif
+ else if (streq(name, "ControlGroup"))
+ i->control_group = s;
else if (streq(name, "StatusText"))
i->status_text = s;
+ else if (streq(name, "PIDFile"))
+ i->pid_file = s;
else if (streq(name, "SysFSPath"))
i->sysfs_path = s;
else if (streq(name, "Where"))
@@ -3115,15 +3003,18 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
ExecStatusInfo *info;
int r;
- if (!(info = new0(ExecStatusInfo, 1)))
+ info = new0(ExecStatusInfo, 1);
+ if (!info)
return -ENOMEM;
- if (!(info->name = strdup(name))) {
+ info->name = strdup(name);
+ if (!info->name) {
free(info);
return -ENOMEM;
}
- if ((r = exec_status_info_deserialize(&sub, info)) < 0) {
+ r = exec_status_info_deserialize(&sub, info);
+ if (r < 0) {
free(info);
return r;
}
@@ -3133,7 +3024,8 @@ 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_STRUCT && streq(name, "Listen")) {
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT &&
+ streq(name, "Listen")) {
DBusMessageIter sub, sub2;
dbus_message_iter_recurse(iter, &sub);
@@ -3159,7 +3051,8 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
return 0;
- } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING && streq(name, "DropInPaths")) {
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING &&
+ streq(name, "DropInPaths")) {
int r = bus_parse_strv_iter(iter, &i->dropin_paths);
if (r < 0)
return r;
@@ -3182,6 +3075,36 @@ 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_STRUCT &&
+ streq(name, "Conditions")) {
+ DBusMessageIter sub, sub2;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ const char *cond, *param;
+ dbus_bool_t trigger, negate;
+ dbus_int32_t state;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+ log_debug("here");
+
+ if(bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &cond, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_BOOLEAN, &trigger, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_BOOLEAN, &negate, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &param, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_INT32, &state, false) >= 0) {
+ log_debug("%s %d %d %s %d", cond, trigger, negate, param, state);
+ if (state < 0 && (!trigger || !i->failed_condition)) {
+ i->failed_condition = cond;
+ i->failed_condition_trigger = trigger;
+ i->failed_condition_negate = negate;
+ i->failed_condition_param = param;
+ }
+ }
+
+ dbus_message_iter_next(&sub);
+ }
}
break;
@@ -3350,30 +3273,6 @@ static int print_property(const char *name, DBusMessageIter *iter) {
return 0;
- } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && streq(name, "ControlGroupAttributes")) {
- DBusMessageIter sub, sub2;
-
- dbus_message_iter_recurse(iter, &sub);
- while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
- const char *controller, *attr, *value;
-
- dbus_message_iter_recurse(&sub, &sub2);
-
- if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &controller, true) >= 0 &&
- bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &attr, true) >= 0 &&
- bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &value, false) >= 0) {
-
- printf("ControlGroupAttributes={ controller=%s ; attribute=%s ; value=\"%s\" }\n",
- controller,
- attr,
- value);
- }
-
- dbus_message_iter_next(&sub);
- }
-
- return 0;
-
} else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && startswith(name, "Exec")) {
DBusMessageIter sub;
@@ -3408,8 +3307,62 @@ static int print_property(const char *name, DBusMessageIter *iter) {
}
return 0;
+
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && streq(name, "DeviceAllow")) {
+ DBusMessageIter sub, sub2;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ const char *path, *rwm;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &rwm, false) >= 0)
+ printf("%s=%s %s\n", name, strna(path), strna(rwm));
+
+ dbus_message_iter_next(&sub);
+ }
+ return 0;
+
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && streq(name, "BlockIODeviceWeight")) {
+ DBusMessageIter sub, sub2;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ const char *path;
+ uint64_t weight;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT64, &weight, false) >= 0)
+ printf("%s=%s %" PRIu64 "\n", name, strna(path), weight);
+
+ dbus_message_iter_next(&sub);
+ }
+ return 0;
+
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && (streq(name, "BlockIOReadBandwidth") || streq(name, "BlockIOWriteBandwidth"))) {
+ DBusMessageIter sub, sub2;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ const char *path;
+ uint64_t bandwidth;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT64, &bandwidth, false) >= 0)
+ printf("%s=%s %" PRIu64 "\n", name, strna(path), bandwidth);
+
+ dbus_message_iter_next(&sub);
+ }
+ return 0;
}
+
break;
}
@@ -3422,7 +3375,12 @@ static int print_property(const char *name, DBusMessageIter *iter) {
return 0;
}
-static int show_one(const char *verb, DBusConnection *bus, const char *path, bool show_properties, bool *new_line) {
+static int show_one(const char *verb,
+ DBusConnection *bus,
+ const char *path,
+ bool show_properties,
+ bool *new_line,
+ bool *ellipsized) {
_cleanup_free_ DBusMessage *reply = NULL;
const char *interface = "";
int r;
@@ -3492,7 +3450,7 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
if (streq(verb, "help"))
show_unit_help(&info);
else
- print_status_info(&info);
+ print_status_info(&info, ellipsized);
}
strv_free(info.documentation);
@@ -3501,9 +3459,19 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
if (!streq_ptr(info.active_state, "active") &&
!streq_ptr(info.active_state, "reloading") &&
- streq(verb, "status"))
+ streq(verb, "status")) {
/* According to LSB: "program not running" */
- r = 3;
+ /* 0: program is running or service is OK
+ * 1: program is dead and /var/run pid file exists
+ * 2: program is dead and /var/lock lock file exists
+ * 3: program is not running
+ * 4: program or service status is unknown
+ */
+ if (info.pid_file && access(info.pid_file, F_OK) == 0)
+ r = 1;
+ else
+ r = 3;
+ }
while ((p = info.exec)) {
LIST_REMOVE(ExecStatusInfo, exec, info.exec, p);
@@ -3513,7 +3481,11 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
return r;
}
-static int show_one_by_pid(const char *verb, DBusConnection *bus, uint32_t pid, bool *new_line) {
+static int show_one_by_pid(const char *verb,
+ DBusConnection *bus,
+ uint32_t pid,
+ bool *new_line,
+ bool *ellipsized) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
const char *path = NULL;
_cleanup_dbus_error_free_ DBusError error;
@@ -3541,11 +3513,15 @@ static int show_one_by_pid(const char *verb, DBusConnection *bus, uint32_t pid,
return -EIO;
}
- r = show_one(verb, bus, path, false, new_line);
+ r = show_one(verb, bus, path, false, new_line, ellipsized);
return r;
}
-static int show_all(const char* verb, DBusConnection *bus, bool show_properties, bool *new_line) {
+static int show_all(const char* verb,
+ DBusConnection *bus,
+ bool show_properties,
+ bool *new_line,
+ bool *ellipsized) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
_cleanup_free_ struct unit_info *unit_infos = NULL;
unsigned c = 0;
@@ -3570,7 +3546,7 @@ static int show_all(const char* verb, DBusConnection *bus, bool show_properties,
printf("%s -> '%s'\n", u->id, p);
- r = show_one(verb, bus, p, show_properties, new_line);
+ r = show_one(verb, bus, p, show_properties, new_line, ellipsized);
if (r != 0)
return r;
}
@@ -3582,6 +3558,7 @@ static int show(DBusConnection *bus, char **args) {
int r, ret = 0;
bool show_properties, show_status, new_line = false;
char **name;
+ bool ellipsized = false;
assert(bus);
assert(args);
@@ -3595,83 +3572,319 @@ static int show(DBusConnection *bus, char **args) {
/* If no argument is specified inspect the manager itself */
if (show_properties && strv_length(args) <= 1)
- return show_one(args[0], bus, "/org/freedesktop/systemd1", show_properties, &new_line);
+ return show_one(args[0], bus, "/org/freedesktop/systemd1", show_properties, &new_line, &ellipsized);
if (show_status && strv_length(args) <= 1)
- return show_all(args[0], bus, false, &new_line);
+ ret = show_all(args[0], bus, false, &new_line, &ellipsized);
+ else
+ STRV_FOREACH(name, args+1) {
+ uint32_t id;
- STRV_FOREACH(name, args+1) {
- uint32_t id;
+ if (safe_atou32(*name, &id) < 0) {
+ _cleanup_free_ char *p = NULL, *n = NULL;
+ /* Interpret as unit name */
- if (safe_atou32(*name, &id) < 0) {
- _cleanup_free_ char *p = NULL, *n = NULL;
- /* Interpret as unit name */
+ n = unit_name_mangle(*name);
+ if (!n)
+ return log_oom();
- n = unit_name_mangle(*name);
- if (!n)
- return log_oom();
+ p = unit_dbus_path_from_name(n);
+ if (!p)
+ return log_oom();
+
+ r = show_one(args[0], bus, p, show_properties, &new_line, &ellipsized);
+ if (r != 0)
+ ret = r;
+
+ } else if (show_properties) {
+ _cleanup_free_ char *p = NULL;
+
+ /* Interpret as job id */
+ if (asprintf(&p, "/org/freedesktop/systemd1/job/%u", id) < 0)
+ return log_oom();
+
+ r = show_one(args[0], bus, p, show_properties, &new_line, &ellipsized);
+ if (r != 0)
+ ret = r;
+
+ } else {
+ /* Interpret as PID */
+ r = show_one_by_pid(args[0], bus, id, &new_line, &ellipsized);
+ if (r != 0)
+ ret = r;
+ }
+ }
+
+ if (ellipsized && !arg_quiet)
+ printf("Hint: Some lines were ellipsized, use -l to show in full.\n");
+
+ return ret;
+}
+
+static int append_assignment(DBusMessageIter *iter, const char *assignment) {
+ const char *eq;
+ char *field;
+ DBusMessageIter sub;
+ int r;
+
+ assert(iter);
+ assert(assignment);
+
+ eq = strchr(assignment, '=');
+ if (!eq) {
+ log_error("Not an assignment: %s", assignment);
+ return -EINVAL;
+ }
+
+ field = strndupa(assignment, eq - assignment);
+ eq ++;
+
+ if (!dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &field))
+ return log_oom();
+
+ if (streq(field, "CPUAccounting") ||
+ streq(field, "MemoryAccounting") ||
+ streq(field, "BlockIOAccounting")) {
+ dbus_bool_t b;
+
+ r = parse_boolean(eq);
+ if (r < 0) {
+ log_error("Failed to parse boolean assignment %s.", assignment);
+ return -EINVAL;
+ }
+
+ b = r;
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "b", &sub) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_BOOLEAN, &b))
+ return log_oom();
+
+ } else if (streq(field, "MemoryLimit")) {
+ off_t bytes;
+ uint64_t u;
+
+ r = parse_bytes(eq, &bytes);
+ if (r < 0) {
+ log_error("Failed to parse bytes specification %s", assignment);
+ return -EINVAL;
+ }
+
+ u = bytes;
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "t", &sub) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_UINT64, &u))
+ return log_oom();
- p = unit_dbus_path_from_name(n);
- if (!p)
+ } else if (streq(field, "CPUShares") || streq(field, "BlockIOWeight")) {
+ uint64_t u;
+
+ r = safe_atou64(eq, &u);
+ if (r < 0) {
+ log_error("Failed to parse %s value %s.", field, eq);
+ return -EINVAL;
+ }
+
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "t", &sub) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_UINT64, &u))
+ return log_oom();
+
+ } else if (streq(field, "DevicePolicy")) {
+
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "s", &sub) ||
+ !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &eq))
+ return log_oom();
+
+ } else if (streq(field, "DeviceAllow")) {
+ DBusMessageIter sub2;
+
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a(ss)", &sub) ||
+ !dbus_message_iter_open_container(&sub, DBUS_TYPE_ARRAY, "(ss)", &sub2))
+ return log_oom();
+
+ if (!isempty(eq)) {
+ const char *path, *rwm;
+ DBusMessageIter sub3;
+ char *e;
+
+ e = strchr(eq, ' ');
+ if (e) {
+ path = strndupa(eq, e - eq);
+ rwm = e+1;
+ } else {
+ path = eq;
+ rwm = "";
+ }
+
+ if (!path_startswith(path, "/dev")) {
+ log_error("%s is not a device file in /dev.", path);
+ return -EINVAL;
+ }
+
+ if (!dbus_message_iter_open_container(&sub2, DBUS_TYPE_STRUCT, NULL, &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &path) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &rwm) ||
+ !dbus_message_iter_close_container(&sub2, &sub3))
return log_oom();
+ }
+
+ if (!dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ } else if (streq(field, "BlockIOReadBandwidth") || streq(field, "BlockIOWriteBandwidth")) {
+ DBusMessageIter sub2;
+
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a(st)", &sub) ||
+ !dbus_message_iter_open_container(&sub, DBUS_TYPE_ARRAY, "(st)", &sub2))
+ return log_oom();
+
+ if (!isempty(eq)) {
+ const char *path, *bandwidth;
+ DBusMessageIter sub3;
+ uint64_t u;
+ off_t bytes;
+ char *e;
+
+ e = strchr(eq, ' ');
+ if (e) {
+ path = strndupa(eq, e - eq);
+ bandwidth = e+1;
+ } else {
+ log_error("Failed to parse %s value %s.", field, eq);
+ return -EINVAL;
+ }
- r = show_one(args[0], bus, p, show_properties, &new_line);
- if (r != 0)
- ret = r;
+ if (!path_startswith(path, "/dev")) {
+ log_error("%s is not a device file in /dev.", path);
+ return -EINVAL;
+ }
- } else if (show_properties) {
- _cleanup_free_ char *p = NULL;
+ r = parse_bytes(bandwidth, &bytes);
+ if (r < 0) {
+ log_error("Failed to parse byte value %s.", bandwidth);
+ return -EINVAL;
+ }
- /* Interpret as job id */
- if (asprintf(&p, "/org/freedesktop/systemd1/job/%u", id) < 0)
+ u = (uint64_t) bytes;
+
+ if (!dbus_message_iter_open_container(&sub2, DBUS_TYPE_STRUCT, NULL, &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &path) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_UINT64, &u) ||
+ !dbus_message_iter_close_container(&sub2, &sub3))
return log_oom();
+ }
- r = show_one(args[0], bus, p, show_properties, &new_line);
- if (r != 0)
- ret = r;
+ if (!dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
- } else {
- /* Interpret as PID */
- r = show_one_by_pid(args[0], bus, id, &new_line);
- if (r != 0)
- ret = r;
+ } else if (streq(field, "BlockIODeviceWeight")) {
+ DBusMessageIter sub2;
+
+ if (!dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a(st)", &sub) ||
+ !dbus_message_iter_open_container(&sub, DBUS_TYPE_ARRAY, "(st)", &sub2))
+ return log_oom();
+
+ if (!isempty(eq)) {
+ const char *path, *weight;
+ DBusMessageIter sub3;
+ uint64_t u;
+ char *e;
+
+ e = strchr(eq, ' ');
+ if (e) {
+ path = strndupa(eq, e - eq);
+ weight = e+1;
+ } else {
+ log_error("Failed to parse %s value %s.", field, eq);
+ return -EINVAL;
+ }
+
+ if (!path_startswith(path, "/dev")) {
+ log_error("%s is not a device file in /dev.", path);
+ return -EINVAL;
+ }
+
+ r = safe_atou64(weight, &u);
+ if (r < 0) {
+ log_error("Failed to parse %s value %s.", field, weight);
+ return -EINVAL;
+ }
+ if (!dbus_message_iter_open_container(&sub2, DBUS_TYPE_STRUCT, NULL, &sub3) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &path) ||
+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_UINT64, &u) ||
+ !dbus_message_iter_close_container(&sub2, &sub3))
+ return log_oom();
}
+
+ if (!dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ } else {
+ log_error("Unknown assignment %s.", assignment);
+ return -EINVAL;
}
- return ret;
+ if (!dbus_message_iter_close_container(iter, &sub))
+ return log_oom();
+
+ return 0;
}
-static int dump(DBusConnection *bus, char **args) {
- _cleanup_free_ DBusMessage *reply = NULL;
+static int set_property(DBusConnection *bus, char **args) {
+
+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
+ _cleanup_free_ char *n = NULL;
+ DBusMessageIter iter, sub;
+ dbus_bool_t runtime;
DBusError error;
+ char **i;
int r;
- const char *text;
dbus_error_init(&error);
- pager_open_if_enabled();
-
- r = bus_method_call_with_reply(
- bus,
+ m = dbus_message_new_method_call(
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
- "Dump",
- &reply,
- NULL,
- DBUS_TYPE_INVALID);
- if (r < 0)
- return r;
+ "SetUnitProperties");
+ if (!m)
+ return log_oom();
- if (!dbus_message_get_args(reply, &error,
- DBUS_TYPE_STRING, &text,
- DBUS_TYPE_INVALID)) {
- log_error("Failed to parse reply: %s", bus_error_message(&error));
+ dbus_message_iter_init_append(m, &iter);
+
+ runtime = arg_runtime;
+
+ n = unit_name_mangle(args[1]);
+ if (!n)
+ return log_oom();
+
+ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &n) ||
+ !dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &runtime) ||
+ !dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sv)", &sub))
+ return log_oom();
+
+ STRV_FOREACH(i, args + 2) {
+ DBusMessageIter sub2;
+
+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2))
+ return log_oom();
+
+ r = append_assignment(&sub2, *i);
+ if (r < 0)
+ return r;
+
+ if (!dbus_message_iter_close_container(&sub, &sub2))
+ return log_oom();
+
+ }
+
+ if (!dbus_message_iter_close_container(&iter, &sub))
+ return log_oom();
+
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
+ if (!reply) {
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
dbus_error_free(&error);
- return -EIO;
+ return -EIO;
}
- fputs(text, stdout);
return 0;
}
@@ -3690,13 +3903,13 @@ static int snapshot(DBusConnection *bus, char **args) {
dbus_error_init(&error);
if (strv_length(args) > 1)
- n = snapshot_name_mangle(args[1]);
+ n = unit_name_mangle_with_suffix(args[1], ".snapshot");
else
n = strdup("");
if (!n)
return log_oom();
- r = bus_method_call_with_reply (
+ r = bus_method_call_with_reply(
bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -3765,7 +3978,7 @@ static int delete_snapshot(DBusConnection *bus, char **args) {
_cleanup_free_ char *n = NULL;
int r;
- n = snapshot_name_mangle(*name);
+ n = unit_name_mangle_with_suffix(*name, ".snapshot");
if (!n)
return log_oom();
@@ -3825,9 +4038,9 @@ static int daemon_reload(DBusConnection *bus, char **args) {
/* There's always a fallback possible for
* legacy actions. */
r = -EADDRNOTAVAIL;
- else if (r == -ETIMEDOUT && streq(method, "Reexecute"))
- /* On reexecution, we expect a disconnect, not
- * a reply */
+ else if ((r == -ETIMEDOUT || r == -ECONNRESET) && streq(method, "Reexecute"))
+ /* On reexecution, we expect a disconnect, not a
+ * reply */
r = 0;
else if (r < 0)
log_error("Failed to issue method call: %s", bus_error_message(&error));
@@ -4217,24 +4430,30 @@ static int enable_unit(DBusConnection *bus, char **args) {
if (!args[1])
return 0;
+ r = mangle_names(args+1, &mangled_names);
+ if (r < 0)
+ goto finish;
+
if (!bus || avoid_bus()) {
if (streq(verb, "enable")) {
- r = unit_file_enable(arg_scope, arg_runtime, arg_root, args+1, arg_force, &changes, &n_changes);
+ r = unit_file_enable(arg_scope, arg_runtime, arg_root, mangled_names, arg_force, &changes, &n_changes);
carries_install_info = r;
} else if (streq(verb, "disable"))
- r = unit_file_disable(arg_scope, arg_runtime, arg_root, args+1, &changes, &n_changes);
+ r = unit_file_disable(arg_scope, arg_runtime, arg_root, mangled_names, &changes, &n_changes);
else if (streq(verb, "reenable")) {
- r = unit_file_reenable(arg_scope, arg_runtime, arg_root, args+1, arg_force, &changes, &n_changes);
+ r = unit_file_reenable(arg_scope, arg_runtime, arg_root, mangled_names, arg_force, &changes, &n_changes);
carries_install_info = r;
} else if (streq(verb, "link"))
- r = unit_file_link(arg_scope, arg_runtime, arg_root, args+1, arg_force, &changes, &n_changes);
+ r = unit_file_link(arg_scope, arg_runtime, arg_root, mangled_names, arg_force, &changes, &n_changes);
else if (streq(verb, "preset")) {
- r = unit_file_preset(arg_scope, arg_runtime, arg_root, args+1, arg_force, &changes, &n_changes);
+ r = unit_file_preset(arg_scope, arg_runtime, arg_root, mangled_names, arg_force, &changes, &n_changes);
carries_install_info = r;
} else if (streq(verb, "mask"))
- r = unit_file_mask(arg_scope, arg_runtime, arg_root, args+1, arg_force, &changes, &n_changes);
+ r = unit_file_mask(arg_scope, arg_runtime, arg_root, mangled_names, arg_force, &changes, &n_changes);
else if (streq(verb, "unmask"))
- r = unit_file_unmask(arg_scope, arg_runtime, arg_root, args+1, &changes, &n_changes);
+ r = unit_file_unmask(arg_scope, arg_runtime, arg_root, mangled_names, &changes, &n_changes);
+ else if (streq(verb, "set-default"))
+ r = unit_file_set_default(arg_scope, arg_root, args[1], &changes, &n_changes);
else
assert_not_reached("Unknown verb");
@@ -4278,6 +4497,8 @@ static int enable_unit(DBusConnection *bus, char **args) {
else if (streq(verb, "unmask")) {
method = "UnmaskUnitFiles";
send_force = false;
+ } else if (streq(verb, "set-default")) {
+ method = "SetDefaultTarget";
} else
assert_not_reached("Unknown verb");
@@ -4293,10 +4514,6 @@ static int enable_unit(DBusConnection *bus, char **args) {
dbus_message_iter_init_append(m, &iter);
- r = mangle_names(args+1, &mangled_names);
- if(r < 0)
- goto finish;
-
r = bus_append_strv_iter(&iter, mangled_names);
if (r < 0) {
log_error("Failed to append unit files.");
@@ -4498,19 +4715,20 @@ static int systemctl_help(void) {
" -h --help Show this help\n"
" --version Show package version\n"
" -t --type=TYPE List only units of a particular type\n"
+ " --state=STATE List only units with particular LOAD or SUB or ACTIVE state\n"
" -p --property=NAME Show only properties by this name\n"
" -a --all Show all loaded units/properties, including dead/empty\n"
" ones. To list all units installed on the system, use\n"
" the 'list-unit-files' command instead.\n"
" --reverse Show reverse dependencies with 'list-dependencies'\n"
- " --failed Show only failed units\n"
- " --full Don't ellipsize unit names on output\n"
+ " -l --full Don't ellipsize unit names on output\n"
" --fail When queueing a new job, fail if conflicting jobs are\n"
" pending\n"
- " --irreversible Create jobs which cannot be implicitly cancelled\n"
- " --show-types When showing sockets, explicitly show their type\n"
+ " --irreversible When queueing a new job, make sure it cannot be implicitly\n"
+ " cancelled\n"
" --ignore-dependencies\n"
" When queueing a new job, ignore all its dependencies\n"
+ " --show-types When showing sockets, explicitly show their type\n"
" -i --ignore-inhibitors\n"
" When shutting down or sleeping, ignore inhibitors\n"
" --kill-who=WHO Who to send signal to\n"
@@ -4530,15 +4748,16 @@ static int systemctl_help(void) {
" --system Connect to system manager\n"
" --user Connect to user service manager\n"
" --global Enable/disable unit files globally\n"
+ " --runtime Enable unit files only temporarily until next reboot\n"
" -f --force When enabling unit files, override existing symlinks\n"
" When shutting down, execute action immediately\n"
" --root=PATH Enable unit files in the specified root directory\n"
- " --runtime Enable unit files only temporarily until next reboot\n"
- " -n --lines=INTEGER Journal entries to show\n"
+ " -n --lines=INTEGER Numer of journal entries to show\n"
" -o --output=STRING Change journal output mode (short, short-monotonic,\n"
" verbose, export, json, json-pretty, json-sse, cat)\n\n"
"Unit Commands:\n"
" list-units List loaded units\n"
+ " list-sockets List loaded sockets ordered by address\n"
" start [NAME...] Start (activate) one or more units\n"
" stop [NAME...] Stop (deactivate) one or more units\n"
" reload [NAME...] Reload one or more units\n"
@@ -4555,18 +4774,11 @@ static int systemctl_help(void) {
" status [NAME...|PID...] Show runtime status of one or more units\n"
" show [NAME...|JOB...] Show properties of one or more\n"
" units/jobs or the manager\n"
+ " set-property [NAME] [ASSIGNMENT...]\n"
+ " Sets one or more properties of a unit\n"
" help [NAME...|PID...] Show manual for one or more units\n"
" reset-failed [NAME...] Reset failed state for all, one, or more\n"
" units\n"
- " get-cgroup-attr [NAME] [ATTR] ...\n"
- " Get control group attrubute\n"
- " set-cgroup-attr [NAME] [ATTR] [VALUE] ...\n"
- " Set control group attribute\n"
- " unset-cgroup-attr [NAME] [ATTR...]\n"
- " Unset control group attribute\n"
- " set-cgroup [NAME] [CGROUP...] Add unit to a control group\n"
- " unset-cgroup [NAME] [CGROUP...] Remove unit from a control group\n"
- " load [NAME...] Load one or more units\n"
" list-dependencies [NAME] Recursively show units which are required\n"
" or wanted by this unit or by which this\n"
" unit is required or wanted\n\n"
@@ -4577,16 +4789,16 @@ static int systemctl_help(void) {
" reenable [NAME...] Reenable one or more unit files\n"
" preset [NAME...] Enable/disable one or more unit files\n"
" based on preset configuration\n"
+ " is-enabled [NAME...] Check whether unit files are enabled\n\n"
" mask [NAME...] Mask one or more units\n"
" unmask [NAME...] Unmask one or more units\n"
" link [PATH...] Link one or more units files into\n"
" the search path\n"
- " is-enabled [NAME...] Check whether unit files are enabled\n\n"
+ " get-default Get the name of the default target\n"
+ " set-default NAME Set the default target\n\n"
"Job Commands:\n"
" list-jobs List jobs\n"
" cancel [JOB...] Cancel all, one, or more jobs\n\n"
- "Status Commands:\n"
- " dump Dump server status\n"
"Snapshot Commands:\n"
" snapshot [NAME] Create a snapshot\n"
" delete [NAME...] Remove one or more snapshots\n\n"
@@ -4691,13 +4903,6 @@ static int help_types(void) {
puts(t);
}
- puts("\nAvailable unit load states: ");
- for(i = 0; i < _UNIT_LOAD_STATE_MAX; i++) {
- t = unit_load_state_to_string(i);
- if (t)
- puts(t);
- }
-
return 0;
}
@@ -4720,53 +4925,54 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
ARG_NO_PAGER,
ARG_NO_WALL,
ARG_ROOT,
- ARG_FULL,
ARG_NO_RELOAD,
ARG_KILL_WHO,
ARG_NO_ASK_PASSWORD,
ARG_FAILED,
ARG_RUNTIME,
ARG_FORCE,
- ARG_PLAIN
+ ARG_PLAIN,
+ ARG_STATE
};
static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "version", no_argument, NULL, ARG_VERSION },
- { "type", required_argument, NULL, 't' },
- { "property", required_argument, NULL, 'p' },
- { "all", no_argument, NULL, 'a' },
- { "reverse", no_argument, NULL, ARG_REVERSE },
- { "after", no_argument, NULL, ARG_AFTER },
- { "before", no_argument, NULL, ARG_BEFORE },
- { "show-types", no_argument, NULL, ARG_SHOW_TYPES },
- { "failed", no_argument, NULL, ARG_FAILED },
- { "full", no_argument, NULL, ARG_FULL },
- { "fail", no_argument, NULL, ARG_FAIL },
- { "irreversible", no_argument, NULL, ARG_IRREVERSIBLE },
- { "ignore-dependencies", no_argument, NULL, ARG_IGNORE_DEPENDENCIES },
- { "ignore-inhibitors", no_argument, NULL, 'i' },
- { "user", no_argument, NULL, ARG_USER },
- { "system", no_argument, NULL, ARG_SYSTEM },
- { "global", no_argument, NULL, ARG_GLOBAL },
- { "no-block", no_argument, NULL, ARG_NO_BLOCK },
- { "no-legend", no_argument, NULL, ARG_NO_LEGEND },
- { "no-pager", no_argument, NULL, ARG_NO_PAGER },
- { "no-wall", no_argument, NULL, ARG_NO_WALL },
- { "quiet", no_argument, NULL, 'q' },
- { "root", required_argument, NULL, ARG_ROOT },
- { "force", no_argument, NULL, ARG_FORCE },
- { "no-reload", no_argument, NULL, ARG_NO_RELOAD },
- { "kill-who", required_argument, NULL, ARG_KILL_WHO },
- { "signal", required_argument, NULL, 's' },
- { "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
- { "host", required_argument, NULL, 'H' },
- { "privileged",no_argument, NULL, 'P' },
- { "runtime", no_argument, NULL, ARG_RUNTIME },
- { "lines", required_argument, NULL, 'n' },
- { "output", required_argument, NULL, 'o' },
- { "plain", no_argument, NULL, ARG_PLAIN },
- { NULL, 0, NULL, 0 }
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "type", required_argument, NULL, 't' },
+ { "property", required_argument, NULL, 'p' },
+ { "all", no_argument, NULL, 'a' },
+ { "reverse", no_argument, NULL, ARG_REVERSE },
+ { "after", no_argument, NULL, ARG_AFTER },
+ { "before", no_argument, NULL, ARG_BEFORE },
+ { "show-types", no_argument, NULL, ARG_SHOW_TYPES },
+ { "failed", no_argument, NULL, ARG_FAILED }, /* compatibility only */
+ { "full", no_argument, NULL, 'l' },
+ { "fail", no_argument, NULL, ARG_FAIL },
+ { "irreversible", no_argument, NULL, ARG_IRREVERSIBLE },
+ { "ignore-dependencies", no_argument, NULL, ARG_IGNORE_DEPENDENCIES },
+ { "ignore-inhibitors", no_argument, NULL, 'i' },
+ { "user", no_argument, NULL, ARG_USER },
+ { "system", no_argument, NULL, ARG_SYSTEM },
+ { "global", no_argument, NULL, ARG_GLOBAL },
+ { "no-block", no_argument, NULL, ARG_NO_BLOCK },
+ { "no-legend", no_argument, NULL, ARG_NO_LEGEND },
+ { "no-pager", no_argument, NULL, ARG_NO_PAGER },
+ { "no-wall", no_argument, NULL, ARG_NO_WALL },
+ { "quiet", no_argument, NULL, 'q' },
+ { "root", required_argument, NULL, ARG_ROOT },
+ { "force", no_argument, NULL, ARG_FORCE },
+ { "no-reload", no_argument, NULL, ARG_NO_RELOAD },
+ { "kill-who", required_argument, NULL, ARG_KILL_WHO },
+ { "signal", required_argument, NULL, 's' },
+ { "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
+ { "host", required_argument, NULL, 'H' },
+ { "privileged", no_argument, NULL, 'P' },
+ { "runtime", no_argument, NULL, ARG_RUNTIME },
+ { "lines", required_argument, NULL, 'n' },
+ { "output", required_argument, NULL, 'o' },
+ { "plain", no_argument, NULL, ARG_PLAIN },
+ { "state", required_argument, NULL, ARG_STATE },
+ { NULL, 0, NULL, 0 }
};
int c;
@@ -4774,7 +4980,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:i", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "ht:p:alqfs:H:Pn:o:i", options, NULL)) >= 0) {
switch (c) {
@@ -4810,8 +5016,12 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
continue;
}
+ /* It's much nicer to use --state= for
+ * load states, but let's support this
+ * in --types= too for compatibility
+ * with old versions */
if (unit_load_state_from_string(optarg) >= 0) {
- if (strv_push(&arg_load_states, type))
+ if (strv_push(&arg_states, type) < 0)
return log_oom();
type = NULL;
continue;
@@ -4843,7 +5053,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
if (!prop)
return log_oom();
- if (strv_push(&arg_properties, prop)) {
+ if (strv_push(&arg_properties, prop) < 0) {
free(prop);
return log_oom();
}
@@ -4922,12 +5132,14 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
arg_root = optarg;
break;
- case ARG_FULL:
+ case 'l':
arg_full = true;
break;
case ARG_FAILED:
- arg_failed = true;
+ if (strv_extend(&arg_states, "failed") < 0)
+ return log_oom();
+
break;
case 'q':
@@ -4967,7 +5179,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
case 'H':
arg_transport = TRANSPORT_SSH;
- arg_host = optarg;
+ parse_user_at_host(optarg, &arg_user, &arg_host);
break;
case ARG_RUNTIME:
@@ -4997,6 +5209,25 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
arg_plain = true;
break;
+ case ARG_STATE: {
+ char *word, *state;
+ size_t size;
+
+ FOREACH_WORD_SEPARATOR(word, size, optarg, ",", state) {
+ char *s;
+
+ s = strndup(word, size);
+ if (!s)
+ return log_oom();
+
+ if (strv_push(&arg_states, s) < 0) {
+ free(s);
+ return log_oom();
+ }
+ }
+ break;
+ }
+
case '?':
return -EINVAL;
@@ -5447,94 +5678,6 @@ _pure_ static int action_to_runlevel(void) {
return table[arg_action];
}
-static int talk_upstart(void) {
- _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
- _cleanup_dbus_error_free_ DBusError error;
- int previous, rl, r;
- char
- env1_buf[] = "RUNLEVEL=X",
- env2_buf[] = "PREVLEVEL=X";
- char *env1 = env1_buf, *env2 = env2_buf;
- const char *emit = "runlevel";
- dbus_bool_t b_false = FALSE;
- DBusMessageIter iter, sub;
- DBusConnection *bus;
-
- dbus_error_init(&error);
-
- if (!(rl = action_to_runlevel()))
- return 0;
-
- if (utmp_get_runlevel(&previous, NULL) < 0)
- previous = 'N';
-
- if (!(bus = dbus_connection_open_private("unix:abstract=/com/ubuntu/upstart", &error))) {
- if (dbus_error_has_name(&error, DBUS_ERROR_NO_SERVER)) {
- r = 0;
- goto finish;
- }
-
- log_error("Failed to connect to Upstart bus: %s", bus_error_message(&error));
- r = -EIO;
- goto finish;
- }
-
- if ((r = bus_check_peercred(bus)) < 0) {
- log_error("Failed to verify owner of bus.");
- goto finish;
- }
-
- if (!(m = dbus_message_new_method_call(
- "com.ubuntu.Upstart",
- "/com/ubuntu/Upstart",
- "com.ubuntu.Upstart0_6",
- "EmitEvent"))) {
-
- log_error("Could not allocate message.");
- r = -ENOMEM;
- goto finish;
- }
-
- dbus_message_iter_init_append(m, &iter);
-
- env1_buf[sizeof(env1_buf)-2] = rl;
- env2_buf[sizeof(env2_buf)-2] = previous;
-
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &emit) ||
- !dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &sub) ||
- !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &env1) ||
- !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &env2) ||
- !dbus_message_iter_close_container(&iter, &sub) ||
- !dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &b_false)) {
- log_error("Could not append arguments to message.");
- r = -ENOMEM;
- goto finish;
- }
-
- if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) {
-
- if (bus_error_is_no_service(&error)) {
- r = -EADDRNOTAVAIL;
- goto finish;
- }
-
- log_error("Failed to issue method call: %s", bus_error_message(&error));
- r = -EIO;
- goto finish;
- }
-
- r = 1;
-
-finish:
- if (bus) {
- dbus_connection_flush(bus);
- dbus_connection_close(bus);
- dbus_connection_unref(bus);
- }
-
- return r;
-}
-
static int talk_initctl(void) {
struct init_request request = {};
int r;
@@ -5586,7 +5729,6 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
{ "list-sockets", LESS, 1, list_sockets },
{ "list-jobs", EQUAL, 1, list_jobs },
{ "clear-jobs", EQUAL, 1, daemon_reload },
- { "load", MORE, 2, load_unit },
{ "cancel", MORE, 2, cancel_job },
{ "start", MORE, 2, start_unit },
{ "stop", MORE, 2, start_unit },
@@ -5600,11 +5742,6 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
{ "condreload", MORE, 2, start_unit }, /* For compatibility with ALTLinux */
{ "condrestart", MORE, 2, start_unit }, /* For compatibility with RH */
{ "isolate", EQUAL, 2, start_unit },
- { "set-cgroup", MORE, 3, set_cgroup },
- { "unset-cgroup", MORE, 3, set_cgroup },
- { "get-cgroup-attr", MORE, 3, get_cgroup_attr },
- { "set-cgroup-attr", MORE, 4, set_cgroup_attr },
- { "unset-cgroup-attr", MORE, 3, set_cgroup },
{ "kill", MORE, 2, kill_unit },
{ "is-active", MORE, 2, check_unit_active },
{ "check", MORE, 2, check_unit_active },
@@ -5612,7 +5749,6 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
{ "show", MORE, 1, show },
{ "status", MORE, 1, show },
{ "help", MORE, 2, show },
- { "dump", EQUAL, 1, dump },
{ "snapshot", LESS, 2, snapshot },
{ "delete", MORE, 2, delete_snapshot },
{ "daemon-reload", EQUAL, 1, daemon_reload },
@@ -5642,6 +5778,9 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
{ "link", MORE, 2, enable_unit },
{ "switch-root", MORE, 2, switch_root },
{ "list-dependencies", LESS, 2, list_dependencies },
+ { "set-default", EQUAL, 2, enable_unit },
+ { "get-default", LESS, 1, get_default },
+ { "set-property", MORE, 3, set_property },
};
int left;
@@ -5713,7 +5852,9 @@ static int systemctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
!streq(verbs[i].verb, "preset") &&
!streq(verbs[i].verb, "mask") &&
!streq(verbs[i].verb, "unmask") &&
- !streq(verbs[i].verb, "link")) {
+ !streq(verbs[i].verb, "link") &&
+ !streq(verbs[i].verb, "set-default") &&
+ !streq(verbs[i].verb, "get-default")) {
if (running_in_chroot() > 0) {
log_info("Running in chroot, ignoring request.");
@@ -5808,11 +5949,6 @@ static int start_with_fallback(DBusConnection *bus) {
goto done;
}
- /* Hmm, talking to systemd via D-Bus didn't work. Then
- * let's try to talk to Upstart via D-Bus. */
- if (talk_upstart() > 0)
- goto done;
-
/* Nothing else worked, so let's try
* /dev/initctl */
if (talk_initctl() > 0)
@@ -5954,6 +6090,11 @@ int main(int argc, char*argv[]) {
log_parse_environment();
log_open();
+ /* Explicitly not on_tty() to avoid setting cached value.
+ * This becomes relevant for piping output which might be
+ * ellipsized. */
+ original_stdout_is_tty = isatty(STDOUT_FILENO);
+
r = parse_argv(argc, argv);
if (r < 0)
goto finish;
@@ -5983,7 +6124,7 @@ int main(int argc, char*argv[]) {
bus_connect_system_polkit(&bus, &error);
private_bus = false;
} else if (arg_transport == TRANSPORT_SSH) {
- bus_connect_system_ssh(NULL, arg_host, &bus, &error);
+ bus_connect_system_ssh(arg_user, arg_host, &bus, &error);
private_bus = false;
} else
assert_not_reached("Uh, invalid transport...");
@@ -6052,7 +6193,7 @@ finish:
dbus_shutdown();
strv_free(arg_types);
- strv_free(arg_load_states);
+ strv_free(arg_states);
strv_free(arg_properties);
pager_close();
diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h
index c1ec50871f..878001ccb5 100644
--- a/src/systemd/sd-bus.h
+++ b/src/systemd/sd-bus.h
@@ -27,6 +27,7 @@
#include <sd-id128.h>
#include "sd-bus-protocol.h"
+#include "sd-memfd.h"
#ifdef __cplusplus
extern "C" {
@@ -40,18 +41,6 @@ extern "C" {
# endif
#endif
-/* TODO:
- * - add page donation logic
- * - api for appending/reading fixed arrays
- * - merge busctl into systemctl or so?
- * - default policy (allow uid == 0 and our own uid)
- *
- * - enforce alignment of pointers passed in
- * - negotiation for attach attributes
- *
- * - for kernel and unix transports allow setting the unix user/access mode for the node
- */
-
typedef struct sd_bus sd_bus;
typedef struct sd_bus_message sd_bus_message;
@@ -61,7 +50,7 @@ typedef struct {
int need_free;
} sd_bus_error;
-typedef int (*sd_bus_message_handler_t)(sd_bus *bus, int ret, sd_bus_message *m, void *userdata);
+typedef int (*sd_bus_message_handler_t)(sd_bus *bus, sd_bus_message *m, void *userdata);
/* Connections */
@@ -75,7 +64,14 @@ int sd_bus_set_exec(sd_bus *bus, const char *path, char *const argv[]);
int sd_bus_set_bus_client(sd_bus *bus, int b);
int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id);
int sd_bus_set_anonymous(sd_bus *bus, int b);
-int sd_bus_set_negotiate_fds(sd_bus *bus, int b);
+int sd_bus_negotiate_fds(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_comm(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_exe(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_cmdline(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_cgroup(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_caps(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_selinux_context(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_audit(sd_bus *bus, int b);
int sd_bus_start(sd_bus *ret);
void sd_bus_close(sd_bus *bus);
@@ -163,11 +159,17 @@ int sd_bus_message_set_destination(sd_bus_message *m, const char *destination);
int sd_bus_message_append(sd_bus_message *m, const char *types, ...);
int sd_bus_message_append_basic(sd_bus_message *m, char type, const void *p);
+int sd_bus_message_append_array(sd_bus_message *m, char type, const void *ptr, size_t size);
+int sd_bus_message_append_array_space(sd_bus_message *m, char type, size_t size, void **ptr);
+int sd_bus_message_append_array_memfd(sd_bus_message *m, char type, sd_memfd *memfd);
+int sd_bus_message_append_string_space(sd_bus_message *m, size_t size, char **s);
+int sd_bus_message_append_string_memfd(sd_bus_message *m, sd_memfd* memfd);
int sd_bus_message_open_container(sd_bus_message *m, char type, const char *contents);
int sd_bus_message_close_container(sd_bus_message *m);
int sd_bus_message_read(sd_bus_message *m, const char *types, ...);
int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p);
+int sd_bus_message_read_array(sd_bus_message *m, char type, const void **ptr, size_t *size);
int sd_bus_message_enter_container(sd_bus_message *m, char type, const char *contents);
int sd_bus_message_exit_container(sd_bus_message *m);
int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char **contents);
@@ -203,6 +205,12 @@ int sd_bus_error_copy(sd_bus_error *dest, const sd_bus_error *e);
int sd_bus_error_is_set(const sd_bus_error *e);
int sd_bus_error_has_name(const sd_bus_error *e, const char *name);
+#define SD_BUS_APPEND_ID128(x) 16, \
+ (x).bytes[0], (x).bytes[1], (x).bytes[2], (x).bytes[3], \
+ (x).bytes[4], (x).bytes[5], (x).bytes[6], (x).bytes[7], \
+ (x).bytes[8], (x).bytes[9], (x).bytes[10], (x).bytes[11], \
+ (x).bytes[12], (x).bytes[13], (x).bytes[14], (x).bytes[15]
+
#ifdef __cplusplus
}
#endif
diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h
index 5375d49963..72ea328b28 100644
--- a/src/systemd/sd-journal.h
+++ b/src/systemd/sd-journal.h
@@ -86,7 +86,9 @@ typedef struct sd_journal sd_journal;
enum {
SD_JOURNAL_LOCAL_ONLY = 1,
SD_JOURNAL_RUNTIME_ONLY = 2,
- SD_JOURNAL_SYSTEM_ONLY = 4
+ SD_JOURNAL_SYSTEM = 4,
+ SD_JOURNAL_SYSTEM_ONLY = SD_JOURNAL_SYSTEM, /* deprecated */
+ SD_JOURNAL_CURRENT_USER = 8,
};
/* Wakeup event types */
@@ -98,6 +100,7 @@ enum {
int sd_journal_open(sd_journal **ret, int flags);
int sd_journal_open_directory(sd_journal **ret, const char *path, int flags);
+int sd_journal_open_files(sd_journal **ret, const char **paths, int flags);
void sd_journal_close(sd_journal *j);
int sd_journal_previous(sd_journal *j);
diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h
index 4855e327a1..c5837f0ca0 100644
--- a/src/systemd/sd-login.h
+++ b/src/systemd/sd-login.h
@@ -72,9 +72,12 @@ int sd_pid_get_unit(pid_t pid, char **unit);
int sd_pid_get_user_unit(pid_t pid, char **unit);
/* Get machine name from PID, for processes assigned to VM or
- * container. This will return an error for non-service processes. */
+ * container. This will return an error for non-machine processes. */
int sd_pid_get_machine_name(pid_t pid, char **name);
+/* Get slice name from PID. */
+int sd_pid_get_slice(pid_t pid, char **name);
+
/* Get state from uid. Possible states: offline, lingering, online, active, closing */
int sd_uid_get_state(uid_t uid, char**state);
@@ -121,6 +124,9 @@ int sd_session_get_display(const char *session, char **display);
/* Determine the TTY of this session. */
int sd_session_get_tty(const char *session, char **display);
+/* Determine the VT number of this session. */
+int sd_session_get_vt(const char *session, unsigned *vtnr);
+
/* Return active session and user of seat */
int sd_seat_get_active(const char *seat, char **session, uid_t *uid);
diff --git a/src/systemd/sd-memfd.h b/src/systemd/sd-memfd.h
new file mode 100644
index 0000000000..ee140e48d3
--- /dev/null
+++ b/src/systemd/sd-memfd.h
@@ -0,0 +1,58 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#ifndef foosdmemfdhfoo
+#define foosdmemfdhfoo
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <inttypes.h>
+#include <sys/types.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct sd_memfd sd_memfd;
+
+int sd_memfd_new(sd_memfd **m);
+int sd_memfd_make(int fd, sd_memfd **m);
+
+int sd_memfd_new_and_map(sd_memfd **m, size_t sz, void **p);
+
+void sd_memfd_free(sd_memfd *m);
+
+int sd_memfd_get_fd(sd_memfd *m);
+int sd_memfd_get_file(sd_memfd *m, FILE **f);
+int sd_memfd_dup_fd(sd_memfd *n);
+
+int sd_memfd_map(sd_memfd *m, uint64_t offset, size_t size, void **p);
+
+int sd_memfd_set_sealed(sd_memfd *m, int b);
+int sd_memfd_get_sealed(sd_memfd *m);
+
+int sd_memfd_get_size(sd_memfd *m, uint64_t *sz);
+int sd_memfd_set_size(sd_memfd *m, uint64_t sz);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/systemd/sd-messages.h b/src/systemd/sd-messages.h
index c8de331691..c811a064e3 100644
--- a/src/systemd/sd-messages.h
+++ b/src/systemd/sd-messages.h
@@ -31,10 +31,15 @@ extern "C" {
/* Hey! If you add a new message here, you *must* also update the
* message catalog with an appropriate explanation */
+/* And if you add a new ID here, make sure to generate a random one
+ * with journalctl --new-id128. Do not use any other IDs, and do not
+ * count them up manually. */
+
#define SD_MESSAGE_JOURNAL_START SD_ID128_MAKE(f7,73,79,a8,49,0b,40,8b,be,5f,69,40,50,5a,77,7b)
#define SD_MESSAGE_JOURNAL_STOP SD_ID128_MAKE(d9,3f,b3,c9,c2,4d,45,1a,97,ce,a6,15,ce,59,c0,0b)
#define SD_MESSAGE_JOURNAL_DROPPED SD_ID128_MAKE(a5,96,d6,fe,7b,fa,49,94,82,8e,72,30,9e,95,d6,1e)
#define SD_MESSAGE_JOURNAL_MISSED SD_ID128_MAKE(e9,bf,28,e6,e8,34,48,1b,b6,f4,8f,54,8a,d1,36,06)
+#define SD_MESSAGE_JOURNAL_USAGE SD_ID128_MAKE(ec,38,7f,57,7b,84,4b,8f,a9,48,f3,3c,ad,9a,75,e6)
#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)
@@ -42,6 +47,8 @@ extern "C" {
#define SD_MESSAGE_SESSION_STOP SD_ID128_MAKE(33,54,93,94,24,b4,45,6d,98,02,ca,83,33,ed,42,4a)
#define SD_MESSAGE_SEAT_START SD_ID128_MAKE(fc,be,fc,5d,a2,3d,42,80,93,f9,7c,82,a9,29,0f,7b)
#define SD_MESSAGE_SEAT_STOP SD_ID128_MAKE(e7,85,2b,fe,46,78,4e,d0,ac,cd,e0,4b,c8,64,c2,d5)
+#define SD_MESSAGE_MACHINE_START SD_ID128_MAKE(24,d8,d4,45,25,73,40,24,96,06,83,81,a6,31,2d,f2)
+#define SD_MESSAGE_MACHINE_STOP SD_ID128_MAKE(58,43,2b,d3,ba,ce,47,7c,b5,14,b5,63,81,b8,a7,58)
#define SD_MESSAGE_TIME_CHANGE SD_ID128_MAKE(c7,a7,87,07,9b,35,4e,aa,a9,e7,7b,37,18,93,cd,27)
#define SD_MESSAGE_TIMEZONE_CHANGE SD_ID128_MAKE(45,f8,2f,4a,ef,7a,4b,bf,94,2c,e8,61,d1,f2,09,90)
diff --git a/src/test/test-boot-timestamps.c b/src/test/test-boot-timestamps.c
new file mode 100644
index 0000000000..4ede318e38
--- /dev/null
+++ b/src/test/test-boot-timestamps.c
@@ -0,0 +1,98 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Lennart Poettering
+ Copyright 2013 Kay Sievers
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "util.h"
+#include "log.h"
+#include "boot-timestamps.h"
+#include "efivars.h"
+#include "acpi-fpdt.h"
+
+static int test_acpi_fpdt(void) {
+ usec_t loader_start;
+ usec_t loader_exit;
+ char ts_start[FORMAT_TIMESPAN_MAX];
+ char ts_exit[FORMAT_TIMESPAN_MAX];
+ char ts_span[FORMAT_TIMESPAN_MAX];
+ int r;
+
+ r = acpi_get_boot_usec(&loader_start, &loader_exit);
+ if (r < 0) {
+ if (r != -ENOENT)
+ log_error("Failed to read ACPI FPDT: %s", strerror(-r));
+ return r;
+ }
+
+ log_info("ACPI FPDT: loader start=%s exit=%s duration=%s",
+ format_timespan(ts_start, sizeof(ts_start), loader_start, USEC_PER_MSEC),
+ format_timespan(ts_exit, sizeof(ts_exit), loader_exit, USEC_PER_MSEC),
+ format_timespan(ts_span, sizeof(ts_span), loader_exit - loader_start, USEC_PER_MSEC));
+
+ return 0;
+}
+
+static int test_efi_loader(void) {
+ usec_t loader_start;
+ usec_t loader_exit;
+ char ts_start[FORMAT_TIMESPAN_MAX];
+ char ts_exit[FORMAT_TIMESPAN_MAX];
+ char ts_span[FORMAT_TIMESPAN_MAX];
+ int r;
+
+ r = efi_loader_get_boot_usec(&loader_start, &loader_exit);
+ if (r < 0) {
+ if (r != -ENOENT)
+ log_error("Failed to read EFI loader data: %s", strerror(-r));
+ return r;
+ }
+
+ log_info("EFI Loader: start=%s exit=%s duration=%s",
+ format_timespan(ts_start, sizeof(ts_start), loader_start, USEC_PER_MSEC),
+ format_timespan(ts_exit, sizeof(ts_exit), loader_exit, USEC_PER_MSEC),
+ format_timespan(ts_span, sizeof(ts_span), loader_exit - loader_start, USEC_PER_MSEC));
+
+ return 0;
+}
+
+int main(int argc, char* argv[]) {
+ char s[MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)];
+ int r;
+ dual_timestamp fw, l, k;
+
+ test_acpi_fpdt();
+ test_efi_loader();
+
+ dual_timestamp_from_monotonic(&k, 0);
+
+ r = boot_timestamps(NULL, &fw, &l);
+ if (r < 0) {
+ log_error("Failed to read variables: %s", strerror(-r));
+ return 1;
+ }
+
+ log_info("Firmware began %s before kernel.", format_timespan(s, sizeof(s), fw.monotonic, 0));
+ log_info("Loader began %s before kernel.", format_timespan(s, sizeof(s), l.monotonic, 0));
+ log_info("Firmware began %s.", format_timestamp(s, sizeof(s), fw.realtime));
+ log_info("Loader began %s.", format_timestamp(s, sizeof(s), l.realtime));
+ log_info("Kernel began %s.", format_timestamp(s, sizeof(s), k.realtime));
+
+ return 0;
+}
diff --git a/src/test/test-cgroup-util.c b/src/test/test-cgroup-util.c
index c9634d42b0..16bf968340 100644
--- a/src/test/test-cgroup-util.c
+++ b/src/test/test-cgroup-util.c
@@ -23,6 +23,7 @@
#include "util.h"
#include "cgroup-util.h"
+#include "test-helper.h"
static void check_p_d_u(const char *path, int code, const char *result) {
_cleanup_free_ char *unit = NULL;
@@ -32,12 +33,15 @@ static void check_p_d_u(const char *path, int code, const char *result) {
}
static void test_path_decode_unit(void) {
- check_p_d_u("getty@.service/getty@tty2.service", 0, "getty@tty2.service");
- check_p_d_u("getty@.service/getty@tty2.service/xxx", 0, "getty@tty2.service");
+ check_p_d_u("getty@tty2.service", 0, "getty@tty2.service");
+ check_p_d_u("getty@tty2.service/", 0, "getty@tty2.service");
+ check_p_d_u("getty@tty2.service/xxx", 0, "getty@tty2.service");
check_p_d_u("getty@.service/", -EINVAL, NULL);
check_p_d_u("getty@.service", -EINVAL, NULL);
check_p_d_u("getty.service", 0, "getty.service");
check_p_d_u("getty", -EINVAL, NULL);
+ check_p_d_u("getty/waldo", -EINVAL, NULL);
+ check_p_d_u("_cpu.service", 0, "cpu.service");
}
static void check_p_g_u(const char *path, int code, const char *result) {
@@ -47,6 +51,18 @@ static void check_p_g_u(const char *path, int code, const char *result) {
assert_se(streq_ptr(unit, result));
}
+static void test_path_get_unit(void) {
+ check_p_g_u("/system.slice/foobar.service/sdfdsaf", 0, "foobar.service");
+ check_p_g_u("/system.slice/getty@tty5.service", 0, "getty@tty5.service");
+ check_p_g_u("/system.slice/getty@tty5.service/aaa/bbb", 0, "getty@tty5.service");
+ check_p_g_u("/system.slice/getty@tty5.service/", 0, "getty@tty5.service");
+ check_p_g_u("/system.slice/getty@tty6.service/tty5", 0, "getty@tty6.service");
+ check_p_g_u("sadfdsafsda", -EINVAL, NULL);
+ check_p_g_u("/system.slice/getty####@tty6.service/xxx", -EINVAL, NULL);
+ check_p_g_u("/system.slice/system-waldo.slice/foobar.service/sdfdsaf", 0, "foobar.service");
+ check_p_g_u("/system.slice/system-waldo.slice/_cpu.service/sdfdsaf", 0, "cpu.service");
+}
+
static void check_p_g_u_u(const char *path, int code, const char *result) {
_cleanup_free_ char *unit = NULL;
@@ -54,39 +70,65 @@ static void check_p_g_u_u(const char *path, int code, const char *result) {
assert_se(streq_ptr(unit, result));
}
-static void test_path_get_unit(void) {
- check_p_g_u("/system/foobar.service/sdfdsaf", 0, "foobar.service");
- check_p_g_u("/system/getty@.service/getty@tty5.service", 0, "getty@tty5.service");
- check_p_g_u("/system/getty@.service/getty@tty5.service/aaa/bbb", 0, "getty@tty5.service");
- check_p_g_u("/system/getty@.service/getty@tty5.service/", 0, "getty@tty5.service");
- check_p_g_u("/system/getty@tty6.service/tty5", 0, "getty@tty6.service");
- check_p_g_u("sadfdsafsda", -ENOENT, NULL);
- check_p_g_u("/system/getty####@tty6.service/tty5", -EINVAL, NULL);
+static void test_path_get_user_unit(void) {
+ check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/foobar.service", 0, "foobar.service");
+ check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/waldo.slice/foobar.service", 0, "foobar.service");
+ check_p_g_u_u("/user.slice/user-1002.slice/session-2.scope/foobar.service/waldo", 0, "foobar.service");
+ check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/foobar.service/waldo/uuuux", 0, "foobar.service");
+ check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/waldo/waldo/uuuux", -EINVAL, NULL);
+ check_p_g_u_u("/user.slice/user-1000.slice/session-2.scope/foobar@pie.service/pa/po", 0, "foobar@pie.service");
+ check_p_g_u_u("/session-2.scope/foobar@pie.service/pa/po", 0, "foobar@pie.service");
+ check_p_g_u_u("/xyz.slice/xyz-waldo.slice/session-77.scope/foobar@pie.service/pa/po", 0, "foobar@pie.service");
+ check_p_g_u_u("/meh.service", -ENOENT, NULL);
+ check_p_g_u_u("/session-3.scope/_cpu.service", 0, "cpu.service");
}
-static void test_path_get_user_unit(void) {
- check_p_g_u_u("/user/lennart/2/systemd-21548/foobar.service", 0, "foobar.service");
- check_p_g_u_u("/user/lennart/2/systemd-21548/foobar.service/waldo", 0, "foobar.service");
- check_p_g_u_u("/user/lennart/2/systemd-21548/foobar.service/waldo/uuuux", 0, "foobar.service");
- check_p_g_u_u("/user/lennart/2/systemd-21548/waldo/waldo/uuuux", -EINVAL, NULL);
- check_p_g_u_u("/user/lennart/2/foobar.service", -ENOENT, NULL);
- check_p_g_u_u("/user/lennart/2/systemd-21548/foobar@.service/foobar@pie.service/pa/po", 0, "foobar@pie.service");
+static void check_p_g_s(const char *path, int code, const char *result) {
+ _cleanup_free_ char *s = NULL;
+
+ assert_se(cg_path_get_session(path, &s) == code);
+ assert_se(streq_ptr(s, result));
}
-static void test_get_paths(void) {
- _cleanup_free_ char *a = NULL, *b = NULL, *c = NULL, *d = NULL;
+static void test_path_get_session(void) {
+ check_p_g_s("/user.slice/user-1000.slice/session-2.scope/foobar.service", 0, "2");
+ check_p_g_s("/session-3.scope", 0, "3");
+ check_p_g_s("", -ENOENT, 0);
+}
- assert_se(cg_get_root_path(&a) >= 0);
- log_info("Root = %s", a);
+static void check_p_g_o_u(const char *path, int code, uid_t result) {
+ uid_t uid = 0;
+
+ assert_se(cg_path_get_owner_uid(path, &uid) == code);
+ assert_se(uid == result);
+}
+
+static void test_path_get_owner_uid(void) {
+ check_p_g_o_u("/user.slice/user-1000.slice/session-2.scope/foobar.service", 0, 1000);
+ check_p_g_o_u("/user.slice/user-1006.slice", 0, 1006);
+ check_p_g_o_u("", -ENOENT, 0);
+}
+
+static void check_p_g_m_n(const char *path, int code, const char *result) {
+ _cleanup_free_ char *m = NULL;
- assert_se(cg_get_system_path(&b) >= 0);
- log_info("System = %s", b);
+ assert_se(cg_path_get_machine_name(path, &m) == code);
+ assert_se(streq_ptr(m, result));
+}
- assert_se(cg_get_user_path(&c) >= 0);
- log_info("User = %s", c);
+static void test_path_get_machine_name(void) {
+ check_p_g_m_n("/user.slice/machine-foobar.scope", 0, "foobar");
+ check_p_g_m_n("/machine-foobar.scope", 0, "foobar");
+ check_p_g_m_n("/user.slice/user-kuux.slice/machine-foobar.scope", 0, "foobar");
+ check_p_g_m_n("/user.slice/user-kuux.slice/machine-foobar.scope/asjhdkj", 0, "foobar");
+ check_p_g_m_n("", -ENOENT, NULL);
+}
- assert_se(cg_get_machine_path("harley", &d) >= 0);
- log_info("Machine = %s", d);
+static void test_get_paths(void) {
+ _cleanup_free_ char *a = NULL;
+
+ assert_se(cg_get_root_path(&a) >= 0);
+ log_info("Root = %s", a);
}
static void test_proc(void) {
@@ -98,7 +140,7 @@ static void test_proc(void) {
assert_se(d);
FOREACH_DIRENT(de, d, break) {
- _cleanup_free_ char *path = NULL, *path_shifted = NULL, *session = NULL, *unit = NULL, *user_unit = NULL, *machine = NULL, *prefix = NULL;
+ _cleanup_free_ char *path = NULL, *path_shifted = NULL, *session = NULL, *unit = NULL, *user_unit = NULL, *machine = NULL, *prefix = NULL, *slice = NULL;
pid_t pid;
uid_t uid = (uid_t) -1;
@@ -120,8 +162,9 @@ static void test_proc(void) {
cg_pid_get_unit(pid, &unit);
cg_pid_get_user_unit(pid, &user_unit);
cg_pid_get_machine_name(pid, &machine);
+ cg_pid_get_slice(pid, &slice);
- printf("%lu\t%s\t%s\t%s\t%lu\t%s\t%s\t%s\t%s\n",
+ printf("%lu\t%s\t%s\t%s\t%lu\t%s\t%s\t%s\t%s\t%s\n",
(unsigned long) pid,
path,
prefix,
@@ -130,7 +173,8 @@ static void test_proc(void) {
session,
unit,
user_unit,
- machine);
+ machine,
+ slice);
}
}
@@ -170,14 +214,37 @@ static void test_controller_is_valid(void) {
assert_se(!cg_controller_is_valid("tatü", false));
}
+static void test_slice_to_path_one(const char *unit, const char *path, int error) {
+ _cleanup_free_ char *ret = NULL;
+
+ assert_se(cg_slice_to_path(unit, &ret) == error);
+ assert_se(streq_ptr(ret, path));
+}
+
+static void test_slice_to_path(void) {
+
+ test_slice_to_path_one("foobar.slice", "foobar.slice", 0);
+ test_slice_to_path_one("foobar-waldo.slice", "foobar.slice/foobar-waldo.slice", 0);
+ test_slice_to_path_one("foobar-waldo.service", NULL, -EINVAL);
+ test_slice_to_path_one("-.slice", NULL, -EINVAL);
+ test_slice_to_path_one("-foo-.slice", NULL, -EINVAL);
+ test_slice_to_path_one("-foo.slice", NULL, -EINVAL);
+ test_slice_to_path_one("a-b.slice", "a.slice/a-b.slice", 0);
+ test_slice_to_path_one("a-b-c-d-e.slice", "a.slice/a-b.slice/a-b-c.slice/a-b-c-d.slice/a-b-c-d-e.slice", 0);
+}
+
int main(void) {
test_path_decode_unit();
test_path_get_unit();
test_path_get_user_unit();
- test_get_paths();
+ test_path_get_session();
+ test_path_get_owner_uid();
+ test_path_get_machine_name();
+ TEST_REQ_RUNNING_SYSTEMD(test_get_paths());
test_proc();
- test_escape();
+ TEST_REQ_RUNNING_SYSTEMD(test_escape());
test_controller_is_valid();
+ test_slice_to_path();
return 0;
}
diff --git a/src/test/test-cgroup.c b/src/test/test-cgroup.c
index 3a3489d6a2..2a0ce27206 100644
--- a/src/test/test-cgroup.c
+++ b/src/test/test-cgroup.c
@@ -31,10 +31,10 @@ int main(int argc, char*argv[]) {
char *path;
char *c, *p;
- assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a", NULL) == 0);
- assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a", NULL) == 0);
- assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b", NULL) == 0);
- assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-c", NULL) == 0);
+ assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a") == 0);
+ assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-a") == 0);
+ assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b") == 0);
+ assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-c") == 0);
assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0) == 0);
assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0);
diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c
new file mode 100644
index 0000000000..2f3dedb90f
--- /dev/null
+++ b/src/test/test-device-nodes.c
@@ -0,0 +1,55 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Dave Reisner
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <sys/types.h>
+
+#include "device-nodes.h"
+#include "util.h"
+
+/* helpers for test_encode_devnode_name */
+static char *do_encode_string(const char *in) {
+ size_t out_len = strlen(in) * 4;
+ char *out = malloc(out_len);
+
+ assert_se(out);
+ assert_se(encode_devnode_name(in, out, out_len) >= 0);
+ puts(out);
+
+ return out;
+}
+
+static bool expect_encoded_as(const char *in, const char *expected) {
+ _cleanup_free_ char *encoded = do_encode_string(in);
+ return streq(encoded, expected);
+}
+
+static void test_encode_devnode_name(void) {
+ assert_se(expect_encoded_as("systemd sucks", "systemd\\x20sucks"));
+ assert_se(expect_encoded_as("pinkiepie", "pinkiepie"));
+ assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8"));
+ assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng"));
+}
+
+int main(int argc, char *argv[]) {
+ test_encode_devnode_name();
+
+ return 0;
+}
diff --git a/src/test/test-efivars.c b/src/test/test-efivars.c
deleted file mode 100644
index 43ea5917b6..0000000000
--- a/src/test/test-efivars.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
- This file is part of systemd.
-
- Copyright 2013 Lennart Poettering
-
- 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.
-
- 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
-***/
-
-#include "util.h"
-#include "log.h"
-#include "efivars.h"
-
-int main(int argc, char* argv[]) {
- char s[MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)];
- int r;
- dual_timestamp fw, l, k;
-
- dual_timestamp_from_monotonic(&k, 0);
-
- r = efi_get_boot_timestamps(NULL, &fw, &l);
- if (r < 0) {
- log_error("Failed to read variables: %s", strerror(-r));
- return 1;
- }
-
- log_info("Firmware began %s before kernel.", format_timespan(s, sizeof(s), fw.monotonic, 0));
- log_info("Loader began %s before kernel.", format_timespan(s, sizeof(s), l.monotonic, 0));
-
- log_info("Firmware began %s.", format_timestamp(s, sizeof(s), fw.realtime));
- log_info("Loader began %s.", format_timestamp(s, sizeof(s), l.realtime));
- log_info("Kernel began %s.", format_timestamp(s, sizeof(s), k.realtime));
-
- return 0;
-}
diff --git a/src/test/test-engine.c b/src/test/test-engine.c
index 0f3862226a..20ae103a19 100644
--- a/src/test/test-engine.c
+++ b/src/test/test-engine.c
@@ -33,7 +33,7 @@ int main(int argc, char *argv[]) {
assert_se(set_unit_path("test") >= 0);
- assert_se(manager_new(SYSTEMD_SYSTEM, &m) >= 0);
+ assert_se(manager_new(SYSTEMD_SYSTEM, false, &m) >= 0);
printf("Load1:\n");
assert_se(manager_load_unit(m, "a.service", NULL, NULL, &a) >= 0);
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index d56f7cc856..06f3e28288 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -27,9 +27,12 @@
#include "fileio.h"
#include "strv.h"
#include "env-util.h"
+#include "def.h"
+#include "ctype.h"
static void test_parse_env_file(void) {
- char t[] = "/tmp/test-parse-env-file-XXXXXX";
+ char t[] = "/tmp/test-fileio-in-XXXXXX",
+ p[] = "/tmp/test-fileio-out-XXXXXX";
int fd, r;
FILE *f;
_cleanup_free_ char *one = NULL, *two = NULL, *three = NULL, *four = NULL, *five = NULL,
@@ -38,6 +41,8 @@ static void test_parse_env_file(void) {
char **i;
unsigned k;
+ assert_se(mktemp(p));
+
fd = mkostemp(t, O_CLOEXEC);
assert_se(fd >= 0);
@@ -83,7 +88,7 @@ static void test_parse_env_file(void) {
assert_se(streq(a[9], "ten="));
assert_se(a[10] == NULL);
- strv_env_clean_log(a, "/tmp/test-fileio");
+ strv_env_clean_log(a, "test");
k = 0;
STRV_FOREACH(i, b) {
@@ -129,17 +134,167 @@ static void test_parse_env_file(void) {
assert_se(streq(nine, "nineval"));
assert_se(ten == NULL);
- r = write_env_file("/tmp/test-fileio", a);
+ r = write_env_file(p, a);
assert_se(r >= 0);
- r = load_env_file("/tmp/test-fileio", NULL, &b);
+ r = load_env_file(p, NULL, &b);
assert_se(r >= 0);
unlink(t);
- unlink("/tmp/test-fileio");
+ unlink(p);
+}
+
+static void test_parse_multiline_env_file(void) {
+ char t[] = "/tmp/test-fileio-in-XXXXXX",
+ p[] = "/tmp/test-fileio-out-XXXXXX";
+ int fd, r;
+ FILE *f;
+ _cleanup_strv_free_ char **a = NULL, **b = NULL;
+ char **i;
+
+ assert_se(mktemp(p));
+
+ fd = mkostemp(t, O_CLOEXEC);
+ assert_se(fd >= 0);
+
+ f = fdopen(fd, "w");
+ assert_se(f);
+
+ fputs("one=BAR\\\n"
+ " VAR\\\n"
+ "\tGAR\n"
+ "#comment\n"
+ "two=\"bar\\\n"
+ " var\\\n"
+ "\tgar\"\n"
+ "#comment\n"
+ "tri=\"bar \\\n"
+ " var \\\n"
+ "\tgar \"\n", f);
+
+ fflush(f);
+ fclose(f);
+
+ r = load_env_file(t, NULL, &a);
+ assert_se(r >= 0);
+
+ STRV_FOREACH(i, a)
+ log_info("Got: <%s>", *i);
+
+ assert_se(streq(a[0], "one=BAR VAR\tGAR"));
+ assert_se(streq(a[1], "two=bar var\tgar"));
+ assert_se(streq(a[2], "tri=bar var \tgar "));
+ assert_se(a[3] == NULL);
+
+ r = write_env_file(p, a);
+ assert_se(r >= 0);
+
+ r = load_env_file(p, NULL, &b);
+ assert_se(r >= 0);
+
+ unlink(t);
+ unlink(p);
+}
+
+
+static void test_executable_is_script(void) {
+ char t[] = "/tmp/test-executable-XXXXXX";
+ int fd, r;
+ FILE *f;
+ char *command;
+
+ fd = mkostemp(t, O_CLOEXEC);
+ assert_se(fd >= 0);
+
+ f = fdopen(fd, "w");
+ assert_se(f);
+
+ fputs("#! /bin/script -a -b \ngoo goo", f);
+ fflush(f);
+
+ r = executable_is_script(t, &command);
+ assert_se(r > 0);
+ assert_se(streq(command, "/bin/script"));
+ free(command);
+
+ r = executable_is_script("/bin/sh", &command);
+ assert_se(r == 0);
+
+ r = executable_is_script("/usr/bin/yum", &command);
+ assert_se(r > 0 || r == -ENOENT);
+ if (r > 0) {
+ assert_se(startswith(command, "/"));
+ free(command);
+ }
+
+ fclose(f);
+ unlink(t);
+}
+
+static void test_status_field(void) {
+ _cleanup_free_ char *t = NULL, *p = NULL, *s = NULL, *z = NULL;
+ unsigned long long total = 0, buffers = 0;
+ int r;
+
+ assert_se(get_status_field("/proc/self/status", "\nThreads:", &t) == 0);
+ puts(t);
+ assert_se(streq(t, "1"));
+
+ r = get_status_field("/proc/meminfo", "MemTotal:", &p);
+ if (r != -ENOENT) {
+ assert(r == 0);
+ puts(p);
+ assert_se(safe_atollu(p, &total) == 0);
+ }
+
+ r = get_status_field("/proc/meminfo", "\nBuffers:", &s);
+ if (r != -ENOENT) {
+ assert(r == 0);
+ puts(s);
+ assert_se(safe_atollu(s, &buffers) == 0);
+ }
+
+ if (p && t)
+ assert(buffers < total);
+
+ /* Seccomp should be a good test for field full of zeros. */
+ r = get_status_field("/proc/meminfo", "\nSeccomp:", &z);
+ if (r != -ENOENT) {
+ assert(r == 0);
+ puts(z);
+ assert_se(safe_atollu(z, &buffers) == 0);
+ }
+}
+
+static void test_capeff(void) {
+ int pid, p;
+
+ for (pid = 0; pid < 2; pid++) {
+ _cleanup_free_ char *capeff = NULL;
+ int r;
+
+ r = get_process_capeff(0, &capeff);
+ log_info("capeff: '%s' (r=%d)", capeff, r);
+
+ if (r == -ENOENT || r == -EPERM)
+ return;
+
+ assert(r == 0);
+ assert(*capeff);
+ p = capeff[strspn(capeff, DIGITS "abcdefABCDEF")];
+ assert(!p || isspace(p));
+ }
}
int main(int argc, char *argv[]) {
+ log_parse_environment();
+ log_open();
+
test_parse_env_file();
+ test_parse_multiline_env_file();
+ test_executable_is_script();
+ test_status_field();
+ test_capeff();
+
return 0;
}
diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c
index 2aead79bb1..56a9b58c24 100644
--- a/src/test/test-hashmap.c
+++ b/src/test/test-hashmap.c
@@ -467,10 +467,36 @@ static void test_hashmap_get(void) {
hashmap_free_free(m);
}
+static void test_hashmap_many(void) {
+ Hashmap *h;
+ unsigned i;
+
+#define N_ENTRIES 100000
+
+ assert_se(h = hashmap_new(NULL, NULL));
+
+ for (i = 1; i < N_ENTRIES*3; i+=3) {
+ assert_se(hashmap_put(h, UINT_TO_PTR(i), UINT_TO_PTR(i)) >= 0);
+ assert_se(PTR_TO_UINT(hashmap_get(h, UINT_TO_PTR(i))) == i);
+ }
+
+ for (i = 1; i < N_ENTRIES*3; i++)
+ assert_se(hashmap_contains(h, UINT_TO_PTR(i)) == (i % 3 == 1));
+
+ log_info("%u <= %u * 0.75 = %g", hashmap_size(h), hashmap_buckets(h), hashmap_buckets(h) * 0.75);
+
+ assert_se(hashmap_size(h) <= hashmap_buckets(h) * 0.75);
+ assert_se(hashmap_size(h) == N_ENTRIES);
+
+ hashmap_free(h);
+}
+
static void test_uint64_compare_func(void) {
- assert_se(uint64_compare_func("a", "a") == 0);
- assert_se(uint64_compare_func("a", "b") == -1);
- assert_se(uint64_compare_func("b", "a") == 1);
+ const uint64_t a = 0x100, b = 0x101;
+
+ assert_se(uint64_compare_func(&a, &a) == 0);
+ assert_se(uint64_compare_func(&a, &b) == -1);
+ assert_se(uint64_compare_func(&b, &a) == 1);
}
static void test_trivial_compare_func(void) {
@@ -484,8 +510,7 @@ static void test_string_compare_func(void) {
assert_se(string_compare_func("fred", "fred") == 0);
}
-int main(int argc, const char *argv[])
-{
+int main(int argc, const char *argv[]) {
test_hashmap_copy();
test_hashmap_get_strv();
test_hashmap_move_one();
@@ -502,6 +527,7 @@ int main(int argc, const char *argv[])
test_hashmap_isempty();
test_hashmap_get();
test_hashmap_size();
+ test_hashmap_many();
test_uint64_compare_func();
test_trivial_compare_func();
test_string_compare_func();
diff --git a/src/test/test-helper.h b/src/test/test-helper.h
new file mode 100644
index 0000000000..92864edb54
--- /dev/null
+++ b/src/test/test-helper.h
@@ -0,0 +1,31 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Holger Hans Peter Freyther
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "sd-daemon.h"
+
+#define TEST_REQ_RUNNING_SYSTEMD(x) \
+ if (sd_booted() > 0) { \
+ x; \
+ } else { \
+ printf("systemd not booted skipping '%s'\n", #x); \
+ }
diff --git a/src/test/test-id128.c b/src/test/test-id128.c
index 2ed8e292e6..7b92758174 100644
--- a/src/test/test-id128.c
+++ b/src/test/test-id128.c
@@ -25,6 +25,7 @@
#include "util.h"
#include "macro.h"
+#include "sd-daemon.h"
#define ID128_WALDI SD_ID128_MAKE(01, 02, 03, 04, 05, 06, 07, 08, 09, 0a, 0b, 0c, 0d, 0e, 0f, 10)
#define STR_WALDI "0102030405060708090a0b0c0d0e0f10"
@@ -41,11 +42,13 @@ int main(int argc, char *argv[]) {
assert_se(sd_id128_from_string(t, &id2) == 0);
assert_se(sd_id128_equal(id, id2));
- assert_se(sd_id128_get_machine(&id) == 0);
- printf("machine: %s\n", sd_id128_to_string(id, t));
+ if (sd_booted() > 0) {
+ assert_se(sd_id128_get_machine(&id) == 0);
+ printf("machine: %s\n", sd_id128_to_string(id, t));
- assert_se(sd_id128_get_boot(&id) == 0);
- printf("boot: %s\n", sd_id128_to_string(id, t));
+ assert_se(sd_id128_get_boot(&id) == 0);
+ printf("boot: %s\n", sd_id128_to_string(id, t));
+ }
printf("waldi: %s\n", sd_id128_to_string(ID128_WALDI, t));
assert_se(streq(t, STR_WALDI));
diff --git a/src/test/test-libudev.c b/src/test/test-libudev.c
index caa3b4d14c..716767ba5f 100644
--- a/src/test/test-libudev.c
+++ b/src/test/test-libudev.c
@@ -430,7 +430,7 @@ static int test_enumerate(struct udev *udev, const char *subsystem)
}
static int test_hwdb(struct udev *udev, const char *modalias) {
- struct udev_hwdb * hwdb;
+ struct udev_hwdb *hwdb;
struct udev_list_entry *entry;
hwdb = udev_hwdb_new(udev);
diff --git a/src/test/test-list.c b/src/test/test-list.c
new file mode 100644
index 0000000000..2710504765
--- /dev/null
+++ b/src/test/test-list.c
@@ -0,0 +1,109 @@
+/***
+ This file is part of systemd
+
+ Copyright 2013 Jan Janssen
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "list.h"
+#include "util.h"
+
+int main(int argc, const char *argv[]) {
+ size_t i;
+ typedef struct list_item {
+ LIST_FIELDS(struct list_item, item);
+ } list_item;
+ LIST_HEAD(list_item, head);
+ list_item items[4];
+ list_item *cursor;
+
+ LIST_HEAD_INIT(list_item, head);
+ assert_se(head == NULL);
+
+ for (i = 0; i < ELEMENTSOF(items); i++) {
+ LIST_INIT(list_item, item, &items[i]);
+ assert_se(LIST_JUST_US(item, &items[i]));
+ LIST_PREPEND(list_item, item, head, &items[i]);
+ }
+
+ assert_se(!LIST_JUST_US(item, head));
+
+ assert_se(items[0].item_next == NULL);
+ assert_se(items[1].item_next == &items[0]);
+ assert_se(items[2].item_next == &items[1]);
+ assert_se(items[3].item_next == &items[2]);
+
+ assert_se(items[0].item_prev == &items[1]);
+ assert_se(items[1].item_prev == &items[2]);
+ assert_se(items[2].item_prev == &items[3]);
+ assert_se(items[3].item_prev == NULL);
+
+ LIST_FIND_HEAD(list_item, item, &items[0], cursor);
+ assert_se(cursor == &items[3]);
+
+ LIST_FIND_TAIL(list_item, item, &items[3], cursor);
+ assert_se(cursor == &items[0]);
+
+ LIST_REMOVE(list_item, item, head, &items[1]);
+ assert_se(LIST_JUST_US(item, &items[1]));
+
+ assert_se(items[0].item_next == NULL);
+ assert_se(items[2].item_next == &items[0]);
+ assert_se(items[3].item_next == &items[2]);
+
+ assert_se(items[0].item_prev == &items[2]);
+ assert_se(items[2].item_prev == &items[3]);
+ assert_se(items[3].item_prev == NULL);
+
+ LIST_INSERT_AFTER(list_item, item, head, &items[3], &items[1]);
+ assert_se(items[0].item_next == NULL);
+ assert_se(items[2].item_next == &items[0]);
+ assert_se(items[1].item_next == &items[2]);
+ assert_se(items[3].item_next == &items[1]);
+
+ assert_se(items[0].item_prev == &items[2]);
+ assert_se(items[2].item_prev == &items[1]);
+ assert_se(items[1].item_prev == &items[3]);
+ assert_se(items[3].item_prev == NULL);
+
+ LIST_REMOVE(list_item, item, head, &items[0]);
+ assert_se(LIST_JUST_US(item, &items[0]));
+
+ assert_se(items[2].item_next == NULL);
+ assert_se(items[1].item_next == &items[2]);
+ assert_se(items[3].item_next == &items[1]);
+
+ assert_se(items[2].item_prev == &items[1]);
+ assert_se(items[1].item_prev == &items[3]);
+ assert_se(items[3].item_prev == NULL);
+
+ LIST_REMOVE(list_item, item, head, &items[1]);
+ assert_se(LIST_JUST_US(item, &items[1]));
+
+ assert_se(items[2].item_next == NULL);
+ assert_se(items[3].item_next == &items[2]);
+
+ assert_se(items[2].item_prev == &items[3]);
+ assert_se(items[3].item_prev == NULL);
+
+ LIST_REMOVE(list_item, item, head, &items[2]);
+ assert_se(LIST_JUST_US(item, &items[2]));
+ assert_se(LIST_JUST_US(item, head));
+
+ LIST_REMOVE(list_item, item, head, &items[3]);
+ assert_se(LIST_JUST_US(item, &items[3]));
+
+ return 0;
+}
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index 127e17803f..ed3b315a61 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -56,7 +56,7 @@ static void test_path(void) {
assert_se(streq(path_get_file_name("file.../"), ""));
#define test_parent(x, y) { \
- char *z; \
+ char _cleanup_free_ *z = NULL; \
int r = path_get_parent(x, &z); \
printf("expected: %s\n", y ? y : "error"); \
printf("actual: %s\n", r<0 ? "error" : z); \
@@ -83,7 +83,84 @@ static void test_path(void) {
}
}
+static void test_find_binary(void) {
+ char *p;
+
+ assert(find_binary("/bin/sh", &p) == 0);
+ puts(p);
+ assert(streq(p, "/bin/sh"));
+ free(p);
+
+ assert(find_binary("./test-path-util", &p) == 0);
+ puts(p);
+ assert(endswith(p, "/test-path-util"));
+ assert(path_is_absolute(p));
+ free(p);
+
+ assert(find_binary("sh", &p) == 0);
+ puts(p);
+ assert(endswith(p, "/sh"));
+ assert(path_is_absolute(p));
+ free(p);
+
+ assert(find_binary("xxxx-xxxx", &p) == -ENOENT);
+}
+
+static void test_prefixes(void) {
+ static const char* values[] = { "/a/b/c/d", "/a/b/c", "/a/b", "/a", "", NULL};
+ unsigned i;
+ char s[PATH_MAX];
+ bool b;
+
+ i = 0;
+ PATH_FOREACH_PREFIX_MORE(s, "/a/b/c/d") {
+ log_error("---%s---", s);
+ assert_se(streq(s, values[i++]));
+ }
+ assert_se(values[i] == NULL);
+
+ i = 1;
+ PATH_FOREACH_PREFIX(s, "/a/b/c/d") {
+ log_error("---%s---", s);
+ assert_se(streq(s, values[i++]));
+ }
+ assert_se(values[i] == NULL);
+
+ i = 0;
+ PATH_FOREACH_PREFIX_MORE(s, "////a////b////c///d///////")
+ assert_se(streq(s, values[i++]));
+ assert_se(values[i] == NULL);
+
+ i = 1;
+ PATH_FOREACH_PREFIX(s, "////a////b////c///d///////")
+ assert_se(streq(s, values[i++]));
+ assert_se(values[i] == NULL);
+
+ PATH_FOREACH_PREFIX(s, "////")
+ assert_not_reached("Wut?");
+
+ b = false;
+ PATH_FOREACH_PREFIX_MORE(s, "////") {
+ assert_se(!b);
+ assert_se(streq(s, ""));
+ b = true;
+ }
+ assert_se(b);
+
+ PATH_FOREACH_PREFIX(s, "")
+ assert_not_reached("wut?");
+
+ b = false;
+ PATH_FOREACH_PREFIX_MORE(s, "") {
+ assert(!b);
+ assert(streq(s, ""));
+ b = true;
+ }
+}
+
int main(void) {
test_path();
+ test_find_binary();
+ test_prefixes();
return 0;
}
diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c
index ba0aacf79d..1bbe867317 100644
--- a/src/test/test-sched-prio.c
+++ b/src/test/test-sched-prio.c
@@ -34,8 +34,8 @@ int main(int argc, char *argv[]) {
/* prepare the test */
assert_se(set_unit_path(TEST_DIR) >= 0);
- r = manager_new(SYSTEMD_USER, &m);
- if (r == -EPERM) {
+ r = manager_new(SYSTEMD_USER, false, &m);
+ if (r == -EPERM || r == -EACCES) {
puts("manager_new: Permission denied. Skipping test.");
return EXIT_TEST_SKIP;
}
@@ -88,5 +88,7 @@ int main(int argc, char *argv[]) {
assert_se(ser->exec_context.cpu_sched_policy == SCHED_RR);
assert_se(ser->exec_context.cpu_sched_priority == 99);
+ manager_free(m);
+
return EXIT_SUCCESS;
}
diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c
index c3cb9c531d..a1020ad14c 100644
--- a/src/test/test-sleep.c
+++ b/src/test/test-sleep.c
@@ -29,7 +29,7 @@
#include "sleep-config.h"
#include "strv.h"
-int main(int argc, char* argv[]) {
+static void test_sleep(void) {
_cleanup_strv_free_ char
**standby = strv_new("standby", NULL),
**mem = strv_new("mem", NULL),
@@ -40,18 +40,28 @@ int main(int argc, char* argv[]) {
**shutdown = strv_new("shutdown", NULL),
**freez = strv_new("freeze", NULL);
- log_info("Can Standby: %s", yes_no(can_sleep_state(standby) > 0));
- log_info("Can Suspend: %s", yes_no(can_sleep_state(mem) > 0));
- log_info("Can Hibernate: %s", yes_no(can_sleep_state(disk) > 0));
- log_info("Can Hibernate+Suspend (Hybrid-Sleep): %s", yes_no(can_sleep_disk(suspend) > 0));
- log_info("Can Hibernate+Reboot: %s", yes_no(can_sleep_disk(reboot) > 0));
- log_info("Can Hibernate+Platform: %s", yes_no(can_sleep_disk(platform) > 0));
- log_info("Can Hibernate+Shutdown: %s", yes_no(can_sleep_disk(shutdown) > 0));
- log_info("Can Freeze: %s", yes_no(can_sleep_disk(freez) > 0));
+ log_info("Standby configured: %s", yes_no(can_sleep_state(standby) > 0));
+ log_info("Suspend configured: %s", yes_no(can_sleep_state(mem) > 0));
+ log_info("Hibernate configured: %s", yes_no(can_sleep_state(disk) > 0));
+ log_info("Hibernate+Suspend (Hybrid-Sleep) configured: %s", yes_no(can_sleep_disk(suspend) > 0));
+ log_info("Hibernate+Reboot configured: %s", yes_no(can_sleep_disk(reboot) > 0));
+ log_info("Hibernate+Platform configured: %s", yes_no(can_sleep_disk(platform) > 0));
+ log_info("Hibernate+Shutdown configured: %s", yes_no(can_sleep_disk(shutdown) > 0));
+ log_info("Freeze configured: %s", yes_no(can_sleep_state(freez) > 0));
log_info("Suspend configured and possible: %s", yes_no(can_sleep("suspend") > 0));
log_info("Hibernation configured and possible: %s", yes_no(can_sleep("hibernate") > 0));
log_info("Hybrid-sleep configured and possible: %s", yes_no(can_sleep("hybrid-sleep") > 0));
+}
+
+int main(int argc, char* argv[]) {
+ log_parse_environment();
+ log_open();
+
+ if (getuid() != 0)
+ log_warning("This program is unlikely to work for unpriviledged users");
+
+ test_sleep();
return 0;
}
diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index 074e1bb3d4..c3d536d057 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -27,65 +27,95 @@
#include "strv.h"
static void test_specifier_printf(void) {
- _cleanup_free_ char *w = NULL;
-
- const Specifier table[] = {
+ static const Specifier table[] = {
{ 'a', specifier_string, (char*) "AAAA" },
{ 'b', specifier_string, (char*) "BBBB" },
- { 0, NULL, NULL }
+ { 'm', specifier_machine_id, NULL },
+ { 'B', specifier_boot_id, NULL },
+ { 'H', specifier_host_name, NULL },
+ { 'v', specifier_kernel_release, NULL },
+ {}
};
- w = specifier_printf("xxx a=%a b=%b yyy", table, NULL);
- puts(w);
+ _cleanup_free_ char *w = NULL;
+ int r;
+ r = specifier_printf("xxx a=%a b=%b yyy", table, NULL, &w);
+ assert_se(r >= 0);
assert_se(w);
+
+ puts(w);
assert_se(streq(w, "xxx a=AAAA b=BBBB yyy"));
+
+ free(w);
+ r = specifier_printf("machine=%m, boot=%B, host=%H, version=%v", table, NULL, &w);
+ assert_se(r >= 0);
+ assert_se(w);
+ puts(w);
}
-static void test_strv_find(void) {
- const char * const input_table[] = {
- "one",
- "two",
- "three",
- NULL
- };
+static const char* const input_table_multiple[] = {
+ "one",
+ "two",
+ "three",
+ NULL,
+};
+
+static const char* const input_table_one[] = {
+ "one",
+ NULL,
+};
+
+static const char* const input_table_none[] = {
+ NULL,
+};
+
+static const char* const input_table_quotes[] = {
+ "\"",
+ "'",
+ "\"\"",
+ "\\",
+ "\\\\",
+ NULL,
+};
+#define QUOTES_STRING \
+ "\"\\\"\" " \
+ "\"\\\'\" " \
+ "\"\\\"\\\"\" " \
+ "\"\\\\\" " \
+ "\"\\\\\\\\\""
+
+static const char * const input_table_spaces[] = {
+ " ",
+ "' '",
+ "\" ",
+ " \"",
+ " \\\\ ",
+ NULL,
+};
+#define SPACES_STRING \
+ "\" \" " \
+ "\"\\' \\'\" " \
+ "\"\\\" \" " \
+ "\" \\\"\" " \
+ "\" \\\\\\\\ \""
- assert_se(strv_find((char **)input_table, "three"));
- assert_se(!strv_find((char **)input_table, "four"));
+static void test_strv_find(void) {
+ assert_se(strv_find((char **)input_table_multiple, "three"));
+ assert_se(!strv_find((char **)input_table_multiple, "four"));
}
static void test_strv_find_prefix(void) {
- const char * const input_table[] = {
- "one",
- "two",
- "three",
- NULL
- };
-
- assert_se(strv_find_prefix((char **)input_table, "o"));
- assert_se(strv_find_prefix((char **)input_table, "one"));
- assert_se(strv_find_prefix((char **)input_table, ""));
- assert_se(!strv_find_prefix((char **)input_table, "xxx"));
- assert_se(!strv_find_prefix((char **)input_table, "onee"));
+ assert_se(strv_find_prefix((char **)input_table_multiple, "o"));
+ assert_se(strv_find_prefix((char **)input_table_multiple, "one"));
+ assert_se(strv_find_prefix((char **)input_table_multiple, ""));
+ assert_se(!strv_find_prefix((char **)input_table_multiple, "xxx"));
+ assert_se(!strv_find_prefix((char **)input_table_multiple, "onee"));
}
static void test_strv_join(void) {
_cleanup_free_ char *p = NULL, *q = NULL, *r = NULL, *s = NULL, *t = NULL;
- const char * const input_table_multiple[] = {
- "one",
- "two",
- "three",
- NULL
- };
- const char * const input_table_one[] = {
- "one",
- NULL
- };
- const char * const input_table_none[] = {
- NULL
- };
-
p = strv_join((char **)input_table_multiple, ", ");
assert_se(p);
assert_se(streq(p, "one, two, three"));
@@ -107,6 +137,25 @@ static void test_strv_join(void) {
assert_se(streq(t, ""));
}
+static void test_strv_quote_unquote(const char* const *split, const char *quoted) {
+ _cleanup_free_ char *p;
+ _cleanup_strv_free_ char **s;
+ char **t;
+
+ p = strv_join_quoted((char **)split);
+ printf("-%s- --- -%s-\n", p, quoted); /* fprintf deals with NULL, puts does not */
+ assert_se(p);
+ assert_se(streq(p, quoted));
+
+ s = strv_split_quoted(quoted);
+ assert_se(s);
+ STRV_FOREACH(t, s) {
+ assert_se(*t);
+ assert_se(streq(*t, *split));
+ split++;
+ }
+}
+
static void test_strv_split_nulstr(void) {
_cleanup_strv_free_ char **l = NULL;
const char nulstr[] = "str0\0str1\0str2\0str3\0";
@@ -253,6 +302,13 @@ int main(int argc, char *argv[]) {
test_strv_find();
test_strv_find_prefix();
test_strv_join();
+
+ test_strv_quote_unquote(input_table_multiple, "\"one\" \"two\" \"three\"");
+ test_strv_quote_unquote(input_table_one, "\"one\"");
+ test_strv_quote_unquote(input_table_none, "");
+ test_strv_quote_unquote(input_table_quotes, QUOTES_STRING);
+ test_strv_quote_unquote(input_table_spaces, SPACES_STRING);
+
test_strv_split_nulstr();
test_strv_parse_nulstr();
test_strv_overlap();
diff --git a/src/test/test-tables.c b/src/test/test-tables.c
new file mode 100644
index 0000000000..3b7800cf37
--- /dev/null
+++ b/src/test/test-tables.c
@@ -0,0 +1,105 @@
+/***
+ This file is part of systemd
+
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "automount.h"
+#include "cgroup.h"
+#include "condition.h"
+#include "device.h"
+#include "execute.h"
+#include "exit-status.h"
+#include "install.h"
+#include "job.h"
+#include "kill.h"
+#include "log.h"
+#include "logs-show.h"
+#include "mount.h"
+#include "path-lookup.h"
+#include "path.h"
+#include "scope.h"
+#include "service.h"
+#include "slice.h"
+#include "snapshot.h"
+#include "socket-util.h"
+#include "socket.h"
+#include "swap.h"
+#include "target.h"
+#include "timer.h"
+#include "unit-name.h"
+#include "unit.h"
+#include "util.h"
+#include "syscall-list.h"
+
+#include "test-tables.h"
+
+int main(int argc, char **argv) {
+ test_table(automount_result, AUTOMOUNT_RESULT);
+ test_table(automount_state, AUTOMOUNT_STATE);
+ test_table(cgroup_device_policy, CGROUP_DEVICE_POLICY);
+ test_table(condition_type, CONDITION_TYPE);
+ test_table(device_state, DEVICE_STATE);
+ test_table(exec_input, EXEC_INPUT);
+ test_table(exec_output, EXEC_OUTPUT);
+ test_table(job_mode, JOB_MODE);
+ test_table(job_result, JOB_RESULT);
+ test_table(job_state, JOB_STATE);
+ test_table(job_type, JOB_TYPE);
+ test_table(kill_mode, KILL_MODE);
+ test_table(kill_who, KILL_WHO);
+ test_table(log_target, LOG_TARGET);
+ test_table(mount_exec_command, MOUNT_EXEC_COMMAND);
+ test_table(mount_result, MOUNT_RESULT);
+ test_table(mount_state, MOUNT_STATE);
+ test_table(notify_access, NOTIFY_ACCESS);
+ test_table(output_mode, OUTPUT_MODE);
+ test_table(path_result, PATH_RESULT);
+ test_table(path_state, PATH_STATE);
+ test_table(path_type, PATH_TYPE);
+ test_table(scope_result, SCOPE_RESULT);
+ test_table(scope_state, SCOPE_STATE);
+ test_table(service_exec_command, SERVICE_EXEC_COMMAND);
+ test_table(service_restart, SERVICE_RESTART);
+ test_table(service_result, SERVICE_RESULT);
+ test_table(service_state, SERVICE_STATE);
+ test_table(service_type, SERVICE_TYPE);
+ test_table(slice_state, SLICE_STATE);
+ test_table(snapshot_state, SNAPSHOT_STATE);
+ test_table(socket_address_bind_ipv6_only, SOCKET_ADDRESS_BIND_IPV6_ONLY);
+ test_table(socket_exec_command, SOCKET_EXEC_COMMAND);
+ test_table(socket_result, SOCKET_RESULT);
+ test_table(socket_state, SOCKET_STATE);
+ test_table(start_limit_action, SERVICE_START_LIMIT);
+ test_table(swap_exec_command, SWAP_EXEC_COMMAND);
+ test_table(swap_result, SWAP_RESULT);
+ test_table(swap_state, SWAP_STATE);
+ test_table(systemd_running_as, SYSTEMD_RUNNING_AS);
+ test_table(target_state, TARGET_STATE);
+ test_table(timer_base, TIMER_BASE);
+ test_table(timer_result, TIMER_RESULT);
+ test_table(timer_state, TIMER_STATE);
+ test_table(unit_active_state, UNIT_ACTIVE_STATE);
+ test_table(unit_dependency, UNIT_DEPENDENCY);
+ test_table(unit_file_change_type, UNIT_FILE_CHANGE_TYPE);
+ test_table(unit_file_state, UNIT_FILE_STATE);
+ test_table(unit_load_state, UNIT_LOAD_STATE);
+ test_table(unit_type, UNIT_TYPE);
+
+ _test_table("syscall", syscall_to_name, syscall_from_name, syscall_max(), true);
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
index a7fe77af24..0413ae2117 100644
--- a/src/test/test-unit-file.c
+++ b/src/test/test-unit-file.c
@@ -35,8 +35,9 @@
#include "load-fragment.h"
#include "strv.h"
#include "fileio.h"
+#include "test-helper.h"
-static void test_unit_file_get_set(void) {
+static int test_unit_file_get_set(void) {
int r;
Hashmap *h;
Iterator i;
@@ -46,13 +47,17 @@ static void test_unit_file_get_set(void) {
assert(h);
r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h);
- log_info("unit_file_get_list: %s", strerror(-r));
- assert(r >= 0);
+ log_full(r == 0 ? LOG_INFO : LOG_ERR,
+ "unit_file_get_list: %s", strerror(-r));
+ if (r < 0)
+ return EXIT_FAILURE;
HASHMAP_FOREACH(p, h, i)
printf("%s = %s\n", p->path, unit_file_state_to_string(p->state));
unit_file_list_free(h);
+
+ return 0;
}
static void check_execcommand(ExecCommand *c,
@@ -297,17 +302,18 @@ static void test_install_printf(void) {
_cleanup_free_ char *mid, *bid, *host;
- assert_se((mid = specifier_machine_id('m', NULL, NULL)));
- assert_se((bid = specifier_boot_id('b', NULL, NULL)));
+ assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid);
+ assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid);
assert_se((host = gethostname_malloc()));
#define expect(src, pattern, result) \
do { \
- _cleanup_free_ char *t = install_full_printf(&src, pattern); \
+ _cleanup_free_ char *t = NULL; \
_cleanup_free_ char \
*d1 = strdup(i.name), \
*d2 = strdup(i.path), \
*d3 = strdup(i.user); \
+ assert_se(install_full_printf(&src, pattern, &t) >= 0 || !result); \
memzero(i.name, strlen(i.name)); \
memzero(i.path, strlen(i.path)); \
memzero(i.user, strlen(i.user)); \
@@ -351,17 +357,18 @@ static void test_install_printf(void) {
#pragma GCC diagnostic pop
int main(int argc, char *argv[]) {
+ int r;
log_parse_environment();
log_open();
- test_unit_file_get_set();
+ r = test_unit_file_get_set();
test_config_parse_exec();
test_load_env_file_1();
test_load_env_file_2();
test_load_env_file_3();
test_load_env_file_4();
- test_install_printf();
+ TEST_REQ_RUNNING_SYSTEMD(test_install_printf());
- return 0;
+ return r;
}
diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
index 86cb2b8da6..67ccdd4228 100644
--- a/src/test/test-unit-name.c
+++ b/src/test/test-unit-name.c
@@ -34,6 +34,7 @@
#include "specifier.h"
#include "util.h"
#include "macro.h"
+#include "test-helper.h"
static void test_replacements(void) {
#define expect(pattern, repl, expected) \
@@ -116,15 +117,15 @@ static int test_unit_printf(void) {
_cleanup_free_ char *mid, *bid, *host, *root_uid;
struct passwd *root;
- assert_se((mid = specifier_machine_id('m', NULL, NULL)));
- assert_se((bid = specifier_boot_id('b', NULL, NULL)));
+ assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid);
+ assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid);
assert_se((host = gethostname_malloc()));
assert_se((root = getpwnam("root")));
assert_se(asprintf(&root_uid, "%d", (int) root->pw_uid) > 0);
- r = manager_new(SYSTEMD_USER, &m);
- if (r == -EPERM) {
+ r = manager_new(SYSTEMD_USER, false, &m);
+ if (r == -EPERM || r == -EACCES) {
puts("manager_new: Permission denied. Skipping test.");
return EXIT_TEST_SKIP;
}
@@ -133,8 +134,8 @@ static int test_unit_printf(void) {
#define expect(unit, pattern, expected) \
{ \
char *e; \
- _cleanup_free_ char *t = \
- unit_full_printf(unit, pattern); \
+ _cleanup_free_ char *t; \
+ assert_se(unit_full_printf(unit, pattern, &t) >= 0); \
printf("result: %s\nexpect: %s\n", t, expected); \
if ((e = endswith(expected, "*"))) \
assert(strncmp(t, e, e-expected)); \
@@ -190,10 +191,14 @@ static int test_unit_printf(void) {
expect(u2, "%H", host);
expect(u2, "%t", "/run/user/*");
+ manager_free(m);
+
return 0;
}
int main(int argc, char* argv[]) {
+ int rc = 0;
test_replacements();
- return test_unit_printf();
+ TEST_REQ_RUNNING_SYSTEMD(rc = test_unit_printf());
+ return rc;
}
diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
new file mode 100644
index 0000000000..7bd0db173a
--- /dev/null
+++ b/src/test/test-utf8.c
@@ -0,0 +1,76 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Dave Reisner
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "utf8.h"
+#include "util.h"
+
+static void test_utf8_is_printable(void) {
+ assert_se(utf8_is_printable("ascii is valid\tunicode", 22));
+ assert_se(utf8_is_printable("\342\204\242", 3));
+ assert_se(!utf8_is_printable("\341\204", 2));
+}
+
+static void test_utf8_is_valid(void) {
+ assert_se(utf8_is_valid("ascii is valid unicode"));
+ assert_se(utf8_is_valid("\342\204\242"));
+ assert_se(!utf8_is_valid("\341\204"));
+}
+
+static void test_ascii_is_valid(void) {
+ assert_se(ascii_is_valid("alsdjf\t\vbarr\nba z"));
+ assert_se(!ascii_is_valid("\342\204\242"));
+ assert_se(!ascii_is_valid("\341\204"));
+}
+
+static void test_ascii_filter(void) {
+ char *f;
+
+ f = ascii_filter("alsdjf\t\vbarr\nba z");
+ assert_se(streq(f, "alsdjf\t\vbarr\nba z"));
+ free(f);
+
+ f = ascii_filter("\342\204\242");
+ assert_se(streq(f, ""));
+ free(f);
+
+ f = ascii_filter("foo\341\204bar");
+ assert_se(streq(f, "foobar"));
+ free(f);
+}
+
+static void test_utf8_encoded_valid_unichar(void) {
+ assert_se(utf8_encoded_valid_unichar("\342\204\242") == 3);
+ assert_se(utf8_encoded_valid_unichar("\302\256") == 2);
+ assert_se(utf8_encoded_valid_unichar("a") == 1);
+ assert_se(utf8_encoded_valid_unichar("\341\204") < 0);
+ assert_se(utf8_encoded_valid_unichar("\341\204\341\204") < 0);
+
+}
+
+int main(int argc, char *argv[]) {
+ test_utf8_is_valid();
+ test_utf8_is_printable();
+ test_ascii_is_valid();
+ test_ascii_filter();
+ test_utf8_encoded_valid_unichar();
+
+ return 0;
+}
diff --git a/src/test/test-util.c b/src/test/test-util.c
index 4c3a8a6b88..c5762ede4b 100644
--- a/src/test/test-util.c
+++ b/src/test/test-util.c
@@ -27,6 +27,7 @@
#include <errno.h>
#include "util.h"
+#include "strv.h"
static void test_streq_ptr(void) {
assert_se(streq_ptr(NULL, NULL));
@@ -192,41 +193,40 @@ static void test_safe_atod(void) {
}
static void test_strappend(void) {
- _cleanup_free_ char *t1, *t2, *t3, *t4;
+ _cleanup_free_ char *t1, *t2, *t3, *t4;
- t1 = strappend(NULL, NULL);
- assert_se(streq(t1, ""));
+ t1 = strappend(NULL, NULL);
+ assert_se(streq(t1, ""));
- t2 = strappend(NULL, "suf");
- assert_se(streq(t2, "suf"));
+ t2 = strappend(NULL, "suf");
+ assert_se(streq(t2, "suf"));
- t3 = strappend("pre", NULL);
- assert_se(streq(t3, "pre"));
+ t3 = strappend("pre", NULL);
+ assert_se(streq(t3, "pre"));
- t4 = strappend("pre", "suf");
- assert_se(streq(t4, "presuf"));
+ t4 = strappend("pre", "suf");
+ assert_se(streq(t4, "presuf"));
}
static void test_strstrip(void) {
- char *r;
- char input[] = " hello, waldo. ";
-
- r = strstrip(input);
- assert_se(streq(r, "hello, waldo."));
+ char *r;
+ char input[] = " hello, waldo. ";
+ r = strstrip(input);
+ assert_se(streq(r, "hello, waldo."));
}
static void test_delete_chars(void) {
- char *r;
- char input[] = " hello, waldo. abc";
+ char *r;
+ char input[] = " hello, waldo. abc";
- r = delete_chars(input, WHITESPACE);
- assert_se(streq(r, "hello,waldo.abc"));
+ r = delete_chars(input, WHITESPACE);
+ assert_se(streq(r, "hello,waldo.abc"));
}
static void test_in_charset(void) {
- assert_se(in_charset("dddaaabbbcccc", "abcd"));
- assert_se(!in_charset("dddaaabbbcccc", "abc f"));
+ assert_se(in_charset("dddaaabbbcccc", "abcd"));
+ assert_se(!in_charset("dddaaabbbcccc", "abc f"));
}
static void test_hexchar(void) {
@@ -260,6 +260,18 @@ static void test_undecchar(void) {
assert_se(undecchar('9') == 9);
}
+static void test_cescape(void) {
+ _cleanup_free_ char *escaped;
+ escaped = cescape("abc\\\"\b\f\n\r\t\v\003\177\234\313");
+ assert_se(streq(escaped, "abc\\\\\\\"\\b\\f\\n\\r\\t\\v\\003\\177\\234\\313"));
+}
+
+static void test_cunescape(void) {
+ _cleanup_free_ char *unescaped;
+ unescaped = cunescape("abc\\\\\\\"\\b\\f\\n\\r\\t\\v\\003\\177\\234\\313");
+ assert_se(streq(unescaped, "abc\\\"\b\f\n\r\t\v\003\177\234\313"));
+}
+
static void test_foreach_word(void) {
char *w, *state;
size_t l;
@@ -386,6 +398,7 @@ static void test_u64log2(void) {
}
static void test_get_process_comm(void) {
+ struct stat st;
_cleanup_free_ char *a = NULL, *c = NULL, *d = NULL, *f = NULL, *i = NULL;
unsigned long long b;
pid_t e;
@@ -394,8 +407,12 @@ static void test_get_process_comm(void) {
dev_t h;
int r;
- assert_se(get_process_comm(1, &a) >= 0);
- log_info("pid1 comm: '%s'", a);
+ if (stat("/proc/1/comm", &st) == 0) {
+ assert_se(get_process_comm(1, &a) >= 0);
+ log_info("pid1 comm: '%s'", a);
+ } else {
+ log_warning("/proc/1/comm does not exist.");
+ }
assert_se(get_starttime_of_pid(1, &b) >= 0);
log_info("pid1 starttime: '%llu'", b);
@@ -439,6 +456,141 @@ static void test_protect_errno(void) {
assert(errno == 12);
}
+static void test_parse_bytes(void) {
+ off_t bytes;
+
+ assert_se(parse_bytes("111", &bytes) == 0);
+ assert_se(bytes == 111);
+
+ assert_se(parse_bytes(" 112 B", &bytes) == 0);
+ assert_se(bytes == 112);
+
+ assert_se(parse_bytes("3 K", &bytes) == 0);
+ assert_se(bytes == 3*1024);
+
+ assert_se(parse_bytes(" 4 M 11K", &bytes) == 0);
+ assert_se(bytes == 4*1024*1024 + 11 * 1024);
+
+ assert_se(parse_bytes("3B3G", &bytes) == 0);
+ assert_se(bytes == 3ULL*1024*1024*1024 + 3);
+
+ assert_se(parse_bytes("3B3G4T", &bytes) == 0);
+ assert_se(bytes == (4ULL*1024 + 3)*1024*1024*1024 + 3);
+
+ assert_se(parse_bytes("12P", &bytes) == 0);
+ assert_se(bytes == 12ULL * 1024*1024*1024*1024*1024);
+
+ assert_se(parse_bytes("3E 2P", &bytes) == 0);
+ assert_se(bytes == (3 * 1024 + 2ULL) * 1024*1024*1024*1024*1024);
+
+ assert_se(parse_bytes("12X", &bytes) == -EINVAL);
+
+ assert_se(parse_bytes("1024E", &bytes) == -ERANGE);
+ assert_se(parse_bytes("-1", &bytes) == -ERANGE);
+ assert_se(parse_bytes("-1024E", &bytes) == -ERANGE);
+
+ assert_se(parse_bytes("-1024P", &bytes) == -ERANGE);
+
+ assert_se(parse_bytes("-10B 20K", &bytes) == -ERANGE);
+}
+
+static void test_strextend(void) {
+ _cleanup_free_ char *str = strdup("0123");
+ strextend(&str, "456", "78", "9", NULL);
+ assert_se(streq(str, "0123456789"));
+}
+
+static void test_strrep(void) {
+ _cleanup_free_ char *one, *three, *zero;
+ one = strrep("waldo", 1);
+ three = strrep("waldo", 3);
+ zero = strrep("waldo", 0);
+
+ assert_se(streq(one, "waldo"));
+ assert_se(streq(three, "waldowaldowaldo"));
+ assert_se(streq(zero, ""));
+}
+
+static void test_parse_user_at_host(void) {
+ _cleanup_free_ char *both = strdup("waldo@waldoscomputer");
+ _cleanup_free_ char *onlyhost = strdup("mikescomputer");
+ char *user = NULL, *host = NULL;
+
+ parse_user_at_host(both, &user, &host);
+ assert_se(streq(user, "waldo"));
+ assert_se(streq(host, "waldoscomputer"));
+
+ user = host = NULL;
+ parse_user_at_host(onlyhost, &user, &host);
+ assert_se(user == NULL);
+ assert_se(streq(host, "mikescomputer"));
+}
+
+static void test_split_pair(void) {
+ _cleanup_free_ char *a = NULL, *b = NULL;
+
+ assert_se(split_pair("", "", &a, &b) == -EINVAL);
+ assert_se(split_pair("foo=bar", "", &a, &b) == -EINVAL);
+ assert_se(split_pair("", "=", &a, &b) == -EINVAL);
+ assert_se(split_pair("foo=bar", "=", &a, &b) >= 0);
+ assert_se(streq(a, "foo"));
+ assert_se(streq(b, "bar"));
+ free(a);
+ free(b);
+ assert_se(split_pair("==", "==", &a, &b) >= 0);
+ assert_se(streq(a, ""));
+ assert_se(streq(b, ""));
+ free(a);
+ free(b);
+
+ assert_se(split_pair("===", "==", &a, &b) >= 0);
+ assert_se(streq(a, ""));
+ assert_se(streq(b, "="));
+}
+
+static void test_fstab_node_to_udev_node(void) {
+ char *n;
+
+ n = fstab_node_to_udev_node("LABEL=applé/jack");
+ puts(n);
+ assert_se(streq(n, "/dev/disk/by-label/applé\\x2fjack"));
+ free(n);
+
+ n = fstab_node_to_udev_node("PARTLABEL=pinkié pie");
+ puts(n);
+ assert_se(streq(n, "/dev/disk/by-partlabel/pinkié\\x20pie"));
+ free(n);
+
+ n = fstab_node_to_udev_node("UUID=037b9d94-148e-4ee4-8d38-67bfe15bb535");
+ puts(n);
+ assert_se(streq(n, "/dev/disk/by-uuid/037b9d94-148e-4ee4-8d38-67bfe15bb535"));
+ free(n);
+
+ n = fstab_node_to_udev_node("PARTUUID=037b9d94-148e-4ee4-8d38-67bfe15bb535");
+ puts(n);
+ assert_se(streq(n, "/dev/disk/by-partuuid/037b9d94-148e-4ee4-8d38-67bfe15bb535"));
+ free(n);
+
+
+ n = fstab_node_to_udev_node("PONIES=awesome");
+ puts(n);
+ assert_se(streq(n, "PONIES=awesome"));
+ free(n);
+
+ n = fstab_node_to_udev_node("/dev/xda1");
+ puts(n);
+ assert_se(streq(n, "/dev/xda1"));
+ free(n);
+}
+
+static void test_get_files_in_directory(void) {
+ _cleanup_strv_free_ char **l = NULL, **t = NULL;
+
+ assert_se(get_files_in_directory("/tmp", &l) >= 0);
+ assert_se(get_files_in_directory(".", &l) >= 0);
+ assert_se(get_files_in_directory(".", NULL) >= 0);
+}
+
int main(int argc, char *argv[]) {
test_streq_ptr();
test_first_word();
@@ -458,6 +610,8 @@ int main(int argc, char *argv[]) {
test_unoctchar();
test_decchar();
test_undecchar();
+ test_cescape();
+ test_cunescape();
test_foreach_word();
test_foreach_word_quoted();
test_default_term_for_tty();
@@ -467,6 +621,13 @@ int main(int argc, char *argv[]) {
test_u64log2();
test_get_process_comm();
test_protect_errno();
+ test_parse_bytes();
+ test_strextend();
+ test_strrep();
+ test_parse_user_at_host();
+ test_split_pair();
+ test_fstab_node_to_udev_node();
+ test_get_files_in_directory();
return 0;
}
diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
index 8d4e560b93..141180c393 100644
--- a/src/timedate/timedatectl.c
+++ b/src/timedate/timedatectl.c
@@ -44,7 +44,8 @@ static enum transport {
TRANSPORT_POLKIT
} arg_transport = TRANSPORT_NORMAL;
static bool arg_ask_password = true;
-static const char *arg_host = NULL;
+static char *arg_host = NULL;
+static char *arg_user = NULL;
static void pager_open_if_enabled(void) {
@@ -197,7 +198,7 @@ static void print_status_info(StatusInfo *i) {
if (i->local_rtc)
fputs("\n" ANSI_HIGHLIGHT_ON
- "Warning: The RTC is configured to maintain time in the local time zone. This\n"
+ "Warning: The RTC is configured to maintain time in the local timezone. This\n"
" mode is not fully supported and will create various problems with time\n"
" zone changes and daylight saving adjustments. If at all possible use\n"
" RTC in UTC, by calling 'timedatectl set-local-rtc 0'" ANSI_HIGHLIGHT_OFF ".\n", stdout);
@@ -304,7 +305,7 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) {
static int set_time(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t relative = false, interactive = true;
+ dbus_bool_t relative = false, interactive = arg_ask_password;
usec_t t;
dbus_int64_t u;
int r;
@@ -338,7 +339,7 @@ static int set_time(DBusConnection *bus, char **args, unsigned n) {
static int set_timezone(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true;
+ dbus_bool_t interactive = arg_ask_password;
assert(args);
assert(n == 2);
@@ -360,7 +361,7 @@ static int set_timezone(DBusConnection *bus, char **args, unsigned n) {
static int set_local_rtc(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true, b, q;
+ dbus_bool_t interactive = arg_ask_password, b, q;
int r;
assert(args);
@@ -393,7 +394,7 @@ static int set_local_rtc(DBusConnection *bus, char **args, unsigned n) {
static int set_ntp(DBusConnection *bus, char **args, unsigned n) {
_cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
- dbus_bool_t interactive = true, b;
+ dbus_bool_t interactive = arg_ask_password, b;
int r;
assert(args);
@@ -501,6 +502,7 @@ static int help(void) {
" --adjust-system-clock\n"
" Adjust system clock when changing local RTC mode\n"
" --no-pager Do not pipe output into a pager\n"
+ " -P --privileged Acquire privileges before execution\n"
" --no-ask-password Do not prompt for password\n"
" -H --host=[USER@]HOST Operate on remote host\n\n"
"Commands:\n"
@@ -540,7 +542,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "+hH:P", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "hH:P", options, NULL)) >= 0) {
switch (c) {
@@ -559,7 +561,11 @@ static int parse_argv(int argc, char *argv[]) {
case 'H':
arg_transport = TRANSPORT_SSH;
- arg_host = optarg;
+ parse_user_at_host(optarg, &arg_user, &arg_host);
+ break;
+
+ case ARG_NO_ASK_PASSWORD:
+ arg_ask_password = false;
break;
case ARG_ADJUST_SYSTEM_CLOCK:
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index cdb6e5b16c..525c72e497 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -662,7 +662,7 @@ static DBusHandlerResult timedate_message_handler(
return bus_send_error_reply(connection, message, NULL, r);
}
- /* 2. Tell the kernel our time zone */
+ /* 2. Tell the kernel our timezone */
hwclock_set_timezone(NULL);
if (tz.local_rtc) {
@@ -719,7 +719,7 @@ static DBusHandlerResult timedate_message_handler(
return bus_send_error_reply(connection, message, NULL, r);
}
- /* 2. Tell the kernel our time zone */
+ /* 2. Tell the kernel our timezone */
hwclock_set_timezone(NULL);
/* 3. Synchronize clocks */
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index f4885ec942..8122d6af6a 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -51,6 +51,7 @@
#include "set.h"
#include "conf-files.h"
#include "capability.h"
+#include "specifier.h"
/* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates
* them in the file system. This is intended to be used to create
@@ -68,6 +69,7 @@ typedef enum ItemType {
CREATE_SYMLINK = 'L',
CREATE_CHAR_DEVICE = 'c',
CREATE_BLOCK_DEVICE = 'b',
+ ADJUST_MODE = 'm',
/* These ones take globs */
IGNORE_PATH = 'x',
@@ -105,7 +107,8 @@ static bool arg_create = false;
static bool arg_clean = false;
static bool arg_remove = false;
-static const char *arg_prefix = NULL;
+static char **include_prefixes = NULL;
+static char **exclude_prefixes = NULL;
static const char conf_file_dirs[] =
"/etc/tmpfiles.d\0"
@@ -255,8 +258,8 @@ static int dir_cleanup(
dev_t rootdev,
bool mountpoint,
int maxdepth,
- bool keep_this_level)
-{
+ bool keep_this_level) {
+
struct dirent *dent;
struct timespec times[2];
bool deleted = false;
@@ -427,12 +430,16 @@ finish:
return r;
}
-static int item_set_perms(Item *i, const char *path) {
+static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) {
+ int r;
+
/* not using i->path directly because it may be a glob */
if (i->mode_set)
if (chmod(path, i->mode) < 0) {
- log_error("chmod(%s) failed: %m", path);
- return -errno;
+ if (errno != ENOENT || !ignore_enoent) {
+ log_error("chmod(%s) failed: %m", path);
+ return -errno;
+ }
}
if (i->uid_set || i->gid_set)
@@ -440,11 +447,18 @@ static int item_set_perms(Item *i, const char *path) {
i->uid_set ? i->uid : (uid_t) -1,
i->gid_set ? i->gid : (gid_t) -1) < 0) {
- log_error("chown(%s) failed: %m", path);
- return -errno;
+ if (errno != ENOENT || !ignore_enoent) {
+ log_error("chown(%s) failed: %m", path);
+ return -errno;
+ }
}
- return label_fix(path, false, false);
+ r = label_fix(path, false, false);
+ return r == -ENOENT && ignore_enoent ? 0 : r;
+}
+
+static int item_set_perms(Item *i, const char *path) {
+ return item_set_perms_full(i, path, false);
}
static int write_one_file(Item *i, const char *path) {
@@ -640,6 +654,7 @@ static int create_item(Item *i) {
if (r < 0)
return r;
break;
+
case WRITE_FILE:
r = glob_item(i, write_one_file);
if (r < 0)
@@ -647,6 +662,13 @@ static int create_item(Item *i) {
break;
+ case ADJUST_MODE:
+ r = item_set_perms_full(i, i->path, true);
+ if (r < 0)
+ return r;
+
+ break;
+
case TRUNCATE_DIRECTORY:
case CREATE_DIRECTORY:
@@ -783,7 +805,7 @@ static int create_item(Item *i) {
r = glob_item(i, item_set_perms);
if (r < 0)
- return 0;
+ return r;
break;
case RECURSIVE_RELABEL_PATH:
@@ -817,6 +839,7 @@ static int remove_item_instance(Item *i, const char *instance) {
case RELABEL_PATH:
case RECURSIVE_RELABEL_PATH:
case WRITE_FILE:
+ case ADJUST_MODE:
break;
case REMOVE_PATH:
@@ -862,6 +885,7 @@ static int remove_item(Item *i) {
case RELABEL_PATH:
case RECURSIVE_RELABEL_PATH:
case WRITE_FILE:
+ case ADJUST_MODE:
break;
case REMOVE_PATH:
@@ -971,6 +995,12 @@ static void item_free(Item *i) {
free(i);
}
+static inline void item_freep(Item **i) {
+ if (*i)
+ item_free(*i);
+}
+#define _cleanup_item_free_ _cleanup_(item_freep)
+
static bool item_equal(Item *a, Item *b) {
assert(a);
assert(b);
@@ -1012,11 +1042,38 @@ static bool item_equal(Item *a, Item *b) {
return true;
}
+static bool should_include_path(const char *path) {
+ char **prefix;
+
+ STRV_FOREACH(prefix, exclude_prefixes) {
+ if (path_startswith(path, *prefix))
+ return false;
+ }
+
+ STRV_FOREACH(prefix, include_prefixes) {
+ if (path_startswith(path, *prefix))
+ return true;
+ }
+
+ /* no matches, so we should include this path only if we
+ * have no whitelist at all */
+ return strv_length(include_prefixes) == 0;
+}
+
static int parse_line(const char *fname, unsigned line, const char *buffer) {
- _cleanup_free_ Item *i = NULL;
+
+ static const Specifier specifier_table[] = {
+ { 'm', specifier_machine_id, NULL },
+ { 'b', specifier_boot_id, NULL },
+ { 'H', specifier_host_name, NULL },
+ { 'v', specifier_kernel_release, NULL },
+ {}
+ };
+
+ _cleanup_item_free_ Item *i = NULL;
Item *existing;
_cleanup_free_ char
- *mode = NULL, *user = NULL, *group = NULL, *age = NULL;
+ *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL;
char type;
Hashmap *h;
int r, n = -1;
@@ -1025,14 +1082,10 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
assert(line >= 1);
assert(buffer);
- i = new0(Item, 1);
- if (!i)
- return log_oom();
-
r = sscanf(buffer,
"%c %ms %ms %ms %ms %ms %n",
&type,
- &i->path,
+ &path,
&mode,
&user,
&group,
@@ -1043,6 +1096,16 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
return -EIO;
}
+ i = new0(Item, 1);
+ if (!i)
+ return log_oom();
+
+ r = specifier_printf(path, specifier_table, NULL, &i->path);
+ if (r < 0) {
+ log_error("[%s:%u] Failed to replace specifiers: %s", fname, line, path);
+ return r;
+ }
+
if (n >= 0) {
n += strspn(buffer+n, WHITESPACE);
if (buffer[n] != 0 && (buffer[n] != '-' || buffer[n+1] != 0)) {
@@ -1065,6 +1128,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
case RECURSIVE_REMOVE_PATH:
case RELABEL_PATH:
case RECURSIVE_RELABEL_PATH:
+ case ADJUST_MODE:
break;
case CREATE_SYMLINK:
@@ -1113,7 +1177,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
path_kill_slashes(i->path);
- if (arg_prefix && !path_startswith(i->path, arg_prefix))
+ if (!should_include_path(i->path))
return 0;
if (user && !streq(user, "-")) {
@@ -1198,11 +1262,12 @@ static int help(void) {
printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n"
"Creates, deletes and cleans up volatile and temporary files and directories.\n\n"
- " -h --help Show this help\n"
- " --create Create marked files/directories\n"
- " --clean Clean up marked directories\n"
- " --remove Remove marked files/directories\n"
- " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n",
+ " -h --help Show this help\n"
+ " --create Create marked files/directories\n"
+ " --clean Clean up marked directories\n"
+ " --remove Remove marked files/directories\n"
+ " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n"
+ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n",
program_invocation_short_name);
return 0;
@@ -1214,16 +1279,18 @@ static int parse_argv(int argc, char *argv[]) {
ARG_CREATE,
ARG_CLEAN,
ARG_REMOVE,
- ARG_PREFIX
+ ARG_PREFIX,
+ ARG_EXCLUDE_PREFIX,
};
static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "create", no_argument, NULL, ARG_CREATE },
- { "clean", no_argument, NULL, ARG_CLEAN },
- { "remove", no_argument, NULL, ARG_REMOVE },
- { "prefix", required_argument, NULL, ARG_PREFIX },
- { NULL, 0, NULL, 0 }
+ { "help", no_argument, NULL, 'h' },
+ { "create", no_argument, NULL, ARG_CREATE },
+ { "clean", no_argument, NULL, ARG_CLEAN },
+ { "remove", no_argument, NULL, ARG_REMOVE },
+ { "prefix", required_argument, NULL, ARG_PREFIX },
+ { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX },
+ { NULL, 0, NULL, 0 }
};
int c;
@@ -1252,7 +1319,13 @@ static int parse_argv(int argc, char *argv[]) {
break;
case ARG_PREFIX:
- arg_prefix = optarg;
+ if (strv_extend(&include_prefixes, optarg) < 0)
+ return log_oom();
+ break;
+
+ case ARG_EXCLUDE_PREFIX:
+ if (strv_extend(&exclude_prefixes, optarg) < 0)
+ return log_oom();
break;
case '?':
@@ -1273,11 +1346,12 @@ static int parse_argv(int argc, char *argv[]) {
}
static int read_config_file(const char *fn, bool ignore_enoent) {
- FILE *f;
- unsigned v = 0;
- int r;
+ _cleanup_fclose_ FILE *f = NULL;
+ char line[LINE_MAX];
Iterator iterator;
+ unsigned v = 0;
Item *i;
+ int r;
assert(fn);
@@ -1290,23 +1364,19 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
return r;
}
- log_debug("apply: %s\n", fn);
- for (;;) {
- char line[LINE_MAX], *l;
+ FOREACH_LINE(line, f, break) {
+ char *l;
int k;
- if (!(fgets(line, sizeof(line), f)))
- break;
-
v++;
l = strstrip(line);
if (*l == '#' || *l == 0)
continue;
- if ((k = parse_line(fn, v, l)) < 0)
- if (r == 0)
- r = k;
+ k = parse_line(fn, v, l);
+ if (k < 0 && r == 0)
+ r = k;
}
/* we have to determine age parameter for each entry of type X */
@@ -1343,8 +1413,6 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
r = -EIO;
}
- fclose(f);
-
return r;
}
@@ -1417,6 +1485,8 @@ finish:
hashmap_free(items);
hashmap_free(globs);
+ strv_free(include_prefixes);
+
set_free_free(unix_sockets);
label_finish();
diff --git a/src/udev/collect/collect.c b/src/udev/collect/collect.c
index f95ee23b75..1346f27f91 100644
--- a/src/udev/collect/collect.c
+++ b/src/udev/collect/collect.c
@@ -442,19 +442,19 @@ int main(int argc, char **argv)
if (debug)
fprintf(stderr, "ID %s: not in database\n", argv[i]);
- him = malloc(sizeof (struct _mate));
+ him = new(struct _mate, 1);
if (!him) {
ret = ENOMEM;
goto out;
}
- him->name = malloc(strlen(argv[i]) + 1);
+ him->name = strdup(argv[i]);
if (!him->name) {
+ free(him);
ret = ENOMEM;
goto out;
}
- strcpy(him->name, argv[i]);
him->state = STATE_NONE;
udev_list_node_append(&him->node, &bunch);
} else {
diff --git a/src/udev/keymap/95-keyboard-force-release.rules b/src/udev/keymap/95-keyboard-force-release.rules
deleted file mode 100644
index 3e33e85535..0000000000
--- a/src/udev/keymap/95-keyboard-force-release.rules
+++ /dev/null
@@ -1,57 +0,0 @@
-# Set model specific atkbd force_release quirk
-#
-# Several laptops have hotkeys which don't generate release events,
-# which can cause problems with software key repeat.
-# The atkbd driver has a quirk handler for generating synthetic
-# release events, which can be configured via sysfs since 2.6.32.
-# Simply add a file with a list of scancodes for your laptop model
-# in /usr/lib/udev/keymaps, and add a rule here.
-# If the hotkeys also need a keymap assignment you can copy the
-# scancodes from the keymap file, otherwise you can run
-# /usr/lib/udev/keymap -i /dev/input/eventX
-# on a Linux vt to find out.
-
-ACTION=="remove", GOTO="force_release_end"
-SUBSYSTEM!="serio", GOTO="force_release_end"
-KERNEL!="serio*", GOTO="force_release_end"
-DRIVER!="atkbd", GOTO="force_release_end"
-
-ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
-
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", RUN+="keyboard-force-release.sh $devpath samsung-other"
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*90X3A*|*900X3*|*900X4*", RUN+="keyboard-force-release.sh $devpath samsung-series-9"
-
-ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Studio 1557|Studio 1558", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Latitude E*|Latitude *U|Precision M*", RUN+="keyboard-force-release.sh $devpath dell-touchpad"
-ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="XPS*", RUN+="keyboard-force-release.sh $devpath dell-xps"
-
-ENV{DMI_VENDOR}=="FUJITSU SIEMENS", ATTR{[dmi/id]product_name}=="AMILO*", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="FOXCONN", ATTR{[dmi/id]product_name}=="QBOOK", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="MTC", ATTR{[dmi/id]product_version}=="A0", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="Mio Technology", ATTR{[dmi/id]product_name}=="N890", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="PEGATRON CORP.", ATTR{[dmi/id]product_name}=="Spring Peak", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite [uU]300*|Satellite Pro [uU]300*|Satellite [uU]305*|SATELLITE [uU]500*", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="Viooo Corporation", ATTR{[dmi/id]product_name}=="PT17", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-# These are all the HP laptops that setup a touchpad toggle key
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keyboard-force-release.sh $devpath hp-other"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keyboard-force-release.sh $devpath hp-other"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC|HDX9494NR", RUN+="keyboard-force-release.sh $devpath hp-other"
-
-ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote 6615WD", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote", ATTR{[dmi/id]product_version}=="6625WD", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="HANNspree", ATTR{[dmi/id]product_name}=="SN10E100", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="GIGABYTE", ATTR{[dmi/id]product_name}=="i1520M", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-ENV{DMI_VENDOR}=="BenQ", ATTR{[dmi/id]product_name}=="*nScreen*", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
-
-LABEL="force_release_end"
diff --git a/src/udev/keymap/95-keymap.rules b/src/udev/keymap/95-keymap.rules
deleted file mode 100644
index 7956092030..0000000000
--- a/src/udev/keymap/95-keymap.rules
+++ /dev/null
@@ -1,183 +0,0 @@
-# Set model specific hotkey keycodes.
-#
-# Key map overrides can be specified by either giving scancode/keyname pairs
-# directly as keymap arguments (if there are just one or two to change), or as
-# a file name (in /usr/lib/udev/keymaps), which has to contain scancode/keyname
-# pairs.
-
-ACTION=="remove", GOTO="keyboard_end"
-KERNEL!="event*", GOTO="keyboard_end"
-ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
-SUBSYSTEMS=="bluetooth", GOTO="keyboard_end"
-
-SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
-SUBSYSTEMS=="usb", GOTO="keyboard_usbcheck"
-GOTO="keyboard_modulecheck"
-
-#
-# The following are external USB keyboards
-#
-
-LABEL="keyboard_usbcheck"
-
-ENV{ID_VENDOR}=="Genius", ENV{ID_MODEL_ID}=="0708", ENV{ID_USB_INTERFACE_NUM}=="01", RUN+="keymap $name genius-slimstar-320"
-ENV{ID_VENDOR}=="Logitech*", ATTRS{name}=="Logitech USB Multimedia Keyboard", RUN+="keymap $name logitech-wave"
-ENV{ID_VENDOR}=="Logitech*", ATTRS{name}=="Logitech USB Receiver", RUN+="keymap $name logitech-wave-cordless"
-# Logitech Cordless Wave Pro looks slightly weird; some hotkeys are coming through the mouse interface
-ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52[9b]", ATTRS{name}=="Logitech USB Receiver", RUN+="keymap $name logitech-wave-pro-cordless"
-
-ENV{ID_VENDOR}=="Lite-On_Technology_Corp*", ATTRS{name}=="Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint", RUN+="keymap $name lenovo-thinkpad-usb-keyboard-trackpoint"
-ENV{ID_VENDOR_ID}=="04b3", ENV{ID_MODEL_ID}=="301[89]", RUN+="keymap $name ibm-thinkpad-usb-keyboard-trackpoint"
-
-ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d zoomin 0xc022e zoomout"
-
-GOTO="keyboard_end"
-
-#
-# The following are exposed as separate input devices with low key codes, thus
-# we need to check their input device product name
-#
-
-LABEL="keyboard_modulecheck"
-
-ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
-ENV{DMI_VENDOR}=="", GOTO="keyboard_end"
-
-ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="ThinkPad Extra Buttons", RUN+="keymap $name module-lenovo"
-ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="Lenovo ThinkPad SL Series extra buttons", RUN+="keymap $name 0x0E bluetooth"
-ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="Ideapad extra buttons", RUN+="keymap $name 0x42 f23 0x43 f22"
-
-ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Asus Extra Buttons", ATTR{[dmi/id]product_name}=="W3J", RUN+="keymap $name module-asus-w3j"
-ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Eee PC WMI hotkeys|Asus Laptop Support|Asus*WMI*", RUN+="keymap $name 0x6B f21"
-ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Eee PC Hotkey Driver", RUN+="keymap $name 0x37 f21"
-
-ENV{DMI_VENDOR}=="IBM*", KERNELS=="input*", ATTRS{name}=="ThinkPad Extra Buttons", RUN+="keymap $name module-ibm"
-ENV{DMI_VENDOR}=="Sony*", KERNELS=="input*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony"
-ENV{DMI_VENDOR}=="Acer*", KERNELS=="input*", ATTRS{name}=="Acer WMI hotkeys", RUN+="keymap $name 0x82 f21"
-ENV{DMI_VENDOR}=="MICRO-STAR*|Micro-Star*", KERNELS=="input*", ATTRS{name}=="MSI Laptop hotkeys", RUN+="keymap $name 0x213 f22 0x214 f23"
-
-# Older Vaios have some different keys
-ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="*PCG-C1*|*PCG-K25*|*PCG-F1*|*PCG-F2*|*PCG-F3*|*PCG-F4*|*PCG-F5*|*PCG-F6*|*PCG-FX*|*PCG-FRV*|*PCG-GR*|*PCG-TR*|*PCG-NV*|*PCG-Z*|*VGN-S360*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-old"
-
-# Some Sony VGN/VPC models have yet another one
-ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="VGN-AR71*|VGN-FW*|VGN-Z21*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-vgn"
-ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="VPC*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-vpc"
-
-
-#
-# The following rules belong to standard i8042 AT keyboard with high key codes.
-#
-
-DRIVERS=="atkbd", GOTO="keyboard_vendorcheck"
-GOTO="keyboard_end"
-
-LABEL="keyboard_vendorcheck"
-
-ENV{DMI_VENDOR}=="Dell*", RUN+="keymap $name dell"
-ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Inspiron 910|Inspiron 1010|Inspiron 1011|Inspiron 1012|Inspiron 1110|Inspiron 1210", RUN+="keymap $name 0x84 wlan"
-ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Latitude XT2", RUN+="keymap $name dell-latitude-xt2"
-
-ENV{DMI_VENDOR}=="Compaq*", ATTR{[dmi/id]product_name}=="*E500*|*Evo N*", RUN+="keymap $name compaq-e_evo"
-
-ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="*3000*", RUN+="keymap $name lenovo-3000"
-ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X6*", ATTR{[dmi/id]product_version}=="* Tablet", RUN+="keymap $name lenovo-thinkpad_x6_tablet"
-ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X2* Tablet*", ATTR{[dmi/id]product_version}=="* Tablet", RUN+="keymap $name lenovo-thinkpad_x200_tablet"
-ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="*IdeaPad*", RUN+="keymap $name lenovo-ideapad"
-ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_name}=="S10-*", RUN+="keymap $name lenovo-ideapad"
-ENV{DMI_VENDOR}=="LENOVO", ATTR{[dmi/id]product_version}=="*IdeaPad Y550*", RUN+="keymap $name 0x95 media 0xA3 play"
-ENV{DMI_VENDOR}=="LENOVO", ATTR{[dmi/id]product_version}=="*Lenovo V480*", RUN+="keymap $name 0xf1 f21"
-# 0xf1 is touchpad toggle, 0xCE is microphone mute in Lenovo U300s
-ENV{DMI_VENDOR}=="LENOVO", ATTR{[dmi/id]product_version}=="*IdeaPad U300s*", RUN+="keymap $name 0xf1 f21 0xCE f20"
-
-ENV{DMI_VENDOR}=="Hewlett-Packard*", RUN+="keymap $name hewlett-packard"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][aA][bB][lL][eE][tT]*", RUN+="keymap $name hewlett-packard-tablet"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keymap $name hewlett-packard-pavilion"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*Compaq*|*EliteBook*|*2230s*", RUN+="keymap $name hewlett-packard-compaq_elitebook"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*Presario*CQ*", RUN+="keymap $name 0xD8 f21 0xD9 f21"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC", RUN+="keymap $name hewlett-packard-2510p_2530p"
-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keymap $name hewlett-packard-tx2"
-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*", RUN+="keymap $name hewlett-packard-presario-2100"
-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP G62 Notebook PC", RUN+="keymap $name 0xB2 www"
-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill 0xB2 www"
-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP EliteBook 8440p", RUN+="keymap $name hewlett-packard_elitebook-8440p"
-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP EliteBook 8460p", RUN+="keymap $name hewlett-packard_elitebook-8460p"
-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HDX9494NR", RUN+="keymap $name hewlett-packard-hdx9494nr"
-# HP Pavilion dv6315ea has empty DMI_VENDOR
-ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play
-
-# Gateway clone of Acer Aspire One AOA110/AOA150
-ENV{DMI_VENDOR}=="Gateway*", ATTR{[dmi/id]product_name}=="*AOA1*", RUN+="keymap $name acer"
-
-ENV{DMI_VENDOR}=="Acer*", RUN+="keymap $name acer"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Extensa*", ATTR{[dmi/id]product_name}=="*5210*|*5220*|*5610*|*5620*|*5720*", RUN+="keymap $name 0xEE screenlock"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*C3[01]0*", RUN+="keymap $name acer-travelmate_c300"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*6292*|TravelMate*8471*|TravelMate*4720*|TravelMate*7720*|Aspire 1810T*|AO751h|AO531h", RUN+="keymap $name 0xD9 bluetooth"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*4720*", RUN+="keymap $name 0xB2 www 0xEE screenlock"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate 6593|Aspire 1640", RUN+="keymap $name 0xB2 www 0xEE screenlock"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 6920", RUN+="keymap $name acer-aspire_6920"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5920G", RUN+="keymap $name acer-aspire_5920g"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5720*", RUN+="keymap $name acer-aspire_5720"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 8930", RUN+="keymap $name acer-aspire_8930"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_serial}=="ZG8*", RUN+="keymap $name acer-aspire_5720"
-
-ENV{DMI_VENDOR}=="*BenQ*", ATTR{[dmi/id]product_name}=="*Joybook R22*", RUN+="keymap $name 0x6E wlan"
-
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pro V3205*", RUN+="keymap $name fujitsu-amilo_pro_v3205"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pa 2548*", RUN+="keymap $name fujitsu-amilo_pa_2548"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*ESPRIMO Mobile V5*", RUN+="keymap $name fujitsu-esprimo_mobile_v5"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*ESPRIMO Mobile V6*", RUN+="keymap $name fujitsu-esprimo_mobile_v6"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pro Edition V3505*", RUN+="keymap $name fujitsu-amilo_pro_edition_v3505"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*Amilo Si 1520*", RUN+="keymap $name fujitsu-amilo_si_1520"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="AMILO*M*", RUN+="keymap $name 0x97 prog2 0x9F prog1"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="Amilo Li 1718", RUN+="keymap $name 0xD6 wlan"
-ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="AMILO Li 2732", RUN+="keymap $name fujitsu-amilo_li_2732"
-
-ENV{DMI_VENDOR}=="LG*", ATTR{[dmi/id]product_name}=="*X110*", RUN+="keymap $name lg-x110"
-
-ENV{DMI_VENDOR}=="MEDION*", ATTR{[dmi/id]product_name}=="*FID2060*", RUN+="keymap $name medion-fid2060"
-ENV{DMI_VENDOR}=="MEDIONNB", ATTR{[dmi/id]product_name}=="A555*", RUN+="keymap $name medionnb-a555"
-
-ENV{DMI_VENDOR}=="MICRO-STAR*|Micro-Star*", RUN+="keymap $name micro-star"
-
-# some MSI models generate ACPI/input events on the LNXVIDEO input devices,
-# plus some extra synthesized ones on atkbd as an echo of actually changing the
-# brightness; so ignore those atkbd ones, to avoid loops
-ENV{DMI_VENDOR}=="MICRO-STAR*", ATTR{[dmi/id]product_name}=="*U-100*|*U100*|*N033", RUN+="keymap $name 0xF7 reserved 0xF8 reserved"
-
-# MSI Wind U90/U100 generates separate touchpad on/off keycodes so ignore touchpad toggle keycode
-ENV{DMI_VENDOR}=="MICRO-STAR*", ATTR{[dmi/id]product_name}=="U90/U100", RUN+="keymap $name 0xE4 reserved"
-
-ENV{DMI_VENDOR}=="INVENTEC", ATTR{[dmi/id]product_name}=="SYMPHONY 6.0/7.0", RUN+="keymap $name inventec-symphony_6.0_7.0"
-
-ENV{DMI_VENDOR}=="MAXDATA", ATTR{[dmi/id]product_name}=="Pro 7000*", RUN+="keymap $name maxdata-pro_7000"
-
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", RUN+="keymap $name samsung-other"
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*SX20S*", RUN+="keymap $name samsung-sx20s"
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="SQ1US", RUN+="keymap $name samsung-sq1us"
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*700Z*", RUN+="keymap $name 0xBA ejectcd 0x96 keyboardbrightnessup 0x97 keyboardbrightnessdown"
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*700T*", RUN+="keymap $name 0xAD leftmeta"
-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*90X3A*|*900X3*|*900X4*", RUN+="keymap $name samsung-series-9"
-
-ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="SATELLITE A100", RUN+="keymap $name toshiba-satellite_a100"
-ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite A110", RUN+="keymap $name toshiba-satellite_a110"
-ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite M30X", RUN+="keymap $name toshiba-satellite_m30x"
-
-ENV{DMI_VENDOR}=="OQO Inc.*", ATTR{[dmi/id]product_name}=="OQO Model 2*", RUN+="keymap $name oqo-model2"
-
-ENV{DMI_VENDOR}=="ONKYO CORPORATION", ATTR{[dmi/id]product_name}=="ONKYOPC", RUN+="keymap $name onkyo"
-
-ENV{DMI_VENDOR}=="ASUS", RUN+="keymap $name asus"
-
-ENV{DMI_VENDOR}=="VIA", ATTR{[dmi/id]product_name}=="K8N800", ATTR{[dmi/id]product_version}=="VT8204B", RUN+="keymap $name 0x81 prog1"
-
-ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote", ATTR{[dmi/id]product_version}=="62*|63*", RUN+="keymap $name zepto-znote"
-
-ENV{DMI_VENDOR}=="Everex", ATTR{[dmi/id]product_name}=="XT5000*", RUN+="keymap $name everex-xt5000"
-
-ENV{DMI_VENDOR}=="COMPAL", ATTR{[dmi/id]product_name}=="HEL80I", RUN+="keymap $name 0x84 wlan"
-
-ENV{DMI_VENDOR}=="OLPC", ATTR{[dmi/id]product_name}=="XO", RUN+="keymap $name olpc-xo"
-
-ENV{DMI_VENDOR}=="Alienware*", ATTR{[dmi/id]product_name}=="M14xR1", RUN+="keymap $name 0x8A ejectcd"
-
-LABEL="keyboard_end"
diff --git a/src/udev/keymap/README.keymap.txt b/src/udev/keymap/README.keymap.txt
deleted file mode 100644
index 2cf2a4e88c..0000000000
--- a/src/udev/keymap/README.keymap.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-= The udev keymap tool =
-
-== Introduction ==
-
-This udev extension configures computer model specific key mappings. This is
-particularly necessary for the non-standard extra keys found on many laptops,
-such as "brightness up", "next song", "www browser", or "suspend". Often these
-are accessed with the Fn key.
-
-Every key produces a "scan code", which is highly vendor/model specific for the
-nonstandard keys. This tool maintains mappings for these scan codes to standard
-"key codes", which denote the "meaning" of the key. The key codes are defined
-in /usr/include/linux/input.h.
-
-If some of your keys on your keyboard are not working at all, or produce the
-wrong effect, then a very likely cause of this is that the scan code -> key
-code mapping is incorrect on your computer.
-
-== Structure ==
-
-udev-keymap consists of the following parts:
-
- keymaps/*:: mappings of scan codes to key code names
-
- 95-keymap.rules:: udev rules for mapping system vendor/product names and
- input module names to one of the keymaps above
-
- keymap:: manipulate an evdev input device:
- * write a key map file into a device (used by udev rules)
- * dump current scan → key code mapping
- * interactively display scan and key codes of pressed keys
-
- findkeyboards:: display evdev input devices which belong to actual keyboards,
- i. e. those suitable for the keymap program
-
-== Fixing broken keys ==
-
-In order to make a broken key work on your system and send it back to upstream
-for inclusion you need to do the following steps:
-
- 1. Find the keyboard device.
-
- Run /usr/lib/udev/findkeyboards. This should always give you an "AT
- keyboard" and possibly a "module". Some laptops (notably Thinkpads, Sonys, and
- Acers) have multimedia/function keys on a separate input device instead of the
- primary keyboard. The keyboard device should have a name like "input/event3".
- In the following commands, the name will be written as "input/eventX" (replace
- X with the appropriate number).
-
- 2. Find broken scan codes:
-
- sudo /usr/lib/udev/keymap -i input/eventX
-
- Press all multimedia/function keys and check if the key name that gets printed
- out is plausible. If it is unknown or wrong, write down the scan code (looks
- like "0x1E") and the intended functionality of this key. Look in
- /usr/include/linux/input.h for an available KEY_XXXXX constant which most
- closely approximates this functionality and write it down as the new key code.
-
- For example, you might press a key labeled "web browser" which currently
- produces "unknown". Note down this:
-
- 0x1E www # Fn+F2 web browser
-
- Repeat that for all other keys. Write the resulting list into a file. Look at
- /usr/lib/udev/keymaps/ for existing key map files and make sure that you use the
- same structure.
-
- If the key only ever works once and then your keyboard (or the entire desktop)
- gets stuck for a long time, then it is likely that the BIOS fails to send a
- corresponding "key release" event after the key press event. Please note down
- this case as well, as it can be worked around in
- /usr/lib/udev/keymaps/95-keyboard-force-release.rules .
-
- 3. Find out your system vendor and product:
-
- cat /sys/class/dmi/id/sys_vendor
- cat /sys/class/dmi/id/product_name
-
- 4. Generate a device dump with "udevadm info --export-db > /tmp/udev-db.txt".
-
- 6. Send the system vendor/product names, the key mapping from step 2,
- and /tmp/udev-db.txt from step 4 to the linux-hotplug@vger.kernel.org mailing
- list, so that they can be included in the next release.
-
-For local testing, copy your map file to /usr/lib/udev/keymaps/ with an appropriate
-name, and add an appropriate udev rule to /usr/lib/udev/rules.d/95-keymap.rules:
-
- * If you selected an "AT keyboard", add the rule to the section after
- 'LABEL="keyboard_vendorcheck"'.
-
- * If you selected a "module", add the rule to the top section where the
- "ThinkPad Extra Buttons" are.
-
-== Author ==
-
-keymap is written and maintained by Martin Pitt <martin.pitt@ubuntu.com>.
diff --git a/src/udev/keymap/check-keymaps.sh b/src/udev/keymap/check-keymaps.sh
deleted file mode 100755
index c4572745e0..0000000000
--- a/src/udev/keymap/check-keymaps.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-# check that all key names in keymaps/* are known in <linux/input.h>
-# and that all key maps listed in the rules are valid and present in
-# Makefile.am
-SRCDIR=${1:-.}
-KEYLIST=${2:-src/udev/keymap/keys.txt}
-KEYMAPS_DIR=$SRCDIR/keymaps
-RULES=$SRCDIR/src/udev/keymap/95-keymap.rules
-
-[ -e "$KEYLIST" ] || {
- echo "need $KEYLIST please build first" >&2
- exit 1
-}
-
-missing=$(join -v 2 <(awk '{print tolower(substr($1,5))}' $KEYLIST | sort -u) \
- <(grep -hv '^#' ${KEYMAPS_DIR}/*| awk '{print $2}' | sort -u))
-[ -z "$missing" ] || {
- echo "ERROR: unknown key names in keymaps/*:" >&2
- echo "$missing" >&2
- exit 1
-}
-
-# check that all maps referred to in $RULES exist
-maps=$(sed -rn '/keymap \$name/ { s/^.*\$name ([^"[:space:]]+).*$/\1/; p }' $RULES)
-for m in $maps; do
- # ignore inline mappings
- [ "$m" = "${m#0x}" ] || continue
-
- [ -e ${KEYMAPS_DIR}/$m ] || {
- echo "ERROR: unknown map name in $RULES: $m" >&2
- exit 1
- }
- grep -q "keymaps/$m\>" $SRCDIR/Makefile.am || {
- echo "ERROR: map file $m is not added to Makefile.am" >&2
- exit 1
- }
-done
diff --git a/src/udev/keymap/findkeyboards b/src/udev/keymap/findkeyboards
deleted file mode 100755
index c6b50d12d0..0000000000
--- a/src/udev/keymap/findkeyboards
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh -e
-# Find "real" keyboard devices and print their device path.
-# Author: Martin Pitt <martin.pitt@ubuntu.com>
-#
-# Copyright (C) 2009, Canonical Ltd.
-#
-# This program 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
-# (at your option) any later version.
-#
-# This program 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.
-
-# returns OK if $1 contains $2
-strstr() {
- [ "${1#*$2*}" != "$1" ]
-}
-
-# returns OK if $1 contains $2 at the beginning
-str_starts() {
- [ "${1#$2*}" != "$1" ]
-}
-
-str_line_starts() {
- while read a; do str_starts "$a" "$1" && return 0;done
- return 1;
-}
-
-# print a list of input devices which are keyboard-like
-keyboard_devices() {
- # standard AT keyboard
- for dev in `udevadm trigger --dry-run --verbose --property-match=ID_INPUT_KEYBOARD=1`; do
- env=`udevadm info --query=env --path=$dev`
- # filter out non-event devices, such as the parent input devices which have no devnode
- if ! echo "$env" | str_line_starts 'DEVNAME='; then
- continue
- fi
- walk=`udevadm info --attribute-walk --path=$dev`
- if strstr "$walk" 'DRIVERS=="atkbd"'; then
- echo -n 'AT keyboard: '
- elif echo "$env" | str_line_starts 'ID_USB_DRIVER=usbhid'; then
- echo -n 'USB keyboard: '
- else
- echo -n 'Unknown type: '
- fi
- udevadm info --query=name --path=$dev
- done
-
- # modules
- module=$(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*Extra Buttons')
- module="$module
- $(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*extra buttons')"
- module="$module
- $(udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='Sony Vaio Keys')"
- for m in $module; do
- for evdev in $m/event*/dev; do
- if [ -e "$evdev" ]; then
- echo -n 'module: '
- udevadm info --query=name --path=${evdev%%/dev}
- fi
- done
- done
-}
-
-keyboard_devices
diff --git a/src/udev/keymap/keyboard-force-release.sh b/src/udev/keymap/keyboard-force-release.sh
deleted file mode 100755
index 858caabf9f..0000000000
--- a/src/udev/keymap/keyboard-force-release.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh -e
-# read list of scancodes, convert hex to decimal and
-# append to the atkbd force_release sysfs attribute
-# $1 sysfs devpath for serioX
-# $2 file with scancode list (hex or dec)
-
-case "$2" in
- /*) scf="$2" ;;
- *) scf="/usr/lib/udev/keymaps/force-release/$2" ;;
-esac
-
-read attr <"/sys/$1/force_release"
-while read scancode dummy; do
- case "$scancode" in
- \#*) ;;
- *)
- scancode=$(($scancode))
- attr="$attr${attr:+,}$scancode"
- ;;
- esac
-done <"$scf"
-echo "$attr" >"/sys/$1/force_release"
diff --git a/src/udev/keymap/keyboard-force-release.sh.in b/src/udev/keymap/keyboard-force-release.sh.in
deleted file mode 100755
index b82674840f..0000000000
--- a/src/udev/keymap/keyboard-force-release.sh.in
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh -e
-# read list of scancodes, convert hex to decimal and
-# append to the atkbd force_release sysfs attribute
-# $1 sysfs devpath for serioX
-# $2 file with scancode list (hex or dec)
-
-case "$2" in
- /*) scf="$2" ;;
- *) scf="@udevlibexecdir@/keymaps/force-release/$2" ;;
-esac
-
-read attr <"/sys/$1/force_release"
-while read scancode dummy; do
- case "$scancode" in
- \#*) ;;
- *)
- scancode=$(($scancode))
- attr="$attr${attr:+,}$scancode"
- ;;
- esac
-done <"$scf"
-echo "$attr" >"/sys/$1/force_release"
diff --git a/src/udev/keymap/keymap.c b/src/udev/keymap/keymap.c
deleted file mode 100644
index ae0a19d3a3..0000000000
--- a/src/udev/keymap/keymap.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * keymap - dump keymap of an evdev device or set a new keymap from a file
- *
- * Based on keyfuzz by Lennart Poettering <mzqrovna@0pointer.net>
- * Adapted for udev-extras by Martin Pitt <martin.pitt@ubuntu.com>
- *
- * Copyright (C) 2006, Lennart Poettering
- * Copyright (C) 2009, Canonical Ltd.
- *
- * This program 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
- * (at your option) any later version.
- *
- * This program 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.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <errno.h>
-#include <limits.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <sys/ioctl.h>
-#include <linux/limits.h>
-#include <linux/input.h>
-
-static const struct key* lookup_key (const char *str, unsigned int len);
-
-#include "keys-from-name.h"
-#include "keys-to-name.h"
-#include "macro.h"
-#include "util.h"
-
-#define MAX_SCANCODES 1024
-
-static int evdev_open(const char *dev)
-{
- int fd;
- char fn[PATH_MAX];
-
- if (!startswith(dev, "/dev")) {
- snprintf(fn, sizeof(fn), "/dev/%s", dev);
- dev = fn;
- }
-
- if ((fd = open(dev, O_RDWR)) < 0) {
- fprintf(stderr, "error open('%s'): %m\n", dev);
- return -1;
- }
- return fd;
-}
-
-static int evdev_get_keycode(int fd, unsigned scancode, int e)
-{
- unsigned codes[2];
-
- codes[0] = scancode;
- if (ioctl(fd, EVIOCGKEYCODE, codes) < 0) {
- if (e && errno == EINVAL) {
- return -2;
- } else {
- fprintf(stderr, "EVIOCGKEYCODE for scan code 0x%x: %m\n", scancode);
- return -1;
- }
- }
- return codes[1];
-}
-
-static int evdev_set_keycode(int fd, unsigned scancode, int keycode)
-{
- unsigned codes[2];
-
- codes[0] = scancode;
- codes[1] = (unsigned) keycode;
-
- if (ioctl(fd, EVIOCSKEYCODE, codes) < 0) {
- fprintf(stderr, "EVIOCSKEYCODE: %m\n");
- return -1;
- }
- return 0;
-}
-
-static int evdev_driver_version(int fd, char *v, size_t l)
-{
- int version;
-
- if (ioctl(fd, EVIOCGVERSION, &version)) {
- fprintf(stderr, "EVIOCGVERSION: %m\n");
- return -1;
- }
-
- snprintf(v, l, "%i.%i.%i.", version >> 16, (version >> 8) & 0xff, version & 0xff);
- return 0;
-}
-
-static int evdev_device_name(int fd, char *n, size_t l)
-{
- if (ioctl(fd, EVIOCGNAME(l), n) < 0) {
- fprintf(stderr, "EVIOCGNAME: %m\n");
- return -1;
- }
- return 0;
-}
-
-/* Return a lower-case string with KEY_ prefix removed */
-static const char* format_keyname(const char* key) {
- static char result[101];
- const char* s;
- int len;
-
- for (s = key+4, len = 0; *s && len < 100; ++len, ++s)
- result[len] = tolower(*s);
- result[len] = '\0';
- return result;
-}
-
-static int dump_table(int fd) {
- char version[256], name[256];
- unsigned scancode;
- int r = -1;
-
- if (evdev_driver_version(fd, version, sizeof(version)) < 0)
- goto fail;
-
- if (evdev_device_name(fd, name, sizeof(name)) < 0)
- goto fail;
-
- printf("### evdev %s, driver '%s'\n", version, name);
-
- r = 0;
- for (scancode = 0; scancode < MAX_SCANCODES; scancode++) {
- int keycode;
-
- if ((keycode = evdev_get_keycode(fd, scancode, 1)) < 0) {
- if (keycode == -2)
- continue;
- r = -1;
- break;
- }
-
- if (keycode < KEY_MAX && key_names[keycode])
- printf("0x%03x %s\n", scancode, format_keyname(key_names[keycode]));
- else
- printf("0x%03x 0x%03x\n", scancode, keycode);
- }
-fail:
- return r;
-}
-
-static void set_key(int fd, const char* scancode_str, const char* keyname)
-{
- unsigned scancode;
- char *endptr;
- char t[105] = "KEY_UNKNOWN";
- const struct key *k;
-
- scancode = (unsigned) strtol(scancode_str, &endptr, 0);
- if (*endptr != '\0') {
- fprintf(stderr, "ERROR: Invalid scancode\n");
- exit(1);
- }
-
- snprintf(t, sizeof(t), "KEY_%s", keyname);
-
- if (!(k = lookup_key(t, strlen(t)))) {
- fprintf(stderr, "ERROR: Unknown key name '%s'\n", keyname);
- exit(1);
- }
-
- if (evdev_set_keycode(fd, scancode, k->id) < 0)
- fprintf(stderr, "setting scancode 0x%2X to key code %i failed\n",
- scancode, k->id);
- else
- printf("setting scancode 0x%2X to key code %i\n",
- scancode, k->id);
-}
-
-static int merge_table(int fd, FILE *f) {
- int r = 0;
- int line = 0;
-
- while (!feof(f)) {
- char s[256], *p;
- unsigned scancode;
- int new_keycode, old_keycode;
-
- if (!fgets(s, sizeof(s), f))
- break;
-
- line++;
- p = s+strspn(s, "\t ");
- if (*p == '#' || *p == '\n')
- continue;
-
- if (sscanf(p, "%i %i", &scancode, &new_keycode) != 2) {
- char t[105] = "KEY_UNKNOWN";
- const struct key *k;
-
- if (sscanf(p, "%i %100s", &scancode, t+4) != 2) {
- fprintf(stderr, "WARNING: Parse failure at line %i, ignoring.\n", line);
- r = -1;
- continue;
- }
-
- if (!(k = lookup_key(t, strlen(t)))) {
- fprintf(stderr, "WARNING: Unknown key '%s' at line %i, ignoring.\n", t, line);
- r = -1;
- continue;
- }
-
- new_keycode = k->id;
- }
-
-
- if ((old_keycode = evdev_get_keycode(fd, scancode, 0)) < 0) {
- r = -1;
- continue;
- }
-
- if (evdev_set_keycode(fd, scancode, new_keycode) < 0) {
- r = -1;
- continue;
- }
-
- if (new_keycode != old_keycode)
- fprintf(stderr, "Remapped scancode 0x%02x to 0x%02x (prior: 0x%02x)\n",
- scancode, new_keycode, old_keycode);
- }
-
- fclose(f);
- return r;
-}
-
-
-/* read one event; return 1 if valid */
-static int read_event(int fd, struct input_event* ev)
-{
- int ret;
- ret = read(fd, ev, sizeof(struct input_event));
-
- if (ret < 0) {
- perror("read");
- return 0;
- }
- if (ret != sizeof(struct input_event)) {
- fprintf(stderr, "did not get enough data for event struct, aborting\n");
- return 0;
- }
-
- return 1;
-}
-
-static void print_key(unsigned scancode, uint16_t keycode, int has_scan, int has_key)
-{
- const char *keyname;
-
- /* ignore key release events */
- if (has_key == 1)
- return;
-
- if (has_key == 0 && has_scan != 0) {
- fprintf(stderr, "got scan code event 0x%02X without a key code event\n",
- scancode);
- return;
- }
-
- if (has_scan != 0)
- printf("scan code: 0x%02X ", scancode);
- else
- printf("(no scan code received) ");
-
- keyname = key_names[keycode];
- if (keyname != NULL)
- printf("key code: %s\n", format_keyname(keyname));
- else
- printf("key code: %03X\n", keycode);
-}
-
-static void interactive(int fd)
-{
- struct input_event ev;
- unsigned last_scan = 0;
- uint16_t last_key = 0;
- int has_scan; /* boolean */
- int has_key; /* 0: none, 1: release, 2: press */
-
- /* grab input device */
- ioctl(fd, EVIOCGRAB, 1);
- puts("Press ESC to finish, or Control-C if this device is not your primary keyboard");
-
- has_scan = has_key = 0;
- while (read_event(fd, &ev)) {
- /* Drivers usually send the scan code first, then the key code,
- * then a SYN. Some drivers (like thinkpad_acpi) send the key
- * code first, and some drivers might not send SYN events, so
- * keep a robust state machine which can deal with any of those
- */
-
- if (ev.type == EV_MSC && ev.code == MSC_SCAN) {
- if (has_scan) {
- fputs("driver did not send SYN event in between key events; previous event:\n",
- stderr);
- print_key(last_scan, last_key, has_scan, has_key);
- has_key = 0;
- }
-
- last_scan = ev.value;
- has_scan = 1;
- /*printf("--- got scan %u; has scan %i key %i\n", last_scan, has_scan, has_key); */
- }
- else if (ev.type == EV_KEY) {
- if (has_key) {
- fputs("driver did not send SYN event in between key events; previous event:\n",
- stderr);
- print_key(last_scan, last_key, has_scan, has_key);
- has_scan = 0;
- }
-
- last_key = ev.code;
- has_key = 1 + ev.value;
- /*printf("--- got key %hu; has scan %i key %i\n", last_key, has_scan, has_key);*/
-
- /* Stop on ESC */
- if (ev.code == KEY_ESC && ev.value == 0)
- break;
- }
- else if (ev.type == EV_SYN) {
- /*printf("--- got SYN; has scan %i key %i\n", has_scan, has_key);*/
- print_key(last_scan, last_key, has_scan, has_key);
-
- has_scan = has_key = 0;
- }
-
- }
-
- /* release input device */
- ioctl(fd, EVIOCGRAB, 0);
-}
-
-_noreturn_ static void help(int error)
-{
- const char* h = "Usage: keymap <event device> [<map file>]\n"
- " keymap <event device> scancode keyname [...]\n"
- " keymap -i <event device>\n";
- if (error) {
- fputs(h, stderr);
- exit(2);
- } else {
- fputs(h, stdout);
- exit(0);
- }
-}
-
-int main(int argc, char **argv)
-{
- static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "interactive", no_argument, NULL, 'i' },
- {}
- };
- int fd = -1;
- int opt_interactive = 0;
- int i;
-
- while (1) {
- int option;
-
- option = getopt_long(argc, argv, "hi", options, NULL);
- if (option == -1)
- break;
-
- switch (option) {
- case 'h':
- help(0);
-
- case 'i':
- opt_interactive = 1;
- break;
- default:
- return 1;
- }
- }
-
- if (argc < optind+1)
- help (1);
-
- if ((fd = evdev_open(argv[optind])) < 0)
- return 3;
-
- /* one argument (device): dump or interactive */
- if (argc == optind+1) {
- if (opt_interactive)
- interactive(fd);
- else
- dump_table(fd);
- return 0;
- }
-
- /* two arguments (device, mapfile): set map file */
- if (argc == optind+2) {
- const char *filearg = argv[optind+1];
- if (strchr(filearg, '/')) {
- /* Keymap file argument is a path */
- FILE *f = fopen(filearg, "re");
- if (f)
- merge_table(fd, f);
- else
- perror(filearg);
- } else {
- /* Keymap file argument is a filename */
- /* Open override file if present, otherwise default file */
- char keymap_path[PATH_MAX];
- FILE *f;
-
- snprintf(keymap_path, sizeof(keymap_path), "/etc/udev/keymaps/%s", filearg);
- f = fopen(keymap_path, "re");
- if (f) {
- merge_table(fd, f);
- } else {
- snprintf(keymap_path, sizeof(keymap_path), UDEVLIBEXECDIR "/keymaps/%s", filearg);
- f = fopen(keymap_path, "re");
- if (f)
- merge_table(fd, f);
- else
- perror(keymap_path);
- }
- }
- return 0;
- }
-
- /* more arguments (device, scancode/keyname pairs): set keys directly */
- if ((argc - optind - 1) % 2 == 0) {
- for (i = optind+1; i < argc; i += 2)
- set_key(fd, argv[i], argv[i+1]);
- return 0;
- }
-
- /* invalid number of arguments */
- help(1);
- return 1; /* not reached */
-}
diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c
index bae429344f..b48dccc2fb 100644
--- a/src/udev/udev-builtin-blkid.c
+++ b/src/udev/udev-builtin-blkid.c
@@ -67,6 +67,9 @@ static void print_property(struct udev_device *dev, bool test, const char *name,
} else if (streq(name, "PTTYPE")) {
udev_builtin_add_property(dev, test, "ID_PART_TABLE_TYPE", value);
+ } else if (streq(name, "PTUUID")) {
+ udev_builtin_add_property(dev, test, "ID_PART_TABLE_UUID", value);
+
} else if (streq(name, "PART_ENTRY_NAME")) {
blkid_encode_string(value, s, sizeof(s));
udev_builtin_add_property(dev, test, "ID_PART_ENTRY_NAME", s);
diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c
index 0b35d799fe..d6aa96bb3d 100644
--- a/src/udev/udev-builtin-hwdb.c
+++ b/src/udev/udev-builtin-hwdb.c
@@ -23,20 +23,37 @@
#include <inttypes.h>
#include <ctype.h>
#include <stdlib.h>
+#include <fnmatch.h>
#include <getopt.h>
#include "udev.h"
static struct udev_hwdb *hwdb;
-int udev_builtin_hwdb_lookup(struct udev_device *dev, const char *modalias, bool test) {
+int udev_builtin_hwdb_lookup(struct udev_device *dev,
+ const char *prefix, const char *modalias,
+ const char *filter, bool test) {
+ struct udev_list_entry *list;
struct udev_list_entry *entry;
int n = 0;
if (!hwdb)
return -ENOENT;
- udev_list_entry_foreach(entry, udev_hwdb_get_properties_list_entry(hwdb, modalias, 0)) {
+ if (prefix) {
+ _cleanup_free_ const char *lookup;
+
+ lookup = strjoin(prefix, modalias, NULL);
+ if (!lookup)
+ return -ENOMEM;
+ list = udev_hwdb_get_properties_list_entry(hwdb, lookup, 0);
+ } else
+ list = udev_hwdb_get_properties_list_entry(hwdb, modalias, 0);
+
+ udev_list_entry_foreach(entry, list) {
+ if (filter && fnmatch(filter, udev_list_entry_get_name(entry), FNM_NOESCAPE) != 0)
+ continue;
+
if (udev_builtin_add_property(dev, test,
udev_list_entry_get_name(entry),
udev_list_entry_get_value(entry)) < 0)
@@ -66,12 +83,14 @@ static const char *modalias_usb(struct udev_device *dev, char *s, size_t size) {
return s;
}
-static int udev_builtin_hwdb_search(struct udev_device *dev, const char *subsystem, bool test) {
+static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device *srcdev,
+ const char *subsystem, const char *prefix,
+ const char *filter, bool test) {
struct udev_device *d;
char s[16];
int n = 0;
- for (d = dev; d; d = udev_device_get_parent(d)) {
+ for (d = srcdev; d; d = udev_device_get_parent(d)) {
const char *dsubsys;
const char *modalias = NULL;
@@ -83,16 +102,16 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, const char *subsyst
if (subsystem && !streq(dsubsys, subsystem))
continue;
- /* the usb_device does not have a modalias, compose one */
- if (streq(dsubsys, "usb"))
- modalias = modalias_usb(dev, s, sizeof(s));
+ modalias = udev_device_get_property_value(d, "MODALIAS");
- if (!modalias)
- modalias = udev_device_get_property_value(d, "MODALIAS");
+ /* the usb_device does not have a modalias, compose one */
+ if (!modalias && streq(dsubsys, "usb"))
+ modalias = modalias_usb(d, s, sizeof(s));
if (!modalias)
continue;
- n = udev_builtin_hwdb_lookup(dev, modalias, test);
+
+ n = udev_builtin_hwdb_lookup(dev, prefix, modalias, filter, test);
if (n > 0)
break;
}
@@ -102,10 +121,17 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, const char *subsyst
static int builtin_hwdb(struct udev_device *dev, int argc, char *argv[], bool test) {
static const struct option options[] = {
+ { "filter", required_argument, NULL, 'f' },
+ { "device", required_argument, NULL, 'd' },
{ "subsystem", required_argument, NULL, 's' },
+ { "lookup-prefix", required_argument, NULL, 'p' },
{}
};
+ const char *filter = NULL;
+ const char *device = NULL;
const char *subsystem = NULL;
+ const char *prefix = NULL;
+ struct udev_device *srcdev;
if (!hwdb)
return EXIT_FAILURE;
@@ -113,20 +139,47 @@ static int builtin_hwdb(struct udev_device *dev, int argc, char *argv[], bool te
for (;;) {
int option;
- option = getopt_long(argc, argv, "s", options, NULL);
+ option = getopt_long(argc, argv, "f:d:s:p:", options, NULL);
if (option == -1)
break;
switch (option) {
+ case 'f':
+ filter = optarg;
+ break;
+
+ case 'd':
+ device = optarg;
+ break;
+
case 's':
subsystem = optarg;
break;
+
+ case 'p':
+ prefix = optarg;
+ break;
}
}
- if (udev_builtin_hwdb_search(dev, subsystem, test) < 0)
+ /* query a specific key given as argument */
+ if (argv[optind]) {
+ if (udev_builtin_hwdb_lookup(dev, prefix, argv[optind], filter, test) > 0)
+ return EXIT_SUCCESS;
return EXIT_FAILURE;
- return EXIT_SUCCESS;
+ }
+
+ /* read data from another device than the device we will store the data */
+ if (device) {
+ srcdev = udev_device_new_from_device_id(udev_device_get_udev(dev), device);
+ if (!srcdev)
+ return EXIT_FAILURE;
+ } else
+ srcdev = dev;
+
+ if (udev_builtin_hwdb_search(dev, srcdev, subsystem, prefix, filter, test) > 0)
+ return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
/* called at udev startup and reload */
diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c
new file mode 100644
index 0000000000..ddd853594e
--- /dev/null
+++ b/src/udev/udev-builtin-keyboard.c
@@ -0,0 +1,163 @@
+/***
+ This file is part of systemd.
+
+ Copyright 2013 Kay Sievers <kay@vrfy.org>
+
+ 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.
+
+ 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/limits.h>
+#include <linux/input.h>
+
+#include "udev.h"
+
+static const struct key *keyboard_lookup_key(const char *str, unsigned int len);
+#include "keyboard-keys-from-name.h"
+#include "keyboard-keys-to-name.h"
+
+static int install_force_release(struct udev_device *dev, const unsigned int *release, unsigned int release_count) {
+ struct udev_device *atkbd;
+ const char *cur;
+ char codes[4096];
+ char *s;
+ size_t l;
+ unsigned int i;
+ int ret;
+
+ atkbd = udev_device_get_parent_with_subsystem_devtype(dev, "serio", NULL);
+ if (!atkbd)
+ return -ENODEV;
+
+ cur = udev_device_get_sysattr_value(atkbd, "force_release");
+ if (!cur)
+ return -ENODEV;
+
+ s = codes;
+ l = sizeof(codes);
+
+ /* copy current content */
+ l = strpcpy(&s, l, cur);
+
+ /* append new codes */
+ for (i = 0; i < release_count; i++)
+ l = strpcpyf(&s, l, ",%d", release[i]);
+
+ log_debug("keyboard: updating force-release list with '%s'\n", codes);
+ ret = udev_device_set_sysattr_value(atkbd, "force_release", codes);
+ if (ret < 0)
+ log_error("Error writing force-release attribute: %s", strerror(-ret));
+ return ret;
+}
+
+static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[], bool test) {
+ struct udev_list_entry *entry;
+ struct {
+ unsigned int scan;
+ unsigned int key;
+ } map[1024];
+ unsigned int map_count = 0;
+ unsigned int release[1024];
+ unsigned int release_count = 0;
+
+ udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) {
+ const char *key;
+ unsigned int scancode;
+ char *endptr;
+ const char *keycode;
+ const struct key *k;
+
+ key = udev_list_entry_get_name(entry);
+ if (!startswith(key, "KEYBOARD_KEY_"))
+ continue;
+
+ /* KEYBOARD_KEY_<hex scan code>=<key identifier string> */
+ scancode = strtol(key + 13, &endptr, 16);
+ if (endptr[0] != '\0') {
+ log_error("Error, unable to parse scan code from '%s'\n", key);
+ continue;
+ }
+
+ keycode = udev_list_entry_get_value(entry);
+
+ /* a leading '!' needs a force-release entry */
+ if (keycode[0] == '!') {
+ keycode++;
+
+ release[release_count] = scancode;
+ if (release_count < ELEMENTSOF(release)-1)
+ release_count++;
+
+ if (keycode[0] == '\0')
+ continue;
+ }
+
+ /* translate identifier to key code */
+ k = keyboard_lookup_key(keycode, strlen(keycode));
+ if (!k) {
+ log_error("Error, unknown key identifier '%s'\n", keycode);
+ continue;
+ }
+
+ map[map_count].scan = scancode;
+ map[map_count].key = k->id;
+ if (map_count < ELEMENTSOF(map)-1)
+ map_count++;
+ }
+
+ if (map_count > 0 || release_count > 0) {
+ const char *node;
+ int fd;
+ unsigned int i;
+
+ node = udev_device_get_devnode(dev);
+ if (!node) {
+ log_error("Error, no device node for '%s'\n", udev_device_get_syspath(dev));
+ return EXIT_FAILURE;
+ }
+
+ fd = open(udev_device_get_devnode(dev), O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+ if (fd < 0) {
+ log_error("Error, opening device '%s': %m\n", node);
+ return EXIT_FAILURE;
+ }
+
+ /* install list of map codes */
+ for (i = 0; i < map_count; i++) {
+ log_debug("keyboard: mapping scan code %d (0x%x) to key code %d (0x%x)\n",
+ map[i].scan, map[i].scan, map[i].key, map[i].key);
+ if (ioctl(fd, EVIOCSKEYCODE, &map[i]) < 0)
+ log_error("Error calling EVIOCSKEYCODE: %m\n");
+ }
+
+ /* install list of force-release codes */
+ if (release_count > 0)
+ install_force_release(dev, release, release_count);
+
+ close(fd);
+ }
+
+ return EXIT_SUCCESS;
+}
+
+const struct udev_builtin udev_builtin_keyboard = {
+ .name = "keyboard",
+ .cmd = builtin_keyboard,
+ .help = "keyboard scan code to key mapping",
+};
diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
index 5719021e93..9ae8f08ccf 100644
--- a/src/udev/udev-builtin-net_id.c
+++ b/src/udev/udev-builtin-net_id.c
@@ -35,13 +35,16 @@
* o<index> -- on-board device index number
* s<slot>[f<function>][d<dev_id>] -- hotplug slot index number
* x<MAC> -- MAC address
- * p<bus>s<slot>[f<function>][d<dev_id>] -- PCI geographical location
- * p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
+ * [P<domain>]p<bus>s<slot>[f<function>][d<dev_id>]
+ * -- PCI geographical location
+ * [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
* -- USB port number chain
*
* All multi-function PCI devices will carry the [f<function>] number in the
* device name, including the function 0 device.
*
+ * When using PCI geography, The PCI domain is only prepended when it is not 0.
+ *
* For USB devices the full chain of port numbers of hubs is composed. If the
* name gets longer than the maximum number of 15 characters, the name is not
* exported.
@@ -163,6 +166,7 @@ out:
static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
struct udev *udev = udev_device_get_udev(names->pcidev);
+ unsigned int domain;
unsigned int bus;
unsigned int slot;
unsigned int func;
@@ -178,7 +182,7 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
int hotplug_slot = 0;
int err = 0;
- if (sscanf(udev_device_get_sysname(names->pcidev), "0000:%x:%x.%d", &bus, &slot, &func) != 3)
+ if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%d", &domain, &bus, &slot, &func) != 4)
return -ENOENT;
/* kernel provided multi-device index */
@@ -188,7 +192,10 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
/* compose a name based on the raw kernel's PCI bus, slot numbers */
s = names->pci_path;
- l = strpcpyf(&s, sizeof(names->pci_path), "p%ds%d", bus, slot);
+ l = sizeof(names->pci_path);
+ if (domain > 0)
+ l = strpcpyf(&s, l, "P%d", domain);
+ l = strpcpyf(&s, l, "p%ds%d", bus, slot);
if (func > 0 || is_pci_multifunction(names->pcidev))
l = strpcpyf(&s, l, "f%d", func);
if (dev_id > 0)
@@ -236,7 +243,10 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) {
if (hotplug_slot > 0) {
s = names->pci_slot;
- l = strpcpyf(&s, sizeof(names->pci_slot), "s%d", hotplug_slot);
+ l = sizeof(names->pci_slot);
+ if (domain > 0)
+ l = strpcpyf(&s, l, "P%d", domain);
+ l = strpcpyf(&s, l, "s%d", hotplug_slot);
if (func > 0 || is_pci_multifunction(names->pcidev))
l = strpcpyf(&s, l, "f%d", func);
if (dev_id > 0)
@@ -386,7 +396,7 @@ static int ieee_oui(struct udev_device *dev, struct netnames *names, bool test)
snprintf(str, sizeof(str), "OUI:%02X%02X%02X%02X%02X%02X",
names->mac[0], names->mac[1], names->mac[2],
names->mac[3], names->mac[4], names->mac[5]);
- udev_builtin_hwdb_lookup(dev, str, test);
+ udev_builtin_hwdb_lookup(dev, NULL, str, NULL, test);
return 0;
}
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
index da0273197b..0659967c68 100644
--- a/src/udev/udev-builtin-path_id.c
+++ b/src/udev/udev-builtin-path_id.c
@@ -531,6 +531,7 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
} else if (streq(subsys, "scm")) {
path_prepend(&path, "scm-%s", udev_device_get_sysname(parent));
parent = skip_subsystem(parent, "scm");
+ some_transport = true;
}
parent = udev_device_get_parent(parent);
diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
index c7d431988d..6b3a518c2e 100644
--- a/src/udev/udev-builtin.c
+++ b/src/udev/udev-builtin.c
@@ -39,6 +39,7 @@ static const struct udev_builtin *builtins[] = {
#endif
[UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb,
[UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id,
+ [UDEV_BUILTIN_KEYBOARD] = &udev_builtin_keyboard,
#ifdef HAVE_KMOD
[UDEV_BUILTIN_KMOD] = &udev_builtin_kmod,
#endif
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 7a4fb70258..6f8b127872 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -33,6 +33,8 @@
#include "path-util.h"
#include "conf-files.h"
#include "strbuf.h"
+#include "strv.h"
+#include "util.h"
#define PREALLOC_TOKEN 2048
@@ -152,9 +154,9 @@ enum token_type {
TK_A_OWNER_ID, /* uid_t */
TK_A_GROUP_ID, /* gid_t */
TK_A_MODE_ID, /* mode_t */
+ TK_A_TAG, /* val */
TK_A_STATIC_NODE, /* val */
TK_A_ENV, /* val, attr */
- TK_A_TAG, /* val */
TK_A_NAME, /* val */
TK_A_DEVLINK, /* val */
TK_A_ATTR, /* val, attr */
@@ -1065,8 +1067,28 @@ static int add_rule(struct udev_rules *rules, char *line,
char *value;
enum operation_type op;
- if (get_key(rules->udev, &linepos, &key, &op, &value) != 0)
+ if (get_key(rules->udev, &linepos, &key, &op, &value) != 0) {
+ /* Avoid erroring on trailing whitespace. This is probably rare
+ * so save the work for the error case instead of always trying
+ * to strip the trailing whitespace with strstrip(). */
+ while (isblank(*linepos))
+ linepos++;
+
+ /* If we aren't at the end of the line, this is a parsing error.
+ * Make a best effort to describe where the problem is. */
+ if (*linepos != '\n') {
+ char buf[2] = {linepos[1]};
+ _cleanup_free_ char *tmp;
+
+ tmp = cescape(buf);
+ log_error("invalid key/value pair in file %s on line %u,"
+ "starting at character %tu ('%s')\n",
+ filename, lineno, linepos - line + 1, tmp);
+ if (linepos[1] == '#')
+ log_info("hint: comments can only start at beginning of line");
+ }
break;
+ }
if (streq(key, "ACTION")) {
if (op > OP_MATCH_MAX) {
@@ -1614,7 +1636,7 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
}
strv_uniq(rules->dirs);
- rules->dirs_ts_usec = calloc(strv_length(rules->dirs), sizeof(long long));
+ rules->dirs_ts_usec = calloc(strv_length(rules->dirs), sizeof(usec_t));
if(!rules->dirs_ts_usec)
return udev_rules_unref(rules);
udev_rules_check_timestamp(rules);
@@ -2496,16 +2518,21 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
}
}
-void udev_rules_apply_static_dev_perms(struct udev_rules *rules)
+int udev_rules_apply_static_dev_perms(struct udev_rules *rules)
{
struct token *cur;
struct token *rule;
uid_t uid = 0;
gid_t gid = 0;
mode_t mode = 0;
+ _cleanup_strv_free_ char **tags = NULL;
+ char **t;
+ FILE *f = NULL;
+ _cleanup_free_ char *path = NULL;
+ int r = 0;
if (rules->tokens == NULL)
- return;
+ return 0;
cur = &rules->tokens[0];
rule = cur;
@@ -2522,6 +2549,8 @@ void udev_rules_apply_static_dev_perms(struct udev_rules *rules)
uid = 0;
gid = 0;
mode = 0;
+ strv_free(tags);
+ tags = NULL;
break;
case TK_A_OWNER_ID:
uid = cur->key.uid;
@@ -2532,18 +2561,56 @@ void udev_rules_apply_static_dev_perms(struct udev_rules *rules)
case TK_A_MODE_ID:
mode = cur->key.mode;
break;
+ case TK_A_TAG:
+ r = strv_extend(&tags, rules_str(rules, cur->key.value_off));
+ if (r < 0)
+ goto finish;
+
+ break;
case TK_A_STATIC_NODE: {
- char filename[UTIL_PATH_SIZE];
+ char device_node[UTIL_PATH_SIZE];
+ char tags_dir[UTIL_PATH_SIZE];
+ char tag_symlink[UTIL_PATH_SIZE];
struct stat stats;
/* we assure, that the permissions tokens are sorted before the static token */
- if (mode == 0 && uid == 0 && gid == 0)
+ if (mode == 0 && uid == 0 && gid == 0 && tags == NULL)
goto next;
- strscpyl(filename, sizeof(filename), "/dev/", rules_str(rules, cur->key.value_off), NULL);
- if (stat(filename, &stats) != 0)
+ strscpyl(device_node, sizeof(device_node), "/dev/", rules_str(rules, cur->key.value_off), NULL);
+ if (stat(device_node, &stats) != 0)
goto next;
if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode))
goto next;
+
+ if (tags) {
+ /* Export the tags to a directory as symlinks, allowing otherwise dead nodes to be tagged */
+
+ STRV_FOREACH(t, tags) {
+ _cleanup_free_ char *unescaped_filename = NULL;
+
+ strscpyl(tags_dir, sizeof(tags_dir), "/run/udev/static_node-tags/", *t, "/", NULL);
+ r = mkdir_p(tags_dir, 0755);
+ if (r < 0) {
+ log_error("failed to create %s: %s\n", tags_dir, strerror(-r));
+ return r;
+ }
+
+ unescaped_filename = xescape(rules_str(rules, cur->key.value_off), "/.");
+
+ strscpyl(tag_symlink, sizeof(tag_symlink), tags_dir, unescaped_filename, NULL);
+ r = symlink(device_node, tag_symlink);
+ if (r < 0 && errno != EEXIST) {
+ log_error("failed to create symlink %s -> %s: %s\n", tag_symlink, device_node, strerror(errno));
+ return -errno;
+ } else
+ r = 0;
+ }
+ }
+
+ /* don't touch the permissions if only the tags were set */
+ if (mode == 0 && uid == 0 && gid == 0)
+ goto next;
+
if (mode == 0) {
if (gid > 0)
mode = 0660;
@@ -2551,20 +2618,28 @@ void udev_rules_apply_static_dev_perms(struct udev_rules *rules)
mode = 0600;
}
if (mode != (stats.st_mode & 01777)) {
- chmod(filename, mode);
- log_debug("chmod '%s' %#o\n", filename, mode);
+ r = chmod(device_node, mode);
+ if (r < 0) {
+ log_error("failed to chmod '%s' %#o\n", device_node, mode);
+ return -errno;
+ } else
+ log_debug("chmod '%s' %#o\n", device_node, mode);
}
if ((uid != 0 && uid != stats.st_uid) || (gid != 0 && gid != stats.st_gid)) {
- chown(filename, uid, gid);
- log_debug("chown '%s' %u %u\n", filename, uid, gid);
+ r = chown(device_node, uid, gid);
+ if (r < 0) {
+ log_error("failed to chown '%s' %u %u \n", device_node, uid, gid);
+ return -errno;
+ } else
+ log_debug("chown '%s' %u %u\n", device_node, uid, gid);
}
- utimensat(AT_FDCWD, filename, NULL, 0);
+ utimensat(AT_FDCWD, device_node, NULL, 0);
break;
}
case TK_END:
- return;
+ goto finish;
}
cur++;
@@ -2574,4 +2649,18 @@ next:
cur = rule + rule->rule.token_count;
continue;
}
+
+finish:
+ if (f) {
+ fflush(f);
+ fchmod(fileno(f), 0644);
+ if (ferror(f) || rename(path, "/run/udev/static_node-tags") < 0) {
+ r = -errno;
+ unlink("/run/udev/static_node-tags");
+ unlink(path);
+ }
+ fclose(f);
+ }
+
+ return r;
}
diff --git a/src/udev/udev.h b/src/udev/udev.h
index caec5f0a5d..839592680b 100644
--- a/src/udev/udev.h
+++ b/src/udev/udev.h
@@ -72,7 +72,7 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names);
struct udev_rules *udev_rules_unref(struct udev_rules *rules);
bool udev_rules_check_timestamp(struct udev_rules *rules);
int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, const sigset_t *sigmask);
-void udev_rules_apply_static_dev_perms(struct udev_rules *rules);
+int udev_rules_apply_static_dev_perms(struct udev_rules *rules);
/* udev-event.c */
struct udev_event *udev_event_new(struct udev_device *dev);
@@ -145,6 +145,7 @@ enum udev_builtin_cmd {
#endif
UDEV_BUILTIN_HWDB,
UDEV_BUILTIN_INPUT_ID,
+ UDEV_BUILTIN_KEYBOARD,
#ifdef HAVE_KMOD
UDEV_BUILTIN_KMOD,
#endif
@@ -174,6 +175,7 @@ extern const struct udev_builtin udev_builtin_firmware;
#endif
extern const struct udev_builtin udev_builtin_hwdb;
extern const struct udev_builtin udev_builtin_input_id;
+extern const struct udev_builtin udev_builtin_keyboard;
#ifdef HAVE_KMOD
extern const struct udev_builtin udev_builtin_kmod;
#endif
@@ -190,7 +192,8 @@ int udev_builtin_run(struct udev_device *dev, enum udev_builtin_cmd cmd, const c
void udev_builtin_list(struct udev *udev);
bool udev_builtin_validate(struct udev *udev);
int udev_builtin_add_property(struct udev_device *dev, bool test, const char *key, const char *val);
-int udev_builtin_hwdb_lookup(struct udev_device *dev, const char *modalias, bool test);
+int udev_builtin_hwdb_lookup(struct udev_device *dev, const char *prefix, const char *modalias,
+ const char *filter, bool test);
/* udev logging */
void udev_main_log(struct udev *udev, int priority,
diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
index 3e849aaed6..d9dc73bfc1 100644
--- a/src/udev/udevadm-hwdb.c
+++ b/src/udev/udevadm-hwdb.c
@@ -21,6 +21,7 @@
#include <unistd.h>
#include <getopt.h>
#include <string.h>
+#include <ctype.h>
#include "util.h"
#include "strbuf.h"
@@ -302,8 +303,10 @@ static int64_t trie_store_nodes(struct trie_f *trie, struct trie_node *node) {
int64_t child_off;
child_off = trie_store_nodes(trie, node->children[i].child);
- if (child_off < 0)
+ if (child_off < 0) {
+ free(children);
return child_off;
+ }
children[i].c = node->children[i].c;
children[i].child_off = htole64(child_off);
}
@@ -402,66 +405,122 @@ out:
return err;
}
-static int import_file(struct trie *trie, const char *filename) {
+static int insert_data(struct trie *trie, struct udev_list *match_list,
+ char *line, const char *filename) {
+ char *value;
+ struct udev_list_entry *entry;
+
+ value = strchr(line, '=');
+ if (!value) {
+ log_error("Error, key/value pair expected but got '%s' in '%s':\n", line, filename);
+ return -EINVAL;
+ }
+
+ value[0] = '\0';
+ value++;
+
+ if (line[0] == '\0' || value[0] == '\0') {
+ log_error("Error, empty key or value '%s' in '%s':\n", line, filename);
+ return -EINVAL;
+ }
+
+ udev_list_entry_foreach(entry, udev_list_get_entry(match_list))
+ trie_insert(trie, trie->root, udev_list_entry_get_name(entry), line, value);
+
+ return 0;
+}
+
+static int import_file(struct udev *udev, struct trie *trie, const char *filename) {
+ enum {
+ HW_MATCH,
+ HW_DATA,
+ HW_NONE,
+ } state = HW_NONE;
FILE *f;
char line[LINE_MAX];
- char match[LINE_MAX];
- char cond[LINE_MAX];
+ struct udev_list match_list;
+
+ udev_list_init(udev, &match_list, false);
f = fopen(filename, "re");
if (f == NULL)
return -errno;
- match[0] = '\0';
- cond[0] = '\0';
while (fgets(line, sizeof(line), f)) {
size_t len;
+ char *pos;
+ /* comment line */
if (line[0] == '#')
continue;
- /* new line, new record */
- if (line[0] == '\n') {
- match[0] = '\0';
- cond[0] = '\0';
- continue;
- }
+ /* strip trailing comment */
+ pos = strchr(line, '#');
+ if (pos)
+ pos[0] = '\0';
- /* remove newline */
+ /* strip trailing whitespace */
len = strlen(line);
- if (len < 2)
- continue;
- line[len-1] = '\0';
+ while (len > 0 && isspace(line[len-1]))
+ len--;
+ line[len] = '\0';
+
+ switch (state) {
+ case HW_NONE:
+ if (len == 0)
+ break;
+
+ if (line[0] == ' ') {
+ log_error("Error, MATCH expected but got '%s' in '%s':\n", line, filename);
+ break;
+ }
- /* start of new record */
- if (match[0] == '\0') {
- strcpy(match, line);
- cond[0] = '\0';
- continue;
- }
+ /* start of record, first match */
+ state = HW_MATCH;
+ udev_list_entry_add(&match_list, line, NULL);
+ break;
- if (line[0] == '+') {
- strcpy(cond, line);
- continue;
- }
+ case HW_MATCH:
+ if (len == 0) {
+ log_error("Error, DATA expected but got empty line in '%s':\n", filename);
+ state = HW_NONE;
+ udev_list_cleanup(&match_list);
+ break;
+ }
- /* TODO: support +; skip the entire record until we support it */
- if (cond[0] != '\0')
- continue;
+ /* another match */
+ if (line[0] != ' ') {
+ udev_list_entry_add(&match_list, line, NULL);
+ break;
+ }
- /* value lines */
- if (line[0] == ' ') {
- char *value;
+ /* first data */
+ state = HW_DATA;
+ insert_data(trie, &match_list, line, filename);
+ break;
- value = strchr(line, '=');
- if (!value)
- continue;
- value[0] = '\0';
- value++;
- trie_insert(trie, trie->root, match, line, value);
- }
+ case HW_DATA:
+ /* end of record */
+ if (len == 0) {
+ state = HW_NONE;
+ udev_list_cleanup(&match_list);
+ break;
+ }
+
+ if (line[0] != ' ') {
+ log_error("Error, DATA expected but got '%s' in '%s':\n", line, filename);
+ state = HW_NONE;
+ udev_list_cleanup(&match_list);
+ break;
+ }
+
+ insert_data(trie, &match_list, line, filename);
+ break;
+ };
}
+
fclose(f);
+ udev_list_cleanup(&match_list);
return 0;
}
@@ -549,7 +608,7 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) {
}
STRV_FOREACH(f, files) {
log_debug("reading file '%s'", *f);
- import_file(trie, *f);
+ import_file(udev, trie, *f);
}
strv_free(files);
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
index 002876594f..2ee59fe075 100644
--- a/src/udev/udevadm-info.c
+++ b/src/udev/udevadm-info.c
@@ -251,6 +251,12 @@ static void cleanup_db(struct udev *udev)
closedir(dir);
}
+ dir = opendir("/run/udev/static_node-tags");
+ if (dir != NULL) {
+ cleanup_dir(dir, 0, 2);
+ closedir(dir);
+ }
+
dir = opendir("/run/udev/watch");
if (dir != NULL) {
cleanup_dir(dir, 0, 1);
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 7d13b4f532..7c6c5d6a87 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -812,77 +812,6 @@ static void handle_signal(struct udev *udev, int signo)
}
}
-static void static_dev_create_from_modules(struct udev *udev)
-{
- struct utsname kernel;
- char modules[UTIL_PATH_SIZE];
- char buf[4096];
- FILE *f;
-
- if (uname(&kernel) < 0) {
- log_error("uname failed: %m");
- return;
- }
-
- strscpyl(modules, sizeof(modules), ROOTPREFIX "/lib/modules/", kernel.release, "/modules.devname", NULL);
- f = fopen(modules, "re");
- if (f == NULL)
- return;
-
- while (fgets(buf, sizeof(buf), f) != NULL) {
- char *s;
- const char *modname;
- const char *devname;
- const char *devno;
- int maj, min;
- char type;
- mode_t mode;
- char filename[UTIL_PATH_SIZE];
-
- if (buf[0] == '#')
- continue;
-
- modname = buf;
- s = strchr(modname, ' ');
- if (s == NULL)
- continue;
- s[0] = '\0';
-
- devname = &s[1];
- s = strchr(devname, ' ');
- if (s == NULL)
- continue;
- s[0] = '\0';
-
- devno = &s[1];
- s = strchr(devno, ' ');
- if (s == NULL)
- s = strchr(devno, '\n');
- if (s != NULL)
- s[0] = '\0';
- if (sscanf(devno, "%c%u:%u", &type, &maj, &min) != 3)
- continue;
-
- mode = 0600;
- if (type == 'c')
- mode |= S_IFCHR;
- else if (type == 'b')
- mode |= S_IFBLK;
- else
- continue;
-
- strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
- mkdir_parents_label(filename, 0755);
- label_context_set(filename, mode);
- log_debug("mknod '%s' %c%u:%u\n", filename, type, maj, min);
- if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST)
- utimensat(AT_FDCWD, filename, NULL, 0);
- label_context_clear();
- }
-
- fclose(f);
-}
-
static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink)
{
int ctrl = -1, netlink = -1;
@@ -994,7 +923,10 @@ int main(int argc, char *argv[])
log_set_target(LOG_TARGET_AUTO);
log_parse_environment();
log_open();
+
udev_set_log_fn(udev, udev_main_log);
+ log_set_max_level(udev_get_log_priority(udev));
+
log_debug("version %s\n", VERSION);
label_init("/dev");
@@ -1067,7 +999,6 @@ int main(int argc, char *argv[])
mkdir("/run/udev", 0755);
dev_setup(NULL);
- static_dev_create_from_modules(udev);
/* before opening new files, make sure std{in,out,err} fds are in a sane state */
if (daemonize) {
@@ -1269,7 +1200,9 @@ int main(int argc, char *argv[])
}
log_debug("set children_max to %u\n", children_max);
- udev_rules_apply_static_dev_perms(rules);
+ rc = udev_rules_apply_static_dev_perms(rules);
+ if (rc < 0)
+ log_error("failed to apply permissions on static device nodes - %s\n", strerror(-rc));
udev_list_node_init(&event_list);
udev_list_node_init(&worker_list);
diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c
index 9184025554..202aa98767 100644
--- a/src/update-utmp/update-utmp.c
+++ b/src/update-utmp/update-utmp.c
@@ -104,7 +104,7 @@ static int get_current_runlevel(Context *c) {
{ '3', SPECIAL_RUNLEVEL3_TARGET },
{ '4', SPECIAL_RUNLEVEL4_TARGET },
{ '2', SPECIAL_RUNLEVEL2_TARGET },
- { 'S', SPECIAL_RESCUE_TARGET },
+ { '1', SPECIAL_RESCUE_TARGET },
};
const char
*interface = "org.freedesktop.systemd1.Unit",
diff --git a/test/rule-syntax-check.py b/test/rule-syntax-check.py
index b18f8780cb..ce4f5c75ad 100755
--- a/test/rule-syntax-check.py
+++ b/test/rule-syntax-check.py
@@ -4,19 +4,18 @@
# (C) 2010 Canonical Ltd.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#
-# This program 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
+# 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.
+
+# 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
+# Lesser General Public License for more details.
#
-# This program 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.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <http://www.gnu.org/licenses/>.
import re
import sys
diff --git a/test/rules-test.sh b/test/rules-test.sh
index 1e224ff8b5..47d42cb3fa 100755
--- a/test/rules-test.sh
+++ b/test/rules-test.sh
@@ -3,6 +3,19 @@
#
# (C) 2010 Canonical Ltd.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
+#
+# 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.
+
+# 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <http://www.gnu.org/licenses/>.
[ -n "$srcdir" ] || srcdir=`dirname $0`/..
diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
index ee86f2ebce..b6304401fe 100644
--- a/tmpfiles.d/systemd.conf
+++ b/tmpfiles.d/systemd.conf
@@ -19,6 +19,10 @@ d /run/systemd/ask-password 0755 root root -
d /run/systemd/seats 0755 root root -
d /run/systemd/sessions 0755 root root -
d /run/systemd/users 0755 root root -
+d /run/systemd/machines 0755 root root -
d /run/systemd/shutdown 0755 root root -
-F /run/nologin 0644 - - - "System is booting up."
+F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)"
+
+m /var/log/journal 2755 root systemd-journal - -
+m /var/log/journal/%m 2755 root systemd-journal - -
diff --git a/units/basic.target b/units/basic.target
index 6b9cfe4c97..d7c68f4e2c 100644
--- a/units/basic.target
+++ b/units/basic.target
@@ -9,6 +9,6 @@
Description=Basic System
Documentation=man:systemd.special(7)
Requires=sysinit.target
-Wants=sockets.target timers.target paths.target
-After=sysinit.target sockets.target timers.target paths.target
+Wants=sockets.target timers.target paths.target slices.target
+After=sysinit.target sockets.target timers.target paths.target slices.target
RefuseManualStart=yes
diff --git a/units/console-getty.service.m4.in b/units/console-getty.service.m4.in
index 0426050ee8..2fd9dd8478 100644
--- a/units/console-getty.service.m4.in
+++ b/units/console-getty.service.m4.in
@@ -25,10 +25,7 @@ TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
-
-# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
-# terminates cleanly.
-KillSignal=SIGHUP
+SendSIGHUP=yes
[Install]
WantedBy=getty.target
diff --git a/units/console-shell.service.m4.in b/units/console-shell.service.m4.in
index dac2ac212b..3f4904a0ee 100644
--- a/units/console-shell.service.m4.in
+++ b/units/console-shell.service.m4.in
@@ -25,10 +25,7 @@ StandardOutput=inherit
StandardError=inherit
KillMode=process
IgnoreSIGPIPE=no
-
-# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
-# terminates cleanly.
-KillSignal=SIGHUP
+SendSIGHUP=yes
[Install]
WantedBy=getty.target
diff --git a/units/emergency.service b/units/emergency.service
index 72fcff2d76..51bb4c3c32 100644
--- a/units/emergency.service
+++ b/units/emergency.service
@@ -25,7 +25,4 @@ StandardOutput=inherit
StandardError=inherit
KillMode=process
IgnoreSIGPIPE=no
-
-# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
-# terminates cleanly.
-KillSignal=SIGHUP
+SendSIGHUP=yes
diff --git a/units/emergency.service.in b/units/emergency.service.in
index 442f0e0ee6..94c090f654 100644
--- a/units/emergency.service.in
+++ b/units/emergency.service.in
@@ -25,7 +25,4 @@ StandardOutput=inherit
StandardError=inherit
KillMode=process
IgnoreSIGPIPE=no
-
-# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
-# terminates cleanly.
-KillSignal=SIGHUP
+SendSIGHUP=yes
diff --git a/units/getty@.service.m4 b/units/getty@.service.m4
index 083eb97059..253da85f8e 100644
--- a/units/getty@.service.m4
+++ b/units/getty@.service.m4
@@ -20,14 +20,14 @@ After=rc-local.service
Before=getty.target
IgnoreOnIsolate=yes
-# On systems without virtual consoles, don't start any getty. (Note
+# On systems without virtual consoles, don't start any getty. Note
# that serial gettys are covered by serial-getty@.service, not this
-# unit
+# unit.
ConditionPathExists=/dev/tty0
[Service]
# the VT is cleared by TTYVTDisallocate
-ExecStart=-/sbin/agetty --noclear %I 38400 linux
+ExecStart=-/sbin/agetty --noclear %I
Type=idle
Restart=always
RestartSec=0
@@ -38,14 +38,11 @@ TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
+SendSIGHUP=yes
# Unset locale for the console getty since the console has problems
# displaying some internationalized messages.
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
-# Some login implementations ignore SIGTERM, so we send SIGHUP
-# instead, to ensure that login terminates cleanly.
-KillSignal=SIGHUP
-
[Install]
-Alias=getty.target.wants/getty@tty1.service
+WantedBy=getty.target
diff --git a/units/initrd-fs.target b/units/initrd-fs.target
index 7578b8824b..866f0d0257 100644
--- a/units/initrd-fs.target
+++ b/units/initrd-fs.target
@@ -12,3 +12,5 @@ OnFailure=emergency.target
OnFailureIsolate=yes
ConditionPathExists=/etc/initrd-release
After=initrd-parse-etc.service
+DefaultDependencies=no
+Conflicts=shutdown.target
diff --git a/units/initrd-root-fs.target b/units/initrd-root-fs.target
index cd189f0296..d0b9863000 100644
--- a/units/initrd-root-fs.target
+++ b/units/initrd-root-fs.target
@@ -11,3 +11,5 @@ Documentation=man:systemd.special(7)
ConditionPathExists=/etc/initrd-release
OnFailure=emergency.target
OnFailureIsolate=yes
+DefaultDependencies=no
+Conflicts=shutdown.target
diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in
new file mode 100644
index 0000000000..ff4017bada
--- /dev/null
+++ b/units/kmod-static-nodes.service.in
@@ -0,0 +1,19 @@
+# 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=Create list of required static device nodes for the current kernel
+DefaultDependencies=no
+Before=sysinit.target systemd-tmpfiles-setup-dev.service
+ConditionCapability=CAP_MKNOD
+ConditionPathExists=/lib/modules/%v/modules.devname
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStartPre=@MKDIR_P@ /run/tmpfiles.d
+ExecStart=@KMOD@ static-nodes --format=tmpfiles --output=/run/tmpfiles.d/kmod.conf
diff --git a/units/local-fs.target b/units/local-fs.target
index 18c3d74f18..8f06ed6cab 100644
--- a/units/local-fs.target
+++ b/units/local-fs.target
@@ -9,5 +9,7 @@
Description=Local File Systems
Documentation=man:systemd.special(7)
After=local-fs-pre.target
+DefaultDependencies=no
+Conflicts=shutdown.target
OnFailure=emergency.target
OnFailureIsolate=no
diff --git a/units/machine.slice b/units/machine.slice
new file mode 100644
index 0000000000..3d40dfd73b
--- /dev/null
+++ b/units/machine.slice
@@ -0,0 +1,11 @@
+# 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=Virtual Machine and Container Slice
+Documentation=man:systemd.special(7)
+Before=slices.target
diff --git a/units/remote-fs.target b/units/remote-fs.target
index 09213e8fca..43ffa5c107 100644
--- a/units/remote-fs.target
+++ b/units/remote-fs.target
@@ -9,6 +9,8 @@
Description=Remote File Systems
Documentation=man:systemd.special(7)
After=remote-fs-pre.target
+DefaultDependencies=no
+Conflicts=shutdown.target
[Install]
WantedBy=multi-user.target
diff --git a/units/rescue.service.m4.in b/units/rescue.service.m4.in
index 269797a12e..552ef8981b 100644
--- a/units/rescue.service.m4.in
+++ b/units/rescue.service.m4.in
@@ -25,7 +25,5 @@ StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit
KillMode=process
-
-# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
-# terminates cleanly.
-KillSignal=SIGHUP
+IgnoreSIGPIPE=no
+SendSIGHUP=yes
diff --git a/units/serial-getty@.service.m4 b/units/serial-getty@.service.m4
index 60d7737b74..e32c6b7aff 100644
--- a/units/serial-getty@.service.m4
+++ b/units/serial-getty@.service.m4
@@ -22,7 +22,7 @@ Before=getty.target
IgnoreOnIsolate=yes
[Service]
-ExecStart=-/sbin/agetty -s %I 115200,38400,9600 vt102
+ExecStart=-/sbin/agetty --keep-baud %I 115200,38400,9600
Type=idle
Restart=always
RestartSec=0
@@ -32,7 +32,4 @@ TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
-
-# Some login implementations ignore SIGTERM, so we send SIGHUP
-# instead, to ensure that login terminates cleanly.
-KillSignal=SIGHUP
+SendSIGHUP=yes
diff --git a/units/slices.target b/units/slices.target
new file mode 100644
index 0000000000..a29310c047
--- /dev/null
+++ b/units/slices.target
@@ -0,0 +1,12 @@
+# 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=Slices
+Documentation=man:systemd.special(7)
+Wants=-.slice system.slice
+After=-.slice system.slice
diff --git a/units/systemd-random-seed-save.service.in b/units/system.slice
index 3444d4ce70..c0e3df9d0f 100644
--- a/units/systemd-random-seed-save.service.in
+++ b/units/system.slice
@@ -6,13 +6,9 @@
# (at your option) any later version.
[Unit]
-Description=Save Random Seed
-Documentation=man:systemd-random-seed-load.service(8) man:random(4)
+Description=System Slice
+Documentation=man:systemd.special(7)
DefaultDependencies=no
-RequiresMountsFor=@RANDOM_SEED@
-After=systemd-remount-fs.service systemd-random-seed-load.service
-Before=final.target
-
-[Service]
-Type=oneshot
-ExecStart=@rootlibexecdir@/systemd-random-seed save
+Before=slices.target
+Wants=-.slice
+After=-.slice
diff --git a/units/quotaon.service b/units/systemd-backlight@.service.in
index 2267140357..b0e75db39e 100644
--- a/units/quotaon.service
+++ b/units/systemd-backlight@.service.in
@@ -6,14 +6,16 @@
# (at your option) any later version.
[Unit]
-Description=Enable File System Quotas
-Documentation=man:quotaon(8)
+Description=Load/Save Screen Backlight Brightness of %I
+Documentation=man:systemd-backlight@.service(8)
DefaultDependencies=no
-After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-quotacheck.service
-Before=local-fs.target shutdown.target
-ConditionPathExists=/usr/sbin/quotaon
+RequiresMountsFor=/var/lib/backlight
+Conflicts=shutdown.target
+After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service
+Before=sysinit.target shutdown.target
[Service]
Type=oneshot
RemainAfterExit=yes
-ExecStart=/usr/sbin/quotaon -aug
+ExecStart=@rootlibexecdir@/systemd-backlight load %I
+ExecStop=@rootlibexecdir@/systemd-backlight save %I
diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in
index ef5123feb8..4388314079 100644
--- a/units/systemd-fsck-root.service.in
+++ b/units/systemd-fsck-root.service.in
@@ -7,18 +7,16 @@
[Unit]
Description=File System Check on Root Device
-Documentation=man:systemd-fsck@.service(8)
+Documentation=man:systemd-fsck-root.service(8)
DefaultDependencies=no
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=local-fs.target shutdown.target
-# Dracut informs us with this flag file if the root fsck was already run
-ConditionPathExists=!/run/initramfs/root-fsck
ConditionPathIsReadWrite=!/
[Service]
Type=oneshot
-RemainAfterExit=no
+RemainAfterExit=yes
ExecStart=@rootlibexecdir@/systemd-fsck
StandardOutput=journal+console
FsckPassNo=1
diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in
index b3c71eb250..e229cdcb83 100644
--- a/units/systemd-fsck@.service.in
+++ b/units/systemd-fsck@.service.in
@@ -15,7 +15,7 @@ Before=shutdown.target
[Service]
Type=oneshot
-RemainAfterExit=no
+RemainAfterExit=yes
ExecStart=@rootlibexecdir@/systemd-fsck %f
StandardOutput=journal+console
TimeoutSec=0
diff --git a/units/systemd-journald.socket b/units/systemd-journald.socket
index 4f0619d258..fbeb10baae 100644
--- a/units/systemd-journald.socket
+++ b/units/systemd-journald.socket
@@ -12,7 +12,7 @@ DefaultDependencies=no
Before=sockets.target
# Mount and swap units need this. If this socket unit is removed by an
-# isolate request the mount and and swap units would be removed too,
+# isolate request the mount and swap units would be removed too,
# hence let's exclude this from isolate requests.
IgnoreOnIsolate=yes
diff --git a/units/systemd-logind.service.in b/units/systemd-logind.service.in
index cf3c430b7f..31b5cd011f 100644
--- a/units/systemd-logind.service.in
+++ b/units/systemd-logind.service.in
@@ -8,15 +8,17 @@
[Unit]
Description=Login Service
Documentation=man:systemd-logind.service(8) man:logind.conf(5)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/logind
Documentation=http://www.freedesktop.org/wiki/Software/systemd/multiseat
-After=nss-user-lookup.target
+Wants=user.slice
+After=nss-user-lookup.target user.slice
[Service]
ExecStart=@rootlibexecdir@/systemd-logind
Restart=always
RestartSec=0
BusName=org.freedesktop.login1
-CapabilityBoundingSet=CAP_AUDIT_CONTROL CAP_CHOWN CAP_KILL CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE CAP_FOWNER CAP_SYS_TTY_CONFIG
+CapabilityBoundingSet=CAP_SYS_ADMIN CAP_AUDIT_CONTROL CAP_CHOWN CAP_KILL CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE CAP_FOWNER CAP_SYS_TTY_CONFIG
# Increase the default a bit in order to allow many simultaneous
# logins since we keep one fd open per session.
diff --git a/units/systemd-machined.service.in b/units/systemd-machined.service.in
new file mode 100644
index 0000000000..26bfe03537
--- /dev/null
+++ b/units/systemd-machined.service.in
@@ -0,0 +1,20 @@
+# 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=Virtual Machine and Container Registration Service
+Documentation=man:systemd-machined.service(8)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/machined
+Wants=machine.slice
+After=machine.slice
+
+[Service]
+ExecStart=@rootlibexecdir@/systemd-machined
+Restart=always
+RestartSec=0
+BusName=org.freedesktop.machine1
+CapabilityBoundingSet=CAP_KILL
diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in
index c0d5886f88..eca62e3b17 100644
--- a/units/systemd-nspawn@.service.in
+++ b/units/systemd-nspawn@.service.in
@@ -11,7 +11,6 @@ Documentation=man:systemd-nspawn(1)
[Service]
ExecStart=@bindir@/systemd-nspawn -bjD /var/lib/container/%i
-ControlGroup=%R/machine/%i.nspawn cpu:/
Type=notify
[Install]
diff --git a/units/systemd-random-seed-load.service.in b/units/systemd-random-seed.service.in
index e9156ef086..1879b2f24c 100644
--- a/units/systemd-random-seed-load.service.in
+++ b/units/systemd-random-seed.service.in
@@ -6,13 +6,16 @@
# (at your option) any later version.
[Unit]
-Description=Load Random Seed
-Documentation=man:systemd-random-seed-load.service(8) man:random(4)
+Description=Load/Save Random Seed
+Documentation=man:systemd-random-seed.service(8) man:random(4)
DefaultDependencies=no
RequiresMountsFor=@RANDOM_SEED@
+Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service
-Before=sysinit.target final.target
+Before=sysinit.target shutdown.target
[Service]
Type=oneshot
+RemainAfterExit=yes
ExecStart=@rootlibexecdir@/systemd-random-seed load
+ExecStop=@rootlibexecdir@/systemd-random-seed save
diff --git a/units/systemd-sysctl.service.in b/units/systemd-sysctl.service.in
index 45e1ceb25c..5baf22c183 100644
--- a/units/systemd-sysctl.service.in
+++ b/units/systemd-sysctl.service.in
@@ -13,7 +13,6 @@ Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=sysinit.target shutdown.target
ConditionPathIsReadWrite=/proc/sys/
-ConditionPathExists=|/etc/sysctl.conf
ConditionDirectoryNotEmpty=|/lib/sysctl.d
ConditionDirectoryNotEmpty=|/usr/lib/sysctl.d
ConditionDirectoryNotEmpty=|/usr/local/lib/sysctl.d
diff --git a/units/systemd-tmpfiles-setup-dev.service.in b/units/systemd-tmpfiles-setup-dev.service.in
index f029285bc0..579e7c6a4f 100644
--- a/units/systemd-tmpfiles-setup-dev.service.in
+++ b/units/systemd-tmpfiles-setup-dev.service.in
@@ -9,9 +9,10 @@
Description=Create static device nodes in /dev
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
-Before=sysinit.target systemd-udevd.service
+Before=sysinit.target local-fs-pre.target systemd-udevd.service
ConditionCapability=CAP_MKNOD
[Service]
Type=oneshot
+RemainAfterExit=yes
ExecStart=@rootbindir@/systemd-tmpfiles --prefix=/dev --create
diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
index 4a3441c3ac..6f98063744 100644
--- a/units/systemd-tmpfiles-setup.service.in
+++ b/units/systemd-tmpfiles-setup.service.in
@@ -10,6 +10,7 @@ Description=Recreate Volatile Files and Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Wants=local-fs.target
+Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
Before=sysinit.target shutdown.target
ConditionDirectoryNotEmpty=|/usr/lib/tmpfiles.d
@@ -20,4 +21,4 @@ ConditionDirectoryNotEmpty=|/run/tmpfiles.d
[Service]
Type=oneshot
RemainAfterExit=yes
-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove
+ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev
diff --git a/units/systemd-udev-settle.service b/units/systemd-udev-settle.service
index b7bd23363c..20a892286e 100644
--- a/units/systemd-udev-settle.service
+++ b/units/systemd-udev-settle.service
@@ -16,7 +16,7 @@ DefaultDependencies=no
Wants=systemd-udevd.service
After=systemd-udev-trigger.service
Before=sysinit.target
-ConditionCapability=CAP_MKNOD
+ConditionPathIsReadWrite=/sys
[Service]
Type=oneshot
diff --git a/units/systemd-udev-settle.service.in b/units/systemd-udev-settle.service.in
index 037dd9a872..0817803a39 100644
--- a/units/systemd-udev-settle.service.in
+++ b/units/systemd-udev-settle.service.in
@@ -16,7 +16,7 @@ DefaultDependencies=no
Wants=systemd-udevd.service
After=systemd-udev-trigger.service
Before=sysinit.target
-ConditionCapability=CAP_MKNOD
+ConditionPathIsReadWrite=/sys
[Service]
Type=oneshot
diff --git a/units/systemd-udev-trigger.service b/units/systemd-udev-trigger.service
index dca44005eb..cbd071a7c3 100644
--- a/units/systemd-udev-trigger.service
+++ b/units/systemd-udev-trigger.service
@@ -12,7 +12,7 @@ DefaultDependencies=no
Wants=systemd-udevd.service
After=systemd-udevd-kernel.socket systemd-udevd-control.socket
Before=sysinit.target
-ConditionCapability=CAP_MKNOD
+ConditionPathIsReadWrite=/sys
[Service]
Type=oneshot
diff --git a/units/systemd-udev-trigger.service.in b/units/systemd-udev-trigger.service.in
index 604c369a1b..0c33909cee 100644
--- a/units/systemd-udev-trigger.service.in
+++ b/units/systemd-udev-trigger.service.in
@@ -12,7 +12,7 @@ DefaultDependencies=no
Wants=systemd-udevd.service
After=systemd-udevd-kernel.socket systemd-udevd-control.socket
Before=sysinit.target
-ConditionCapability=CAP_MKNOD
+ConditionPathIsReadWrite=/sys
[Service]
Type=oneshot
diff --git a/units/systemd-udevd-control.socket b/units/systemd-udevd-control.socket
index ca17102dfa..8330a1c035 100644
--- a/units/systemd-udevd-control.socket
+++ b/units/systemd-udevd-control.socket
@@ -10,7 +10,7 @@ Description=udev Control Socket
Documentation=man:systemd-udevd.service(8) man:udev(7)
DefaultDependencies=no
Before=sockets.target
-ConditionCapability=CAP_MKNOD
+ConditionPathIsReadWrite=/sys
[Socket]
Service=systemd-udevd.service
diff --git a/units/systemd-udevd-kernel.socket b/units/systemd-udevd-kernel.socket
index 4b8a5b0fb5..39b7809204 100644
--- a/units/systemd-udevd-kernel.socket
+++ b/units/systemd-udevd-kernel.socket
@@ -10,7 +10,7 @@ Description=udev Kernel Socket
Documentation=man:systemd-udevd.service(8) man:udev(7)
DefaultDependencies=no
Before=sockets.target
-ConditionCapability=CAP_MKNOD
+ConditionPathIsReadWrite=/sys
[Socket]
Service=systemd-udevd.service
diff --git a/units/systemd-udevd.service b/units/systemd-udevd.service
index 4ab2f499dc..2fb801e5fa 100644
--- a/units/systemd-udevd.service
+++ b/units/systemd-udevd.service
@@ -11,8 +11,8 @@ Documentation=man:systemd-udevd.service(8) man:udev(7)
DefaultDependencies=no
Wants=systemd-udevd-control.socket systemd-udevd-kernel.socket
After=systemd-udevd-control.socket systemd-udevd-kernel.socket
-Before=sysinit.target local-fs-pre.target
-ConditionCapability=CAP_MKNOD
+Before=sysinit.target
+ConditionPathIsReadWrite=/sys
[Service]
Type=notify
diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in
index ddef423625..99f51304e4 100644
--- a/units/systemd-udevd.service.in
+++ b/units/systemd-udevd.service.in
@@ -11,8 +11,8 @@ Documentation=man:systemd-udevd.service(8) man:udev(7)
DefaultDependencies=no
Wants=systemd-udevd-control.socket systemd-udevd-kernel.socket
After=systemd-udevd-control.socket systemd-udevd-kernel.socket
-Before=sysinit.target local-fs-pre.target
-ConditionCapability=CAP_MKNOD
+Before=sysinit.target
+ConditionPathIsReadWrite=/sys
[Service]
Type=notify
diff --git a/units/systemd-update-utmp-runlevel.service.in b/units/systemd-update-utmp-runlevel.service.in
index 27fae2cd02..99783e2e69 100644
--- a/units/systemd-update-utmp-runlevel.service.in
+++ b/units/systemd-update-utmp-runlevel.service.in
@@ -7,12 +7,14 @@
[Unit]
Description=Update UTMP about System Runlevel Changes
-Documentation=man:systemd-update-utmp-runlevel.service(8) man:utmp(5)
+Documentation=man:systemd-update-utmp.service(8) man:utmp(5)
DefaultDependencies=no
RequiresMountsFor=/var/log/wtmp
-After=systemd-remount-fs.service systemd-tmpfiles-setup.service auditd.service
+Conflicts=shutdown.target
+Requisite=systemd-update-utmp.service
+After=systemd-update-utmp.service
After=runlevel1.target runlevel2.target runlevel3.target runlevel4.target runlevel5.target
-Before=final.target
+Before=shutdown.target
[Service]
Type=oneshot
diff --git a/units/systemd-update-utmp-shutdown.service.in b/units/systemd-update-utmp-shutdown.service.in
deleted file mode 100644
index aa93562f02..0000000000
--- a/units/systemd-update-utmp-shutdown.service.in
+++ /dev/null
@@ -1,19 +0,0 @@
-# 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=Update UTMP about System Shutdown
-Documentation=man:systemd-update-utmp-runlevel.service(8) man:utmp(5)
-DefaultDependencies=no
-RequiresMountsFor=/var/log/wtmp
-After=systemd-remount-fs.service systemd-tmpfiles-setup.service auditd.service
-After=systemd-update-utmp-runlevel.service
-Before=final.target
-
-[Service]
-Type=oneshot
-ExecStart=@rootlibexecdir@/systemd-update-utmp shutdown
diff --git a/units/systemd-update-utmp.service.in b/units/systemd-update-utmp.service.in
new file mode 100644
index 0000000000..e7c20a5ead
--- /dev/null
+++ b/units/systemd-update-utmp.service.in
@@ -0,0 +1,21 @@
+# 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=Update UTMP about System Reboot/Shutdown
+Documentation=man:systemd-update-utmp.service(8) man:utmp(5)
+DefaultDependencies=no
+RequiresMountsFor=/var/log/wtmp
+Conflicts=shutdown.target
+After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service systemd-tmpfiles-setup.service auditd.service
+Before=sysinit.target shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=@rootlibexecdir@/systemd-update-utmp reboot
+ExecStop=@rootlibexecdir@/systemd-update-utmp shutdown
diff --git a/units/user.slice b/units/user.slice
new file mode 100644
index 0000000000..9fa6284c12
--- /dev/null
+++ b/units/user.slice
@@ -0,0 +1,11 @@
+# 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=User and Session Slice
+Documentation=man:systemd.special(7)
+Before=slices.target
diff --git a/units/user@.service.in b/units/user@.service.in
index 3cf1347b16..3718a57087 100644
--- a/units/user@.service.in
+++ b/units/user@.service.in
@@ -6,18 +6,14 @@
# (at your option) any later version.
[Unit]
-Description=User Manager for %u
+Description=User Manager for %I
After=systemd-user-sessions.service
[Service]
User=%I
-PAMName=systemd-shared
-# in order to allow MEM_CG features to work, add "memory:/" here
-ControlGroup=%R/user/%U.user/shared cpu:/
-ControlGroupModify=yes
+PAMName=systemd-user
Type=notify
+Environment=SHELL=%s
ExecStart=-@rootlibexecdir@/systemd --user
-Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%U/dbus/user_bus_socket
-
-[Install]
-Alias=user@%i.service
+Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%I/dbus/user_bus_socket
+Slice=user-%i.slice
diff --git a/units/x-.slice b/units/x-.slice
new file mode 100644
index 0000000000..ac82c35874
--- /dev/null
+++ b/units/x-.slice
@@ -0,0 +1,12 @@
+# 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=Root Slice
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
+Before=slices.target